From a9918790613efd64c3bbdf4fb618c6156a729c68 Mon Sep 17 00:00:00 2001 From: Robert Helewka Date: Wed, 8 Jul 2026 11:24:57 -0400 Subject: [PATCH] CTM Calculators: Add PS billing milestones, Adjust Genesys RAMP --- .../ctm_business_case_corrected.ipynb | 2967 +++++++++-------- .../notebooks/ctm_migration_wfm.ipynb | 2211 ++++++------ .../notebooks/ctm_token_calculator.ipynb | 1616 +++++++-- .../tests/test_appendix4.py | 22 + .../tests/test_benefit_model.py | 6 +- .../ctm-token-calculator/tests/test_meters.py | 8 +- .../tests/test_migration_wfm.py | 36 +- .../tokencalc/appendix4.py | 59 +- .../tokencalc/benefit_model.py | 21 +- .../tokencalc/cost_model.py | 3 +- .../tokencalc/defaults.py | 13 +- .../tokencalc/migration_wfm.py | 9 +- .../tokencalc/scenarios.py | 5 - 13 files changed, 4264 insertions(+), 2712 deletions(-) diff --git a/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_business_case_corrected.ipynb b/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_business_case_corrected.ipynb index cb1b654..bcd7ea7 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_business_case_corrected.ipynb +++ b/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_business_case_corrected.ipynb @@ -36,10 +36,10 @@ "id": "26632e8d", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:38.848850Z", - "iopub.status.busy": "2026-07-08T12:20:38.848661Z", - "iopub.status.idle": "2026-07-08T12:20:39.301104Z", - "shell.execute_reply": "2026-07-08T12:20:39.300310Z" + "iopub.execute_input": "2026-07-08T15:15:51.208264Z", + "iopub.status.busy": "2026-07-08T15:15:51.207990Z", + "iopub.status.idle": "2026-07-08T15:15:51.611865Z", + "shell.execute_reply": "2026-07-08T15:15:51.611045Z" } }, "outputs": [ @@ -81,8 +81,10 @@ " build_scopes, case_flows, case_kpis, claim_scenario,\n", " crossfoot_tolerance, current_costs_by_year, current_months_in_year,\n", " current_state_inputs, hours_pick, impl_feature_regions,\n", - " licence_costs_by_year, money, html_money, month_label,\n", - " ps_costs_by_year, region_agents, region_site_names, tco, token_costs_by_year,\n", + " MANAGED_SERVICES_ANNUAL, MCX_GO_LIVE, PS_CONTRACTED_TOTAL, PS_MILESTONES,\n", + " licence_costs_by_year, managed_services_by_year, money, html_money,\n", + " month_label, ps_costs_by_year, ps_milestones_dataframe, region_agents,\n", + " region_site_names, tco, token_costs_by_year,\n", " verbatim_dataframe,\n", ")\n", "from tokencalc.staging import backstage\n", @@ -107,6 +109,8 @@ "COST_COLOR = {\n", " \"CCaaS platform licences (contracted, ramp-adjusted)\": \"#2a78d6\",\n", " \"Base professional services + training\": \"#1baf7a\",\n", + " \"NTT PS + training (SOW billing milestones)\": \"#1baf7a\",\n", + " \"NTT managed services (from MCX go-live)\": \"#0b6b4a\",\n", " \"Existing platform (term-contract run-off)\": \"#eda100\",\n", " \"AI token consumption\": \"#008300\",\n", " \"AI implementation + KB readiness\": \"#4a3aa7\",\n", @@ -160,22 +164,22 @@ "id": "7b33a037", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.304845Z", - "iopub.status.busy": "2026-07-08T12:20:39.304602Z", - "iopub.status.idle": "2026-07-08T12:20:39.316583Z", - "shell.execute_reply": "2026-07-08T12:20:39.315968Z" + "iopub.execute_input": "2026-07-08T15:15:51.614204Z", + "iopub.status.busy": "2026-07-08T15:15:51.613921Z", + "iopub.status.idle": "2026-07-08T15:15:51.627002Z", + "shell.execute_reply": "2026-07-08T15:15:51.626023Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "12c27b75c74a4785aac38abca3d50a0a", + "model_id": "4470b352a7e348919049702c575225c8", "position": "sidebar", "widget": "MarkdownWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "12c27b75c74a4785aac38abca3d50a0a", + "model_id": "4470b352a7e348919049702c575225c8", "version_major": 2, "version_minor": 0 }, @@ -234,7 +238,10 @@ "(ANZ, APAC, EMEA, NA β€” $22M over 3 years); CCaaS is **$4.3M/yr** with **$2.4M professional\n", "services + $167K training in year 1**. The **contracted** licence run-rate is\n", "**$3.2M/yr** (🟒 signed) β€” the corrected stack runs on it; the as-pitched stack keeps\n", - "the deck's $4.3M so the comparison stays anchored to the Genesys report.\n", + "the deck's $4.3M so the comparison stays anchored to the Genesys report. The signed NTT\n", + "SOW also fixes **PS at $2.03M over four billing milestones (2026–27)** and adds **managed\n", + "services at $411K/yr from MCX go-live (30 Sep 2026)** β€” the corrected stack bills both as\n", + "contracted; the as-pitched stack keeps the deck's year-1 PS lump.\n", "\n", "Three contract facts the deck's cost case ignores, collected here as editable inputs:\n", "\n", @@ -242,8 +249,8 @@ " estimate; replace with real regional contract values as they arrive.\n", "2. **Contract termination dates** β€” the current platforms are **term contracts**; CTM pays until\n", " termination (default **31 Dec 2027**) regardless of when Genesys goes live β†’ double-billing.\n", - "3. **Genesys ramp programme** β€” `RAMP_MONTHS = 12`: licences are free for the first 12 months,\n", - " so the licence commit bills from month 13." + "3. **Genesys ramp programme** β€” `RAMP_MONTHS = 6` (🟒 order form): licences are free for\n", + " the first 6 months, so the licence commit bills from July 2026." ] }, { @@ -252,27 +259,27 @@ "id": "7e4e12ce", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.322355Z", - "iopub.status.busy": "2026-07-08T12:20:39.322221Z", - "iopub.status.idle": "2026-07-08T12:20:39.365143Z", - "shell.execute_reply": "2026-07-08T12:20:39.364274Z" + "iopub.execute_input": "2026-07-08T15:15:51.628930Z", + "iopub.status.busy": "2026-07-08T15:15:51.628743Z", + "iopub.status.idle": "2026-07-08T15:15:51.663654Z", + "shell.execute_reply": "2026-07-08T15:15:51.662978Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "c87c3137444e4dd69a6f46b74170270d", + "model_id": "91e44777e10b4dc982d4f35fb80fb2a1", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "c87c3137444e4dd69a6f46b74170270d", + "model_id": "91e44777e10b4dc982d4f35fb80fb2a1", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -281,17 +288,17 @@ { "data": { "application/mercury+json": { - "model_id": "2912bf24d4e645d3bd78bc5c1b4953b5", + "model_id": "c337c93de81943939d6e1b0e1c392359", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "2912bf24d4e645d3bd78bc5c1b4953b5", + "model_id": "c337c93de81943939d6e1b0e1c392359", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -300,17 +307,17 @@ { "data": { "application/mercury+json": { - "model_id": "dcabb5e69fb94e829297689c7a6ae40a", + "model_id": "6e62963d5c0c47a5b8e7d41daedbe004", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "dcabb5e69fb94e829297689c7a6ae40a", + "model_id": "6e62963d5c0c47a5b8e7d41daedbe004", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -319,17 +326,17 @@ { "data": { "application/mercury+json": { - "model_id": "87d58807331b444b831a9611af9b9b97", + "model_id": "b9727084f82b49089dfcacd62b9d72d5", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "87d58807331b444b831a9611af9b9b97", + "model_id": "b9727084f82b49089dfcacd62b9d72d5", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -338,17 +345,17 @@ { "data": { "application/mercury+json": { - "model_id": "4666a3204ec84afba77fcbed27edae43", + "model_id": "feb40a4b31fd415aa44db460a40e1037", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "4666a3204ec84afba77fcbed27edae43", + "model_id": "feb40a4b31fd415aa44db460a40e1037", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -357,17 +364,17 @@ { "data": { "application/mercury+json": { - "model_id": "70b68a62010b4fef96d9117d387ed629", + "model_id": "5c32c561ba9c462286aa30e7efe3dd0c", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "70b68a62010b4fef96d9117d387ed629", + "model_id": "5c32c561ba9c462286aa30e7efe3dd0c", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -376,17 +383,17 @@ { "data": { "application/mercury+json": { - "model_id": "1a52eaf6b29447c1b8aa1db54a4e56b8", + "model_id": "8a4664e2944b48dd8c16ce8ea30481f4", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "1a52eaf6b29447c1b8aa1db54a4e56b8", + "model_id": "8a4664e2944b48dd8c16ce8ea30481f4", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -395,17 +402,17 @@ { "data": { "application/mercury+json": { - "model_id": "0bfe75e3708140a49973b3af4ddda41a", + "model_id": "7dc643d5b4e145b7b1eba08ff5ac668c", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "0bfe75e3708140a49973b3af4ddda41a", + "model_id": "7dc643d5b4e145b7b1eba08ff5ac668c", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -414,17 +421,17 @@ { "data": { "application/mercury+json": { - "model_id": "c4d6af10d9554e709089a8fb228f0f1d", + "model_id": "50b0fca7bacc457f927fe77456336164", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "c4d6af10d9554e709089a8fb228f0f1d", + "model_id": "50b0fca7bacc457f927fe77456336164", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -433,17 +440,17 @@ { "data": { "application/mercury+json": { - "model_id": "ddf1294225004414bf666eb493358f85", + "model_id": "e0626f2d55c14d7b802fb701e2074005", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "ddf1294225004414bf666eb493358f85", + "model_id": "e0626f2d55c14d7b802fb701e2074005", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -494,10 +501,10 @@ "id": "52d1e89f", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.368197Z", - "iopub.status.busy": "2026-07-08T12:20:39.367738Z", - "iopub.status.idle": "2026-07-08T12:20:39.398478Z", - "shell.execute_reply": "2026-07-08T12:20:39.397723Z" + "iopub.execute_input": "2026-07-08T15:15:51.665454Z", + "iopub.status.busy": "2026-07-08T15:15:51.665292Z", + "iopub.status.idle": "2026-07-08T15:15:51.682457Z", + "shell.execute_reply": "2026-07-08T15:15:51.681696Z" } }, "outputs": [ @@ -508,7 +515,7 @@ "current-state total $7.3M/yr (seed: $7.3M; deck 3-yr $22.0M β€” deck rounding)\n", "deck CCaaS 3-yr (no ramp) = $15.5M (deck: $15.4M)\n", "licence run-rate: contracted $3.2M/yr (deck pitched $4.3M/yr β€” as-pitched stack keeps it)\n", - "ramp-adjusted licences by year: {2026: '$0K', 2027: '$3.2M', 2028: '$3.2M'}\n" + "ramp-adjusted licences by year: {2026: '$1.6M', 2027: '$3.2M', 2028: '$3.2M'}\n" ] }, { @@ -642,7 +649,7 @@ " \n", " 2\n", " Genesys ramp period in the actual order form\n", - " 🟑 12 months assumed\n", + " 🟒 6 months per order form\n", " \n", " \n", " 3\n", @@ -651,16 +658,26 @@ " \n", " \n", " 4\n", + " NTT PS billing milestones (SOW)\n", + " 🟒 $2.03M over four milestones, 2026–27\n", + " \n", + " \n", + " 5\n", + " NTT managed services\n", + " 🟒 $410,918/yr from MCX go-live (30 Sep 2026)\n", + " \n", + " \n", + " 6\n", " Contracted token rate (vs $1.00 US list)\n", " πŸ”΄ not sourced β€” list rate used\n", " \n", " \n", - " 5\n", + " 7\n", " Non-NAM site volumes & AHTs\n", " 🟑 tokencalc placeholders (defaults.py warning)\n", " \n", " \n", - " 6\n", + " 8\n", " Early-termination / co-term options on NICE IE...\n", " πŸ”΄ unknown\n", " \n", @@ -674,18 +691,22 @@ "1 Actual termination / renewal dates per region \n", "2 Genesys ramp period in the actual order form \n", "3 Contracted licence run-rate \n", - "4 Contracted token rate (vs $1.00 US list) \n", - "5 Non-NAM site volumes & AHTs \n", - "6 Early-termination / co-term options on NICE IE... \n", + "4 NTT PS billing milestones (SOW) \n", + "5 NTT managed services \n", + "6 Contracted token rate (vs $1.00 US list) \n", + "7 Non-NAM site volumes & AHTs \n", + "8 Early-termination / co-term options on NICE IE... \n", "\n", " status \n", "0 🟑 seeded by agent share above \n", "1 🟑 defaulted to 31 Dec 2027 \n", - "2 🟑 12 months assumed \n", + "2 🟒 6 months per order form \n", "3 🟒 $3.2M/yr signed (deck pitched $4.3M/yr) \n", - "4 πŸ”΄ not sourced β€” list rate used \n", - "5 🟑 tokencalc placeholders (defaults.py warning) \n", - "6 πŸ”΄ unknown " + "4 🟒 $2.03M over four milestones, 2026–27 \n", + "5 🟒 $410,918/yr from MCX go-live (30 Sep 2026) \n", + "6 πŸ”΄ not sourced β€” list rate used \n", + "7 🟑 tokencalc placeholders (defaults.py warning) \n", + "8 πŸ”΄ unknown " ] }, "metadata": {}, @@ -722,8 +743,10 @@ "display(pd.DataFrame([\n", " (\"Per-region current-platform contract values\", \"🟑 seeded by agent share above\"),\n", " (\"Actual termination / renewal dates per region\", \"🟑 defaulted to 31 Dec 2027\"),\n", - " (\"Genesys ramp period in the actual order form\", \"🟑 12 months assumed\"),\n", + " (\"Genesys ramp period in the actual order form\", \"🟒 6 months per order form\"),\n", " (\"Contracted licence run-rate\", \"🟒 $3.2M/yr signed (deck pitched $4.3M/yr)\"),\n", + " (\"NTT PS billing milestones (SOW)\", \"🟒 $2.03M over four milestones, 2026–27\"),\n", + " (\"NTT managed services\", \"🟒 $410,918/yr from MCX go-live (30 Sep 2026)\"),\n", " (\"Contracted token rate (vs $1.00 US list)\", \"πŸ”΄ not sourced β€” list rate used\"),\n", " (\"Non-NAM site volumes & AHTs\", \"🟑 tokencalc placeholders (defaults.py warning)\"),\n", " (\"Early-termination / co-term options on NICE IEX et al.\", \"πŸ”΄ unknown\"),\n", @@ -759,10 +782,10 @@ "id": "c7e86e80", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.400716Z", - "iopub.status.busy": "2026-07-08T12:20:39.400542Z", - "iopub.status.idle": "2026-07-08T12:20:39.444021Z", - "shell.execute_reply": "2026-07-08T12:20:39.437975Z" + "iopub.execute_input": "2026-07-08T15:15:51.684531Z", + "iopub.status.busy": "2026-07-08T15:15:51.684366Z", + "iopub.status.idle": "2026-07-08T15:15:51.714441Z", + "shell.execute_reply": "2026-07-08T15:15:51.713713Z" } }, "outputs": [ @@ -915,27 +938,27 @@ "id": "5ace8c50", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.448792Z", - "iopub.status.busy": "2026-07-08T12:20:39.448556Z", - "iopub.status.idle": "2026-07-08T12:20:39.461582Z", - "shell.execute_reply": "2026-07-08T12:20:39.459562Z" + "iopub.execute_input": "2026-07-08T15:15:51.716432Z", + "iopub.status.busy": "2026-07-08T15:15:51.716282Z", + "iopub.status.idle": "2026-07-08T15:15:51.721198Z", + "shell.execute_reply": "2026-07-08T15:15:51.720378Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "1ee1d47e07a841a8908db4d0ea1d3952", + "model_id": "6b4df6310b224d668a46ff3767622396", "position": "sidebar", "widget": "CheckboxWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "1ee1d47e07a841a8908db4d0ea1d3952", + "model_id": "6b4df6310b224d668a46ff3767622396", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -955,10 +978,10 @@ "id": "fe3572d2", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.463946Z", - "iopub.status.busy": "2026-07-08T12:20:39.463734Z", - "iopub.status.idle": "2026-07-08T12:20:39.479705Z", - "shell.execute_reply": "2026-07-08T12:20:39.478527Z" + "iopub.execute_input": "2026-07-08T15:15:51.722767Z", + "iopub.status.busy": "2026-07-08T15:15:51.722615Z", + "iopub.status.idle": "2026-07-08T15:15:51.734450Z", + "shell.execute_reply": "2026-07-08T15:15:51.733874Z" } }, "outputs": [ @@ -1121,10 +1144,10 @@ "id": "a06e90b9", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.482124Z", - "iopub.status.busy": "2026-07-08T12:20:39.481856Z", - "iopub.status.idle": "2026-07-08T12:20:39.584120Z", - "shell.execute_reply": "2026-07-08T12:20:39.581742Z" + "iopub.execute_input": "2026-07-08T15:15:51.736296Z", + "iopub.status.busy": "2026-07-08T15:15:51.736137Z", + "iopub.status.idle": "2026-07-08T15:15:51.795636Z", + "shell.execute_reply": "2026-07-08T15:15:51.794556Z" } }, "outputs": [ @@ -1290,27 +1313,27 @@ "id": "977418e1", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.588145Z", - "iopub.status.busy": "2026-07-08T12:20:39.587638Z", - "iopub.status.idle": "2026-07-08T12:20:39.630228Z", - "shell.execute_reply": "2026-07-08T12:20:39.628706Z" + "iopub.execute_input": "2026-07-08T15:15:51.798201Z", + "iopub.status.busy": "2026-07-08T15:15:51.798054Z", + "iopub.status.idle": "2026-07-08T15:15:51.812657Z", + "shell.execute_reply": "2026-07-08T15:15:51.811957Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "2058a28b452f4885954eed2c21208812", + "model_id": "6347323104f645beac02bd1592fb60d4", "position": "sidebar", "widget": "CheckboxWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "2058a28b452f4885954eed2c21208812", + "model_id": "6347323104f645beac02bd1592fb60d4", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1319,17 +1342,17 @@ { "data": { "application/mercury+json": { - "model_id": "d3d9c76f75b34f688de66cca01913f38", + "model_id": "e0699dfd28c84c71a9e7f8a1ae48add5", "position": "sidebar", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "d3d9c76f75b34f688de66cca01913f38", + "model_id": "e0699dfd28c84c71a9e7f8a1ae48add5", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1338,17 +1361,17 @@ { "data": { "application/mercury+json": { - "model_id": "536a9842fe6a41078505ef6772a81435", + "model_id": "d9877763b4a94831b94c3d083f818d58", "position": "sidebar", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "536a9842fe6a41078505ef6772a81435", + "model_id": "d9877763b4a94831b94c3d083f818d58", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1357,17 +1380,17 @@ { "data": { "application/mercury+json": { - "model_id": "544d7fde83c442349a54af52de538da2", + "model_id": "0f0c0863eade46b2a23d4f7efe58c173", "position": "sidebar", "widget": "SliderWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "544d7fde83c442349a54af52de538da2", + "model_id": "0f0c0863eade46b2a23d4f7efe58c173", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1376,17 +1399,17 @@ { "data": { "application/mercury+json": { - "model_id": "43858d8fa5774cca84507ed5cf72138e", + "model_id": "555759d10b104fbf9ac24b8e9963baa8", "position": "sidebar", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "43858d8fa5774cca84507ed5cf72138e", + "model_id": "555759d10b104fbf9ac24b8e9963baa8", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1424,10 +1447,10 @@ "id": "9767177f", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.633813Z", - "iopub.status.busy": "2026-07-08T12:20:39.633401Z", - "iopub.status.idle": "2026-07-08T12:20:39.653551Z", - "shell.execute_reply": "2026-07-08T12:20:39.652404Z" + "iopub.execute_input": "2026-07-08T15:15:51.814858Z", + "iopub.status.busy": "2026-07-08T15:15:51.814724Z", + "iopub.status.idle": "2026-07-08T15:15:51.825579Z", + "shell.execute_reply": "2026-07-08T15:15:51.824675Z" } }, "outputs": [ @@ -1577,10 +1600,10 @@ "id": "3f3102f4", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.658238Z", - "iopub.status.busy": "2026-07-08T12:20:39.657989Z", - "iopub.status.idle": "2026-07-08T12:20:39.709180Z", - "shell.execute_reply": "2026-07-08T12:20:39.708683Z" + "iopub.execute_input": "2026-07-08T15:15:51.829201Z", + "iopub.status.busy": "2026-07-08T15:15:51.828968Z", + "iopub.status.idle": "2026-07-08T15:15:51.865340Z", + "shell.execute_reply": "2026-07-08T15:15:51.864704Z" } }, "outputs": [ @@ -1752,10 +1775,10 @@ "id": "e62ecfa7", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:39.710735Z", - "iopub.status.busy": "2026-07-08T12:20:39.710622Z", - "iopub.status.idle": "2026-07-08T12:20:41.026234Z", - "shell.execute_reply": "2026-07-08T12:20:41.025568Z" + "iopub.execute_input": "2026-07-08T15:15:51.869407Z", + "iopub.status.busy": "2026-07-08T15:15:51.869265Z", + "iopub.status.idle": "2026-07-08T15:15:52.949655Z", + "shell.execute_reply": "2026-07-08T15:15:52.949011Z" } }, "outputs": [ @@ -2805,27 +2828,27 @@ "id": "3b395fbd", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.030988Z", - "iopub.status.busy": "2026-07-08T12:20:41.030695Z", - "iopub.status.idle": "2026-07-08T12:20:41.043978Z", - "shell.execute_reply": "2026-07-08T12:20:41.042581Z" + "iopub.execute_input": "2026-07-08T15:15:52.953299Z", + "iopub.status.busy": "2026-07-08T15:15:52.953136Z", + "iopub.status.idle": "2026-07-08T15:15:52.963220Z", + "shell.execute_reply": "2026-07-08T15:15:52.962612Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "c3066f4048b84495a1956bd5af19302f", + "model_id": "3414451f3bea4ecd86b616edc1bcf92f", "position": "sidebar", "widget": "SelectWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "c3066f4048b84495a1956bd5af19302f", + "model_id": "3414451f3bea4ecd86b616edc1bcf92f", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2834,17 +2857,17 @@ { "data": { "application/mercury+json": { - "model_id": "a2ae0d29f75c46d195430ab5c30cdfd6", + "model_id": "d57babc80cd04cf3bbb6b5f9749db410", "position": "sidebar", "widget": "SelectWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "a2ae0d29f75c46d195430ab5c30cdfd6", + "model_id": "d57babc80cd04cf3bbb6b5f9749db410", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2853,17 +2876,17 @@ { "data": { "application/mercury+json": { - "model_id": "58a2284801644c5c994a6779ba7b84b8", + "model_id": "6c099f4dfe1c419984d542e66c67150f", "position": "sidebar", "widget": "CheckboxWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "58a2284801644c5c994a6779ba7b84b8", + "model_id": "6c099f4dfe1c419984d542e66c67150f", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2890,10 +2913,10 @@ "id": "23756537", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.046343Z", - "iopub.status.busy": "2026-07-08T12:20:41.046114Z", - "iopub.status.idle": "2026-07-08T12:20:41.075431Z", - "shell.execute_reply": "2026-07-08T12:20:41.074560Z" + "iopub.execute_input": "2026-07-08T15:15:52.964968Z", + "iopub.status.busy": "2026-07-08T15:15:52.964759Z", + "iopub.status.idle": "2026-07-08T15:15:52.990788Z", + "shell.execute_reply": "2026-07-08T15:15:52.990167Z" } }, "outputs": [ @@ -3197,10 +3220,10 @@ "id": "1ffaa74a", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.077838Z", - "iopub.status.busy": "2026-07-08T12:20:41.077644Z", - "iopub.status.idle": "2026-07-08T12:20:41.082296Z", - "shell.execute_reply": "2026-07-08T12:20:41.081756Z" + "iopub.execute_input": "2026-07-08T15:15:52.992940Z", + "iopub.status.busy": "2026-07-08T15:15:52.992787Z", + "iopub.status.idle": "2026-07-08T15:15:52.996336Z", + "shell.execute_reply": "2026-07-08T15:15:52.995761Z" } }, "outputs": [ @@ -3239,9 +3262,12 @@ "\n", "## 5 Β· Corrected cost stack\n", "\n", - "The pitched case vs the same case with the three missing costs added β€” and one *credit* the deck\n", - "also missed: the 12-month ramp means licences don't actually bill in 2026. Double-billing is\n", - "visible directly: in 2026–27 CTM pays the existing platforms **and** the Genesys programme." + "The pitched case vs the same case with the three missing costs added β€” plus the signed\n", + "contract mechanics: the **6-month ramp** (🟒 order form) means licences bill only half of\n", + "2026; PS bills on the **SOW milestones** (50/50 across 2026–27, $2.03M total vs the deck's\n", + "$2.4M year-1 lump); and **managed services** ($411K/yr from MCX go-live) join the stack β€”\n", + "an ongoing cost the deck's TCO never carried. Double-billing is visible directly: in\n", + "2026–27 CTM pays the existing platforms **and** the Genesys programme." ] }, { @@ -3250,10 +3276,10 @@ "id": "ad880bda", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.084449Z", - "iopub.status.busy": "2026-07-08T12:20:41.084277Z", - "iopub.status.idle": "2026-07-08T12:20:41.108089Z", - "shell.execute_reply": "2026-07-08T12:20:41.107342Z" + "iopub.execute_input": "2026-07-08T15:15:52.998103Z", + "iopub.status.busy": "2026-07-08T15:15:52.997970Z", + "iopub.status.idle": "2026-07-08T15:15:53.151333Z", + "shell.execute_reply": "2026-07-08T15:15:53.150190Z" } }, "outputs": [ @@ -3261,7 +3287,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Corrected programme cost: {2026: '$10.8M', 2027: '$12.4M', 2028: '$6.7M'} β†’ 3-yr $29.9M\n", + "Corrected programme cost: {2026: '$11.1M', 2027: '$13.8M', 2028: '$7.1M'} β†’ 3-yr $32.1M\n", "As pitched (deck): {2026: '$6.9M', 2027: '$4.3M', 2028: '$4.3M'} β†’ 3-yr $15.5M (deck says $15.4M β€” rounding)\n" ] }, @@ -3295,17 +3321,24 @@ " \n", " \n", " CCaaS platform licences (contracted, ramp-adjusted)\n", - " 0\n", + " 1,600,000\n", " 3,200,000\n", " 3,200,000\n", - " 6,400,000\n", + " 8,000,000\n", " \n", " \n", - " Base professional services + training\n", - " 2,567,000\n", + " NTT PS + training (SOW billing milestones)\n", + " 1,179,723\n", + " 1,012,723\n", " 0\n", - " 0\n", - " 2,567,000\n", + " 2,192,446\n", + " \n", + " \n", + " NTT managed services (from MCX go-live)\n", + " 102,730\n", + " 410,918\n", + " 410,918\n", + " 924,566\n", " \n", " \n", " Existing platform (term-contract run-off)\n", @@ -3337,10 +3370,10 @@ " \n", " \n", " TOTAL β€” corrected\n", - " 10,790,218\n", - " 12,415,925\n", - " 6,738,449\n", - " 29,944,591\n", + " 11,105,671\n", + " 13,839,566\n", + " 7,149,367\n", + " 32,094,604\n", " \n", " \n", "\n", @@ -3348,22 +3381,24 @@ ], "text/plain": [ " 2026 2027 \\\n", - "CCaaS platform licences (contracted, ramp-adjus... 0 3,200,000 \n", - "Base professional services + training 2,567,000 0 \n", + "CCaaS platform licences (contracted, ramp-adjus... 1,600,000 3,200,000 \n", + "NTT PS + training (SOW billing milestones) 1,179,723 1,012,723 \n", + "NTT managed services (from MCX go-live) 102,730 410,918 \n", "Existing platform (term-contract run-off) 7,300,001 7,300,001 \n", "AI token consumption 0 1,176,183 \n", "AI implementation + KB readiness 923,217 582,241 \n", "AI steady-state tuning 0 157,500 \n", - "TOTAL β€” corrected 10,790,218 12,415,925 \n", + "TOTAL β€” corrected 11,105,671 13,839,566 \n", "\n", " 2028 3-yr \n", - "CCaaS platform licences (contracted, ramp-adjus... 3,200,000 6,400,000 \n", - "Base professional services + training 0 2,567,000 \n", + "CCaaS platform licences (contracted, ramp-adjus... 3,200,000 8,000,000 \n", + "NTT PS + training (SOW billing milestones) 0 2,192,446 \n", + "NTT managed services (from MCX go-live) 410,918 924,566 \n", "Existing platform (term-contract run-off) 0 14,600,002 \n", "AI token consumption 3,345,156 4,521,339 \n", "AI implementation + KB readiness 35,793 1,541,250 \n", "AI steady-state tuning 157,500 315,000 \n", - "TOTAL β€” corrected 6,738,449 29,944,591 " + "TOTAL β€” corrected 7,149,367 32,094,604 " ] }, "metadata": {}, @@ -3436,15 +3471,91 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dateshareamount
SOW billing milestone
SOW Effective Date2026-03-1530%$607,633.94
Start of client UAT (first region)2026-09-3020%$405,089.30
Start of client UAT (last region)2027-06-3030%$607,633.94
Completion of last go-live migration2027-09-3020%$405,089.30
\n", + "
" + ], + "text/plain": [ + " date share amount\n", + "SOW billing milestone \n", + "SOW Effective Date 2026-03-15 30% $607,633.94\n", + "Start of client UAT (first region) 2026-09-30 20% $405,089.30\n", + "Start of client UAT (last region) 2027-06-30 30% $607,633.94\n", + "Completion of last go-live migration 2027-09-30 20% $405,089.30" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "ps_by_year = ps_costs_by_year() # verbatim $2.4M PS + $167K training, year 1\n", + "ps_by_year = ps_costs_by_year(contracted=True) # SOW milestones + verbatim training\n", + "ps_pitched_by_year = ps_costs_by_year() # deck's verbatim year-1 lump\n", + "managed_by_year = managed_services_by_year() # 🟒 bills from MCX go-live (30 Sep 2026)\n", "impl_kb_by_year = {y: impl_by_year[y] + kb_by_year[y] for y in YEARS}\n", "\n", "corrected_costs = pd.DataFrame({\n", " \"CCaaS platform licences (contracted, ramp-adjusted)\": licence_by_year,\n", - " \"Base professional services + training\": ps_by_year,\n", + " \"NTT PS + training (SOW billing milestones)\": ps_by_year,\n", + " \"NTT managed services (from MCX go-live)\": managed_by_year,\n", " \"Existing platform (term-contract run-off)\": current_by_year,\n", " \"AI token consumption\": token_total_by_year,\n", " \"AI implementation + KB readiness\": impl_kb_by_year,\n", @@ -3455,7 +3566,7 @@ "\n", "pitched_costs = pd.DataFrame({\n", " \"CCaaS platform licences (as pitched, no ramp)\": {y: TCO_VERBATIM[\"ccaas_annual\"] for y in YEARS},\n", - " \"Base professional services + training\": ps_by_year,\n", + " \"Base professional services + training\": ps_pitched_by_year,\n", "}).T[YEARS]\n", "pitched_costs[\"3-yr\"] = pitched_costs.sum(axis=1)\n", "pitched_total_by_year = {y: float(pitched_costs[y].sum()) for y in YEARS}\n", @@ -3469,7 +3580,12 @@ "display(pd.concat([corrected_costs,\n", " pd.DataFrame(corrected_costs.sum()).T.set_axis([\"TOTAL β€” corrected\"])]))\n", "display(pd.concat([pitched_costs,\n", - " pd.DataFrame(pitched_costs.sum()).T.set_axis([\"TOTAL β€” as pitched\"])]))" + " pd.DataFrame(pitched_costs.sum()).T.set_axis([\"TOTAL β€” as pitched\"])]))\n", + "\n", + "_ms = ps_milestones_dataframe()\n", + "_ms[\"amount\"] = _ms[\"amount\"].map(\"${:,.2f}\".format)\n", + "_ms[\"share\"] = _ms[\"share\"].map(\"{:.0%}\".format)\n", + "display(_ms.set_index(\"name\").rename_axis(\"SOW billing milestone\"))\n" ] }, { @@ -3488,10 +3604,10 @@ "id": "2e2b207c", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.110284Z", - "iopub.status.busy": "2026-07-08T12:20:41.110060Z", - "iopub.status.idle": "2026-07-08T12:20:41.215614Z", - "shell.execute_reply": "2026-07-08T12:20:41.214675Z" + "iopub.execute_input": "2026-07-08T15:15:53.153864Z", + "iopub.status.busy": "2026-07-08T15:15:53.153616Z", + "iopub.status.idle": "2026-07-08T15:15:53.229459Z", + "shell.execute_reply": "2026-07-08T15:15:53.228727Z" } }, "outputs": [ @@ -4587,10 +4703,10 @@ "id": "c2c9418f", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.218474Z", - "iopub.status.busy": "2026-07-08T12:20:41.218230Z", - "iopub.status.idle": "2026-07-08T12:20:41.257013Z", - "shell.execute_reply": "2026-07-08T12:20:41.256102Z" + "iopub.execute_input": "2026-07-08T15:15:53.232459Z", + "iopub.status.busy": "2026-07-08T15:15:53.232280Z", + "iopub.status.idle": "2026-07-08T15:15:53.262550Z", + "shell.execute_reply": "2026-07-08T15:15:53.261738Z" } }, "outputs": [ @@ -4618,7 +4734,7 @@ "2028" ], "y": [ - 0.0, + 1600000.0, 3200000.0, 3200000.0 ] @@ -4632,7 +4748,7 @@ "width": 2 } }, - "name": "Base professional services + training", + "name": "NTT PS + training (SOW billing milestones)", "type": "bar", "x": [ "2026", @@ -4640,11 +4756,33 @@ "2028" ], "y": [ - 2567000.0, - 0.0, + 1179723.24, + 1012723.24, 0.0 ] }, + { + "hovertemplate": "%{fullData.name}: %{y:$,.0f}", + "marker": { + "color": "#0b6b4a", + "line": { + "color": "#fcfcfb", + "width": 2 + } + }, + "name": "NTT managed services (from MCX go-live)", + "type": "bar", + "x": [ + "2026", + "2027", + "2028" + ], + "y": [ + 102729.60000000002, + 410918.4000000001, + 410918.4000000001 + ] + }, { "hovertemplate": "%{fullData.name}: %{y:$,.0f}", "marker": { @@ -4755,7 +4893,7 @@ "2028" ], "y": { - "bdata": "/1aBNqmUZEHYbpbnjyF2QQAAAPCwjnxB", + "bdata": "rZ5i0bAuZUFUg0RPJcp3QeJ6FL6Ym35B", "dtype": "f8" } }, @@ -4795,9 +4933,9 @@ "size": 12 }, "showarrow": false, - "text": "$10.8M", + "text": "$11.1M", "x": 0, - "y": 10790217.703288553, + "y": 11105670.543288553, "yshift": 12 }, { @@ -4806,9 +4944,9 @@ "size": 12 }, "showarrow": false, - "text": "$12.4M", + "text": "$13.8M", "x": 1, - "y": 12415924.770938251, + "y": 13839566.410938252, "yshift": 12 }, { @@ -4817,9 +4955,9 @@ "size": 12 }, "showarrow": false, - "text": "$6.7M", + "text": "$7.1M", "x": 2, - "y": 6738448.525773196, + "y": 7149366.925773196, "yshift": 12 }, { @@ -4828,10 +4966,10 @@ "size": 12 }, "showarrow": false, - "text": "3-yr $29.9M β€” $14.5M above the pitch", + "text": "3-yr $32.1M β€” $16.6M above the pitch", "x": 2, "xshift": -70, - "y": 29944591.0, + "y": 32094603.880000003, "yshift": 18 } ], @@ -5643,7 +5781,7 @@ "color": "#0b0b0b", "size": 16 }, - "text": "Programme cost over 3 years β€” with the missed costs
Existing platforms bill until 31 Dec 2027 term-contract end (double-billing) Β· licences at the contracted run-rate, ramp-free for 12 months Β· tokens + AI implementation added", + "text": "Programme cost over 3 years β€” with the missed costs
Existing platforms bill until 31 Dec 2027 term-contract end (double-billing) Β· licences at the contracted run-rate, ramp-free for 6 months Β· SOW-billed PS + managed services Β· tokens + AI implementation added", "x": 0.02, "xanchor": "left" }, @@ -5691,7 +5829,8 @@ "fig.update_layout(barmode=\"stack\")\n", "tei_layout(fig, \"Programme cost over 3 years β€” with the missed costs\",\n", " \"Existing platforms bill until 31 Dec 2027 term-contract end (double-billing) Β· \"\n", - " \"licences at the contracted run-rate, ramp-free for 12 months Β· tokens + AI implementation added\", height=500)\n", + " \"licences at the contracted run-rate, ramp-free for 6 months Β· SOW-billed PS \"\n", + " \"+ managed services Β· tokens + AI implementation added\", height=500)\n", "fig.show()" ] }, @@ -5701,10 +5840,10 @@ "id": "82335f50", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.259920Z", - "iopub.status.busy": "2026-07-08T12:20:41.259677Z", - "iopub.status.idle": "2026-07-08T12:20:41.287540Z", - "shell.execute_reply": "2026-07-08T12:20:41.286646Z" + "iopub.execute_input": "2026-07-08T15:15:53.264913Z", + "iopub.status.busy": "2026-07-08T15:15:53.264653Z", + "iopub.status.idle": "2026-07-08T15:15:53.301134Z", + "shell.execute_reply": "2026-07-08T15:15:53.300332Z" } }, "outputs": [ @@ -5754,9 +5893,9 @@ "2028" ], "y": [ - 10790217.703288553, - 12415924.770938251, - 6738448.525773196 + 11105670.543288553, + 13839566.410938252, + 7149366.925773196 ] } ], @@ -5768,10 +5907,10 @@ "size": 12 }, "showarrow": false, - "text": "+$3.9M", + "text": "+$4.2M", "x": 0, "xshift": 16, - "y": 10790217.703288553, + "y": 11105670.543288553, "yshift": 12 }, { @@ -5780,10 +5919,10 @@ "size": 12 }, "showarrow": false, - "text": "+$8.1M", + "text": "+$9.5M", "x": 1, "xshift": 16, - "y": 12415924.770938251, + "y": 13839566.410938252, "yshift": 12 }, { @@ -5792,10 +5931,10 @@ "size": 12 }, "showarrow": false, - "text": "+$2.4M", + "text": "+$2.8M", "x": 2, "xshift": 16, - "y": 6738448.525773196, + "y": 7149366.925773196, "yshift": 12 } ], @@ -6675,27 +6814,27 @@ "id": "de7679d8", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.289983Z", - "iopub.status.busy": "2026-07-08T12:20:41.289757Z", - "iopub.status.idle": "2026-07-08T12:20:41.296966Z", - "shell.execute_reply": "2026-07-08T12:20:41.296103Z" + "iopub.execute_input": "2026-07-08T15:15:53.303488Z", + "iopub.status.busy": "2026-07-08T15:15:53.303261Z", + "iopub.status.idle": "2026-07-08T15:15:53.309409Z", + "shell.execute_reply": "2026-07-08T15:15:53.308801Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "0a76099b436240728b539f8867340625", + "model_id": "9c731e39482e40308709c89e44302200", "position": "sidebar", "widget": "SelectWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "0a76099b436240728b539f8867340625", + "model_id": "9c731e39482e40308709c89e44302200", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -6716,10 +6855,10 @@ "id": "08433116", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.298855Z", - "iopub.status.busy": "2026-07-08T12:20:41.298655Z", - "iopub.status.idle": "2026-07-08T12:20:41.304752Z", - "shell.execute_reply": "2026-07-08T12:20:41.303928Z" + "iopub.execute_input": "2026-07-08T15:15:53.311159Z", + "iopub.status.busy": "2026-07-08T15:15:53.310953Z", + "iopub.status.idle": "2026-07-08T15:15:53.316419Z", + "shell.execute_reply": "2026-07-08T15:15:53.315807Z" } }, "outputs": [ @@ -6727,7 +6866,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "corrected: net by year {2026: '-$3.5M', 2027: '-$2.5M', 2028: '$13.0M'}\n", + "corrected: net by year {2026: '-$3.8M', 2027: '-$3.9M', 2028: '$12.6M'}\n", "pitched: net by year {2026: '$433K', 2027: '$5.6M', 2028: '$15.4M'}\n" ] } @@ -6757,10 +6896,10 @@ "id": "04c43658", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.306676Z", - "iopub.status.busy": "2026-07-08T12:20:41.306474Z", - "iopub.status.idle": "2026-07-08T12:20:41.337304Z", - "shell.execute_reply": "2026-07-08T12:20:41.336449Z" + "iopub.execute_input": "2026-07-08T15:15:53.318410Z", + "iopub.status.busy": "2026-07-08T15:15:53.318221Z", + "iopub.status.idle": "2026-07-08T15:15:53.342497Z", + "shell.execute_reply": "2026-07-08T15:15:53.341878Z" } }, "outputs": [ @@ -6810,9 +6949,9 @@ "2028" ], "y": [ - -3490217.7032885533, - -5115924.770938251, - 561551.4742268045 + -3805670.543288553, + -6539566.410938252, + 150633.07422680408 ] }, { @@ -6837,7 +6976,7 @@ "2028" ], "y": { - "bdata": "/FsF2tSgSsECwbM+NdtWwQAAAEBislpB", + "bdata": "tHqKRfMITcHuEmzdin1dwXoUrgfDflJB", "dtype": "f8" } } @@ -6850,9 +6989,9 @@ "size": 12 }, "showarrow": false, - "text": "-$3.5M", + "text": "-$3.8M", "x": 0, - "y": -3490217.7032885533, + "y": -3805670.543288553, "yshift": -14 }, { @@ -6861,9 +7000,9 @@ "size": 12 }, "showarrow": false, - "text": "-$6.0M", + "text": "-$7.7M", "x": 1, - "y": -5991636.97972131, + "y": -7730731.45972131, "yshift": -14 }, { @@ -6872,9 +7011,9 @@ "size": 12 }, "showarrow": false, - "text": "$7.0M", + "text": "$4.8M", "x": 2, - "y": 6998409.0, + "y": 4848396.119999999, "yshift": 14 }, { @@ -6887,7 +7026,7 @@ "size": 12 }, "showarrow": false, - "text": "3-yr net $7.0M Β· ROI 87%
NPV@13.5% $3.9M Β· payback 30 months (~Jun 2028)", + "text": "3-yr net $4.8M Β· ROI 48%
NPV@13.5% $2.2M Β· payback 32 months (~Aug 2028)", "x": 0.01, "xref": "paper", "y": 0.98, @@ -7761,10 +7900,10 @@ "id": "a8c9584e", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.340060Z", - "iopub.status.busy": "2026-07-08T12:20:41.339841Z", - "iopub.status.idle": "2026-07-08T12:20:41.354230Z", - "shell.execute_reply": "2026-07-08T12:20:41.353592Z" + "iopub.execute_input": "2026-07-08T15:15:53.344575Z", + "iopub.status.busy": "2026-07-08T15:15:53.344407Z", + "iopub.status.idle": "2026-07-08T15:15:53.353487Z", + "shell.execute_reply": "2026-07-08T15:15:53.352923Z" } }, "outputs": [ @@ -7772,7 +7911,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "The missed costs move the 3-yr case by $14.5M ($21.5M pitched β†’ $7.0M corrected).\n" + "The missed costs move the 3-yr case by $16.6M ($21.5M pitched β†’ $4.8M corrected).\n" ] }, { @@ -7809,32 +7948,32 @@ " \n", " 3-yr incremental cost\n", " -$6.4M\n", - " $8.0M\n", + " $10.2M\n", " \n", " \n", " 3-yr net\n", " $21.5M\n", - " $7.0M\n", + " $4.8M\n", " \n", " \n", " ROI (net Γ· incremental cost)\n", " n/a β€” net cost saving\n", - " 87%\n", + " 48%\n", " \n", " \n", " NPV @ 13.5% (deck rate)\n", " $15.3M\n", - " $3.9M\n", + " $2.2M\n", " \n", " \n", " NPV @ 8.0% (CTM treasury)\n", " $17.5M\n", - " $4.9M\n", + " $3.1M\n", " \n", " \n", " Payback\n", " immediate\n", - " 30 months (~Jun 2028)\n", + " 32 months (~Aug 2028)\n", " \n", " \n", "\n", @@ -7843,12 +7982,12 @@ "text/plain": [ " As pitched (deck) Corrected\n", "3-yr benefits $15.0M $15.0M\n", - "3-yr incremental cost -$6.4M $8.0M\n", - "3-yr net $21.5M $7.0M\n", - "ROI (net Γ· incremental cost) n/a β€” net cost saving 87%\n", - "NPV @ 13.5% (deck rate) $15.3M $3.9M\n", - "NPV @ 8.0% (CTM treasury) $17.5M $4.9M\n", - "Payback immediate 30 months (~Jun 2028)" + "3-yr incremental cost -$6.4M $10.2M\n", + "3-yr net $21.5M $4.8M\n", + "ROI (net Γ· incremental cost) n/a β€” net cost saving 48%\n", + "NPV @ 13.5% (deck rate) $15.3M $2.2M\n", + "NPV @ 8.0% (CTM treasury) $17.5M $3.1M\n", + "Payback immediate 32 months (~Aug 2028)" ] }, "metadata": {}, @@ -7896,10 +8035,10 @@ "id": "6671014d", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.356523Z", - "iopub.status.busy": "2026-07-08T12:20:41.356378Z", - "iopub.status.idle": "2026-07-08T12:20:41.423548Z", - "shell.execute_reply": "2026-07-08T12:20:41.422667Z" + "iopub.execute_input": "2026-07-08T15:15:53.355336Z", + "iopub.status.busy": "2026-07-08T15:15:53.355180Z", + "iopub.status.idle": "2026-07-08T15:15:53.416805Z", + "shell.execute_reply": "2026-07-08T15:15:53.415898Z" } }, "outputs": [ @@ -8970,10 +9109,10 @@ "id": "faa1e95f", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.426278Z", - "iopub.status.busy": "2026-07-08T12:20:41.426076Z", - "iopub.status.idle": "2026-07-08T12:20:41.463565Z", - "shell.execute_reply": "2026-07-08T12:20:41.462879Z" + "iopub.execute_input": "2026-07-08T15:15:53.419794Z", + "iopub.status.busy": "2026-07-08T15:15:53.419516Z", + "iopub.status.idle": "2026-07-08T15:15:53.479629Z", + "shell.execute_reply": "2026-07-08T15:15:53.478659Z" } }, "outputs": [ @@ -9013,21 +9152,21 @@ " \n", " \n", " low hours\n", - " 7,822,159\n", - " 7,527,159\n", - " 7,232,159\n", + " 5,672,146\n", + " 5,377,146\n", + " 5,082,146\n", " \n", " \n", " mid hours\n", - " 7,410,909\n", - " 6,998,409\n", - " 6,585,909\n", + " 5,260,896\n", + " 4,848,396\n", + " 4,435,896\n", " \n", " \n", " high hours\n", - " 6,999,659\n", - " 6,469,659\n", - " 5,939,659\n", + " 4,849,646\n", + " 4,319,646\n", + " 3,789,646\n", " \n", " \n", "\n", @@ -9035,9 +9174,9 @@ ], "text/plain": [ " $175/h $225/h $275/h\n", - "low hours 7,822,159 7,527,159 7,232,159\n", - "mid hours 7,410,909 6,998,409 6,585,909\n", - "high hours 6,999,659 6,469,659 5,939,659" + "low hours 5,672,146 5,377,146 5,082,146\n", + "mid hours 5,260,896 4,848,396 4,435,896\n", + "high hours 4,849,646 4,319,646 3,789,646" ] }, "metadata": {}, @@ -9056,8 +9195,9 @@ "def corrected_net_3yr(mode, rate):\n", " _, iby, kby, ssby = build_impl_costs(sites, mode, rate, INCLUDE_KB_READINESS,\n", " COPILOT_INCLUDES_ASIA, NA_EMAIL_EARLY)\n", - " total = {y: licence_by_year[y] + ps_by_year[y] + current_by_year[y]\n", - " + token_total_by_year[y] + iby[y] + kby[y] + ssby[y] for y in YEARS}\n", + " total = {y: licence_by_year[y] + ps_by_year[y] + managed_by_year[y]\n", + " + current_by_year[y] + token_total_by_year[y]\n", + " + iby[y] + kby[y] + ssby[y] for y in YEARS}\n", " _, net = case_flows(total, benefit_total_by_year)\n", " return sum(net.values())\n", "\n", @@ -9094,10 +9234,10 @@ "id": "6516ea96", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.465149Z", - "iopub.status.busy": "2026-07-08T12:20:41.465023Z", - "iopub.status.idle": "2026-07-08T12:20:41.503951Z", - "shell.execute_reply": "2026-07-08T12:20:41.502996Z" + "iopub.execute_input": "2026-07-08T15:15:53.482270Z", + "iopub.status.busy": "2026-07-08T15:15:53.481974Z", + "iopub.status.idle": "2026-07-08T15:15:53.521837Z", + "shell.execute_reply": "2026-07-08T15:15:53.521096Z" } }, "outputs": [ @@ -9106,7 +9246,7 @@ "output_type": "stream", "text": [ "All assertions passed.\n", - " benefits 3-yr $15.0M Β· tokens 3-yr $4.5M Β· corrected net 3-yr $7.0M\n" + " benefits 3-yr $15.0M Β· tokens 3-yr $4.5M Β· corrected net 3-yr $4.8M\n" ] } ], @@ -9123,6 +9263,15 @@ "_l12 = licence_costs_by_year(12)\n", "_approx(_l12[2026], 0)\n", "_approx(_l12[2027], 4_300_000) # deck rate stays verbatim\n", + "assert DEFAULT_RAMP_MONTHS == 6 # 🟒 order form\n", + "_approx(licence_costs_by_year()[2026], 2_150_000) # 6-mo ramp: half-year bills in 2026\n", + "# NTT SOW β€” billing milestones + managed services (🟒 contractual)\n", + "_approx(PS_CONTRACTED_TOTAL, 2_025_446.48, tol=0.01)\n", + "_ps_c = ps_costs_by_year(contracted=True)\n", + "_approx(_ps_c[2026], 607_633.94 + 405_089.30 + 167_000, tol=0.01) # 30% + 20% + training\n", + "_approx(_ps_c[2027], 607_633.94 + 405_089.30, tol=0.01) # 30% + 20%\n", + "_approx(managed_services_by_year()[2026],\n", + " MANAGED_SERVICES_ANNUAL * 3 / 12, tol=0.01) # Oct–Dec after go-live\n", "_approx(tco(\"ccaas_annual\"), 3_200_000) # signed contract overlay\n", "_approx(licence_costs_by_year(12, tco(\"ccaas_annual\"))[2027], 3_200_000)\n", "_contracts_at_default = (\n", @@ -9164,9 +9313,10 @@ "\n", "# Section 5 β€” cost stacks\n", "_approx(sum(pitched_total_by_year.values()),\n", - " 3 * TCO_VERBATIM[\"ccaas_annual\"] + ps_by_year[2026]) # β‰ˆ deck's $15.4M\n", + " 3 * TCO_VERBATIM[\"ccaas_annual\"] + ps_pitched_by_year[2026]) # β‰ˆ deck's $15.4M\n", "_approx(sum(corrected_total_by_year.values()),\n", - " sum(licence_by_year.values()) + ps_by_year[2026] + sum(current_by_year.values())\n", + " sum(licence_by_year.values()) + sum(ps_by_year.values())\n", + " + sum(managed_by_year.values()) + sum(current_by_year.values())\n", " + sum(token_total_by_year.values()) + sum(impl_kb_by_year.values())\n", " + sum(steady_by_year.values()))\n", "\n", @@ -9196,8 +9346,10 @@ " intends PR on a queue subset; ask which queues.\n", "- **2026 is a pure cost year** β€” $0 benefits under Genesys's own schedule, while CTM double-pays\n", " existing platforms plus PS and early AI implementation.\n", - "- The corrections are not one-directional: the ramp programme (12 licence-free months) and\n", - " the contracted licence rate ($3.2M/yr vs the pitched $4.3M) both cut in Genesys's favour.\n", + "- The corrections are not one-directional: the ramp credit (6 licence-free months, 🟒\n", + " order form) and the contracted licence rate ($3.2M/yr vs the pitched $4.3M) improve the\n", + " case, while the SOW's managed services ($411K/yr from MCX go-live) add a run-rate cost\n", + " the deck's TCO never carried.\n", "\n", "**Known gaps / data wanted**\n", "- Non-NAM site volumes & AHTs are `tokencalc` placeholders (🟑) β€” all non-NA token figures inherit\n", @@ -9242,10 +9394,10 @@ "id": "c4c025b5", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:41.506628Z", - "iopub.status.busy": "2026-07-08T12:20:41.506424Z", - "iopub.status.idle": "2026-07-08T12:20:41.551405Z", - "shell.execute_reply": "2026-07-08T12:20:41.550687Z" + "iopub.execute_input": "2026-07-08T15:15:53.524766Z", + "iopub.status.busy": "2026-07-08T15:15:53.524542Z", + "iopub.status.idle": "2026-07-08T15:15:53.567349Z", + "shell.execute_reply": "2026-07-08T15:15:53.566263Z" } }, "outputs": [ @@ -9272,7 +9424,13 @@ "| Email | 143000 | 93000 | 235000 | 2500000 |\n", "| STA | 105000 | 72000 | 131000 | 506000 |\n", "| Predictive Routing | 302000 | 51000 | 6000 | 167000 |\n", - "| Supervisor Copilot | 27000 | 0 | 49000 | 291000 |\n", + "| Supervisor Copilot | 27000 | 0 | 49000 | 291000 |\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "\n", "#### Benefits by capability Γ— year (schedule-phased, $)\n", "\n", @@ -9316,8 +9474,9 @@ "\n", "| | 2026 | 2027 | 2028 | 3-yr |\n", "|:----------------------------------------------------|----------:|----------:|----------:|-----------:|\n", - "| CCaaS platform licences (contracted, ramp-adjusted) | 0 | 3,200,000 | 3,200,000 | 6,400,000 |\n", - "| Base professional services + training | 2,567,000 | 0 | 0 | 2,567,000 |\n", + "| CCaaS platform licences (contracted, ramp-adjusted) | 1,600,000 | 3,200,000 | 3,200,000 | 8,000,000 |\n", + "| NTT PS + training (SOW billing milestones) | 1,179,723 | 1,012,723 | 0 | 2,192,446 |\n", + "| NTT managed services (from MCX go-live) | 102,730 | 410,918 | 410,918 | 924,566 |\n", "| Existing platform (term-contract run-off) | 7,300,001 | 7,300,001 | 0 | 14,600,002 |\n", "| AI token consumption | 0 | 1,176,183 | 3,345,156 | 4,521,339 |\n", "| AI implementation + KB readiness | 923,217 | 582,241 | 35,793 | 1,541,250 |\n", @@ -9335,12 +9494,12 @@ "| | As pitched (deck) | Corrected |\n", "|:-----------------------------|:----------------------|:----------------------|\n", "| 3-yr benefits | $15.0M | $15.0M |\n", - "| 3-yr incremental cost | -$6.4M | $8.0M |\n", - "| 3-yr net | $21.5M | $7.0M |\n", - "| ROI (net Γ· incremental cost) | n/a β€” net cost saving | 87% |\n", - "| NPV @ 13.5% (deck rate) | $15.3M | $3.9M |\n", - "| NPV @ 8.0% (CTM treasury) | $17.5M | $4.9M |\n", - "| Payback | immediate | 30 months (~Jun 2028) |\n", + "| 3-yr incremental cost | -$6.4M | $10.2M |\n", + "| 3-yr net | $21.5M | $4.8M |\n", + "| ROI (net Γ· incremental cost) | n/a β€” net cost saving | 48% |\n", + "| NPV @ 13.5% (deck rate) | $15.3M | $2.2M |\n", + "| NPV @ 8.0% (CTM treasury) | $17.5M | $3.1M |\n", + "| Payback | immediate | 32 months (~Aug 2028) |\n", "\n", "#### Model state (JSON)\n", "\n", @@ -9352,9 +9511,9 @@ " \"2028\": 12428495\n", " },\n", " \"corrected_cost_by_year\": {\n", - " \"2026\": 10790218,\n", - " \"2027\": 12415925,\n", - " \"2028\": 6738449\n", + " \"2026\": 11105671,\n", + " \"2027\": 13839566,\n", + " \"2028\": 7149367\n", " },\n", " \"pitched_cost_by_year\": {\n", " \"2026\": 6867000,\n", @@ -9362,18 +9521,18 @@ " \"2028\": 4300000\n", " },\n", " \"net_by_year_corrected\": {\n", - " \"2026\": -3490218,\n", - " \"2027\": -2501419,\n", - " \"2028\": 12990046\n", + " \"2026\": -3805671,\n", + " \"2027\": -3925061,\n", + " \"2028\": 12579128\n", " },\n", " \"kpis_corrected\": {\n", " \"benefits_3yr\": 15043000,\n", - " \"incremental_cost_3yr\": 8044591,\n", - " \"net_3yr\": 6998409,\n", - " \"roi\": 0.87,\n", - " \"npv\": 3867460,\n", + " \"incremental_cost_3yr\": 10194604,\n", + " \"net_3yr\": 4848396,\n", + " \"roi\": 0.4756,\n", + " \"npv\": 2203369,\n", " \"discount_rate\": 0.135,\n", - " \"payback\": \"30 months (~Jun 2028)\"\n", + " \"payback\": \"32 months (~Aug 2028)\"\n", " },\n", " \"kpis_pitched\": {\n", " \"benefits_3yr\": 15043000,\n", @@ -9385,9 +9544,34 @@ " \"payback\": \"immediate\"\n", " },\n", " \"assumptions\": {\n", - " \"ramp_months\": 12,\n", + " \"ramp_months\": 6,\n", " \"licence_annual\": 3200000,\n", " \"deck_ccaas_annual\": 4300000,\n", + " \"ps_contracted_total\": 2025446.48,\n", + " \"ps_milestones\": [\n", + " {\n", + " \"name\": \"SOW Effective Date\",\n", + " \"date\": \"2026-03-15\",\n", + " \"amount\": 607633.94\n", + " },\n", + " {\n", + " \"name\": \"Start of client UAT (first region)\",\n", + " \"date\": \"2026-09-30\",\n", + " \"amount\": 405089.3\n", + " },\n", + " {\n", + " \"name\": \"Start of client UAT (last region)\",\n", + " \"date\": \"2027-06-30\",\n", + " \"amount\": 607633.94\n", + " },\n", + " {\n", + " \"name\": \"Completion of last go-live migration\",\n", + " \"date\": \"2027-09-30\",\n", + " \"amount\": 405089.3\n", + " }\n", + " ],\n", + " \"managed_services_annual\": 410918.4,\n", + " \"mcx_go_live\": \"2026-09-30\",\n", " \"hours_mode\": \"mid\",\n", " \"blended_rate\": 225,\n", " \"include_kb_readiness\": true,\n", @@ -9468,6 +9652,11 @@ " \"ramp_months\": RAMP_MONTHS,\n", " \"licence_annual\": round(LICENCE_ANNUAL),\n", " \"deck_ccaas_annual\": round(TCO_VERBATIM[\"ccaas_annual\"]),\n", + " \"ps_contracted_total\": round(PS_CONTRACTED_TOTAL, 2),\n", + " \"ps_milestones\": [{\"name\": m[\"name\"], \"date\": m[\"date\"].isoformat(),\n", + " \"amount\": m[\"amount\"]} for m in PS_MILESTONES],\n", + " \"managed_services_annual\": MANAGED_SERVICES_ANNUAL,\n", + " \"mcx_go_live\": MCX_GO_LIVE.isoformat(),\n", " \"hours_mode\": HOURS_MODE,\n", " \"blended_rate\": BLENDED_RATE,\n", " \"include_kb_readiness\": INCLUDE_KB_READINESS,\n", @@ -9509,75 +9698,7 @@ "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "0a76099b436240728b539f8867340625": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.select.SelectWidget", - "_css": "\n .mljar-select-container {\n display: flex;\n flex-direction: column;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n }\n\n .mljar-select-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-select-control {\n position: relative;\n display: flex;\n align-items: center;\n cursor: default;\n }\n\n .mljar-select-widget-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 36px 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n line-height: 1.4;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n\n appearance: none !important;\n background-color: #ffffff !important;\n color: #0f172a !important;\n cursor: default;\n }\n\n .mljar-select-widget-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n cursor: text;\n }\n\n .mljar-select-caret {\n position: absolute;\n right: 12px;\n top: 50%;\n width: 8px;\n height: 8px;\n border-right: 1.5px solid #0f172a;\n border-bottom: 1.5px solid #0f172a;\n transform: translateY(-65%) rotate(45deg);\n pointer-events: none;\n opacity: 0.5;\n transition: transform 0.18s ease, opacity 0.18s ease;\n }\n\n .mljar-select-container.is-open .mljar-select-caret {\n opacity: 1;\n transform: translateY(-35%) rotate(225deg);\n }\n\n .mljar-select-dropdown {\n display: none;\n margin-top: 6px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);\n overflow: hidden;\n }\n\n .mljar-select-list {\n max-height: 260px;\n overflow-y: auto;\n }\n\n .mljar-select-option {\n display: block;\n width: 100%;\n padding: 9px 10px;\n border: 0;\n background: transparent;\n color: #0f172a;\n text-align: left;\n cursor: pointer;\n font: inherit;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-select-option:hover {\n background: #f3f3f4;\n }\n\n .mljar-select-option:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-option.is-selected {\n background: #e6f2ff;\n color: #007bff;\n font-weight: 600;\n }\n\n .mljar-select-option.is-selected:hover,\n .mljar-select-option.is-selected:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-empty {\n display: none;\n padding: 10px;\n color: #616673;\n font-size: 0.95em;\n }\n\n .mljar-select-widget-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-select-control.is-disabled .mljar-select-caret {\n opacity: 0.45;\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const normalize = value => String(value ?? \"\").toLowerCase().trim();\n const getChoices = () =>\n Array.isArray(model.get(\"choices\")) ? [...model.get(\"choices\")] : [];\n const isDisabled = () => !!model.get(\"disabled\");\n const isHidden = () => !!model.get(\"hidden\");\n\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-select-container\");\n\n if (model.get(\"label\")) {\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-select-label\");\n topLabel.innerHTML = model.get(\"label\");\n container.appendChild(topLabel);\n }\n\n const control = document.createElement(\"div\");\n control.classList.add(\"mljar-select-control\");\n\n const input = document.createElement(\"input\");\n input.type = \"text\";\n input.classList.add(\"mljar-select-widget-input\");\n input.autocomplete = \"off\";\n input.spellcheck = false;\n\n const caret = document.createElement(\"div\");\n caret.classList.add(\"mljar-select-caret\");\n\n control.appendChild(input);\n control.appendChild(caret);\n\n const dropdown = document.createElement(\"div\");\n dropdown.classList.add(\"mljar-select-dropdown\");\n\n const list = document.createElement(\"div\");\n list.classList.add(\"mljar-select-list\");\n\n const emptyState = document.createElement(\"div\");\n emptyState.classList.add(\"mljar-select-empty\");\n emptyState.textContent = \"No matches\";\n\n dropdown.appendChild(list);\n dropdown.appendChild(emptyState);\n\n container.appendChild(control);\n container.appendChild(dropdown);\n el.appendChild(container);\n\n let isOpen = false;\n let filteredChoices = [];\n let lastCommittedValue = \"\";\n let isEditing = false;\n\n const setOpen = next => {\n if (isDisabled()) {\n isOpen = false;\n } else {\n isOpen = !!next;\n }\n container.classList.toggle(\"is-open\", isOpen);\n dropdown.style.display = isOpen ? \"block\" : \"none\";\n };\n\n const updateDisabledState = () => {\n const disabled = isDisabled();\n input.disabled = disabled;\n control.classList.toggle(\"is-disabled\", disabled);\n };\n\n const updateHiddenState = () => {\n container.style.display = isHidden() ? \"none\" : \"\";\n };\n\n const syncInputWithValue = () => {\n const value = model.get(\"value\") || \"\";\n lastCommittedValue = value;\n if (!isEditing) {\n input.value = value;\n }\n };\n\n const filterChoices = query => {\n const normalizedQuery = normalize(query);\n const allChoices = getChoices();\n if (!normalizedQuery) {\n return allChoices;\n }\n return allChoices.filter(choice =>\n normalize(choice).includes(normalizedQuery)\n );\n };\n\n const renderList = () => {\n list.innerHTML = \"\";\n filteredChoices.forEach(choice => {\n const option = document.createElement(\"button\");\n option.type = \"button\";\n option.classList.add(\"mljar-select-option\");\n if (choice === model.get(\"value\")) {\n option.classList.add(\"is-selected\");\n }\n option.textContent = choice;\n option.addEventListener(\"mousedown\", event => {\n event.preventDefault();\n event.stopPropagation();\n model.set(\"value\", choice);\n model.save_changes();\n isEditing = false;\n syncInputWithValue();\n renderList();\n setOpen(false);\n });\n list.appendChild(option);\n });\n\n const hasMatches = filteredChoices.length > 0;\n list.style.display = hasMatches ? \"block\" : \"none\";\n emptyState.style.display = hasMatches ? \"none\" : \"block\";\n };\n\n const refreshList = () => {\n filteredChoices = filterChoices(input.value);\n renderList();\n };\n\n const openWithCurrentQuery = () => {\n isEditing = true;\n input.value = \"\";\n refreshList();\n setOpen(true);\n };\n\n control.addEventListener(\"click\", event => {\n event.stopPropagation();\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n input.focus();\n });\n\n input.addEventListener(\"input\", () => {\n if (isDisabled()) {\n return;\n }\n refreshList();\n setOpen(true);\n });\n\n input.addEventListener(\"focus\", () => {\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n input.value = lastCommittedValue;\n });\n\n const handleDocumentClick = event => {\n if (!container.contains(event.target)) {\n isEditing = false;\n setOpen(false);\n input.value = lastCommittedValue;\n }\n };\n\n document.addEventListener(\"click\", handleDocumentClick);\n\n model.on(\"change:value\", () => {\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:choices\", () => {\n const choices = getChoices();\n if (!choices.includes(model.get(\"value\")) && choices.length > 0) {\n model.set(\"value\", choices[0]);\n model.save_changes();\n return;\n }\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:disabled\", () => {\n updateDisabledState();\n if (isDisabled()) {\n isEditing = false;\n setOpen(false);\n }\n });\n\n model.on(\"change:hidden\", () => {\n updateHiddenState();\n });\n\n updateDisabledState();\n updateHiddenState();\n syncInputWithValue();\n refreshList();\n setOpen(false);\n\n return () => {\n document.removeEventListener(\"click\", handleDocumentClick);\n };\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "choices": [ - "13.5% (deck)", - "8.0% (CTM treasury)" - ], - "disabled": false, - "hidden": false, - "label": "NPV discount rate", - "layout": "IPY_MODEL_3c3d7da84fb348c1a43bc1820e982eca", - "layout_path": null, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "13.5% (deck)" - } - }, - "0bfe75e3708140a49973b3af4ddda41a": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.date.DateInputWidget", - "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "EMEA β€” contract termination", - "layout": "IPY_MODEL_d94f1210f1cd418c9efd2a5229ed8f02", - "layout_path": null, - "max": "", - "min": "", - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "2027-12-31" - } - }, - "0c28dc240962449d95c3c0961fcae03c": { + "0805812abf564bbf9816351103b02bea": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -9630,7 +9751,7 @@ "width": null } }, - "119e218090684e5192891ae301b29a8b": { + "0de1ab4bb6ce41bc84cb0510923592b7": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -9683,538 +9804,7 @@ "width": null } }, - "12c27b75c74a4785aac38abca3d50a0a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "2.0.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": "HTMLView", - "cell_id": "", - "description": "", - "description_allow_html": false, - "layout": "IPY_MODEL_16a2df5aca114aa28e9d7207ca9f3112", - "layout_path": null, - "placeholder": "​", - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "style": "IPY_MODEL_f5efc754df6641c9a87d314245c1ce85", - "tabbable": null, - "tooltip": null, - "value": "" - } - }, - "16a2df5aca114aa28e9d7207ca9f3112": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1a52eaf6b29447c1b8aa1db54a4e56b8": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "EMEA β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_9ed2e7cc399b4d1aacab8aaf9470d535", - "layout_path": null, - "max": 8000000.0, - "min": 0.0, - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "step": 10000.0, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 1204124.0 - } - }, - "1ee1d47e07a841a8908db4d0ea1d3952": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.checkbox.CheckboxWidget", - "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "appearance": "toggle", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "NA Email implements early (Jan 2027)", - "last_changed_at": "", - "layout": "IPY_MODEL_119e218090684e5192891ae301b29a8b", - "layout_path": null, - "n_toggles": 0, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": true - } - }, - "2058a28b452f4885954eed2c21208812": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.checkbox.CheckboxWidget", - "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "appearance": "toggle", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "Copilot includes ASIA sites", - "last_changed_at": "", - "layout": "IPY_MODEL_ac02fa42bd4f486791baff281b65c380", - "layout_path": null, - "n_toggles": 0, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": false - } - }, - "2912bf24d4e645d3bd78bc5c1b4953b5": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "CCaaS licence run-rate ($/yr) β€” contracted", - "layout": "IPY_MODEL_ba177efc36ad40ad9b4b68b67f31818a", - "layout_path": null, - "max": 10000000.0, - "min": 0.0, - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "step": 100000.0, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 3200000.0 - } - }, - "368cc08eb20b428b8f2fb62dcb989e46": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "384c2bacd884439d9885d07729c8f480": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3c3d7da84fb348c1a43bc1820e982eca": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "417b05a4d31e4c96b1971794d6692f14": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "43858d8fa5774cca84507ed5cf72138e": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "AI Translate eligibility 🟑", - "layout": "IPY_MODEL_cffb228855c24bd39947ad7a0dfa6396", - "layout_path": null, - "max": 1.0, - "min": 0.0, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "step": 0.01, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 0.01 - } - }, - "4666a3204ec84afba77fcbed27edae43": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "ANZ β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_9226e080c9134e24bedd33c6fbbc1a9a", - "layout_path": null, - "max": 8000000.0, - "min": 0.0, - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "step": 10000.0, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 677320.0 - } - }, - "536a9842fe6a41078505ef6772a81435": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "Auto-respond tokens per message 🟑", - "layout": "IPY_MODEL_417b05a4d31e4c96b1971794d6692f14", - "layout_path": null, - "max": 0.5, - "min": 0.0, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "step": 0.005, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 0.05 - } - }, - "544d7fde83c442349a54af52de538da2": { + "0f0c0863eade46b2a23d4f7efe58c173": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -10234,7 +9824,7 @@ "disabled": false, "hidden": false, "label": "Predictive Routing eligibility (%)", - "layout": "IPY_MODEL_df38600cdf104a408fad11492a02da34", + "layout": "IPY_MODEL_e909e59b90a74e71b282acd76feecdae", "layout_path": null, "max": 100, "min": 0, @@ -10247,41 +9837,7 @@ "value": 100 } }, - "58a2284801644c5c994a6779ba7b84b8": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.checkbox.CheckboxWidget", - "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "appearance": "toggle", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "Include KB readiness (500–1,500 h)", - "last_changed_at": "", - "layout": "IPY_MODEL_cbeec3c96a7f4ca88ec32660ebe6dfd2", - "layout_path": null, - "n_toggles": 0, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": true - } - }, - "65e5f9944d224c329037ac9c608080e7": { + "11bd0914b83a4f2d97be8bb927d287c1": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -10334,7 +9890,7 @@ "width": null } }, - "69fea1412b934758bb191b199d12410b": { + "18bd7e25aac44935859433462a96e263": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -10387,40 +9943,7 @@ "width": null } }, - "70b68a62010b4fef96d9117d387ed629": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.date.DateInputWidget", - "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "ANZ β€” contract termination", - "layout": "IPY_MODEL_c346f16e28a144e0a389f6cbffdba564", - "layout_path": null, - "max": "", - "min": "", - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "2027-12-31" - } - }, - "79098a2b88e441bca21c67fc17de3376": { + "1a6c73c71082451c8a56e12a30d34377": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -10473,40 +9996,7 @@ "width": null } }, - "87d58807331b444b831a9611af9b9b97": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.date.DateInputWidget", - "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "NA β€” contract termination", - "layout": "IPY_MODEL_69fea1412b934758bb191b199d12410b", - "layout_path": null, - "max": "", - "min": "", - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "2027-12-31" - } - }, - "9226e080c9134e24bedd33c6fbbc1a9a": { + "2a71711de67c43aba0ab438e2e9ea50e": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -10559,7 +10049,7 @@ "width": null } }, - "9ed2e7cc399b4d1aacab8aaf9470d535": { + "2f75de1a11684c259e244f088906f63f": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -10612,149 +10102,7 @@ "width": null } }, - "a2ae0d29f75c46d195430ab5c30cdfd6": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.select.SelectWidget", - "_css": "\n .mljar-select-container {\n display: flex;\n flex-direction: column;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n }\n\n .mljar-select-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-select-control {\n position: relative;\n display: flex;\n align-items: center;\n cursor: default;\n }\n\n .mljar-select-widget-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 36px 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n line-height: 1.4;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n\n appearance: none !important;\n background-color: #ffffff !important;\n color: #0f172a !important;\n cursor: default;\n }\n\n .mljar-select-widget-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n cursor: text;\n }\n\n .mljar-select-caret {\n position: absolute;\n right: 12px;\n top: 50%;\n width: 8px;\n height: 8px;\n border-right: 1.5px solid #0f172a;\n border-bottom: 1.5px solid #0f172a;\n transform: translateY(-65%) rotate(45deg);\n pointer-events: none;\n opacity: 0.5;\n transition: transform 0.18s ease, opacity 0.18s ease;\n }\n\n .mljar-select-container.is-open .mljar-select-caret {\n opacity: 1;\n transform: translateY(-35%) rotate(225deg);\n }\n\n .mljar-select-dropdown {\n display: none;\n margin-top: 6px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);\n overflow: hidden;\n }\n\n .mljar-select-list {\n max-height: 260px;\n overflow-y: auto;\n }\n\n .mljar-select-option {\n display: block;\n width: 100%;\n padding: 9px 10px;\n border: 0;\n background: transparent;\n color: #0f172a;\n text-align: left;\n cursor: pointer;\n font: inherit;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-select-option:hover {\n background: #f3f3f4;\n }\n\n .mljar-select-option:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-option.is-selected {\n background: #e6f2ff;\n color: #007bff;\n font-weight: 600;\n }\n\n .mljar-select-option.is-selected:hover,\n .mljar-select-option.is-selected:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-empty {\n display: none;\n padding: 10px;\n color: #616673;\n font-size: 0.95em;\n }\n\n .mljar-select-widget-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-select-control.is-disabled .mljar-select-caret {\n opacity: 0.45;\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const normalize = value => String(value ?? \"\").toLowerCase().trim();\n const getChoices = () =>\n Array.isArray(model.get(\"choices\")) ? [...model.get(\"choices\")] : [];\n const isDisabled = () => !!model.get(\"disabled\");\n const isHidden = () => !!model.get(\"hidden\");\n\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-select-container\");\n\n if (model.get(\"label\")) {\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-select-label\");\n topLabel.innerHTML = model.get(\"label\");\n container.appendChild(topLabel);\n }\n\n const control = document.createElement(\"div\");\n control.classList.add(\"mljar-select-control\");\n\n const input = document.createElement(\"input\");\n input.type = \"text\";\n input.classList.add(\"mljar-select-widget-input\");\n input.autocomplete = \"off\";\n input.spellcheck = false;\n\n const caret = document.createElement(\"div\");\n caret.classList.add(\"mljar-select-caret\");\n\n control.appendChild(input);\n control.appendChild(caret);\n\n const dropdown = document.createElement(\"div\");\n dropdown.classList.add(\"mljar-select-dropdown\");\n\n const list = document.createElement(\"div\");\n list.classList.add(\"mljar-select-list\");\n\n const emptyState = document.createElement(\"div\");\n emptyState.classList.add(\"mljar-select-empty\");\n emptyState.textContent = \"No matches\";\n\n dropdown.appendChild(list);\n dropdown.appendChild(emptyState);\n\n container.appendChild(control);\n container.appendChild(dropdown);\n el.appendChild(container);\n\n let isOpen = false;\n let filteredChoices = [];\n let lastCommittedValue = \"\";\n let isEditing = false;\n\n const setOpen = next => {\n if (isDisabled()) {\n isOpen = false;\n } else {\n isOpen = !!next;\n }\n container.classList.toggle(\"is-open\", isOpen);\n dropdown.style.display = isOpen ? \"block\" : \"none\";\n };\n\n const updateDisabledState = () => {\n const disabled = isDisabled();\n input.disabled = disabled;\n control.classList.toggle(\"is-disabled\", disabled);\n };\n\n const updateHiddenState = () => {\n container.style.display = isHidden() ? \"none\" : \"\";\n };\n\n const syncInputWithValue = () => {\n const value = model.get(\"value\") || \"\";\n lastCommittedValue = value;\n if (!isEditing) {\n input.value = value;\n }\n };\n\n const filterChoices = query => {\n const normalizedQuery = normalize(query);\n const allChoices = getChoices();\n if (!normalizedQuery) {\n return allChoices;\n }\n return allChoices.filter(choice =>\n normalize(choice).includes(normalizedQuery)\n );\n };\n\n const renderList = () => {\n list.innerHTML = \"\";\n filteredChoices.forEach(choice => {\n const option = document.createElement(\"button\");\n option.type = \"button\";\n option.classList.add(\"mljar-select-option\");\n if (choice === model.get(\"value\")) {\n option.classList.add(\"is-selected\");\n }\n option.textContent = choice;\n option.addEventListener(\"mousedown\", event => {\n event.preventDefault();\n event.stopPropagation();\n model.set(\"value\", choice);\n model.save_changes();\n isEditing = false;\n syncInputWithValue();\n renderList();\n setOpen(false);\n });\n list.appendChild(option);\n });\n\n const hasMatches = filteredChoices.length > 0;\n list.style.display = hasMatches ? \"block\" : \"none\";\n emptyState.style.display = hasMatches ? \"none\" : \"block\";\n };\n\n const refreshList = () => {\n filteredChoices = filterChoices(input.value);\n renderList();\n };\n\n const openWithCurrentQuery = () => {\n isEditing = true;\n input.value = \"\";\n refreshList();\n setOpen(true);\n };\n\n control.addEventListener(\"click\", event => {\n event.stopPropagation();\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n input.focus();\n });\n\n input.addEventListener(\"input\", () => {\n if (isDisabled()) {\n return;\n }\n refreshList();\n setOpen(true);\n });\n\n input.addEventListener(\"focus\", () => {\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n input.value = lastCommittedValue;\n });\n\n const handleDocumentClick = event => {\n if (!container.contains(event.target)) {\n isEditing = false;\n setOpen(false);\n input.value = lastCommittedValue;\n }\n };\n\n document.addEventListener(\"click\", handleDocumentClick);\n\n model.on(\"change:value\", () => {\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:choices\", () => {\n const choices = getChoices();\n if (!choices.includes(model.get(\"value\")) && choices.length > 0) {\n model.set(\"value\", choices[0]);\n model.save_changes();\n return;\n }\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:disabled\", () => {\n updateDisabledState();\n if (isDisabled()) {\n isEditing = false;\n setOpen(false);\n }\n });\n\n model.on(\"change:hidden\", () => {\n updateHiddenState();\n });\n\n updateDisabledState();\n updateHiddenState();\n syncInputWithValue();\n refreshList();\n setOpen(false);\n\n return () => {\n document.removeEventListener(\"click\", handleDocumentClick);\n };\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "choices": [ - "175", - "225", - "275" - ], - "disabled": false, - "hidden": false, - "label": "Blended rate ($/h)", - "layout": "IPY_MODEL_65e5f9944d224c329037ac9c608080e7", - "layout_path": null, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "225" - } - }, - "ac02fa42bd4f486791baff281b65c380": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "ba177efc36ad40ad9b4b68b67f31818a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "c3066f4048b84495a1956bd5af19302f": { + "3414451f3bea4ecd86b616edc1bcf92f": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -10779,7 +10127,7 @@ "disabled": false, "hidden": false, "label": "Impl hours (V2 range)", - "layout": "IPY_MODEL_d8bd31bfb7ad486da6f2a61a52d977b2", + "layout": "IPY_MODEL_88aaa7c9e2204aa18a6be394fffe5606", "layout_path": null, "position": "sidebar", "render_slot_id": null, @@ -10790,7 +10138,7 @@ "value": "mid" } }, - "c346f16e28a144e0a389f6cbffdba564": { + "37a36aac015e434390aa69448ae25871": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -10843,7 +10191,194 @@ "width": null } }, - "c4d6af10d9554e709089a8fb228f0f1d": { + "380860d8b37c433d9e7758763f6bb94c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "405a08c2329849a9858cb8f08e9ed881": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4470b352a7e348919049702c575225c8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HTMLView", + "cell_id": "", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_405a08c2329849a9858cb8f08e9ed881", + "layout_path": null, + "placeholder": "​", + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "style": "IPY_MODEL_d590bfa08c5d4fdb853f875332c2d1c1", + "tabbable": null, + "tooltip": null, + "value": "" + } + }, + "463af11b0ee9471389b8300965d6cf69": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "50b0fca7bacc457f927fe77456336164": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -10863,7 +10398,7 @@ "disabled": false, "hidden": false, "label": "ASIA β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_384c2bacd884439d9885d07729c8f480", + "layout": "IPY_MODEL_69a14a51c82640d2a59420ee51215637", "layout_path": null, "max": 8000000.0, "min": 0.0, @@ -10877,7 +10412,7 @@ "value": 2069588.0 } }, - "c87c3137444e4dd69a6f46b74170270d": { + "555759d10b104fbf9ac24b8e9963baa8": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -10896,162 +10431,55 @@ "cell_id": "", "disabled": false, "hidden": false, - "label": "Genesys ramp β€” licence-free months", - "layout": "IPY_MODEL_368cc08eb20b428b8f2fb62dcb989e46", + "label": "AI Translate eligibility 🟑", + "layout": "IPY_MODEL_f90949338fe246019f73c66d10e21727", "layout_path": null, - "max": 24.0, - "min": 0.0, - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "step": 1.0, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 12.0 - } - }, - "cbeec3c96a7f4ca88ec32660ebe6dfd2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "cffb228855c24bd39947ad7a0dfa6396": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d3d9c76f75b34f688de66cca01913f38": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "Email auto-respond rate", - "layout": "IPY_MODEL_0c28dc240962449d95c3c0961fcae03c", - "layout_path": null, - "max": 0.6, + "max": 1.0, "min": 0.0, "position": "sidebar", "render_slot_id": null, "source_cell_id": null, - "step": 0.005, + "step": 0.01, "tabbable": null, "tooltip": null, "url_key": "", - "value": 0.255 + "value": 0.01 } }, - "d8bd31bfb7ad486da6f2a61a52d977b2": { + "5c32c561ba9c462286aa30e7efe3dd0c": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.date.DateInputWidget", + "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "ANZ β€” contract termination", + "layout": "IPY_MODEL_0de1ab4bb6ce41bc84cb0510923592b7", + "layout_path": null, + "max": "", + "min": "", + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "2027-12-31" + } + }, + "5de6c388add14a5ea90c4a2972efb4d5": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -11104,7 +10532,41 @@ "width": null } }, - "d94f1210f1cd418c9efd2a5229ed8f02": { + "6347323104f645beac02bd1592fb60d4": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.checkbox.CheckboxWidget", + "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "appearance": "toggle", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "Copilot includes ASIA sites", + "last_changed_at": "", + "layout": "IPY_MODEL_2f75de1a11684c259e244f088906f63f", + "layout_path": null, + "n_toggles": 0, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": false + } + }, + "69a14a51c82640d2a59420ee51215637": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -11157,60 +10619,75 @@ "width": null } }, - "da0acf9493a74a58a1b4d1b67806902f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", + "6b4df6310b224d668a46ff3767622396": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", + "_anywidget_id": "mercury.checkbox.CheckboxWidget", + "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "appearance": "toggle", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "NA Email implements early (Jan 2027)", + "last_changed_at": "", + "layout": "IPY_MODEL_18bd7e25aac44935859433462a96e263", + "layout_path": null, + "n_toggles": 0, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": true } }, - "dcabb5e69fb94e829297689c7a6ae40a": { + "6c099f4dfe1c419984d542e66c67150f": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.checkbox.CheckboxWidget", + "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "appearance": "toggle", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "Include KB readiness (500–1,500 h)", + "last_changed_at": "", + "layout": "IPY_MODEL_11bd0914b83a4f2d97be8bb927d287c1", + "layout_path": null, + "n_toggles": 0, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": true + } + }, + "6e62963d5c0c47a5b8e7d41daedbe004": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -11230,7 +10707,7 @@ "disabled": false, "hidden": false, "label": "NA β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_79098a2b88e441bca21c67fc17de3376", + "layout": "IPY_MODEL_0805812abf564bbf9816351103b02bea", "layout_path": null, "max": 8000000.0, "min": 0.0, @@ -11244,40 +10721,7 @@ "value": 3348969.0 } }, - "ddf1294225004414bf666eb493358f85": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.date.DateInputWidget", - "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "ASIA β€” contract termination", - "layout": "IPY_MODEL_da0acf9493a74a58a1b4d1b67806902f", - "layout_path": null, - "max": "", - "min": "", - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "2027-12-31" - } - }, - "df38600cdf104a408fad11492a02da34": { + "7baadd5d4fe24328901f7aebf36ad51b": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -11330,7 +10774,352 @@ "width": null } }, - "f5efc754df6641c9a87d314245c1ce85": { + "7dc643d5b4e145b7b1eba08ff5ac668c": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.date.DateInputWidget", + "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "EMEA β€” contract termination", + "layout": "IPY_MODEL_ea2c2a2e8127410a90b15116308d2976", + "layout_path": null, + "max": "", + "min": "", + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "2027-12-31" + } + }, + "88aaa7c9e2204aa18a6be394fffe5606": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8a4664e2944b48dd8c16ce8ea30481f4": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "EMEA β€” current platform cost ($/yr)", + "layout": "IPY_MODEL_ee4f2d492a8a427986098361f18ff667", + "layout_path": null, + "max": 8000000.0, + "min": 0.0, + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "step": 10000.0, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 1204124.0 + } + }, + "91e44777e10b4dc982d4f35fb80fb2a1": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "Genesys ramp β€” licence-free months", + "layout": "IPY_MODEL_37a36aac015e434390aa69448ae25871", + "layout_path": null, + "max": 24.0, + "min": 0.0, + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "step": 1.0, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 6.0 + } + }, + "9c731e39482e40308709c89e44302200": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.select.SelectWidget", + "_css": "\n .mljar-select-container {\n display: flex;\n flex-direction: column;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n }\n\n .mljar-select-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-select-control {\n position: relative;\n display: flex;\n align-items: center;\n cursor: default;\n }\n\n .mljar-select-widget-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 36px 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n line-height: 1.4;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n\n appearance: none !important;\n background-color: #ffffff !important;\n color: #0f172a !important;\n cursor: default;\n }\n\n .mljar-select-widget-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n cursor: text;\n }\n\n .mljar-select-caret {\n position: absolute;\n right: 12px;\n top: 50%;\n width: 8px;\n height: 8px;\n border-right: 1.5px solid #0f172a;\n border-bottom: 1.5px solid #0f172a;\n transform: translateY(-65%) rotate(45deg);\n pointer-events: none;\n opacity: 0.5;\n transition: transform 0.18s ease, opacity 0.18s ease;\n }\n\n .mljar-select-container.is-open .mljar-select-caret {\n opacity: 1;\n transform: translateY(-35%) rotate(225deg);\n }\n\n .mljar-select-dropdown {\n display: none;\n margin-top: 6px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);\n overflow: hidden;\n }\n\n .mljar-select-list {\n max-height: 260px;\n overflow-y: auto;\n }\n\n .mljar-select-option {\n display: block;\n width: 100%;\n padding: 9px 10px;\n border: 0;\n background: transparent;\n color: #0f172a;\n text-align: left;\n cursor: pointer;\n font: inherit;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-select-option:hover {\n background: #f3f3f4;\n }\n\n .mljar-select-option:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-option.is-selected {\n background: #e6f2ff;\n color: #007bff;\n font-weight: 600;\n }\n\n .mljar-select-option.is-selected:hover,\n .mljar-select-option.is-selected:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-empty {\n display: none;\n padding: 10px;\n color: #616673;\n font-size: 0.95em;\n }\n\n .mljar-select-widget-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-select-control.is-disabled .mljar-select-caret {\n opacity: 0.45;\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const normalize = value => String(value ?? \"\").toLowerCase().trim();\n const getChoices = () =>\n Array.isArray(model.get(\"choices\")) ? [...model.get(\"choices\")] : [];\n const isDisabled = () => !!model.get(\"disabled\");\n const isHidden = () => !!model.get(\"hidden\");\n\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-select-container\");\n\n if (model.get(\"label\")) {\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-select-label\");\n topLabel.innerHTML = model.get(\"label\");\n container.appendChild(topLabel);\n }\n\n const control = document.createElement(\"div\");\n control.classList.add(\"mljar-select-control\");\n\n const input = document.createElement(\"input\");\n input.type = \"text\";\n input.classList.add(\"mljar-select-widget-input\");\n input.autocomplete = \"off\";\n input.spellcheck = false;\n\n const caret = document.createElement(\"div\");\n caret.classList.add(\"mljar-select-caret\");\n\n control.appendChild(input);\n control.appendChild(caret);\n\n const dropdown = document.createElement(\"div\");\n dropdown.classList.add(\"mljar-select-dropdown\");\n\n const list = document.createElement(\"div\");\n list.classList.add(\"mljar-select-list\");\n\n const emptyState = document.createElement(\"div\");\n emptyState.classList.add(\"mljar-select-empty\");\n emptyState.textContent = \"No matches\";\n\n dropdown.appendChild(list);\n dropdown.appendChild(emptyState);\n\n container.appendChild(control);\n container.appendChild(dropdown);\n el.appendChild(container);\n\n let isOpen = false;\n let filteredChoices = [];\n let lastCommittedValue = \"\";\n let isEditing = false;\n\n const setOpen = next => {\n if (isDisabled()) {\n isOpen = false;\n } else {\n isOpen = !!next;\n }\n container.classList.toggle(\"is-open\", isOpen);\n dropdown.style.display = isOpen ? \"block\" : \"none\";\n };\n\n const updateDisabledState = () => {\n const disabled = isDisabled();\n input.disabled = disabled;\n control.classList.toggle(\"is-disabled\", disabled);\n };\n\n const updateHiddenState = () => {\n container.style.display = isHidden() ? \"none\" : \"\";\n };\n\n const syncInputWithValue = () => {\n const value = model.get(\"value\") || \"\";\n lastCommittedValue = value;\n if (!isEditing) {\n input.value = value;\n }\n };\n\n const filterChoices = query => {\n const normalizedQuery = normalize(query);\n const allChoices = getChoices();\n if (!normalizedQuery) {\n return allChoices;\n }\n return allChoices.filter(choice =>\n normalize(choice).includes(normalizedQuery)\n );\n };\n\n const renderList = () => {\n list.innerHTML = \"\";\n filteredChoices.forEach(choice => {\n const option = document.createElement(\"button\");\n option.type = \"button\";\n option.classList.add(\"mljar-select-option\");\n if (choice === model.get(\"value\")) {\n option.classList.add(\"is-selected\");\n }\n option.textContent = choice;\n option.addEventListener(\"mousedown\", event => {\n event.preventDefault();\n event.stopPropagation();\n model.set(\"value\", choice);\n model.save_changes();\n isEditing = false;\n syncInputWithValue();\n renderList();\n setOpen(false);\n });\n list.appendChild(option);\n });\n\n const hasMatches = filteredChoices.length > 0;\n list.style.display = hasMatches ? \"block\" : \"none\";\n emptyState.style.display = hasMatches ? \"none\" : \"block\";\n };\n\n const refreshList = () => {\n filteredChoices = filterChoices(input.value);\n renderList();\n };\n\n const openWithCurrentQuery = () => {\n isEditing = true;\n input.value = \"\";\n refreshList();\n setOpen(true);\n };\n\n control.addEventListener(\"click\", event => {\n event.stopPropagation();\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n input.focus();\n });\n\n input.addEventListener(\"input\", () => {\n if (isDisabled()) {\n return;\n }\n refreshList();\n setOpen(true);\n });\n\n input.addEventListener(\"focus\", () => {\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n input.value = lastCommittedValue;\n });\n\n const handleDocumentClick = event => {\n if (!container.contains(event.target)) {\n isEditing = false;\n setOpen(false);\n input.value = lastCommittedValue;\n }\n };\n\n document.addEventListener(\"click\", handleDocumentClick);\n\n model.on(\"change:value\", () => {\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:choices\", () => {\n const choices = getChoices();\n if (!choices.includes(model.get(\"value\")) && choices.length > 0) {\n model.set(\"value\", choices[0]);\n model.save_changes();\n return;\n }\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:disabled\", () => {\n updateDisabledState();\n if (isDisabled()) {\n isEditing = false;\n setOpen(false);\n }\n });\n\n model.on(\"change:hidden\", () => {\n updateHiddenState();\n });\n\n updateDisabledState();\n updateHiddenState();\n syncInputWithValue();\n refreshList();\n setOpen(false);\n\n return () => {\n document.removeEventListener(\"click\", handleDocumentClick);\n };\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "choices": [ + "13.5% (deck)", + "8.0% (CTM treasury)" + ], + "disabled": false, + "hidden": false, + "label": "NPV discount rate", + "layout": "IPY_MODEL_1a6c73c71082451c8a56e12a30d34377", + "layout_path": null, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "13.5% (deck)" + } + }, + "b9727084f82b49089dfcacd62b9d72d5": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.date.DateInputWidget", + "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "NA β€” contract termination", + "layout": "IPY_MODEL_2a71711de67c43aba0ab438e2e9ea50e", + "layout_path": null, + "max": "", + "min": "", + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "2027-12-31" + } + }, + "ba2c47f86417464896faa72a9e2f0b8e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c337c93de81943939d6e1b0e1c392359": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "CCaaS licence run-rate ($/yr) β€” contracted", + "layout": "IPY_MODEL_7baadd5d4fe24328901f7aebf36ad51b", + "layout_path": null, + "max": 10000000.0, + "min": 0.0, + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "step": 100000.0, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 3200000.0 + } + }, + "d57babc80cd04cf3bbb6b5f9749db410": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.select.SelectWidget", + "_css": "\n .mljar-select-container {\n display: flex;\n flex-direction: column;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n }\n\n .mljar-select-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-select-control {\n position: relative;\n display: flex;\n align-items: center;\n cursor: default;\n }\n\n .mljar-select-widget-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 36px 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n line-height: 1.4;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n\n appearance: none !important;\n background-color: #ffffff !important;\n color: #0f172a !important;\n cursor: default;\n }\n\n .mljar-select-widget-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n cursor: text;\n }\n\n .mljar-select-caret {\n position: absolute;\n right: 12px;\n top: 50%;\n width: 8px;\n height: 8px;\n border-right: 1.5px solid #0f172a;\n border-bottom: 1.5px solid #0f172a;\n transform: translateY(-65%) rotate(45deg);\n pointer-events: none;\n opacity: 0.5;\n transition: transform 0.18s ease, opacity 0.18s ease;\n }\n\n .mljar-select-container.is-open .mljar-select-caret {\n opacity: 1;\n transform: translateY(-35%) rotate(225deg);\n }\n\n .mljar-select-dropdown {\n display: none;\n margin-top: 6px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);\n overflow: hidden;\n }\n\n .mljar-select-list {\n max-height: 260px;\n overflow-y: auto;\n }\n\n .mljar-select-option {\n display: block;\n width: 100%;\n padding: 9px 10px;\n border: 0;\n background: transparent;\n color: #0f172a;\n text-align: left;\n cursor: pointer;\n font: inherit;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-select-option:hover {\n background: #f3f3f4;\n }\n\n .mljar-select-option:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-option.is-selected {\n background: #e6f2ff;\n color: #007bff;\n font-weight: 600;\n }\n\n .mljar-select-option.is-selected:hover,\n .mljar-select-option.is-selected:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-select-empty {\n display: none;\n padding: 10px;\n color: #616673;\n font-size: 0.95em;\n }\n\n .mljar-select-widget-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-select-control.is-disabled .mljar-select-caret {\n opacity: 0.45;\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const normalize = value => String(value ?? \"\").toLowerCase().trim();\n const getChoices = () =>\n Array.isArray(model.get(\"choices\")) ? [...model.get(\"choices\")] : [];\n const isDisabled = () => !!model.get(\"disabled\");\n const isHidden = () => !!model.get(\"hidden\");\n\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-select-container\");\n\n if (model.get(\"label\")) {\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-select-label\");\n topLabel.innerHTML = model.get(\"label\");\n container.appendChild(topLabel);\n }\n\n const control = document.createElement(\"div\");\n control.classList.add(\"mljar-select-control\");\n\n const input = document.createElement(\"input\");\n input.type = \"text\";\n input.classList.add(\"mljar-select-widget-input\");\n input.autocomplete = \"off\";\n input.spellcheck = false;\n\n const caret = document.createElement(\"div\");\n caret.classList.add(\"mljar-select-caret\");\n\n control.appendChild(input);\n control.appendChild(caret);\n\n const dropdown = document.createElement(\"div\");\n dropdown.classList.add(\"mljar-select-dropdown\");\n\n const list = document.createElement(\"div\");\n list.classList.add(\"mljar-select-list\");\n\n const emptyState = document.createElement(\"div\");\n emptyState.classList.add(\"mljar-select-empty\");\n emptyState.textContent = \"No matches\";\n\n dropdown.appendChild(list);\n dropdown.appendChild(emptyState);\n\n container.appendChild(control);\n container.appendChild(dropdown);\n el.appendChild(container);\n\n let isOpen = false;\n let filteredChoices = [];\n let lastCommittedValue = \"\";\n let isEditing = false;\n\n const setOpen = next => {\n if (isDisabled()) {\n isOpen = false;\n } else {\n isOpen = !!next;\n }\n container.classList.toggle(\"is-open\", isOpen);\n dropdown.style.display = isOpen ? \"block\" : \"none\";\n };\n\n const updateDisabledState = () => {\n const disabled = isDisabled();\n input.disabled = disabled;\n control.classList.toggle(\"is-disabled\", disabled);\n };\n\n const updateHiddenState = () => {\n container.style.display = isHidden() ? \"none\" : \"\";\n };\n\n const syncInputWithValue = () => {\n const value = model.get(\"value\") || \"\";\n lastCommittedValue = value;\n if (!isEditing) {\n input.value = value;\n }\n };\n\n const filterChoices = query => {\n const normalizedQuery = normalize(query);\n const allChoices = getChoices();\n if (!normalizedQuery) {\n return allChoices;\n }\n return allChoices.filter(choice =>\n normalize(choice).includes(normalizedQuery)\n );\n };\n\n const renderList = () => {\n list.innerHTML = \"\";\n filteredChoices.forEach(choice => {\n const option = document.createElement(\"button\");\n option.type = \"button\";\n option.classList.add(\"mljar-select-option\");\n if (choice === model.get(\"value\")) {\n option.classList.add(\"is-selected\");\n }\n option.textContent = choice;\n option.addEventListener(\"mousedown\", event => {\n event.preventDefault();\n event.stopPropagation();\n model.set(\"value\", choice);\n model.save_changes();\n isEditing = false;\n syncInputWithValue();\n renderList();\n setOpen(false);\n });\n list.appendChild(option);\n });\n\n const hasMatches = filteredChoices.length > 0;\n list.style.display = hasMatches ? \"block\" : \"none\";\n emptyState.style.display = hasMatches ? \"none\" : \"block\";\n };\n\n const refreshList = () => {\n filteredChoices = filterChoices(input.value);\n renderList();\n };\n\n const openWithCurrentQuery = () => {\n isEditing = true;\n input.value = \"\";\n refreshList();\n setOpen(true);\n };\n\n control.addEventListener(\"click\", event => {\n event.stopPropagation();\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n input.focus();\n });\n\n input.addEventListener(\"input\", () => {\n if (isDisabled()) {\n return;\n }\n refreshList();\n setOpen(true);\n });\n\n input.addEventListener(\"focus\", () => {\n if (isDisabled()) {\n return;\n }\n openWithCurrentQuery();\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n input.value = lastCommittedValue;\n });\n\n const handleDocumentClick = event => {\n if (!container.contains(event.target)) {\n isEditing = false;\n setOpen(false);\n input.value = lastCommittedValue;\n }\n };\n\n document.addEventListener(\"click\", handleDocumentClick);\n\n model.on(\"change:value\", () => {\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:choices\", () => {\n const choices = getChoices();\n if (!choices.includes(model.get(\"value\")) && choices.length > 0) {\n model.set(\"value\", choices[0]);\n model.save_changes();\n return;\n }\n syncInputWithValue();\n refreshList();\n });\n\n model.on(\"change:disabled\", () => {\n updateDisabledState();\n if (isDisabled()) {\n isEditing = false;\n setOpen(false);\n }\n });\n\n model.on(\"change:hidden\", () => {\n updateHiddenState();\n });\n\n updateDisabledState();\n updateHiddenState();\n syncInputWithValue();\n refreshList();\n setOpen(false);\n\n return () => {\n document.removeEventListener(\"click\", handleDocumentClick);\n };\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "choices": [ + "175", + "225", + "275" + ], + "disabled": false, + "hidden": false, + "label": "Blended rate ($/h)", + "layout": "IPY_MODEL_463af11b0ee9471389b8300965d6cf69", + "layout_path": null, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "225" + } + }, + "d590bfa08c5d4fdb853f875332c2d1c1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "2.0.0", "model_name": "HTMLStyleModel", @@ -11347,6 +11136,406 @@ "font_size": null, "text_color": null } + }, + "d9877763b4a94831b94c3d083f818d58": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "Auto-respond tokens per message 🟑", + "layout": "IPY_MODEL_ba2c47f86417464896faa72a9e2f0b8e", + "layout_path": null, + "max": 0.5, + "min": 0.0, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "step": 0.005, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 0.05 + } + }, + "e0626f2d55c14d7b802fb701e2074005": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.date.DateInputWidget", + "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "ASIA β€” contract termination", + "layout": "IPY_MODEL_380860d8b37c433d9e7758763f6bb94c", + "layout_path": null, + "max": "", + "min": "", + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "2027-12-31" + } + }, + "e0699dfd28c84c71a9e7f8a1ae48add5": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "Email auto-respond rate", + "layout": "IPY_MODEL_ecee11d4c3594ee9845e059ebf23e69a", + "layout_path": null, + "max": 0.6, + "min": 0.0, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "step": 0.005, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 0.255 + } + }, + "e909e59b90a74e71b282acd76feecdae": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ea2c2a2e8127410a90b15116308d2976": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ecee11d4c3594ee9845e059ebf23e69a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ee4f2d492a8a427986098361f18ff667": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f90949338fe246019f73c66d10e21727": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "feb40a4b31fd415aa44db460a40e1037": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "ANZ β€” current platform cost ($/yr)", + "layout": "IPY_MODEL_5de6c388add14a5ea90c4a2972efb4d5", + "layout_path": null, + "max": 8000000.0, + "min": 0.0, + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "step": 10000.0, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 677320.0 + } } }, "version_major": 2, diff --git a/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_migration_wfm.ipynb b/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_migration_wfm.ipynb index 067e786..e38834d 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_migration_wfm.ipynb +++ b/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_migration_wfm.ipynb @@ -10,16 +10,19 @@ "**Thesis:** strip every AI capability out of the business case and price the platform move\n", "alone: migrate all four regions to Genesys Cloud CX, move NA off its existing WFM-like tool\n", "onto Genesys WFM, and implement WFM for APAC (**ANZ + ASIA**). Migration and WFM are\n", - "**included in the base implementation price** β€” the verbatim $2.4M professional services +\n", - "$167K training. The only benefits kept are the deck's verbatim **WFM** lines for the regions\n", + "**included in the base implementation price** β€” contracted as the signed NTT SOW: **$2.03M\n", + "professional services** billed over four milestones (2026–27), plus the verbatim $167K\n", + "training and **$411K/yr managed services** from MCX go-live (30 Sep 2026). The only\n", + "benefits kept are the deck's verbatim **WFM** lines for the regions\n", "in WFM scope; every other benefit (Agent Copilot, Email, STA, Predictive Routing, Supervisor\n", "Copilot) is AI-driven and out.\n", "\n", "| Layer | Source | Treatment |\n", "|---|---|---|\n", "| WFM benefits | *Appendix 4 β€” CCaaS Platform Benefit Calculations (Consolidated).pptx*, slides 12–15 | **Verbatim**, scoped to NA/ANZ/ASIA, phased on Genesys's own deployment schedule |\n", - "| CCaaS licences | Deck TCO (slides 5–6) + signed contract | Deck pitched $4.3M/yr; **contracted $3.2M/yr** drives the case Β· 12-month ramp credit |\n", - "| Base PS + training | Same deck | Verbatim $2.4M + $167K, year 1 β€” **includes migration + WFM** |\n", + "| CCaaS licences | Deck TCO (slides 5–6) + signed contract | Deck pitched $4.3M/yr; **contracted $3.2M/yr** drives the case Β· 6-month ramp credit (🟒 order form) |\n", + "| NTT PS + training | Signed SOW + deck training line | **$2.03M over four billing milestones (2026–27)** + $167K training β€” **includes migration + WFM** (deck pitched $2.4M, year 1) |\n", + "| Managed services | Signed SOW | **$411K/yr from MCX go-live (30 Sep 2026)** β€” ongoing run-rate cost the deck's TCO never carried |\n", "| Existing platform run-off | Term contracts to 31 Dec 2027, per-region | Double-billing until termination |\n", "| AI tokens / AI implementation | β€” | **Removed** β€” see `ctm_business_case_corrected.ipynb` |\n", "\n", @@ -36,10 +39,10 @@ "id": "38d0b7d9", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.301747Z", - "iopub.status.busy": "2026-07-08T12:20:32.301520Z", - "iopub.status.idle": "2026-07-08T12:20:32.712911Z", - "shell.execute_reply": "2026-07-08T12:20:32.712211Z" + "iopub.execute_input": "2026-07-08T15:15:47.299824Z", + "iopub.status.busy": "2026-07-08T15:15:47.299589Z", + "iopub.status.idle": "2026-07-08T15:15:47.712827Z", + "shell.execute_reply": "2026-07-08T15:15:47.712043Z" } }, "outputs": [ @@ -75,8 +78,9 @@ " DEFAULT_RAMP_MONTHS,\n", " build_rollouts, case_flows, case_kpis, crossfoot_tolerance,\n", " current_costs_by_year, current_state_inputs, licence_costs_by_year,\n", - " money, html_money, month_label, ps_costs_by_year,\n", - " region_agents, region_site_names, tco,\n", + " MANAGED_SERVICES_ANNUAL, MCX_GO_LIVE, PS_CONTRACTED_TOTAL, PS_MILESTONES,\n", + " managed_services_by_year, money, html_money, month_label, ps_costs_by_year,\n", + " ps_milestones_dataframe, region_agents, region_site_names, tco,\n", ")\n", "from tokencalc.migration_wfm import (\n", " DEFAULT_WFM_REGIONS, runrate_breakeven_label, runrate_saving_annual,\n", @@ -97,7 +101,8 @@ "REGION_COLOR = {\"NA\": \"#2a78d6\", \"ANZ\": \"#1baf7a\", \"EMEA\": \"#4a3aa7\", \"ASIA\": \"#eda100\"}\n", "COST_COLOR = {\n", " \"CCaaS platform licences (contracted, ramp-adjusted)\": \"#2a78d6\",\n", - " \"Base PS + training (incl. migration + WFM)\": \"#1baf7a\",\n", + " \"NTT PS + training (SOW billing milestones)\": \"#1baf7a\",\n", + " \"NTT managed services (from MCX go-live)\": \"#0b6b4a\",\n", " \"Existing platform (term-contract run-off)\": \"#eda100\",\n", "}\n", "DIVERGING = [[0.0, \"#e34948\"], [0.5, \"#f0efe9\"], [1.0, \"#2a78d6\"]]\n", @@ -149,22 +154,22 @@ "id": "104afa86", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.715665Z", - "iopub.status.busy": "2026-07-08T12:20:32.715313Z", - "iopub.status.idle": "2026-07-08T12:20:32.728544Z", - "shell.execute_reply": "2026-07-08T12:20:32.727683Z" + "iopub.execute_input": "2026-07-08T15:15:47.715016Z", + "iopub.status.busy": "2026-07-08T15:15:47.714770Z", + "iopub.status.idle": "2026-07-08T15:15:47.725088Z", + "shell.execute_reply": "2026-07-08T15:15:47.724690Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "78688c06ca0b4ee19c1a0b81f18d628a", + "model_id": "cf504293e15c4cd99f1a492d73d8e263", "position": "sidebar", "widget": "MarkdownWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "78688c06ca0b4ee19c1a0b81f18d628a", + "model_id": "cf504293e15c4cd99f1a492d73d8e263", "version_major": 2, "version_minor": 0 }, @@ -228,8 +233,8 @@ " off it is part of this scenario.\n", "2. **Contract termination dates** β€” the current platforms are **term contracts**; CTM pays until\n", " termination (default **31 Dec 2027**) regardless of when Genesys goes live β†’ double-billing.\n", - "3. **Genesys ramp programme** β€” `RAMP_MONTHS = 12`: licences are free for the first 12 months,\n", - " so the licence run-rate bills from month 13." + "3. **Genesys ramp programme** β€” `RAMP_MONTHS = 6` (🟒 order form): licences are free for\n", + " the first 6 months, so the licence run-rate bills from July 2026." ] }, { @@ -238,27 +243,27 @@ "id": "f8863db7", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.730401Z", - "iopub.status.busy": "2026-07-08T12:20:32.730193Z", - "iopub.status.idle": "2026-07-08T12:20:32.768973Z", - "shell.execute_reply": "2026-07-08T12:20:32.768081Z" + "iopub.execute_input": "2026-07-08T15:15:47.727202Z", + "iopub.status.busy": "2026-07-08T15:15:47.727057Z", + "iopub.status.idle": "2026-07-08T15:15:47.757766Z", + "shell.execute_reply": "2026-07-08T15:15:47.757050Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "3446e8dd427b4abe8d361ec75bb0a9fa", + "model_id": "ddacc3befdc54c278abccd4a5b6b98b5", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "3446e8dd427b4abe8d361ec75bb0a9fa", + "model_id": "ddacc3befdc54c278abccd4a5b6b98b5", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -267,17 +272,17 @@ { "data": { "application/mercury+json": { - "model_id": "27e2171a593043338205c5b352f20f3d", + "model_id": "6d231d033d7b4f41b852046f069ebc3f", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "27e2171a593043338205c5b352f20f3d", + "model_id": "6d231d033d7b4f41b852046f069ebc3f", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -286,17 +291,17 @@ { "data": { "application/mercury+json": { - "model_id": "60a9596904a34374bc605974ac3a3235", + "model_id": "b2ec5338e0ba4055b77a57edd08b464c", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "60a9596904a34374bc605974ac3a3235", + "model_id": "b2ec5338e0ba4055b77a57edd08b464c", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -305,17 +310,17 @@ { "data": { "application/mercury+json": { - "model_id": "1c591bdaa1e44a55be8d24db8956b3d1", + "model_id": "28eb2b2d2a2a41adaad830ac204d7b39", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "1c591bdaa1e44a55be8d24db8956b3d1", + "model_id": "28eb2b2d2a2a41adaad830ac204d7b39", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -324,17 +329,17 @@ { "data": { "application/mercury+json": { - "model_id": "8b8b8d01f0ca46f39c16bd16b93a1475", + "model_id": "4d3b2b0c854b4bcab393ef4f89aee1b4", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "8b8b8d01f0ca46f39c16bd16b93a1475", + "model_id": "4d3b2b0c854b4bcab393ef4f89aee1b4", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -343,17 +348,17 @@ { "data": { "application/mercury+json": { - "model_id": "bae439b7a2d04ab29390996726534753", + "model_id": "9a1300f4e5374fa6bb1c9717866f8ce1", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "bae439b7a2d04ab29390996726534753", + "model_id": "9a1300f4e5374fa6bb1c9717866f8ce1", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -362,17 +367,17 @@ { "data": { "application/mercury+json": { - "model_id": "2f3ac4164f5a4454ba631d0df39e5d87", + "model_id": "8e89c81717ff408d9e5cb1a949ab337c", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "2f3ac4164f5a4454ba631d0df39e5d87", + "model_id": "8e89c81717ff408d9e5cb1a949ab337c", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -381,17 +386,17 @@ { "data": { "application/mercury+json": { - "model_id": "f8196ba7d89c487eb23ad614f78881fe", + "model_id": "cdf8fe1626a54e7eb048e9e8d27cb2a4", "position": "inline", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "f8196ba7d89c487eb23ad614f78881fe", + "model_id": "cdf8fe1626a54e7eb048e9e8d27cb2a4", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -400,17 +405,17 @@ { "data": { "application/mercury+json": { - "model_id": "2a43f7bc543d446ead3eeaaadbbf3cea", + "model_id": "68b411c315ff4357815d7ff9801f445a", "position": "inline", "widget": "DateInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "2a43f7bc543d446ead3eeaaadbbf3cea", + "model_id": "68b411c315ff4357815d7ff9801f445a", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -455,10 +460,10 @@ "id": "0bf61187", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.771129Z", - "iopub.status.busy": "2026-07-08T12:20:32.770911Z", - "iopub.status.idle": "2026-07-08T12:20:32.786705Z", - "shell.execute_reply": "2026-07-08T12:20:32.786022Z" + "iopub.execute_input": "2026-07-08T15:15:47.759694Z", + "iopub.status.busy": "2026-07-08T15:15:47.759486Z", + "iopub.status.idle": "2026-07-08T15:15:47.771664Z", + "shell.execute_reply": "2026-07-08T15:15:47.771155Z" } }, "outputs": [ @@ -598,8 +603,12 @@ "- **APAC (ANZ + ASIA) β€” WFM implementation**: net-new WFM capability.\n", "- **EMEA β€” no WFM** in this scenario; the deck's $687K 3-yr EMEA WFM line is dropped\n", " (upside option β€” toggle it in the sidebar to see the effect).\n", - "- **Base implementation price covers all of the above**: the verbatim $2.4M PS + $167K\n", - " training in year 1. No extra cost lines for migration or WFM.\n", + "- **Base implementation price covers all of the above** β€” contracted as the signed NTT SOW:\n", + " **$2.03M professional services** billed over four milestones (2026–27; section 4 shows the\n", + " schedule) plus the verbatim $167K training. No extra cost lines for migration or WFM.\n", + "- 🟒 **Managed services β€” contracted**: **$410,918/yr** commences billing at MCX go-live\n", + " (30 Sep 2026) β€” an ongoing run-rate cost the deck's TCO never carried; it stays in the\n", + " post-window steady-state run-rate.\n", "- 🟒 **Licence run-rate β€” contracted**: the signed rate is **$3.2M/yr**, below the deck's\n", " pitched $4.3M/yr. The case runs on the contracted rate; the KPI table in section 5 keeps\n", " a deck-rate column beside it so the walk from the Genesys report stays visible.\n", @@ -613,27 +622,27 @@ "id": "8bafeb91", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.788467Z", - "iopub.status.busy": "2026-07-08T12:20:32.788266Z", - "iopub.status.idle": "2026-07-08T12:20:32.804322Z", - "shell.execute_reply": "2026-07-08T12:20:32.803665Z" + "iopub.execute_input": "2026-07-08T15:15:47.773242Z", + "iopub.status.busy": "2026-07-08T15:15:47.773111Z", + "iopub.status.idle": "2026-07-08T15:15:47.784646Z", + "shell.execute_reply": "2026-07-08T15:15:47.784118Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "6bf6331dbeea4a2e932d9ba01fd28557", + "model_id": "cc5b28489de346d3b59e3ace05fb2ebb", "position": "sidebar", "widget": "NumberInputWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "6bf6331dbeea4a2e932d9ba01fd28557", + "model_id": "cc5b28489de346d3b59e3ace05fb2ebb", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -642,17 +651,17 @@ { "data": { "application/mercury+json": { - "model_id": "f7b01a3662ce4ee4a8396fa5df4f048f", + "model_id": "2be8dde4d1644691add8dae88a36ac81", "position": "sidebar", "widget": "CheckboxWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "f7b01a3662ce4ee4a8396fa5df4f048f", + "model_id": "2be8dde4d1644691add8dae88a36ac81", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -661,17 +670,17 @@ { "data": { "application/mercury+json": { - "model_id": "caae1a34df0945249b1a3d39320540b1", + "model_id": "cddbd4fd3deb4ed1a29dad5cf082939b", "position": "sidebar", "widget": "CheckboxWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "caae1a34df0945249b1a3d39320540b1", + "model_id": "cddbd4fd3deb4ed1a29dad5cf082939b", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -680,17 +689,17 @@ { "data": { "application/mercury+json": { - "model_id": "2bf25ab141c646aeae3b8e9b80b6762d", + "model_id": "1d4ddc81f2c249cf9be44e32e8213b85", "position": "sidebar", "widget": "CheckboxWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "2bf25ab141c646aeae3b8e9b80b6762d", + "model_id": "1d4ddc81f2c249cf9be44e32e8213b85", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -699,17 +708,17 @@ { "data": { "application/mercury+json": { - "model_id": "9f85cf3f71b842ba83ed70bd17ea748f", + "model_id": "5c47680e253c4f45bbbbfcc76612499b", "position": "sidebar", "widget": "CheckboxWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "9f85cf3f71b842ba83ed70bd17ea748f", + "model_id": "5c47680e253c4f45bbbbfcc76612499b", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -738,10 +747,10 @@ "id": "6d971716", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.806129Z", - "iopub.status.busy": "2026-07-08T12:20:32.805883Z", - "iopub.status.idle": "2026-07-08T12:20:32.821726Z", - "shell.execute_reply": "2026-07-08T12:20:32.820984Z" + "iopub.execute_input": "2026-07-08T15:15:47.786019Z", + "iopub.status.busy": "2026-07-08T15:15:47.785869Z", + "iopub.status.idle": "2026-07-08T15:15:47.802381Z", + "shell.execute_reply": "2026-07-08T15:15:47.801425Z" } }, "outputs": [ @@ -749,9 +758,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "WFM scope: NA, ANZ, ASIA Β· licence run-rate $3.2M/yr contracted (deck pitched $4.3M/yr) Β· ramp 12 months\n", - "ramp-adjusted licences by year: {2026: '$0K', 2027: '$3.2M', 2028: '$3.2M'}\n", - "base PS + training (incl. migration + WFM): $2.6M, year 1 only\n" + "WFM scope: NA, ANZ, ASIA Β· licence run-rate $3.2M/yr contracted (deck pitched $4.3M/yr) Β· ramp 6 months\n", + "ramp-adjusted licences by year: {2026: '$1.6M', 2027: '$3.2M', 2028: '$3.2M'}\n", + "NTT PS + training (SOW milestones, incl. migration + WFM): $2.2M across 2026-27 Β· managed services $411K/yr from MCX go-live\n" ] }, { @@ -840,7 +849,8 @@ "WFM_REGIONS = [r for r in REGIONS if bool(_wfm_w[r].value)]\n", "\n", "licence_by_year = licence_costs_by_year(RAMP_MONTHS, LICENCE_ANNUAL)\n", - "ps_by_year = ps_costs_by_year() # verbatim $2.4M PS + $167K training, year 1\n", + "ps_by_year = ps_costs_by_year(contracted=True) # SOW milestones + verbatim training\n", + "managed_by_year = managed_services_by_year() # 🟒 bills from MCX go-live (30 Sep 2026)\n", "\n", "_treat = {\"NA\": \"migrate existing users\", \"ANZ\": \"implement (APAC)\",\n", " \"ASIA\": \"implement (APAC)\", \"EMEA\": \"implement (upside option)\"}\n", @@ -856,7 +866,9 @@ " f\"(deck pitched {money(TCO_VERBATIM['ccaas_annual'])}/yr) Β· ramp {RAMP_MONTHS} months\")\n", "backstage(f\"ramp-adjusted licences by year: \"\n", " f\"{ {y: money(v) for y, v in licence_by_year.items()} }\")\n", - "print(f\"base PS + training (incl. migration + WFM): {money(ps_by_year[2026])}, year 1 only\")\n", + "print(f\"NTT PS + training (SOW milestones, incl. migration + WFM): \"\n", + " f\"{money(sum(ps_by_year.values()))} across 2026-27 Β· managed services \"\n", + " f\"{money(MANAGED_SERVICES_ANNUAL)}/yr from MCX go-live\")\n", "display(wfm_scope_table)" ] }, @@ -885,10 +897,10 @@ "id": "12673034", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.823759Z", - "iopub.status.busy": "2026-07-08T12:20:32.823547Z", - "iopub.status.idle": "2026-07-08T12:20:32.868665Z", - "shell.execute_reply": "2026-07-08T12:20:32.867804Z" + "iopub.execute_input": "2026-07-08T15:15:47.804434Z", + "iopub.status.busy": "2026-07-08T15:15:47.804197Z", + "iopub.status.idle": "2026-07-08T15:15:47.852870Z", + "shell.execute_reply": "2026-07-08T15:15:47.852057Z" } }, "outputs": [ @@ -1002,10 +1014,10 @@ "id": "3cbefa13", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:32.871525Z", - "iopub.status.busy": "2026-07-08T12:20:32.871295Z", - "iopub.status.idle": "2026-07-08T12:20:34.302766Z", - "shell.execute_reply": "2026-07-08T12:20:34.302073Z" + "iopub.execute_input": "2026-07-08T15:15:47.854742Z", + "iopub.status.busy": "2026-07-08T15:15:47.854559Z", + "iopub.status.idle": "2026-07-08T15:15:48.983809Z", + "shell.execute_reply": "2026-07-08T15:15:48.980233Z" } }, "outputs": [ @@ -2006,12 +2018,14 @@ "source": [ "\n", "\n", - "## 4 Β· Cost stack β€” licences, base PS, double-billing\n", + "## 4 Β· Cost stack β€” licences, NTT SOW, double-billing\n", "\n", - "Three lines only. The AI token-consumption and AI implementation lines are gone β€”\n", + "Four lines. The AI token-consumption and AI implementation lines are gone β€”\n", "that is the point of this scenario. What remains is the deck's own cost case plus the\n", - "two contract mechanics it ignored: the **ramp credit** (licences bill from month 13)\n", - "and the **term-contract run-off** (double-billing until 31 Dec 2027)." + "contract facts it ignored: the **ramp credit** (licences bill from month 7 β€” 🟒 6-month\n", + "ramp per the order form), the **term-contract run-off** (double-billing until\n", + "31 Dec 2027), and the signed NTT SOW β€” **PS billed over four milestones** (50/50 across\n", + "2026–27) and **managed services** from MCX go-live.\n" ] }, { @@ -2020,10 +2034,10 @@ "id": "ccde902f", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.305733Z", - "iopub.status.busy": "2026-07-08T12:20:34.305440Z", - "iopub.status.idle": "2026-07-08T12:20:34.317837Z", - "shell.execute_reply": "2026-07-08T12:20:34.317271Z" + "iopub.execute_input": "2026-07-08T15:15:48.986149Z", + "iopub.status.busy": "2026-07-08T15:15:48.985913Z", + "iopub.status.idle": "2026-07-08T15:15:49.012029Z", + "shell.execute_reply": "2026-07-08T15:15:49.008783Z" } }, "outputs": [ @@ -2031,7 +2045,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Migration programme cost: {2026: '$9.9M', 2027: '$10.5M', 2028: '$3.2M'} β†’ 3-yr $23.6M\n", + "Migration programme cost: {2026: '$10.2M', 2027: '$11.9M', 2028: '$3.6M'} β†’ 3-yr $25.7M\n", "Do nothing: $7.3M/yr β†’ 3-yr $21.9M\n" ] }, @@ -2065,17 +2079,24 @@ " \n", " \n", " CCaaS platform licences (contracted, ramp-adjusted)\n", - " 0\n", + " 1,600,000\n", " 3,200,000\n", " 3,200,000\n", - " 6,400,000\n", + " 8,000,000\n", " \n", " \n", - " Base PS + training (incl. migration + WFM)\n", - " 2,567,000\n", + " NTT PS + training (SOW billing milestones)\n", + " 1,179,723\n", + " 1,012,723\n", " 0\n", - " 0\n", - " 2,567,000\n", + " 2,192,446\n", + " \n", + " \n", + " NTT managed services (from MCX go-live)\n", + " 102,730\n", + " 410,918\n", + " 410,918\n", + " 924,566\n", " \n", " \n", " Existing platform (term-contract run-off)\n", @@ -2086,27 +2107,102 @@ " \n", " \n", " TOTAL\n", - " 9,867,001\n", - " 10,500,001\n", - " 3,200,000\n", - " 23,567,002\n", + " 10,182,454\n", + " 11,923,643\n", + " 3,610,918\n", + " 25,717,015\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 2026 2027 \\\n", - "CCaaS platform licences (contracted, ramp-adjus... 0 3,200,000 \n", - "Base PS + training (incl. migration + WFM) 2,567,000 0 \n", - "Existing platform (term-contract run-off) 7,300,001 7,300,001 \n", - "TOTAL 9,867,001 10,500,001 \n", + " 2026 2027 \\\n", + "CCaaS platform licences (contracted, ramp-adjus... 1,600,000 3,200,000 \n", + "NTT PS + training (SOW billing milestones) 1,179,723 1,012,723 \n", + "NTT managed services (from MCX go-live) 102,730 410,918 \n", + "Existing platform (term-contract run-off) 7,300,001 7,300,001 \n", + "TOTAL 10,182,454 11,923,643 \n", "\n", " 2028 3-yr \n", - "CCaaS platform licences (contracted, ramp-adjus... 3,200,000 6,400,000 \n", - "Base PS + training (incl. migration + WFM) 0 2,567,000 \n", + "CCaaS platform licences (contracted, ramp-adjus... 3,200,000 8,000,000 \n", + "NTT PS + training (SOW billing milestones) 0 2,192,446 \n", + "NTT managed services (from MCX go-live) 410,918 924,566 \n", "Existing platform (term-contract run-off) 0 14,600,002 \n", - "TOTAL 3,200,000 23,567,002 " + "TOTAL 3,610,918 25,717,015 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dateshareamount
SOW billing milestone
SOW Effective Date2026-03-1530%$607,633.94
Start of client UAT (first region)2026-09-3020%$405,089.30
Start of client UAT (last region)2027-06-3030%$607,633.94
Completion of last go-live migration2027-09-3020%$405,089.30
\n", + "
" + ], + "text/plain": [ + " date share amount\n", + "SOW billing milestone \n", + "SOW Effective Date 2026-03-15 30% $607,633.94\n", + "Start of client UAT (first region) 2026-09-30 20% $405,089.30\n", + "Start of client UAT (last region) 2027-06-30 30% $607,633.94\n", + "Completion of last go-live migration 2027-09-30 20% $405,089.30" ] }, "metadata": {}, @@ -2116,7 +2212,8 @@ "source": [ "migration_costs = pd.DataFrame({\n", " \"CCaaS platform licences (contracted, ramp-adjusted)\": licence_by_year,\n", - " \"Base PS + training (incl. migration + WFM)\": ps_by_year,\n", + " \"NTT PS + training (SOW billing milestones)\": ps_by_year,\n", + " \"NTT managed services (from MCX go-live)\": managed_by_year,\n", " \"Existing platform (term-contract run-off)\": current_by_year,\n", "}).T[YEARS]\n", "migration_costs[\"3-yr\"] = migration_costs.sum(axis=1)\n", @@ -2129,7 +2226,12 @@ " f\"β†’ 3-yr {money(sum(total_by_year.values()))}\")\n", "backstage(f\"Do nothing: {money(BASELINE_ANNUAL)}/yr β†’ 3-yr {money(3 * BASELINE_ANNUAL)}\")\n", "display(pd.concat([migration_costs,\n", - " pd.DataFrame(migration_costs.sum()).T.set_axis([\"TOTAL\"])]))" + " pd.DataFrame(migration_costs.sum()).T.set_axis([\"TOTAL\"])]))\n", + "\n", + "_ms = ps_milestones_dataframe()\n", + "_ms[\"amount\"] = _ms[\"amount\"].map(\"${:,.2f}\".format)\n", + "_ms[\"share\"] = _ms[\"share\"].map(\"{:.0%}\".format)\n", + "display(_ms.set_index(\"name\").rename_axis(\"SOW billing milestone\"))\n" ] }, { @@ -2138,10 +2240,10 @@ "id": "c058e795", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.320002Z", - "iopub.status.busy": "2026-07-08T12:20:34.319861Z", - "iopub.status.idle": "2026-07-08T12:20:34.345827Z", - "shell.execute_reply": "2026-07-08T12:20:34.345186Z" + "iopub.execute_input": "2026-07-08T15:15:49.014884Z", + "iopub.status.busy": "2026-07-08T15:15:49.014409Z", + "iopub.status.idle": "2026-07-08T15:15:49.061734Z", + "shell.execute_reply": "2026-07-08T15:15:49.057052Z" } }, "outputs": [ @@ -2169,7 +2271,7 @@ "2028" ], "y": [ - 0.0, + 1600000.0, 3200000.0, 3200000.0 ] @@ -2183,7 +2285,7 @@ "width": 2 } }, - "name": "Base PS + training (incl. migration + WFM)", + "name": "NTT PS + training (SOW billing milestones)", "type": "bar", "x": [ "2026", @@ -2191,11 +2293,33 @@ "2028" ], "y": [ - 2567000.0, - 0.0, + 1179723.24, + 1012723.24, 0.0 ] }, + { + "hovertemplate": "%{fullData.name}: %{y:$,.0f}", + "marker": { + "color": "#0b6b4a", + "line": { + "color": "#fcfcfb", + "width": 2 + } + }, + "name": "NTT managed services (from MCX go-live)", + "type": "bar", + "x": [ + "2026", + "2027", + "2028" + ], + "y": [ + 102729.60000000002, + 410918.4000000001, + 410918.4000000001 + ] + }, { "hovertemplate": "%{fullData.name}: %{y:$,.0f}", "marker": { @@ -2240,7 +2364,7 @@ "2028" ], "y": { - "bdata": "AAAAIN/RYkEAAACgaWxzQQAAAKCpeXZB", + "bdata": "rkfhuuZrY0F7FK4H/xR1QeF6FG6RhnhB", "dtype": "f8" } }, @@ -2280,9 +2404,9 @@ "size": 12 }, "showarrow": false, - "text": "$9.9M", + "text": "$10.2M", "x": 0, - "y": 9867001.0, + "y": 10182453.84, "yshift": 12 }, { @@ -2291,9 +2415,9 @@ "size": 12 }, "showarrow": false, - "text": "$10.5M", + "text": "$11.9M", "x": 1, - "y": 10500001.0, + "y": 11923642.64, "yshift": 12 }, { @@ -2302,9 +2426,9 @@ "size": 12 }, "showarrow": false, - "text": "$3.2M", + "text": "$3.6M", "x": 2, - "y": 3200000.0, + "y": 3610918.4, "yshift": 12 }, { @@ -2313,10 +2437,10 @@ "size": 12 }, "showarrow": false, - "text": "3-yr $23.6M β€” $1.7M above doing nothing", + "text": "3-yr $25.7M β€” $3.8M above doing nothing", "x": 2, "xshift": -70, - "y": 23567002.0, + "y": 25717014.88, "yshift": 18 } ], @@ -3128,7 +3252,7 @@ "color": "#0b0b0b", "size": 16 }, - "text": "Migration programme cost vs doing nothing
Double-billing hits 2026-27 while existing term contracts run off Β· licences ramp-free for 12 months, then bill at the run-rate", + "text": "Migration programme cost vs doing nothing
Double-billing hits 2026-27 while existing term contracts run off Β· licences ramp-free for 6 months (order form), then bill at the run-rate Β· SOW-billed PS + managed services", "x": 0.02, "xanchor": "left" }, @@ -3176,7 +3300,8 @@ "fig.update_layout(barmode=\"stack\")\n", "tei_layout(fig, \"Migration programme cost vs doing nothing\",\n", " \"Double-billing hits 2026-27 while existing term contracts run off Β· \"\n", - " \"licences ramp-free for 12 months, then bill at the run-rate\", height=500)\n", + " \"licences ramp-free for 6 months (order form), then bill at the run-rate Β· \"\n", + " \"SOW-billed PS + managed services\", height=500)\n", "fig.show()" ] }, @@ -3194,14 +3319,16 @@ "benefits βˆ’ incremental cost. The 2026–27 double-billing penalty and the 2028 cost-avoidance\n", "credit both fall out of this one frame.\n", "\n", - "At the **contracted licence rate ($3.2M/yr)** the case turns positive inside the deck's\n", - "own 2026–2028 window, with payback in late 2028. At the **deck's pitched $4.3M/yr** the\n", - "same case stays net-negative through 2028 β€” the KPI table shows both columns, so the walk\n", - "from the Genesys report to the contracted reality is explicit. Where a case doesn't pay\n", - "back in-window, the **run-rate breakeven** KPI extrapolates: steady state =\n", - "(baseline βˆ’ licence run-rate) + scoped WFM annual values.\n", + "With the signed contracts in β€” **$3.2M/yr licences, 6-month ramp, SOW-billed PS, managed\n", + "services** β€” the platform move alone still does not pay back inside the deck's own\n", + "2026–2028 window (net β‰ˆ βˆ’$1.5M). The **run-rate breakeven** KPI extrapolates past the\n", + "window: steady state = (baseline βˆ’ licence run-rate βˆ’ managed services) + scoped WFM\n", + "annual values, which carries the case to breakeven in early 2029. The deck frame (pitched\n", + "$4.3M/yr, deck's year-1 PS lump, no managed services) is worse on both counts β€” the KPI\n", + "table shows the columns side by side, so the walk from the Genesys report to the\n", + "contracted reality stays explicit.\n", "\n", - "*Not modelled: early-termination fees, and migration costs beyond the base PS line.*" + "*Not modelled: early-termination fees, and migration costs beyond the SOW.*\n" ] }, { @@ -3210,27 +3337,27 @@ "id": "d8293152", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.347730Z", - "iopub.status.busy": "2026-07-08T12:20:34.347609Z", - "iopub.status.idle": "2026-07-08T12:20:34.352044Z", - "shell.execute_reply": "2026-07-08T12:20:34.351451Z" + "iopub.execute_input": "2026-07-08T15:15:49.063837Z", + "iopub.status.busy": "2026-07-08T15:15:49.063671Z", + "iopub.status.idle": "2026-07-08T15:15:49.069028Z", + "shell.execute_reply": "2026-07-08T15:15:49.068435Z" } }, "outputs": [ { "data": { "application/mercury+json": { - "model_id": "bb915be640904627a7e37f0597028fab", + "model_id": "720f723fcedb42efa4441ea0f5e2aae2", "position": "sidebar", "widget": "SelectWidget" }, "application/vnd.jupyter.widget-view+json": { - "model_id": "bb915be640904627a7e37f0597028fab", + "model_id": "720f723fcedb42efa4441ea0f5e2aae2", "version_major": 2, "version_minor": 1 }, "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -3251,10 +3378,10 @@ "id": "c89973af", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.353609Z", - "iopub.status.busy": "2026-07-08T12:20:34.353505Z", - "iopub.status.idle": "2026-07-08T12:20:34.357689Z", - "shell.execute_reply": "2026-07-08T12:20:34.357172Z" + "iopub.execute_input": "2026-07-08T15:15:49.070865Z", + "iopub.status.busy": "2026-07-08T15:15:49.070716Z", + "iopub.status.idle": "2026-07-08T15:15:49.076308Z", + "shell.execute_reply": "2026-07-08T15:15:49.075521Z" } }, "outputs": [ @@ -3262,8 +3389,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "net by year: {2026: '-$2.6M', 2027: '-$3.1M', 2028: '$6.3M'} β†’ 3-yr $647K\n", - "steady-state run-rate saving $7.0M/yr ($4.1M licences + $2.9M WFM annuals) β†’ breakeven 35 months (~Nov 2028)\n" + "net by year: {2026: '-$2.9M', 2027: '-$4.5M', 2028: '$5.9M'} β†’ 3-yr -$1.5M\n", + "steady-state run-rate saving $6.6M/yr ($4.1M licences βˆ’ $411K managed services + $2.9M WFM annuals) β†’ breakeven 39 months (~Mar 2029, extrapolated)\n" ] } ], @@ -3277,7 +3404,8 @@ "\n", "# Steady-state run-rate once contracts end and the ramp is over\n", "# (tokencalc.migration_wfm) β€” fills the end-2028 deficit.\n", - "RUNRATE_SAVING = runrate_saving_annual(LICENCE_ANNUAL, WFM_REGIONS)\n", + "RUNRATE_SAVING = runrate_saving_annual(LICENCE_ANNUAL, WFM_REGIONS,\n", + " managed_annual=MANAGED_SERVICES_ANNUAL)\n", "BREAKEVEN = runrate_breakeven_label(net_by, RUNRATE_SAVING)\n", "\n", "\n", @@ -3288,7 +3416,8 @@ "backstage(f\"net by year: { {y: money(v) for y, v in net_by.items()} } \"\n", " f\"β†’ 3-yr {money(kpi['net_3yr'])}\")\n", "backstage(f\"steady-state run-rate saving {money(RUNRATE_SAVING)}/yr \"\n", - " f\"({money(BASELINE_ANNUAL - LICENCE_ANNUAL)} licences + \"\n", + " f\"({money(BASELINE_ANNUAL - LICENCE_ANNUAL)} licences βˆ’ \"\n", + " f\"{money(MANAGED_SERVICES_ANNUAL)} managed services + \"\n", " f\"{money(wfm_annual_runrate(WFM_REGIONS))} WFM annuals) β†’ breakeven {BREAKEVEN}\")" ] }, @@ -3298,10 +3427,10 @@ "id": "9d135a19", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.359533Z", - "iopub.status.busy": "2026-07-08T12:20:34.359414Z", - "iopub.status.idle": "2026-07-08T12:20:34.381700Z", - "shell.execute_reply": "2026-07-08T12:20:34.381025Z" + "iopub.execute_input": "2026-07-08T15:15:49.077976Z", + "iopub.status.busy": "2026-07-08T15:15:49.077813Z", + "iopub.status.idle": "2026-07-08T15:15:49.102760Z", + "shell.execute_reply": "2026-07-08T15:15:49.102141Z" } }, "outputs": [ @@ -3351,9 +3480,9 @@ "2028" ], "y": [ - -2567001.0, - -3200001.0, - 4100000.0 + -2882453.84, + -4623642.640000001, + 3689081.6 ] }, { @@ -3378,7 +3507,7 @@ "2028" ], "y": { - "bdata": "AAAAgKyVQ8HsxE5sq5ZVwQAAAACsviNB", + "bdata": "uB6F68r9RcHYFgcLATlcwRiuR+Em7zbB", "dtype": "f8" } } @@ -3391,9 +3520,9 @@ "size": 12 }, "showarrow": false, - "text": "-$2.6M", + "text": "-$2.9M", "x": 0, - "y": -2567001.0, + "y": -2882453.84, "yshift": -14 }, { @@ -3402,9 +3531,9 @@ "size": 12 }, "showarrow": false, - "text": "-$5.7M", + "text": "-$7.4M", "x": 1, - "y": -5659309.692307692, + "y": -7398404.1723076925, "yshift": -14 }, { @@ -3413,10 +3542,10 @@ "size": 12 }, "showarrow": false, - "text": "$647K", + "text": "-$1.5M", "x": 2, - "y": 646998.0, - "yshift": 14 + "y": -1503014.8800000008, + "yshift": -14 }, { "align": "left", @@ -3428,7 +3557,7 @@ "size": 12 }, "showarrow": false, - "text": "3-yr net $647K Β· ROI 39%
NPV@13.5% -$349K Β· payback 35 months (~Nov 2028)
run-rate $7.0M/yr post-window β†’ breakeven 35 months (~Nov 2028)", + "text": "3-yr net -$1.5M Β· ROI -39%
NPV@13.5% -$2.0M Β· payback beyond 2028
run-rate $6.6M/yr post-window β†’ breakeven 39 months (~Mar 2029, extrapolated)", "x": 0.01, "xref": "paper", "y": 0.98, @@ -4304,10 +4433,10 @@ "id": "7ca576f1", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.384035Z", - "iopub.status.busy": "2026-07-08T12:20:34.383904Z", - "iopub.status.idle": "2026-07-08T12:20:34.393837Z", - "shell.execute_reply": "2026-07-08T12:20:34.393300Z" + "iopub.execute_input": "2026-07-08T15:15:49.105099Z", + "iopub.status.busy": "2026-07-08T15:15:49.104937Z", + "iopub.status.idle": "2026-07-08T15:15:49.115327Z", + "shell.execute_reply": "2026-07-08T15:15:49.114734Z" } }, "outputs": [ @@ -4315,7 +4444,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "The licence correction moves the 3-yr case by $2.2M vs the deck's pitched rate. For the with-AI case in the same frame, open the Corrected Business Case notebook.\n" + "The signed contracts move the 3-yr case by $2.2M vs the deck frame β€” the licence correction helps; SOW managed services cost against it. For the with-AI case in the same frame, open the Corrected Business Case notebook.\n" ] }, { @@ -4339,8 +4468,8 @@ " \n", " \n", " \n", - " Deck rate ($4.3M/yr)\n", - " Contracted ($3.2M/yr)\n", + " Deck frame ($4.3M/yr, deck PS)\n", + " Contracted ($3.2M/yr + SOW)\n", " \n", " \n", " \n", @@ -4351,70 +4480,70 @@ " \n", " \n", " 3-yr incremental cost\n", - " $3.9M\n", - " $1.7M\n", + " $6.0M\n", + " $3.8M\n", " \n", " \n", " 3-yr net\n", - " -$1.6M\n", - " $647K\n", + " -$3.7M\n", + " -$1.5M\n", " \n", " \n", " ROI (net Γ· incremental cost)\n", - " -40%\n", - " 39%\n", + " -62%\n", + " -39%\n", " \n", " \n", " NPV @ 13.5% (deck rate)\n", + " -$3.8M\n", " -$2.0M\n", - " -$349K\n", " \n", " \n", " NPV @ 8.0% (CTM treasury)\n", - " -$1.8M\n", - " -$22K\n", + " -$3.8M\n", + " -$1.9M\n", " \n", " \n", " Payback (2026–28 window)\n", " beyond 2028\n", - " 35 months (~Nov 2028)\n", + " beyond 2028\n", " \n", " \n", " Steady-state run-rate saving\n", " $5.9M/yr\n", - " $7.0M/yr\n", + " $6.6M/yr\n", " \n", " \n", " Breakeven\n", - " 40 months (~Apr 2029, extrapolated)\n", - " 35 months (~Nov 2028)\n", + " 44 months (~Aug 2029, extrapolated)\n", + " 39 months (~Mar 2029, extrapolated)\n", " \n", " \n", "\n", "" ], "text/plain": [ - " Deck rate ($4.3M/yr) \\\n", + " Deck frame ($4.3M/yr, deck PS) \\\n", "3-yr WFM benefits (verbatim, scoped) $2.3M \n", - "3-yr incremental cost $3.9M \n", - "3-yr net -$1.6M \n", - "ROI (net Γ· incremental cost) -40% \n", - "NPV @ 13.5% (deck rate) -$2.0M \n", - "NPV @ 8.0% (CTM treasury) -$1.8M \n", + "3-yr incremental cost $6.0M \n", + "3-yr net -$3.7M \n", + "ROI (net Γ· incremental cost) -62% \n", + "NPV @ 13.5% (deck rate) -$3.8M \n", + "NPV @ 8.0% (CTM treasury) -$3.8M \n", "Payback (2026–28 window) beyond 2028 \n", "Steady-state run-rate saving $5.9M/yr \n", - "Breakeven 40 months (~Apr 2029, extrapolated) \n", + "Breakeven 44 months (~Aug 2029, extrapolated) \n", "\n", - " Contracted ($3.2M/yr) \n", - "3-yr WFM benefits (verbatim, scoped) $2.3M \n", - "3-yr incremental cost $1.7M \n", - "3-yr net $647K \n", - "ROI (net Γ· incremental cost) 39% \n", - "NPV @ 13.5% (deck rate) -$349K \n", - "NPV @ 8.0% (CTM treasury) -$22K \n", - "Payback (2026–28 window) 35 months (~Nov 2028) \n", - "Steady-state run-rate saving $7.0M/yr \n", - "Breakeven 35 months (~Nov 2028) " + " Contracted ($3.2M/yr + SOW) \n", + "3-yr WFM benefits (verbatim, scoped) $2.3M \n", + "3-yr incremental cost $3.8M \n", + "3-yr net -$1.5M \n", + "ROI (net Γ· incremental cost) -39% \n", + "NPV @ 13.5% (deck rate) -$2.0M \n", + "NPV @ 8.0% (CTM treasury) -$1.9M \n", + "Payback (2026–28 window) beyond 2028 \n", + "Steady-state run-rate saving $6.6M/yr \n", + "Breakeven 39 months (~Mar 2029, extrapolated) " ] }, "metadata": {}, @@ -4436,22 +4565,26 @@ " }\n", "\n", "\n", - "# Deck-anchored comparison: the same case at the deck's pitched rate.\n", + "# Deck-anchored comparison: the deck's own frame β€” pitched licence rate,\n", + "# verbatim year-1 PS lump, no managed services (the SOW lines are contracted\n", + "# facts the deck never carried).\n", "_lic_deck = licence_costs_by_year(RAMP_MONTHS, TCO_VERBATIM[\"ccaas_annual\"])\n", - "total_deck = {y: current_by_year[y] + _lic_deck[y] + ps_by_year[y] for y in YEARS}\n", + "_ps_deck = ps_costs_by_year()\n", + "total_deck = {y: current_by_year[y] + _lic_deck[y] + _ps_deck[y] for y in YEARS}\n", "inc_deck, net_deck = case_flows(total_deck, ben_by_year)\n", "kpi_deck = case_kpis(inc_deck, net_deck, DISCOUNT_RATE)\n", "RUNRATE_DECK = runrate_saving_annual(TCO_VERBATIM[\"ccaas_annual\"], WFM_REGIONS)\n", "BREAKEVEN_DECK = runrate_breakeven_label(net_deck, RUNRATE_DECK)\n", "\n", "kpis_fmt = pd.DataFrame({\n", - " f\"Deck rate ({money(TCO_VERBATIM['ccaas_annual'])}/yr)\":\n", + " f\"Deck frame ({money(TCO_VERBATIM['ccaas_annual'])}/yr, deck PS)\":\n", " kpi_display(kpi_deck, net_deck, RUNRATE_DECK, BREAKEVEN_DECK),\n", - " f\"Contracted ({money(LICENCE_ANNUAL)}/yr)\":\n", + " f\"Contracted ({money(LICENCE_ANNUAL)}/yr + SOW)\":\n", " kpi_display(kpi, net_by, RUNRATE_SAVING, BREAKEVEN),\n", "})\n", - "print(f\"The licence correction moves the 3-yr case by \"\n", - " f\"{money(kpi['net_3yr'] - kpi_deck['net_3yr'])} vs the deck's pitched rate. \"\n", + "print(f\"The signed contracts move the 3-yr case by \"\n", + " f\"{money(kpi['net_3yr'] - kpi_deck['net_3yr'])} vs the deck frame β€” the licence \"\n", + " f\"correction helps; SOW managed services cost against it. \"\n", " f\"For the with-AI case in the same frame, open the Corrected Business Case notebook.\")\n", "display(kpis_fmt)" ] @@ -4479,10 +4612,10 @@ "id": "4ab17e24", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.395983Z", - "iopub.status.busy": "2026-07-08T12:20:34.395834Z", - "iopub.status.idle": "2026-07-08T12:20:34.432996Z", - "shell.execute_reply": "2026-07-08T12:20:34.432388Z" + "iopub.execute_input": "2026-07-08T15:15:49.118883Z", + "iopub.status.busy": "2026-07-08T15:15:49.118721Z", + "iopub.status.idle": "2026-07-08T15:15:49.156840Z", + "shell.execute_reply": "2026-07-08T15:15:49.156126Z" } }, "outputs": [ @@ -4527,29 +4660,29 @@ "ygap": 2, "z": [ [ - -2553002.0000000005, - -4353002.0, - -5853002.0 + -3103014.880000001, + -4903014.880000001, + -6403014.880000001 ], [ - -953002.0000000005, - -2453002.0000000005, - -3703002.0000000005 + -1503014.8800000008, + -3003014.880000001, + -4253014.880000001 ], [ - 646997.9999999995, - -553002.0000000005, - -1553002.0000000005 + 96985.11999999918, + -1103014.8800000008, + -2103014.880000001 ], [ - 2246998.0, - 1346997.9999999998, - 596997.9999999998 + 1696985.1199999987, + 796985.1199999987, + 46985.119999998715 ], [ - 3846997.9999999995, - 3246997.9999999995, - 2746997.9999999995 + 3296985.119999999, + 2696985.119999999, + 2196985.119999999 ] ], "zmid": 0 @@ -4563,7 +4696,7 @@ "size": 12 }, "showarrow": false, - "text": "-$2.6M", + "text": "-$3.1M", "x": 0, "y": 0 }, @@ -4573,7 +4706,7 @@ "size": 12 }, "showarrow": false, - "text": "-$4.4M", + "text": "-$4.9M", "x": 1, "y": 0 }, @@ -4583,7 +4716,7 @@ "size": 12 }, "showarrow": false, - "text": "-$5.9M", + "text": "-$6.4M", "x": 2, "y": 0 }, @@ -4593,7 +4726,7 @@ "size": 12 }, "showarrow": false, - "text": "-$953K", + "text": "-$1.5M", "x": 0, "y": 1 }, @@ -4603,89 +4736,19 @@ "size": 12 }, "showarrow": false, - "text": "-$2.5M", + "text": "-$3.0M", "x": 1, "y": 1 }, - { - "font": { - "color": "#0b0b0b", - "size": 12 - }, - "showarrow": false, - "text": "-$3.7M", - "x": 2, - "y": 1 - }, - { - "font": { - "color": "#0b0b0b", - "size": 12 - }, - "showarrow": false, - "text": "$647K", - "x": 0, - "y": 2 - }, - { - "font": { - "color": "#0b0b0b", - "size": 12 - }, - "showarrow": false, - "text": "-$553K", - "x": 1, - "y": 2 - }, - { - "font": { - "color": "#0b0b0b", - "size": 12 - }, - "showarrow": false, - "text": "-$1.6M", - "x": 2, - "y": 2 - }, - { - "font": { - "color": "#0b0b0b", - "size": 12 - }, - "showarrow": false, - "text": "$2.2M", - "x": 0, - "y": 3 - }, - { - "font": { - "color": "#0b0b0b", - "size": 12 - }, - "showarrow": false, - "text": "$1.3M", - "x": 1, - "y": 3 - }, - { - "font": { - "color": "#0b0b0b", - "size": 12 - }, - "showarrow": false, - "text": "$597K", - "x": 2, - "y": 3 - }, { "font": { "color": "#ffffff", "size": 12 }, "showarrow": false, - "text": "$3.8M", - "x": 0, - "y": 4 + "text": "-$4.3M", + "x": 2, + "y": 1 }, { "font": { @@ -4693,8 +4756,68 @@ "size": 12 }, "showarrow": false, - "text": "$3.2M", + "text": "$97K", + "x": 0, + "y": 2 + }, + { + "font": { + "color": "#0b0b0b", + "size": 12 + }, + "showarrow": false, + "text": "-$1.1M", "x": 1, + "y": 2 + }, + { + "font": { + "color": "#0b0b0b", + "size": 12 + }, + "showarrow": false, + "text": "-$2.1M", + "x": 2, + "y": 2 + }, + { + "font": { + "color": "#0b0b0b", + "size": 12 + }, + "showarrow": false, + "text": "$1.7M", + "x": 0, + "y": 3 + }, + { + "font": { + "color": "#0b0b0b", + "size": 12 + }, + "showarrow": false, + "text": "$797K", + "x": 1, + "y": 3 + }, + { + "font": { + "color": "#0b0b0b", + "size": 12 + }, + "showarrow": false, + "text": "$47K", + "x": 2, + "y": 3 + }, + { + "font": { + "color": "#0b0b0b", + "size": 12 + }, + "showarrow": false, + "text": "$3.3M", + "x": 0, "y": 4 }, { @@ -4704,6 +4827,16 @@ }, "showarrow": false, "text": "$2.7M", + "x": 1, + "y": 4 + }, + { + "font": { + "color": "#0b0b0b", + "size": 12 + }, + "showarrow": false, + "text": "$2.2M", "x": 2, "y": 4 } @@ -5515,7 +5648,7 @@ "color": "#0b0b0b", "size": 16 }, - "text": "3-yr net across ramp length Γ— licence run-rate
Diverging scale centered at $0 Β· WFM scope and contract dates held at current inputs", + "text": "3-yr net across ramp length Γ— licence run-rate
Diverging scale centered at $0 Β· SOW PS + managed services included Β· WFM scope and contract dates held at current inputs", "x": 0.02, "xanchor": "left" }, @@ -5546,7 +5679,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Contracted corner (12-mo ramp Γ— $3.2M/yr): $647K Β· deck corner (12-mo Γ— $4.3M/yr): -$1.6M β€” the licence correction is what pulls the window positive.\n" + "Contracted corner (6-mo ramp Γ— $3.2M/yr): -$1.5M Β· deck-rate corner (6-mo Γ— $4.3M/yr): -$4.3M β€” the licence correction recovers $2.8M but the 3-yr window stays negative; breakeven rides the post-2028 run-rate.\n" ] } ], @@ -5559,7 +5692,8 @@ "\n", "def net_3yr(ramp_months, licence_annual):\n", " lby = licence_costs_by_year(ramp_months, licence_annual)\n", - " t = {y: current_by_year[y] + lby[y] + ps_by_year[y] for y in YEARS}\n", + " t = {y: current_by_year[y] + lby[y] + ps_by_year[y] + managed_by_year[y]\n", + " for y in YEARS}\n", " _, n = case_flows(t, ben_by_year)\n", " return sum(n.values())\n", "\n", @@ -5578,16 +5712,18 @@ " font=dict(size=12,\n", " color=\"#ffffff\" if abs(v) > 0.65 * _zabs else INK))\n", "tei_layout(fig, \"3-yr net across ramp length Γ— licence run-rate\",\n", - " \"Diverging scale centered at $0 Β· WFM scope and contract dates held at \"\n", - " \"current inputs\", height=400)\n", + " \"Diverging scale centered at $0 Β· SOW PS + managed services included Β· \"\n", + " \"WFM scope and contract dates held at current inputs\", height=400)\n", "fig.update_layout(xaxis=dict(showgrid=False), yaxis=dict(showgrid=False, tickformat=None),\n", " hovermode=\"closest\")\n", "fig.show()\n", "print(f\"Contracted corner ({RAMP_MONTHS}-mo ramp Γ— {money(LICENCE_ANNUAL)}/yr): \"\n", - " f\"{money(net_3yr(RAMP_MONTHS, LICENCE_ANNUAL))} Β· deck corner \"\n", - " f\"({DEFAULT_RAMP_MONTHS}-mo Γ— {money(TCO_VERBATIM['ccaas_annual'])}/yr): \"\n", - " f\"{money(net_3yr(DEFAULT_RAMP_MONTHS, TCO_VERBATIM['ccaas_annual']))} β€” \"\n", - " f\"the licence correction is what pulls the window positive.\")" + " f\"{money(net_3yr(RAMP_MONTHS, LICENCE_ANNUAL))} Β· deck-rate corner \"\n", + " f\"({RAMP_MONTHS}-mo Γ— {money(TCO_VERBATIM['ccaas_annual'])}/yr): \"\n", + " f\"{money(net_3yr(RAMP_MONTHS, TCO_VERBATIM['ccaas_annual']))} β€” the licence \"\n", + " f\"correction recovers \"\n", + " f\"{money(net_3yr(RAMP_MONTHS, LICENCE_ANNUAL) - net_3yr(RAMP_MONTHS, TCO_VERBATIM['ccaas_annual']))} \"\n", + " f\"but the 3-yr window stays negative; breakeven rides the post-2028 run-rate.\")" ] }, { @@ -5611,10 +5747,10 @@ "id": "939417e4", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.435111Z", - "iopub.status.busy": "2026-07-08T12:20:34.434996Z", - "iopub.status.idle": "2026-07-08T12:20:34.448521Z", - "shell.execute_reply": "2026-07-08T12:20:34.447923Z" + "iopub.execute_input": "2026-07-08T15:15:49.160025Z", + "iopub.status.busy": "2026-07-08T15:15:49.159836Z", + "iopub.status.idle": "2026-07-08T15:15:49.177363Z", + "shell.execute_reply": "2026-07-08T15:15:49.176452Z" } }, "outputs": [ @@ -5623,7 +5759,7 @@ "output_type": "stream", "text": [ "All assertions passed.\n", - " WFM benefits 3-yr $2.3M Β· programme cost 3-yr $23.6M Β· net 3-yr $647K Β· breakeven 35 months (~Nov 2028)\n" + " WFM benefits 3-yr $2.3M Β· programme cost 3-yr $25.7M Β· net 3-yr -$1.5M Β· breakeven 39 months (~Mar 2029, extrapolated)\n" ] } ], @@ -5635,9 +5771,11 @@ "# Section 1 β€” contract mechanics (engine pins, explicit defaults)\n", "_seed_check = current_state_inputs(sites)\n", "_approx(_seed_check[\"annual_cost\"].sum(), 7_300_000)\n", - "_l12 = licence_costs_by_year(12)\n", - "_approx(_l12[2026], 0)\n", - "_approx(_l12[2027], 4_300_000)\n", + "assert DEFAULT_RAMP_MONTHS == 6 # 🟒 order form\n", + "_l_deck = licence_costs_by_year() # deck rate at the real ramp\n", + "_approx(_l_deck[2026], 2_150_000)\n", + "_approx(_l_deck[2027], 4_300_000)\n", + "_approx(licence_costs_by_year(12)[2026], 0) # mechanics: 12-mo ramp zeroes 2026\n", "_contracts_at_default = (\n", " (current_state[\"annual_cost\"] - _seed_check[\"annual_cost\"]).abs().max() < 1\n", " and all(t == dt.date(2027, 12, 31) for t in current_state[\"contract_termination\"])\n", @@ -5647,6 +5785,15 @@ " _approx(current_by_year[2026], 7_300_000, tol=len(REGIONS))\n", " _approx(current_by_year[2028], 0)\n", "\n", + "# NTT SOW β€” billing milestones + managed services (🟒 contractual)\n", + "_approx(PS_CONTRACTED_TOTAL, 2_025_446.48, tol=0.01)\n", + "_ps_c = ps_costs_by_year(contracted=True)\n", + "_approx(_ps_c[2026], 607_633.94 + 405_089.30 + 167_000, tol=0.01) # 30% + 20% + training\n", + "_approx(_ps_c[2027], 607_633.94 + 405_089.30, tol=0.01) # 30% + 20%\n", + "_ms_c = managed_services_by_year()\n", + "_approx(_ms_c[2026], MANAGED_SERVICES_ANNUAL * 3 / 12, tol=0.01) # Oct–Dec after go-live\n", + "_approx(_ms_c[2027], MANAGED_SERVICES_ANNUAL, tol=0.01)\n", + "\n", "# Sections 2-3 β€” WFM scope & phasing at engine defaults\n", "_, _, _rollout_d = build_rollouts(sites)\n", "_wfm_d = wfm_benefits_by_year(_rollout_d) # NA + ANZ + ASIA\n", @@ -5656,40 +5803,45 @@ "_approx(_by_d[2026], 0)\n", "_approx(_by_d[2027], 1_400_000 / 13, tol=1) # ANZ: 1 of 13 live months in 2027\n", "_approx(wfm_annual_runrate(), 2_900_000)\n", - "_approx(runrate_saving_annual(), 5_900_000)\n", + "_approx(runrate_saving_annual(), 5_900_000) # deck frame: no managed services\n", "\n", "# Contracted licence overlay (tokencalc.appendix4.TCO_CONTRACTED)\n", "_approx(tco(\"ccaas_annual\"), 3_200_000) # signed correction\n", "_approx(TCO_VERBATIM[\"ccaas_annual\"], 4_300_000) # deck record stays verbatim\n", - "_lc = licence_costs_by_year(12, tco(\"ccaas_annual\"))\n", + "_lc = licence_costs_by_year(annual=tco(\"ccaas_annual\"))\n", + "_approx(_lc[2026], 1_600_000) # 6-mo ramp: half-year bills in 2026\n", "_approx(_lc[2027], 3_200_000)\n", - "_approx(runrate_saving_annual(tco(\"ccaas_annual\")), 7_000_000)\n", + "_approx(runrate_saving_annual(tco(\"ccaas_annual\"),\n", + " managed_annual=MANAGED_SERVICES_ANNUAL),\n", + " 6_589_081.60, tol=0.01)\n", "\n", "# Section 5 β€” default-flow pins (pure engine defaults, no widget state)\n", "_cur_d = current_costs_by_year(_seed_check)\n", - "_ps_d = ps_costs_by_year()\n", - "_tot_d = {y: _cur_d[y] + _l12[y] + _ps_d[y] for y in YEARS}\n", "_ben_d = {y: float(_by_d.get(y, 0.0)) for y in YEARS}\n", + "_tot_d = {y: _cur_d[y] + _l_deck[y] + ps_costs_by_year()[y] for y in YEARS}\n", "_inc_d, _net_d = case_flows(_tot_d, _ben_d)\n", - "_approx(sum(_net_d.values()), -1_553_000, tol=1) # $2.314M WFM βˆ’ $3.867M incremental\n", + "_approx(sum(_net_d.values()), -3_703_000, tol=1) # deck frame\n", "assert runrate_breakeven_label(_net_d, runrate_saving_annual()) == \\\n", - " \"40 months (~Apr 2029, extrapolated)\"\n", - "_tot_c = {y: _cur_d[y] + _lc[y] + _ps_d[y] for y in YEARS}\n", + " \"44 months (~Aug 2029, extrapolated)\"\n", + "_tot_c = {y: _cur_d[y] + _lc[y] + _ps_c[y] + _ms_c[y] for y in YEARS}\n", "_inc_c, _net_c = case_flows(_tot_c, _ben_d)\n", - "_approx(sum(_net_c.values()), 647_000, tol=1) # contracted rate β†’ positive in-window\n", - "assert runrate_breakeven_label(_net_c, runrate_saving_annual(tco(\"ccaas_annual\"))) == \\\n", - " \"35 months (~Nov 2028)\"\n", + "_approx(sum(_net_c.values()), -1_503_013, tol=1) # contracted frame β€” still negative\n", + "assert runrate_breakeven_label(\n", + " _net_c, runrate_saving_annual(tco(\"ccaas_annual\"),\n", + " managed_annual=MANAGED_SERVICES_ANNUAL)) == \\\n", + " \"39 months (~Mar 2029, extrapolated)\"\n", "\n", "# Live state β€” stack and flows tie out at whatever the widgets say\n", "_approx(sum(total_by_year.values()),\n", - " sum(licence_by_year.values()) + ps_by_year[2026] + sum(current_by_year.values()))\n", + " sum(licence_by_year.values()) + sum(ps_by_year.values())\n", + " + sum(managed_by_year.values()) + sum(current_by_year.values()))\n", "for y in YEARS:\n", " _approx(net_by[y], ben_by_year[y] - (total_by_year[y] - BASELINE_ANNUAL))\n", "\n", "backstage(\"All assertions passed.\")\n", "backstage(f\" WFM benefits 3-yr {money(sum(ben_by_year.values()))} Β· \"\n", " f\"programme cost 3-yr {money(sum(total_by_year.values()))} Β· \"\n", - " f\"net 3-yr {money(kpi['net_3yr'])} Β· breakeven {BREAKEVEN}\")" + " f\"net 3-yr {money(kpi['net_3yr'])} Β· breakeven {BREAKEVEN}\")\n" ] }, { @@ -5702,11 +5854,13 @@ "## 8 Β· Risks, notes & next steps\n", "\n", "**Findings to lead with**\n", - "- **The contracted licence rate is what makes the migration stand on its own**: at the\n", - " signed $3.2M/yr the case is positive in-window (payback ~Nov 2028); at the deck's\n", - " pitched $4.3M/yr it would run net βˆ’$1.6M through 2028, breaking even ~April 2029 on\n", - " run-rate alone. Keep both KPI columns in front of CTM β€” the walk from the deck's own\n", - " numbers is the credibility story. (With-AI case: the Corrected Business Case notebook.)\n", + "- **The migration alone does not stand up inside the window, even at the signed rate**:\n", + " with the full contracts in ($3.2M/yr licences, 6-month ramp, SOW milestones, managed\n", + " services) the 3-yr net is β‰ˆ βˆ’$1.5M, breaking even ~Mar 2029 on run-rate alone; the deck\n", + " frame ($4.3M/yr, deck's PS lump) runs β‰ˆ βˆ’$3.7M / ~Aug 2029. Keep both KPI columns in\n", + " front of CTM β€” the walk from the deck's own numbers is the credibility story, and the\n", + " post-termination run-rate is what carries the case. (With-AI case: the Corrected\n", + " Business Case notebook.)\n", "- **2026 is a pure cost year** here too β€” PS outlay plus double-billing, zero benefits.\n", "- The ramp credit and the term-contract run-off cut in opposite directions; both are\n", " contract facts the deck's cost case omitted.\n", @@ -5719,14 +5873,16 @@ "- Deck quirk kept verbatim: ASIA WFM annual ($1.6M) exceeds its 3-yr value ($914K); the\n", " annual value feeds the run-rate extrapolation, the 3-yr value phases in-window.\n", "- EMEA WFM ($687K 3-yr) is an upside option β€” sidebar toggle.\n", - "- Not modelled: early-termination fees, co-term options, migration costs beyond the base\n", - " PS line, and any benefit realization lag beyond Genesys's own schedule.\n", + "- 🟑 Training ($167K) is kept as the deck's verbatim year-1 line β€” the SOW milestones\n", + " don't itemize it. Managed services are modelled with no end date inside the window.\n", + "- Not modelled: early-termination fees, co-term options, migration costs beyond the SOW,\n", + " and any benefit realization lag beyond Genesys's own schedule.\n", "\n", "**Next steps**\n", "- Feed real per-region contract values and termination dates into section 1.\n", "- Confirm in the order form that WFM/WEM SKUs and the APAC seats are inside the run-rate.\n", - "- Pressure-test the base-price claim: does $2.4M PS really include the NA WFM migration\n", - " and two net-new WFM implementations?" + "- Pressure-test the base-price claim: does the $2.03M SOW really include the NA WFM\n", + " migration and two net-new WFM implementations?" ] }, { @@ -5751,10 +5907,10 @@ "id": "32ebed57", "metadata": { "execution": { - "iopub.execute_input": "2026-07-08T12:20:34.450522Z", - "iopub.status.busy": "2026-07-08T12:20:34.450397Z", - "iopub.status.idle": "2026-07-08T12:20:34.473012Z", - "shell.execute_reply": "2026-07-08T12:20:34.472367Z" + "iopub.execute_input": "2026-07-08T15:15:49.180044Z", + "iopub.status.busy": "2026-07-08T15:15:49.179772Z", + "iopub.status.idle": "2026-07-08T15:15:49.204642Z", + "shell.execute_reply": "2026-07-08T15:15:49.203924Z" } }, "outputs": [ @@ -5793,31 +5949,38 @@ "\n", "| | 2026 | 2027 | 2028 | 3-yr |\n", "|:----------------------------------------------------|----------:|----------:|----------:|-----------:|\n", - "| CCaaS platform licences (contracted, ramp-adjusted) | 0 | 3,200,000 | 3,200,000 | 6,400,000 |\n", - "| Base PS + training (incl. migration + WFM) | 2,567,000 | 0 | 0 | 2,567,000 |\n", + "| CCaaS platform licences (contracted, ramp-adjusted) | 1,600,000 | 3,200,000 | 3,200,000 | 8,000,000 |\n", + "| NTT PS + training (SOW billing milestones) | 1,179,723 | 1,012,723 | 0 | 2,192,446 |\n", + "| NTT managed services (from MCX go-live) | 102,730 | 410,918 | 410,918 | 924,566 |\n", "| Existing platform (term-contract run-off) | 7,300,001 | 7,300,001 | 0 | 14,600,002 |\n", "\n", "#### Business-case flows vs do-nothing baseline ($)\n", "\n", "| | 2026 | 2027 | 2028 |\n", "|:-----------------|-----------:|-----------:|-----------:|\n", - "| programme cost | 9,867,001 | 10,500,001 | 3,200,000 |\n", - "| incremental cost | 2,567,001 | 3,200,001 | -4,100,000 |\n", - "| net | -2,567,001 | -3,092,309 | 6,306,308 |\n", + "| programme cost | 10,182,454 | 11,923,643 | 3,610,918 |\n", + "| incremental cost | 2,882,454 | 4,623,643 | -3,689,082 |\n", + "| net | -2,882,454 | -4,515,950 | 5,895,389 |\n", "\n", "#### KPIs β€” migration + WFM (no AI)\n", - "\n", - "| | Deck rate ($4.3M/yr) | Contracted ($3.2M/yr) |\n", - "|:-------------------------------------|:------------------------------------|:------------------------|\n", - "| 3-yr WFM benefits (verbatim, scoped) | $2.3M | $2.3M |\n", - "| 3-yr incremental cost | $3.9M | $1.7M |\n", - "| 3-yr net | -$1.6M | $647K |\n", - "| ROI (net Γ· incremental cost) | -40% | 39% |\n", - "| NPV @ 13.5% (deck rate) | -$2.0M | -$349K |\n", - "| NPV @ 8.0% (CTM treasury) | -$1.8M | -$22K |\n", - "| Payback (2026–28 window) | beyond 2028 | 35 months (~Nov 2028) |\n", - "| Steady-state run-rate saving | $5.9M/yr | $7.0M/yr |\n", - "| Breakeven | 40 months (~Apr 2029, extrapolated) | 35 months (~Nov 2028) |\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "| | Deck frame ($4.3M/yr, deck PS) | Contracted ($3.2M/yr + SOW) |\n", + "|:-------------------------------------|:------------------------------------|:------------------------------------|\n", + "| 3-yr WFM benefits (verbatim, scoped) | $2.3M | $2.3M |\n", + "| 3-yr incremental cost | $6.0M | $3.8M |\n", + "| 3-yr net | -$3.7M | -$1.5M |\n", + "| ROI (net Γ· incremental cost) | -62% | -39% |\n", + "| NPV @ 13.5% (deck rate) | -$3.8M | -$2.0M |\n", + "| NPV @ 8.0% (CTM treasury) | -$3.8M | -$1.9M |\n", + "| Payback (2026–28 window) | beyond 2028 | beyond 2028 |\n", + "| Steady-state run-rate saving | $5.9M/yr | $6.6M/yr |\n", + "| Breakeven | 44 months (~Aug 2029, extrapolated) | 39 months (~Mar 2029, extrapolated) |\n", "\n", "#### Model state (JSON)\n", "\n", @@ -5830,39 +5993,64 @@ " \"2028\": 2206308\n", " },\n", " \"cost_by_year\": {\n", - " \"2026\": 9867001,\n", - " \"2027\": 10500001,\n", - " \"2028\": 3200000\n", + " \"2026\": 10182454,\n", + " \"2027\": 11923643,\n", + " \"2028\": 3610918\n", " },\n", " \"net_by_year\": {\n", - " \"2026\": -2567001,\n", - " \"2027\": -3092309,\n", - " \"2028\": 6306308\n", + " \"2026\": -2882454,\n", + " \"2027\": -4515950,\n", + " \"2028\": 5895389\n", " },\n", " \"kpis\": {\n", " \"benefits_3yr\": 2314000,\n", - " \"incremental_cost_3yr\": 1667002,\n", - " \"net_3yr\": 646998,\n", - " \"roi\": 0.3881,\n", - " \"npv\": -349036,\n", - " \"discount_rate\": 0.135,\n", - " \"payback\": \"35 months (~Nov 2028)\"\n", - " },\n", - " \"kpis_at_deck_rate\": {\n", - " \"benefits_3yr\": 2314000,\n", - " \"incremental_cost_3yr\": 3867002,\n", - " \"net_3yr\": -1553002,\n", - " \"roi\": -0.4016,\n", - " \"npv\": -1955248,\n", + " \"incremental_cost_3yr\": 3817015,\n", + " \"net_3yr\": -1503015,\n", + " \"roi\": -0.3938,\n", + " \"npv\": -2013126,\n", " \"discount_rate\": 0.135,\n", " \"payback\": \"beyond 2028\"\n", " },\n", - " \"runrate_saving_annual\": 7000000,\n", - " \"breakeven\": \"35 months (~Nov 2028)\",\n", + " \"kpis_at_deck_rate\": {\n", + " \"benefits_3yr\": 2314000,\n", + " \"incremental_cost_3yr\": 6017002,\n", + " \"net_3yr\": -3703002,\n", + " \"roi\": -0.6154,\n", + " \"npv\": -3849521,\n", + " \"discount_rate\": 0.135,\n", + " \"payback\": \"beyond 2028\"\n", + " },\n", + " \"runrate_saving_annual\": 6589082,\n", + " \"breakeven\": \"39 months (~Mar 2029, extrapolated)\",\n", " \"assumptions\": {\n", - " \"ramp_months\": 12,\n", + " \"ramp_months\": 6,\n", " \"licence_annual\": 3200000,\n", " \"deck_ccaas_annual\": 4300000,\n", + " \"ps_contracted_total\": 2025446.48,\n", + " \"ps_milestones\": [\n", + " {\n", + " \"name\": \"SOW Effective Date\",\n", + " \"date\": \"2026-03-15\",\n", + " \"amount\": 607633.94\n", + " },\n", + " {\n", + " \"name\": \"Start of client UAT (first region)\",\n", + " \"date\": \"2026-09-30\",\n", + " \"amount\": 405089.3\n", + " },\n", + " {\n", + " \"name\": \"Start of client UAT (last region)\",\n", + " \"date\": \"2027-06-30\",\n", + " \"amount\": 607633.94\n", + " },\n", + " {\n", + " \"name\": \"Completion of last go-live migration\",\n", + " \"date\": \"2027-09-30\",\n", + " \"amount\": 405089.3\n", + " }\n", + " ],\n", + " \"managed_services_annual\": 410918.4,\n", + " \"mcx_go_live\": \"2026-09-30\",\n", " \"licence_includes_wfm_skus\": true,\n", " \"wfm_regions\": [\n", " \"NA\",\n", @@ -5943,6 +6131,11 @@ " \"ramp_months\": RAMP_MONTHS,\n", " \"licence_annual\": round(LICENCE_ANNUAL),\n", " \"deck_ccaas_annual\": round(TCO_VERBATIM[\"ccaas_annual\"]),\n", + " \"ps_contracted_total\": round(PS_CONTRACTED_TOTAL, 2),\n", + " \"ps_milestones\": [{\"name\": m[\"name\"], \"date\": m[\"date\"].isoformat(),\n", + " \"amount\": m[\"amount\"]} for m in PS_MILESTONES],\n", + " \"managed_services_annual\": MANAGED_SERVICES_ANNUAL,\n", + " \"mcx_go_live\": MCX_GO_LIVE.isoformat(),\n", " \"licence_includes_wfm_skus\": True,\n", " \"wfm_regions\": WFM_REGIONS,\n", " \"migration_and_wfm_in_base_price\": True,\n", @@ -5979,7 +6172,7 @@ "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "12974d31f88c40d99967fc5d44b9e2a4": { + "098f9852a68245118ba3cb197da7c299": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -6032,7 +6225,7 @@ "width": null } }, - "1beaba7af87e4528abd06da3151e882f": { + "0d71f3541aea48d29335b75aabae1a05": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -6085,108 +6278,7 @@ "width": null } }, - "1c591bdaa1e44a55be8d24db8956b3d1": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "ANZ β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_9d4f1c2f10084d87bbfb422c3247f7e1", - "layout_path": null, - "max": 8000000.0, - "min": 0.0, - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "step": 10000.0, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 677320.0 - } - }, - "27e2171a593043338205c5b352f20f3d": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "NA β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_7c01b290a6594aa69680bdd3a4e74995", - "layout_path": null, - "max": 8000000.0, - "min": 0.0, - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "step": 10000.0, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 3348969.0 - } - }, - "2a43f7bc543d446ead3eeaaadbbf3cea": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.date.DateInputWidget", - "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "ASIA β€” contract termination", - "layout": "IPY_MODEL_45fdc31c02434d799c78a20846c791dc", - "layout_path": null, - "max": "", - "min": "", - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "2027-12-31" - } - }, - "2bf25ab141c646aeae3b8e9b80b6762d": { + "1d4ddc81f2c249cf9be44e32e8213b85": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -6208,7 +6300,7 @@ "hidden": false, "label": "WFM β€” ASIA (implement)", "last_changed_at": "", - "layout": "IPY_MODEL_92aaf404ceee451f84aeb8f3252558e0", + "layout": "IPY_MODEL_b50136dc74fb4036b657d83d7b10c5e6", "layout_path": null, "n_toggles": 0, "position": "sidebar", @@ -6220,40 +6312,7 @@ "value": true } }, - "2f3ac4164f5a4454ba631d0df39e5d87": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.date.DateInputWidget", - "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "EMEA β€” contract termination", - "layout": "IPY_MODEL_9a295ac0af8348ebb661f2a0a9be8d17", - "layout_path": null, - "max": "", - "min": "", - "position": "inline", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": "2027-12-31" - } - }, - "3208166b83d6414c93131c6d9a6b1dac": { + "217923ff9f174ff0b1e46c612cb7cd44": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -6306,7 +6365,7 @@ "width": null } }, - "3446e8dd427b4abe8d361ec75bb0a9fa": { + "28eb2b2d2a2a41adaad830ac204d7b39": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -6325,154 +6384,30 @@ "cell_id": "", "disabled": false, "hidden": false, - "label": "Genesys ramp β€” licence-free months", - "layout": "IPY_MODEL_f9673c814e8148b1be991bcf12f12fff", + "label": "ANZ β€” current platform cost ($/yr)", + "layout": "IPY_MODEL_343cc107bc7b4369a4e654d5a2a888b1", "layout_path": null, - "max": 24.0, + "max": 8000000.0, "min": 0.0, "position": "inline", "render_slot_id": null, "source_cell_id": null, - "step": 1.0, + "step": 10000.0, "tabbable": null, "tooltip": null, "url_key": "", - "value": 12.0 + "value": 677320.0 } }, - "3b92df6e04544844a57103b779776678": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "4275d017a33a4f7d87a8ba63fca41b03": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "2.0.0", - "model_name": "HTMLStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "HTMLStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "StyleView", - "background": null, - "description_width": "", - "font_size": null, - "text_color": null - } - }, - "45fdc31c02434d799c78a20846c791dc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "60a9596904a34374bc605974ac3a3235": { + "2be8dde4d1644691add8dae88a36ac81": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", "state": { - "_anywidget_id": "mercury.date.DateInputWidget", - "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_anywidget_id": "mercury.checkbox.CheckboxWidget", + "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", "_model_module": "anywidget", "_model_module_version": "~0.11.*", "_model_name": "AnyModel", @@ -6480,24 +6415,25 @@ "_view_module": "anywidget", "_view_module_version": "~0.11.*", "_view_name": "AnyView", + "appearance": "toggle", "cell_id": "", "disabled": false, "hidden": false, - "label": "NA β€” contract termination", - "layout": "IPY_MODEL_ed3779c8295a44339d7441a254909d33", + "label": "WFM β€” NA (migrate existing users)", + "last_changed_at": "", + "layout": "IPY_MODEL_d9bccb3d954a4ad88eca96950703a866", "layout_path": null, - "max": "", - "min": "", - "position": "inline", + "n_toggles": 0, + "position": "sidebar", "render_slot_id": null, "source_cell_id": null, "tabbable": null, "tooltip": null, "url_key": "", - "value": "2027-12-31" + "value": true } }, - "6b1f795e977941baa1ca60f5f93bb458": { + "343cc107bc7b4369a4e654d5a2a888b1": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -6550,69 +6486,7 @@ "width": null } }, - "6bf6331dbeea4a2e932d9ba01fd28557": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.number.NumberInputWidget", - "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "Genesys licence run-rate ($/yr)", - "layout": "IPY_MODEL_3b92df6e04544844a57103b779776678", - "layout_path": null, - "max": 10000000.0, - "min": 0.0, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "step": 100000.0, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": 3200000.0 - } - }, - "78688c06ca0b4ee19c1a0b81f18d628a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "2.0.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "2.0.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "2.0.0", - "_view_name": "HTMLView", - "cell_id": "", - "description": "", - "description_allow_html": false, - "layout": "IPY_MODEL_82f7314d49cb445481ab1f5a82fd31d6", - "layout_path": null, - "placeholder": "​", - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "style": "IPY_MODEL_4275d017a33a4f7d87a8ba63fca41b03", - "tabbable": null, - "tooltip": null, - "value": "" - } - }, - "7c01b290a6594aa69680bdd3a4e74995": { + "36fd828f151b4a7ba019f601b7a2099e": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -6665,7 +6539,7 @@ "width": null } }, - "82f7314d49cb445481ab1f5a82fd31d6": { + "3d24b7abdffd4cb580cf7a42348d1cd0": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -6718,7 +6592,60 @@ "width": null } }, - "8b8b8d01f0ca46f39c16bd16b93a1475": { + "423a009e5b26436c9ccdb69e031722a4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4d3b2b0c854b4bcab393ef4f89aee1b4": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -6738,7 +6665,7 @@ "disabled": false, "hidden": false, "label": "ANZ β€” contract termination", - "layout": "IPY_MODEL_6b1f795e977941baa1ca60f5f93bb458", + "layout": "IPY_MODEL_3d24b7abdffd4cb580cf7a42348d1cd0", "layout_path": null, "max": "", "min": "", @@ -6751,7 +6678,7 @@ "value": "2027-12-31" } }, - "92aaf404ceee451f84aeb8f3252558e0": { + "58dab83fd1e24bd8b609d9fe3fd8420c": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -6804,166 +6731,7 @@ "width": null } }, - "9a295ac0af8348ebb661f2a0a9be8d17": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "9d4f1c2f10084d87bbfb422c3247f7e1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "9ee437efc7884fe9a1f870a0aead3e90": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "9f85cf3f71b842ba83ed70bd17ea748f": { + "5c47680e253c4f45bbbbfcc76612499b": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -6985,7 +6753,7 @@ "hidden": false, "label": "WFM β€” EMEA (upside option)", "last_changed_at": "", - "layout": "IPY_MODEL_3208166b83d6414c93131c6d9a6b1dac", + "layout": "IPY_MODEL_217923ff9f174ff0b1e46c612cb7cd44", "layout_path": null, "n_toggles": 0, "position": "sidebar", @@ -6997,7 +6765,40 @@ "value": false } }, - "a3797b4763c8482f82c23bea6b27de8f": { + "68b411c315ff4357815d7ff9801f445a": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.date.DateInputWidget", + "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "ASIA β€” contract termination", + "layout": "IPY_MODEL_36fd828f151b4a7ba019f601b7a2099e", + "layout_path": null, + "max": "", + "min": "", + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "2027-12-31" + } + }, + "6bc9b75143f244bbbb3a29cdbcb95e53": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -7050,7 +6851,7 @@ "width": null } }, - "bae439b7a2d04ab29390996726534753": { + "6d231d033d7b4f41b852046f069ebc3f": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -7069,8 +6870,8 @@ "cell_id": "", "disabled": false, "hidden": false, - "label": "EMEA β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_12974d31f88c40d99967fc5d44b9e2a4", + "label": "NA β€” current platform cost ($/yr)", + "layout": "IPY_MODEL_58dab83fd1e24bd8b609d9fe3fd8420c", "layout_path": null, "max": 8000000.0, "min": 0.0, @@ -7081,10 +6882,10 @@ "tabbable": null, "tooltip": null, "url_key": "", - "value": 1204124.0 + "value": 3348969.0 } }, - "bb915be640904627a7e37f0597028fab": { + "720f723fcedb42efa4441ea0f5e2aae2": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -7108,7 +6909,7 @@ "disabled": false, "hidden": false, "label": "NPV discount rate", - "layout": "IPY_MODEL_9ee437efc7884fe9a1f870a0aead3e90", + "layout": "IPY_MODEL_0d71f3541aea48d29335b75aabae1a05", "layout_path": null, "position": "sidebar", "render_slot_id": null, @@ -7119,7 +6920,7 @@ "value": "13.5% (deck)" } }, - "c76324ffcf3e4df5a078d6b3fb6ac13c": { + "74d727dbe17e46cb9c8da2283a3acb50": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -7172,7 +6973,247 @@ "width": null } }, - "caae1a34df0945249b1a3d39320540b1": { + "800dd2c22a2c4172ae2a846f620f97d9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8e89c81717ff408d9e5cb1a949ab337c": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.date.DateInputWidget", + "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "EMEA β€” contract termination", + "layout": "IPY_MODEL_098f9852a68245118ba3cb197da7c299", + "layout_path": null, + "max": "", + "min": "", + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "2027-12-31" + } + }, + "9a1300f4e5374fa6bb1c9717866f8ce1": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "EMEA β€” current platform cost ($/yr)", + "layout": "IPY_MODEL_423a009e5b26436c9ccdb69e031722a4", + "layout_path": null, + "max": 8000000.0, + "min": 0.0, + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "step": 10000.0, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 1204124.0 + } + }, + "b2ec5338e0ba4055b77a57edd08b464c": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.date.DateInputWidget", + "_css": "\n .mljar-date-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-date-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-date-input {\n width: 100%;\n min-height: 40px;\n padding: 9px 10px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n color: #0f172a;\n box-sizing: border-box;\n line-height: 1.4;\n }\n\n .mljar-date-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-date-input:focus {\n outline: none;\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n @media (max-width: 768px) {\n .mljar-date-input {\n min-height: 44px;\n padding: 10px 12px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-date-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-date-label\");\n\n const input = document.createElement(\"input\");\n input.type = \"date\";\n input.classList.add(\"mljar-date-input\");\n\n container.appendChild(topLabel);\n container.appendChild(input);\n el.appendChild(container);\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Date\";\n input.value = model.get(\"value\") || \"\";\n\n const min = model.get(\"min\") || \"\";\n const max = model.get(\"max\") || \"\";\n if (min) input.min = min; else input.removeAttribute(\"min\");\n if (max) input.max = max; else input.removeAttribute(\"max\");\n\n input.disabled = !!model.get(\"disabled\");\n container.style.display = model.get(\"hidden\") ? \"none\" : \"flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n model.set(\"value\", input.value);\n model.save_changes();\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "NA β€” contract termination", + "layout": "IPY_MODEL_e7597a4eb1c14475a440ac83ee50ce1c", + "layout_path": null, + "max": "", + "min": "", + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": "2027-12-31" + } + }, + "b50136dc74fb4036b657d83d7b10c5e6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cc5b28489de346d3b59e3ace05fb2ebb": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "Genesys licence run-rate ($/yr)", + "layout": "IPY_MODEL_800dd2c22a2c4172ae2a846f620f97d9", + "layout_path": null, + "max": 10000000.0, + "min": 0.0, + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "step": 100000.0, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 3200000.0 + } + }, + "cddbd4fd3deb4ed1a29dad5cf082939b": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -7194,7 +7235,7 @@ "hidden": false, "label": "WFM β€” ANZ (implement)", "last_changed_at": "", - "layout": "IPY_MODEL_c76324ffcf3e4df5a078d6b3fb6ac13c", + "layout": "IPY_MODEL_de9d84197e314233938eb4ad7b19ad0b", "layout_path": null, "n_toggles": 0, "position": "sidebar", @@ -7206,94 +7247,7 @@ "value": true } }, - "ed3779c8295a44339d7441a254909d33": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "2.0.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "2.0.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "2.0.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border_bottom": null, - "border_left": null, - "border_right": null, - "border_top": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f7b01a3662ce4ee4a8396fa5df4f048f": { - "model_module": "anywidget", - "model_module_version": "~0.11.*", - "model_name": "AnyModel", - "state": { - "_anywidget_id": "mercury.checkbox.CheckboxWidget", - "_css": "\n .mljar-checkbox-container {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n cursor: pointer;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n color: #0f172a;\n padding-left: 5px;\n }\n .mljar-checkbox-container.is-disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .mljar-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .mljar-checkbox-input:focus-visible + .mljar-checkbox-control {\n box-shadow: inset 0 0 0 2px #007bff;\n }\n\n .mljar-checkbox-label {\n font-size: 14px;\n line-height: 1.2;\n padding-top: 2px;\n }\n\n /* --- Toggle style (15% smaller) --- */\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control {\n position: relative;\n width: 34px;\n height: 19px;\n border-radius: 999px;\n background: #f1f1f2;\n border: 1px solid #cfd1d5;\n transition: background 150ms ease, border-color 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control {\n background: #007bff;\n border-color: #007bff;\n }\n .mljar-checkbox-container.is-toggle .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 15px;\n height: 15px;\n border-radius: 50%;\n background: #ffffff;\n box-shadow: 0 1px 2px rgba(0,0,0,0.12), 0 0 0 1px rgba(0,0,0,0.04);\n transition: transform 150ms ease;\n }\n .mljar-checkbox-container.is-toggle.is-checked .mljar-checkbox-control::after {\n transform: translateX(15px);\n }\n\n /* --- Classic box style --- */\n .mljar-checkbox-container.is-box .mljar-checkbox-control {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid #cfd1d5;\n background: #ffffff;\n display: inline-block;\n position: relative;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control {\n border-color: #007bff;\n background: #007bff;\n }\n .mljar-checkbox-container.is-box.is-checked .mljar-checkbox-control::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 0px;\n width: 5px;\n height: 10px;\n border: solid #fff;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .mljar-checkbox-container:not(.is-disabled):hover .mljar-checkbox-control {\n border-color: #007bff;\n background: #f3f3f4;\n }\n ", - "_dom_classes": [], - "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"label\");\n container.classList.add(\"mljar-checkbox-container\");\n\n const input = document.createElement(\"input\");\n input.type = \"checkbox\";\n input.classList.add(\"mljar-checkbox-input\");\n\n const control = document.createElement(\"span\");\n control.classList.add(\"mljar-checkbox-control\");\n\n const text = document.createElement(\"span\");\n text.classList.add(\"mljar-checkbox-label\");\n\n container.appendChild(input);\n container.appendChild(control);\n container.appendChild(text);\n el.appendChild(container);\n\n function syncFromModel() {\n // appearance\n const a = model.get(\"appearance\") || \"toggle\";\n container.classList.remove(\"is-toggle\",\"is-box\");\n container.classList.add(`is-${a}`);\n input.setAttribute(\"role\", a === \"toggle\" ? \"switch\" : \"checkbox\");\n\n // value\n const v = !!model.get(\"value\");\n if (input.checked !== v) {\n input.checked = v;\n input.setAttribute(\"aria-checked\", String(v));\n }\n container.classList.toggle(\"is-checked\", v);\n\n // disabled\n const d = !!model.get(\"disabled\");\n input.disabled = d;\n container.classList.toggle(\"is-disabled\", d);\n\n // label\n text.textContent = model.get(\"label\") || \"\";\n\n // hidden (exists but not visible)\n container.style.display = model.get(\"hidden\") ? \"none\" : \"inline-flex\";\n }\n\n input.addEventListener(\"change\", () => {\n if (model.get(\"disabled\")) return;\n\n const v = input.checked;\n if (model.get(\"value\") !== v) {\n model.set(\"value\", v);\n model.set(\"last_changed_at\", new Date().toISOString());\n model.set(\"n_toggles\", (model.get(\"n_toggles\") || 0) + 1);\n model.save_changes();\n // model.send({ type: \"changed\", value: v });\n }\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:appearance\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n \n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }\n */\n }\n export default { render };\n ", - "_model_module": "anywidget", - "_model_module_version": "~0.11.*", - "_model_name": "AnyModel", - "_view_count": null, - "_view_module": "anywidget", - "_view_module_version": "~0.11.*", - "_view_name": "AnyView", - "appearance": "toggle", - "cell_id": "", - "disabled": false, - "hidden": false, - "label": "WFM β€” NA (migrate existing users)", - "last_changed_at": "", - "layout": "IPY_MODEL_a3797b4763c8482f82c23bea6b27de8f", - "layout_path": null, - "n_toggles": 0, - "position": "sidebar", - "render_slot_id": null, - "source_cell_id": null, - "tabbable": null, - "tooltip": null, - "url_key": "", - "value": true - } - }, - "f8196ba7d89c487eb23ad614f78881fe": { + "cdf8fe1626a54e7eb048e9e8d27cb2a4": { "model_module": "anywidget", "model_module_version": "~0.11.*", "model_name": "AnyModel", @@ -7313,7 +7267,7 @@ "disabled": false, "hidden": false, "label": "ASIA β€” current platform cost ($/yr)", - "layout": "IPY_MODEL_1beaba7af87e4528abd06da3151e882f", + "layout": "IPY_MODEL_74d727dbe17e46cb9c8da2283a3acb50", "layout_path": null, "max": 8000000.0, "min": 0.0, @@ -7327,7 +7281,35 @@ "value": 2069588.0 } }, - "f9673c814e8148b1be991bcf12f12fff": { + "cf504293e15c4cd99f1a492d73d8e263": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HTMLView", + "cell_id": "", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_6bc9b75143f244bbbb3a29cdbcb95e53", + "layout_path": null, + "placeholder": "​", + "position": "sidebar", + "render_slot_id": null, + "source_cell_id": null, + "style": "IPY_MODEL_f1dd0e56a7224aafa77c1c3c23e9fdb0", + "tabbable": null, + "tooltip": null, + "value": "" + } + }, + "d9afd02316174736b31a7964fe071605": { "model_module": "@jupyter-widgets/base", "model_module_version": "2.0.0", "model_name": "LayoutModel", @@ -7379,6 +7361,217 @@ "visibility": null, "width": null } + }, + "d9bccb3d954a4ad88eca96950703a866": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ddacc3befdc54c278abccd4a5b6b98b5": { + "model_module": "anywidget", + "model_module_version": "~0.11.*", + "model_name": "AnyModel", + "state": { + "_anywidget_id": "mercury.number.NumberInputWidget", + "_css": "\n .mljar-number-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n color: #0f172a;\n margin-bottom: 8px;\n padding-left: 4px;\n padding-right: 4px;\n box-sizing: border-box;\n }\n\n .mljar-number-label {\n margin-bottom: 4px;\n font-weight: 600;\n }\n\n .mljar-number-field-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-height: 40px;\n border: 1px solid #cfd1d5;\n border-radius: 6px;\n background: #ffffff;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n .mljar-number-input {\n flex: 1 1 auto;\n min-width: 0;\n min-height: 100%;\n padding: 7px 10px;\n border: 0;\n border-radius: 0;\n background: #ffffff;\n box-sizing: border-box;\n background-color: #ffffff !important;\n color: #0f172a !important;\n font: inherit;\n line-height: 1.2;\n -moz-appearance: textfield;\n }\n\n .mljar-number-input::-webkit-outer-spin-button,\n .mljar-number-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .mljar-number-input:disabled {\n background: #f5f5f5;\n color: #888;\n cursor: not-allowed;\n }\n\n .mljar-number-input:focus {\n outline: none;\n }\n\n .mljar-number-field-row:focus-within {\n border-color: #007bff;\n border-width: 2px;\n box-shadow: none;\n }\n\n .mljar-number-field-row:focus-within .mljar-number-controls {\n border-left-color: #007bff;\n }\n\n .mljar-number-controls {\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-left: 1px solid #cfd1d5;\n background: #f1f1f2;\n }\n\n .mljar-number-step-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n min-width: 38px;\n min-height: 100%;\n border: 0;\n border-radius: 0;\n background: transparent;\n color: #0f172a;\n font: inherit;\n font-size: 18px;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n padding: 0;\n user-select: none;\n -webkit-user-select: none;\n touch-action: manipulation;\n transition: background-color 0.14s ease, color 0.14s ease;\n }\n\n .mljar-number-step-up {\n border-left: 1px solid #cfd1d5;\n }\n\n .mljar-number-step-btn:hover {\n background: #f3f3f4;\n }\n\n .mljar-number-step-btn:active {\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:focus-visible {\n outline: none;\n background: #e6f2ff;\n color: #007bff;\n }\n\n .mljar-number-step-btn:disabled {\n background: #f5f5f5;\n color: #aaa;\n cursor: not-allowed;\n }\n\n @media (max-width: 768px) {\n .mljar-number-field-row {\n min-height: 44px;\n }\n\n .mljar-number-input {\n min-height: 44px;\n padding: 8px 12px;\n }\n\n .mljar-number-step-btn {\n font-size: 19px;\n width: 44px;\n min-width: 44px;\n }\n }\n ", + "_dom_classes": [], + "_esm": "\n function render({ model, el }) {\n const container = document.createElement(\"div\");\n container.classList.add(\"mljar-number-container\");\n\n const topLabel = document.createElement(\"div\");\n topLabel.classList.add(\"mljar-number-label\");\n\n const fieldRow = document.createElement(\"div\");\n fieldRow.classList.add(\"mljar-number-field-row\");\n\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.classList.add(\"mljar-number-input\");\n\n const decrementBtn = document.createElement(\"button\");\n decrementBtn.type = \"button\";\n decrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-down\");\n decrementBtn.textContent = \"-\";\n decrementBtn.setAttribute(\"aria-label\", \"Decrease value\");\n\n const incrementBtn = document.createElement(\"button\");\n incrementBtn.type = \"button\";\n incrementBtn.classList.add(\"mljar-number-step-btn\", \"mljar-number-step-up\");\n incrementBtn.textContent = \"+\";\n incrementBtn.setAttribute(\"aria-label\", \"Increase value\");\n\n const controls = document.createElement(\"div\");\n controls.classList.add(\"mljar-number-controls\");\n\n controls.appendChild(decrementBtn);\n controls.appendChild(incrementBtn);\n fieldRow.appendChild(input);\n fieldRow.appendChild(controls);\n\n container.appendChild(topLabel);\n container.appendChild(fieldRow);\n el.appendChild(container);\n\n function clamp(val, min, max) {\n if (Number.isFinite(min) && val < min) return min;\n if (Number.isFinite(max) && val > max) return max;\n return val;\n }\n\n function normalizeStep(step) {\n return Number.isFinite(step) && step > 0 ? step : 1;\n }\n\n function snapToStep(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = Math.round((value - base) / safeStep);\n const snapped = base + steps * safeStep;\n const precision = Math.max(\n 0,\n (String(safeStep).split(\".\")[1] || \"\").length\n );\n\n return Number(snapped.toFixed(precision + 2));\n }\n\n function isOnStepGrid(value, min, step) {\n const safeStep = normalizeStep(step);\n const base = Number.isFinite(min) ? min : 0;\n const steps = (value - base) / safeStep;\n const nearest = Math.round(steps);\n const epsilon = Math.max(1e-9, safeStep * 1e-9);\n\n return Math.abs(steps - nearest) <= epsilon;\n }\n\n function getCurrentBounds() {\n return {\n min: Number(model.get(\"min\")),\n max: Number(model.get(\"max\")),\n };\n }\n\n function isTransientDraft(raw) {\n return raw === \"\" || raw === \"-\" || raw === \".\" || raw === \"-.\";\n }\n\n let isEditing = false;\n const INPUT_COMMIT_DEBOUNCE_MS = 400;\n\n function clearPendingDraftCommit() {\n if (debounceTimer) clearTimeout(debounceTimer);\n pendingDraftValue = null;\n }\n\n function parseDraftValue(rawValue) {\n const raw = String(rawValue).trim();\n if (isTransientDraft(raw)) {\n return { kind: \"transient\" };\n }\n\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return { kind: \"invalid\" };\n }\n\n return { kind: \"number\", value };\n }\n\n function commitValue(nextValue, saveNow = true) {\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n const parsed = parseDraftValue(nextValue);\n if (parsed.kind !== \"number\") {\n syncFromModel();\n return;\n }\n\n let v = parsed.value;\n v = clamp(v, min, max);\n v = snapToStep(v, min, step);\n v = clamp(v, min, max);\n input.value = String(v);\n model.set(\"value\", v);\n\n if (saveNow) {\n model.save_changes();\n }\n }\n\n function syncFromModel() {\n topLabel.innerHTML = model.get(\"label\") || \"Enter number\";\n\n const min = Number(model.get(\"min\"));\n const max = Number(model.get(\"max\"));\n const step = Number(model.get(\"step\"));\n\n if (Number.isFinite(min)) input.min = String(min); else input.removeAttribute(\"min\");\n if (Number.isFinite(max)) input.max = String(max); else input.removeAttribute(\"max\");\n if (Number.isFinite(step)) input.step = String(step); else input.removeAttribute(\"step\");\n\n const v = Number(model.get(\"value\"));\n if (!isEditing) {\n input.value = Number.isFinite(v) ? String(v) : \"\";\n }\n\n const disabled = !!model.get(\"disabled\");\n input.disabled = disabled;\n incrementBtn.disabled = disabled;\n decrementBtn.disabled = disabled;\n\n const hidden = !!model.get(\"hidden\");\n container.style.display = hidden ? \"none\" : \"flex\";\n }\n\n let debounceTimer = null;\n let pendingDraftValue = null;\n input.addEventListener(\"focus\", () => {\n isEditing = true;\n });\n\n input.addEventListener(\"input\", () => {\n if (model.get(\"disabled\")) return;\n\n const parsed = parseDraftValue(input.value);\n if (parsed.kind !== \"number\") {\n clearPendingDraftCommit();\n return;\n }\n\n const v = parsed.value;\n const { min, max } = getCurrentBounds();\n const step = Number(model.get(\"step\"));\n if (Number.isFinite(min) && v < min) {\n clearPendingDraftCommit();\n return;\n }\n if (Number.isFinite(max) && v > max) {\n clearPendingDraftCommit();\n return;\n }\n if (!isOnStepGrid(v, min, step)) {\n clearPendingDraftCommit();\n return;\n }\n\n pendingDraftValue = v;\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(() => {\n if (pendingDraftValue === null) return;\n model.set(\"value\", pendingDraftValue);\n model.save_changes();\n pendingDraftValue = null;\n }, INPUT_COMMIT_DEBOUNCE_MS);\n });\n\n input.addEventListener(\"blur\", () => {\n isEditing = false;\n clearPendingDraftCommit();\n commitValue(input.value, true);\n });\n\n input.addEventListener(\"keydown\", event => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n input.blur();\n }\n });\n\n incrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base + step, min, step));\n });\n\n decrementBtn.addEventListener(\"click\", () => {\n if (model.get(\"disabled\")) return;\n const current = Number(model.get(\"value\"));\n const step = normalizeStep(Number(model.get(\"step\")));\n const min = Number(model.get(\"min\"));\n const base = Number.isFinite(current) ? current : 0;\n commitValue(snapToStep(base - step, min, step));\n });\n\n model.on(\"change:value\", syncFromModel);\n model.on(\"change:min\", syncFromModel);\n model.on(\"change:max\", syncFromModel);\n model.on(\"change:step\", syncFromModel);\n model.on(\"change:label\", syncFromModel);\n model.on(\"change:disabled\", syncFromModel);\n model.on(\"change:hidden\", syncFromModel);\n\n syncFromModel();\n\n // ---- read cell id (no DOM modifications) ----\n /*\n const ID_ATTR = \"data-cell-id\";\n const hostWithId = el.closest(`[${ID_ATTR}]`);\n const cellId = hostWithId ? hostWithId.getAttribute(ID_ATTR) : null;\n\n if (cellId) {\n model.set(\"cell_id\", cellId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: cellId });\n } else {\n const mo = new MutationObserver(() => {\n const host = el.closest(`[${ID_ATTR}]`);\n const newId = host?.getAttribute(ID_ATTR);\n if (newId) {\n model.set(\"cell_id\", newId);\n model.save_changes();\n model.send({ type: \"cell_id_detected\", value: newId });\n mo.disconnect();\n }\n });\n mo.observe(document.body, { attributes: true, subtree: true, attributeFilter: [ID_ATTR] });\n }*/\n }\n export default { render };\n ", + "_model_module": "anywidget", + "_model_module_version": "~0.11.*", + "_model_name": "AnyModel", + "_view_count": null, + "_view_module": "anywidget", + "_view_module_version": "~0.11.*", + "_view_name": "AnyView", + "cell_id": "", + "disabled": false, + "hidden": false, + "label": "Genesys ramp β€” licence-free months", + "layout": "IPY_MODEL_d9afd02316174736b31a7964fe071605", + "layout_path": null, + "max": 24.0, + "min": 0.0, + "position": "inline", + "render_slot_id": null, + "source_cell_id": null, + "step": 1.0, + "tabbable": null, + "tooltip": null, + "url_key": "", + "value": 6.0 + } + }, + "de9d84197e314233938eb4ad7b19ad0b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e7597a4eb1c14475a440ac83ee50ce1c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f1dd0e56a7224aafa77c1c3c23e9fdb0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "background": null, + "description_width": "", + "font_size": null, + "text_color": null + } } }, "version_major": 2, diff --git a/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_token_calculator.ipynb b/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_token_calculator.ipynb index a73a527..c9bdd2e 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_token_calculator.ipynb +++ b/studies/202512_GenesysCX/ctm-token-calculator/notebooks/ctm_token_calculator.ipynb @@ -24,7 +24,14 @@ "cell_type": "code", "execution_count": 1, "id": "57efb206", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:20.333726Z", + "iopub.status.busy": "2026-07-08T14:26:20.333472Z", + "iopub.status.idle": "2026-07-08T14:26:20.859435Z", + "shell.execute_reply": "2026-07-08T14:26:20.858762Z" + } + }, "outputs": [ { "name": "stdout", @@ -72,7 +79,14 @@ "cell_type": "code", "execution_count": 2, "id": "361bde24", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:20.863561Z", + "iopub.status.busy": "2026-07-08T14:26:20.863323Z", + "iopub.status.idle": "2026-07-08T14:26:20.893620Z", + "shell.execute_reply": "2026-07-08T14:26:20.892775Z" + } + }, "outputs": [ { "data": { @@ -462,7 +476,14 @@ "cell_type": "code", "execution_count": 3, "id": "72311955", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:20.898251Z", + "iopub.status.busy": "2026-07-08T14:26:20.897714Z", + "iopub.status.idle": "2026-07-08T14:26:20.912681Z", + "shell.execute_reply": "2026-07-08T14:26:20.911767Z" + } + }, "outputs": [ { "data": { @@ -657,16 +678,6 @@ " \n", " \n", " 16\n", - " Email AI (Auto-Suggest)\n", - " per_user_per_month\n", - " NaN\n", - " 0\n", - " πŸ”΄ unknown\n", - " Requires Agent Copilot. Token rate not yet pub...\n", - " \n", - " \n", - " \n", - " 17\n", " Email AI (Auto-Respond)\n", " per_message\n", " NaN\n", @@ -697,8 +708,7 @@ "13 Social Responses per_message 400 \n", "14 AI Translate per_interaction 2 \n", "15 Genesys Cloud Copilot per_interaction 20 \n", - "16 Email AI (Auto-Suggest) per_user_per_month NaN \n", - "17 Email AI (Auto-Respond) per_message NaN \n", + "16 Email AI (Auto-Respond) per_message NaN \n", "\n", " tokens_per_unit confidence \\\n", "0 0 🟒 confirmed \n", @@ -718,7 +728,6 @@ "14 0 🟒 confirmed \n", "15 0 🟒 confirmed \n", "16 0 πŸ”΄ unknown \n", - "17 0 πŸ”΄ unknown \n", "\n", " notes \\\n", "0 IVR self-service voice bot minutes; 17 min per... \n", @@ -737,8 +746,7 @@ "13 Social Post Responses; 400 outbound messages p... \n", "14 AI translation; 2 translations per token. \n", "15 20 AI actions per token; Genesys Cloud knowled... \n", - "16 Requires Agent Copilot. Token rate not yet pub... \n", - "17 Feature not yet available; rate TBD. \n", + "16 Feature not yet available; rate TBD. \n", "\n", " source \n", "0 https://help.genesys.cloud/articles/genesys-cl... \n", @@ -757,8 +765,7 @@ "13 https://help.genesys.cloud/articles/genesys-cl... \n", "14 https://help.genesys.cloud/articles/genesys-cl... \n", "15 https://help.genesys.cloud/articles/genesys-cl... \n", - "16 \n", - "17 " + "16 " ] }, "metadata": {}, @@ -784,7 +791,14 @@ "cell_type": "code", "execution_count": 4, "id": "8b24676f", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:20.916526Z", + "iopub.status.busy": "2026-07-08T14:26:20.916164Z", + "iopub.status.idle": "2026-07-08T14:26:20.921252Z", + "shell.execute_reply": "2026-07-08T14:26:20.920512Z" + } + }, "outputs": [ { "name": "stdout", @@ -809,12 +823,19 @@ "cell_type": "code", "execution_count": 5, "id": "810e9dae", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:20.923553Z", + "iopub.status.busy": "2026-07-08T14:26:20.923302Z", + "iopub.status.idle": "2026-07-08T14:26:20.986453Z", + "shell.execute_reply": "2026-07-08T14:26:20.985763Z" + } + }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "eff7ea970d66430abeb6bfa7d4774f78", + "model_id": "638076a7ebde4826978fd461fd23d9c3", "version_major": 2, "version_minor": 0 }, @@ -828,7 +849,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9f99dcb8205740ae86cbaeb7d313da80", + "model_id": "12e64cff7b2a49c9ab1285c5655f4457", "version_major": 2, "version_minor": 0 }, @@ -908,7 +929,14 @@ "cell_type": "code", "execution_count": 6, "id": "65773422", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:20.989712Z", + "iopub.status.busy": "2026-07-08T14:26:20.989541Z", + "iopub.status.idle": "2026-07-08T14:26:20.995164Z", + "shell.execute_reply": "2026-07-08T14:26:20.994448Z" + } + }, "outputs": [ { "name": "stdout", @@ -989,12 +1017,19 @@ "cell_type": "code", "execution_count": 7, "id": "872af216", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:20.997810Z", + "iopub.status.busy": "2026-07-08T14:26:20.997439Z", + "iopub.status.idle": "2026-07-08T14:26:21.019924Z", + "shell.execute_reply": "2026-07-08T14:26:21.018568Z" + } + }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "16b420088b6e40cf98654573e7887cfd", + "model_id": "f1eaf046c0694901a1630c26d9bfbe85", "version_major": 2, "version_minor": 0 }, @@ -1059,7 +1094,14 @@ "cell_type": "code", "execution_count": 8, "id": "07ed3a9e", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:21.025205Z", + "iopub.status.busy": "2026-07-08T14:26:21.024604Z", + "iopub.status.idle": "2026-07-08T14:26:21.953313Z", + "shell.execute_reply": "2026-07-08T14:26:21.952528Z" + } + }, "outputs": [ { "data": { @@ -1202,7 +1244,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -1238,7 +1280,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -1262,7 +1304,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -1298,7 +1340,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -1325,7 +1367,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -1361,7 +1403,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -1376,7 +1418,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -1412,7 +1454,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -1568,7 +1610,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -1604,7 +1646,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -1695,7 +1737,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -1731,13 +1773,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -1773,7 +1815,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -1911,8 +1953,7 @@ } } } - }, - "image/png": "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9rZwwXxyR7ni0nvwePl2yWr5X6O7Yj3PAwQQQAABBBBAAAEEEEAAAQQQQACByAmEJ1UoEd6PXn2vQ7dhcvbsORner6PExMSNr7VqWlse6dBfHqxXTbJnyxxnrY4cPxNnWigmMGxVKBSpI5ICR0+ckStiSPmL5GfAshFAAAEEEEAAAQQiI6D7whQEollAYxLhindkTp86pDRRGZQ6cOiItHt+iJw4eUomDHvRNeCkSqVuKSLtW9aXejUrhhSNyhBAAAEEEEAAAQQQQAABBBBAAAEELk0g6oJSR48dl4fb95Vz587Laz2esGNE6ThRmil1Vd6ccTTaNa8fZxoTEEAAAQQQQAABBBBAAAEEEEAAAQQiKxB1QamDh47awcuVrXHbXh69bFkyyXcz3rSPU6Z073aUwoz2pX8UBBBAAAEEEEAAAQQQQAABBBBAAIHICkRdUCpfnhyydtF7ftW0y96ar8a5Pt+3a2vX6UxEAAEEEEAAAQQQQAABBBBAAAEEEEhcgbijgyfu8lkaAggggAACCCCAAAIIIIAAAggggEAyFCAolQw/dN4yAggggAACCCCAAAIIIIAAAgggEGkBglKR/gRYPgIIIIAAAggggAACCCCAAAIIIJAMBQhKJcMPnbeMAAIIIIAAAggggAACCCCAAAIIRFqAoFSkPwGWjwACCCCAAAIIIIAAAggggAACCCRDAYJSyfBD5y0jgAACCCCAAAIIIIAAAggggAACkRYgKBXpT4DlI4AAAggggAACCCCAAAIIIIAAAslQgKBUMvzQecsIIIAAAggggAACCCCAAAIIIIBApAUISkX6E2D5CCCAAAIIIIAAAggggAACCCCAQDIUICiVDD903jICCCCAAAIIIIAAAggggAACCCAQaQGCUpH+BFg+AggggAACCCCAAAIIIIAAAgggkAwFCEolww+dt4wAAggggAACCCCAAAIIIIAAAghEWoCgVKQ/AZaPAAIIIIAAAggggAACCCCAAAIIJEMBglLJ8EPnLSOAAAIIIIAAAggggAACCCCAAAKRFiAoFelPgOUjgAACCCCAAAIIIIAAAggggAACyVCAoFQy/NB5ywgggAACCCCAAAIIIIAAAggggECkBQhKRfoTYPkIIIAAAggggAACCCCAAAIIIIBAMhQgKJUMP3TeMgIIIIAAAggggAACCCCAAAIIIBBpAYJS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" + } }, "metadata": {}, "output_type": "display_data" @@ -2081,7 +2122,14 @@ "cell_type": "code", "execution_count": 9, "id": "e7fc3a73", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:21.955295Z", + "iopub.status.busy": "2026-07-08T14:26:21.955169Z", + "iopub.status.idle": "2026-07-08T14:26:21.969100Z", + "shell.execute_reply": "2026-07-08T14:26:21.968473Z" + } + }, "outputs": [ { "data": { @@ -2325,7 +2373,14 @@ "cell_type": "code", "execution_count": 10, "id": "3ac4fee1", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:21.971514Z", + "iopub.status.busy": "2026-07-08T14:26:21.971380Z", + "iopub.status.idle": "2026-07-08T14:26:21.987749Z", + "shell.execute_reply": "2026-07-08T14:26:21.987124Z" + } + }, "outputs": [ { "data": { @@ -2406,13 +2461,6 @@ " \n", " \n", " 7\n", - " Email AI (Auto-Suggest)\n", - " β€”\n", - " 0\n", - " unknown\n", - " \n", - " \n", - " 8\n", " AI Translate\n", " β€”\n", " 0\n", @@ -2431,8 +2479,7 @@ "6 Direct Messaging \n", "2 Agentic Virtual Agent \n", "5 AI Summary & Insights \n", - "7 Email AI (Auto-Suggest) \n", - "8 AI Translate \n", + "7 AI Translate \n", "\n", " scope annual_cost confidence \n", "0 all sites 2,788,232 confirmed \n", @@ -2442,8 +2489,7 @@ "6 NAM, EMEA, AUZ, APAC HK, APAC SG, APAC SH, APA... 132 confirmed \n", "2 β€” 0 confirmed \n", "5 β€” 0 confirmed \n", - "7 β€” 0 unknown \n", - "8 β€” 0 confirmed " + "7 β€” 0 confirmed " ] }, "metadata": {}, @@ -2470,7 +2516,14 @@ "cell_type": "code", "execution_count": 11, "id": "fa4c9cdc", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:21.989793Z", + "iopub.status.busy": "2026-07-08T14:26:21.989658Z", + "iopub.status.idle": "2026-07-08T14:26:22.467383Z", + "shell.execute_reply": "2026-07-08T14:26:22.466582Z" + } + }, "outputs": [ { "data": { @@ -2661,37 +2714,11 @@ }, "yaxis": "y" }, - { - "hovertemplate": "cost_line=Email AI (Auto-Suggest)
year=%{x}
$/yr=%{y}", - "legendgroup": "Email AI (Auto-Suggest)", - "marker": { - "color": "#B6E880", - "pattern": { - "shape": "" - } - }, - "name": "Email AI (Auto-Suggest)", - "orientation": "v", - "showlegend": true, - "textposition": "auto", - "type": "bar", - "x": [ - "Y1", - "Y2", - "Y3" - ], - "xaxis": "x", - "y": { - "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "dtype": "f8" - }, - "yaxis": "y" - }, { "hovertemplate": "cost_line=AI Translate
year=%{x}
$/yr=%{y}", "legendgroup": "AI Translate", "marker": { - "color": "#FF97FF", + "color": "#B6E880", "pattern": { "shape": "" } @@ -2798,7 +2825,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2834,7 +2861,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2858,7 +2885,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2894,7 +2921,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2921,7 +2948,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -2957,7 +2984,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -2972,7 +2999,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -3008,7 +3035,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -3164,7 +3191,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -3200,7 +3227,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -3291,7 +3318,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -3327,13 +3354,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -3369,7 +3396,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -3504,8 +3531,8 @@ "xaxis": { "anchor": "y", "domain": [ - 0, - 1 + 0.0, + 1.0 ], "title": { "text": "year" @@ -3514,16 +3541,15 @@ "yaxis": { "anchor": "x", "domain": [ - 0, - 1 + 0.0, + 1.0 ], "title": { "text": "$/yr" } } } - }, - "image/png": "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" + } }, "metadata": {}, "output_type": "display_data" @@ -3555,7 +3581,14 @@ "cell_type": "code", "execution_count": 12, "id": "380914e0", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:22.469658Z", + "iopub.status.busy": "2026-07-08T14:26:22.469486Z", + "iopub.status.idle": "2026-07-08T14:26:22.491013Z", + "shell.execute_reply": "2026-07-08T14:26:22.490362Z" + } + }, "outputs": [ { "data": { @@ -3662,7 +3695,14 @@ "cell_type": "code", "execution_count": 13, "id": "ae5fb48b", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:22.493375Z", + "iopub.status.busy": "2026-07-08T14:26:22.493214Z", + "iopub.status.idle": "2026-07-08T14:26:22.601521Z", + "shell.execute_reply": "2026-07-08T14:26:22.600862Z" + } + }, "outputs": [ { "data": { @@ -3911,7 +3951,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -3947,7 +3987,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -3971,7 +4011,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4007,7 +4047,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -4034,7 +4074,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4070,7 +4110,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -4085,7 +4125,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4121,7 +4161,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -4277,7 +4317,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4313,7 +4353,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -4404,7 +4444,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4440,13 +4480,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4482,7 +4522,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -4617,8 +4657,8 @@ "xaxis": { "anchor": "y", "domain": [ - 0, - 1 + 0.0, + 1.0 ], "title": { "text": "year" @@ -4627,16 +4667,15 @@ "yaxis": { "anchor": "x", "domain": [ - 0, - 1 + 0.0, + 1.0 ], "title": { "text": "$/yr" } } } - }, - "image/png": "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" + } }, "metadata": {}, "output_type": "display_data" @@ -4757,7 +4796,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4793,7 +4832,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -4817,7 +4856,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4853,7 +4892,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -4880,7 +4919,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4916,7 +4955,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -4931,7 +4970,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -4967,7 +5006,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -5123,7 +5162,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -5159,7 +5198,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -5250,7 +5289,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -5286,13 +5325,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -5328,7 +5367,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -5464,8 +5503,7 @@ "tickformat": "$,.0f" } } - }, - "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAF5CAYAAABOeZm4AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEpaADAAQAAAABAAABeQAAAAAXU+yOAABAAElEQVR4AezdB3wUxRfA8ZeEEnoJvXcRECkqRUCkCCIgKlWqDUFAQQWkKwqIf0RQwYIIiIpSlGJFmoCggIKCiNJ77zVAkv+8CXdckktykORyufzGD9ze7t7uzHePmHv35m1AhGlCQwABBBBAAAEEEEAAAQQQQAABBBBAwIsCgV48F6dCAAEEEEAAAQQQQAABBBBAAAEEEEDAChCU4o2AAAIIIIAAAggggAACCCCAAAIIIOB1AYJSXifnhAgggAACCCCAAAIIIIAAAggggAACBKV4DyCAAAIIIIAAAggggAACCCCAAAIIeF2AoJTXyTkhAggggAACCCCAAAIIIIAAAggggABBKd4DCCCAAAIIIIAAAggggAACCCCAAAJeFyAo5XVyTogAAggggAACCCCAAAIIIIAAAgggQFCK9wACCCCAAAIIIIAAAggggAACCCCAgNcFCEp5nZwTIoAAAggggAACCCCAAAIIIIAAAggQlOI9gAACCCCAAAIIIIAAAggggAACCCDgdQGCUl4n54QIIIAAAggggAACCCCAAAIIIIAAAgSleA8ggAACCCCAAAIIIIAAAggggAACCHhdgKCU18k5IQIIIIAAAggggAACCCCAAAIIIIAAQSneAwgggAACCCCAAAIIIIAAAggggAACXhcgKOV1ck6IAAIIIIAAAggggAACCCCAAAIIIEBQivcAAggggAACCCCAAAIIIIAAAggggIDXBQhKeZ2cEyKAAAIIIIAAAggggAACCCCAAAIIEJTiPYAAAggggAACCCCAAAIIIIAAAggg4HUBglJeJ+eECCCAAAIIIIAAAggggAACCCCAAAIEpXgPIIAAAggggAACCCCAAAIIIIAAAgh4XYCglNfJOSECCCCAAAIIIIAAAggggAACCCCAAEEp3gMIIIAAAggggAACCCCAAAIIIIAAAl4XICjldXJOiAACCCCAAAIIIIAAAggggAACCCBAUIr3AAIIIIAAAggggAACCCCAAAIIIICA1wUISnmdnBMigAAC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BwiwfM8PHCQOkQRIgARIgARI4O8E1m7dJ/1HzJZR/VszIPV3PFxCAiRAAiRAAiRAAr6eAINSvv4QcYAkQAIkQAIkQAIWAl++fJXDJy/IrEUbjTvfgC4NJW/2dJaP+ZsESIAESIAESIAESMAPEWD5nh86WBwqCZAACZAACQR0AjfvPBS3Ce6SPlViqVOluIQKGTygI+H+kwAJkAAJkAAJkICfJcCglJ89dBw4CZAACZAACZAACZAACZAACZAACZAACfhdAv/Xjh2UAAAAIBAD+4c2x8EaHPPnuunKCRAgQIAAAQIECBAgQIAAAQIEqgJOqepyugkQIECAAAECBAgQIECAAAECYQGnVHg86QQIECBAgAABAgQIECBAgACBqoBTqrqcbgIECBAgQIAAAQIECBAgQIBAWMApFR5POgECBAgQIECAAAECBAgQIECgKuCUqi6nmwABAgQIECBAgAABAgQIECAQFnBKhceTToAAAQIECBAgQIAAAQIECBCoCjilqsvpJkCAAAECBAgQIECAAAECBAiEBZxS4fGkEyBAgAABAgQIECBAgAABAgSqAk6p6nK6CRAgQIAAAQIECBAgQIAAAQJhAadUeDzpBAgQIECAAAECBAgQIECAAIGqgFOqupxuAgQIECBAgAABAgQIECBAgEBYwCkVHk86AQIECBAgQIAAAQIECBAgQKAqcESgVxWFhY3QAAAAAElFTkSuQmCC" + } }, "metadata": {}, "output_type": "display_data" @@ -5509,7 +5547,14 @@ "cell_type": "code", "execution_count": 14, "id": "7bd6456e", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:22.604241Z", + "iopub.status.busy": "2026-07-08T14:26:22.603951Z", + "iopub.status.idle": "2026-07-08T14:26:22.670128Z", + "shell.execute_reply": "2026-07-08T14:26:22.669363Z" + } + }, "outputs": [ { "data": { @@ -5598,14 +5643,6 @@ " \n", " \n", " 7\n", - " Email AI (Auto-Suggest)\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " \n", - " \n", - " 8\n", " AI Translate\n", " 0\n", " 0\n", @@ -5613,7 +5650,7 @@ " 4,434,000\n", " \n", " \n", - " 9\n", + " 8\n", " NICE IEX (NAM)\n", " 650,000\n", " 1,300,000\n", @@ -5621,7 +5658,7 @@ " 3,250,000\n", " \n", " \n", - " 10\n", + " 9\n", " Legacy CC platform\n", " 0\n", " 0\n", @@ -5629,7 +5666,7 @@ " 0\n", " \n", " \n", - " 11\n", + " 10\n", " Voice Bot deflection (labour avoided)\n", " 6,981,080\n", " 11,169,728\n", @@ -5637,7 +5674,7 @@ " 31,414,859\n", " \n", " \n", - " 12\n", + " 11\n", " STA coaching (AHT)\n", " 562,386\n", " 899,817\n", @@ -5645,7 +5682,7 @@ " 2,530,735\n", " \n", " \n", - " 13\n", + " 12\n", " Voice AHT (knowledge surfacing)\n", " 1,237,248\n", " 1,979,597\n", @@ -5653,7 +5690,7 @@ " 5,567,617\n", " \n", " \n", - " 14\n", + " 13\n", " Voice ACW (summarization)\n", " 2,099,573\n", " 3,359,317\n", @@ -5661,7 +5698,7 @@ " 9,448,078\n", " \n", " \n", - " 15\n", + " 14\n", " Supervisor time (AI summaries/insights)\n", " 318,500\n", " 509,600\n", @@ -5669,7 +5706,7 @@ " 1,433,250\n", " \n", " \n", - " 16\n", + " 15\n", " Agentic Virtual Agent deflection (labour avoided)\n", " 0\n", " 2,077,459\n", @@ -5677,7 +5714,7 @@ " 4,544,441\n", " \n", " \n", - " 17\n", + " 16\n", " TOTAL COSTS\n", " 5,222,876\n", " 7,120,784\n", @@ -5685,7 +5722,7 @@ " 24,586,835\n", " \n", " \n", - " 18\n", + " 17\n", " TOTAL TAKEOUTS\n", " 650,000\n", " 1,300,000\n", @@ -5693,7 +5730,7 @@ " 3,250,000\n", " \n", " \n", - " 19\n", + " 18\n", " TOTAL BENEFITS\n", " 11,198,787\n", " 19,995,517\n", @@ -5701,7 +5738,7 @@ " 54,938,980\n", " \n", " \n", - " 20\n", + " 19\n", " NET\n", " 6,625,911\n", " 14,174,734\n", @@ -5709,7 +5746,7 @@ " 33,602,145\n", " \n", " \n", - " 21\n", + " 20\n", " Cumulative net\n", " 6,625,911\n", " 20,800,644\n", @@ -5729,21 +5766,20 @@ "4 Agent Copilot [named] 1,002,240 1,002,240 \n", "5 AI Summary & Insights 0 0 \n", "6 Direct Messaging 132 144 \n", - "7 Email AI (Auto-Suggest) 0 0 \n", - "8 AI Translate 0 0 \n", - "9 NICE IEX (NAM) 650,000 1,300,000 \n", - "10 Legacy CC platform 0 0 \n", - "11 Voice Bot deflection (labour avoided) 6,981,080 11,169,728 \n", - "12 STA coaching (AHT) 562,386 899,817 \n", - "13 Voice AHT (knowledge surfacing) 1,237,248 1,979,597 \n", - "14 Voice ACW (summarization) 2,099,573 3,359,317 \n", - "15 Supervisor time (AI summaries/insights) 318,500 509,600 \n", - "16 Agentic Virtual Agent deflection (labour avoided) 0 2,077,459 \n", - "17 TOTAL COSTS 5,222,876 7,120,784 \n", - "18 TOTAL TAKEOUTS 650,000 1,300,000 \n", - "19 TOTAL BENEFITS 11,198,787 19,995,517 \n", - "20 NET 6,625,911 14,174,734 \n", - "21 Cumulative net 6,625,911 20,800,644 \n", + "7 AI Translate 0 0 \n", + "8 NICE IEX (NAM) 650,000 1,300,000 \n", + "9 Legacy CC platform 0 0 \n", + "10 Voice Bot deflection (labour avoided) 6,981,080 11,169,728 \n", + "11 STA coaching (AHT) 562,386 899,817 \n", + "12 Voice AHT (knowledge surfacing) 1,237,248 1,979,597 \n", + "13 Voice ACW (summarization) 2,099,573 3,359,317 \n", + "14 Supervisor time (AI summaries/insights) 318,500 509,600 \n", + "15 Agentic Virtual Agent deflection (labour avoided) 0 2,077,459 \n", + "16 TOTAL COSTS 5,222,876 7,120,784 \n", + "17 TOTAL TAKEOUTS 650,000 1,300,000 \n", + "18 TOTAL BENEFITS 11,198,787 19,995,517 \n", + "19 NET 6,625,911 14,174,734 \n", + "20 Cumulative net 6,625,911 20,800,644 \n", "\n", " Y3 3-yr Total \n", "0 2,788,232 8,364,695 \n", @@ -5753,21 +5789,20 @@ "4 1,002,240 3,006,720 \n", "5 0 0 \n", "6 144 420 \n", - "7 0 0 \n", - "8 4,434,000 4,434,000 \n", - "9 1,300,000 3,250,000 \n", - "10 0 0 \n", - "11 13,264,052 31,414,859 \n", - "12 1,068,533 2,530,735 \n", - "13 2,350,772 5,567,617 \n", - "14 3,989,188 9,448,078 \n", - "15 605,150 1,433,250 \n", - "16 2,466,982 4,544,441 \n", - "17 12,243,176 24,586,835 \n", - "18 1,300,000 3,250,000 \n", - "19 23,744,677 54,938,980 \n", - "20 12,801,501 33,602,145 \n", - "21 33,602,145 61,028,701 " + "7 4,434,000 4,434,000 \n", + "8 1,300,000 3,250,000 \n", + "9 0 0 \n", + "10 13,264,052 31,414,859 \n", + "11 1,068,533 2,530,735 \n", + "12 2,350,772 5,567,617 \n", + "13 3,989,188 9,448,078 \n", + "14 605,150 1,433,250 \n", + "15 2,466,982 4,544,441 \n", + "16 12,243,176 24,586,835 \n", + "17 1,300,000 3,250,000 \n", + "18 23,744,677 54,938,980 \n", + "19 12,801,501 33,602,145 \n", + "20 33,602,145 61,028,701 " ] }, "metadata": {}, @@ -5806,7 +5841,14 @@ "cell_type": "code", "execution_count": 15, "id": "c869422e", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:22.672308Z", + "iopub.status.busy": "2026-07-08T14:26:22.672148Z", + "iopub.status.idle": "2026-07-08T14:26:22.841046Z", + "shell.execute_reply": "2026-07-08T14:26:22.840390Z" + } + }, "outputs": [ { "data": { @@ -5932,7 +5974,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -5968,7 +6010,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -5992,7 +6034,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6028,7 +6070,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -6055,7 +6097,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6091,7 +6133,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -6106,7 +6148,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6142,7 +6184,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -6298,7 +6340,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6334,7 +6376,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -6425,7 +6467,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6461,13 +6503,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6503,7 +6545,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -6644,8 +6686,7 @@ "tickformat": "$,.0f" } } - }, - "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAF5CAYAAABOeZm4AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEpaADAAQAAAABAAABeQAAAAAXU+yOAABAAElEQVR4AezdBXxUZ9bA4ZOJe5AQ3AptoS11N2pbd/du3W23LtRt67bfbrt199JSV+pGnRYoDsGdhOjkO+ed3GGSzEwmySQkk//bX5iZO1efO2nI4ZzzJtXoEAYCCCCAAAIIIIAAAggggAACCCCAAAJtKOBrw2NxKAQQQAABBBBAAAEEEEAAAQQQQAABBJwAQSk+CAgggAACCCCAAAIIIIAAAggggAACbS5AUKrNyTkgAggggAACCCCAAAIIIIAAAggggABBKT4DCCCAAAIIIIAAAggggAACCCCAAAJtLkBQqs3JOSACCCCAAAIIIIAAAggggAACCCCAAEEpPgMIIIAAAggggAACCCCAAAIIIIAAAm0uQFCqzck5IAIIIIAAAggggAACCCCAAAIIIIAAQSk+AwgggAACCCCAAAIIIIAAAggggAACbS5AUKrNyTkgAggggAACCCCAAAIIIIAAAggggABBKT4DCCCAAAIIIIAAAggggAACCCCAAAJtLkBQqs3JOSACCCCAAAIIIIAAAggggAACCCCAAEEpPgMIIIAAAggggAACCCCAAAIIIIAAAm0uQFCqzck5IAIIIIAAAggggAACCCCAAAIIIIAAQSk+AwgggAACCCCAAAIIIIAAAggggAACbS5AUKrNyTkgAggggAACCCCAAAIIIIAAAggggABBKT4DCCCAAAIIIIAAAggggAACCCCAAAJtLkBQqs3JOSACCCCAAAIIIIAAAggggAACCCCAAEEpPgMIIIAAAggggAACCCCAAAIIIIAAAm0uQFCqzck5IAIIIIAAAggggAACCCCAAAIIIIAAQSk+AwgggAACCCCAAAIIIIAAAggggAACbS5AUKrNyTkgAggggAACCCCAAAIIIIAAAggggABBKT4DCCCAAAIIIIAAAggggAACCCCAAAJtLkBQqs3JOSACCCCAAAIIIIAAAggggAACCCCAAEEpPgMIIIAAAggggAACCCCAAAIIIIAAAm0uQFCqzck5IAIIIIAAAggggAAC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" + } }, "metadata": {}, "output_type": "display_data" @@ -6676,7 +6717,14 @@ "cell_type": "code", "execution_count": 16, "id": "bab4c657", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:22.843681Z", + "iopub.status.busy": "2026-07-08T14:26:22.843516Z", + "iopub.status.idle": "2026-07-08T14:26:23.481559Z", + "shell.execute_reply": "2026-07-08T14:26:23.480845Z" + } + }, "outputs": [ { "data": { @@ -6690,13 +6738,12 @@ "orientation": "h", "type": "bar", "x": { - "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJskqLbE8UDAN2jxJQ4hQXDS8BGK9jHBwC6o95R7PsE=", + "bdata": "AAAAAAAAAAAAAAAAAAAAAACbJKi2xPFAwDdo8SUOIUFw0vARivYxwcAuqPeUez7B", "dtype": "f8" }, "y": [ "agentic_va_deflection", "email_auto_respond_rate", - "email_auto_suggest_acceptance", "voice_bot_deflection", "voice_bot_avg_minutes", "voice_knowledge_eligibility", @@ -6708,13 +6755,12 @@ "orientation": "h", "type": "bar", "x": { - "bdata": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALJrSpjG8cCgJLkX6A0hwUDS8BGK9jFBoC6o95R7PkE=", + "bdata": "AAAAAAAAAAAAAAAAAAAAAACya0qYxvHAoCS5F+gNIcFA0vARivYxQaAuqPeUez5B", "dtype": "f8" }, "y": [ "agentic_va_deflection", "email_auto_respond_rate", - "email_auto_suggest_acceptance", "voice_bot_deflection", "voice_bot_avg_minutes", "voice_knowledge_eligibility", @@ -6800,7 +6846,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6836,7 +6882,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -6860,7 +6906,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6896,7 +6942,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -6923,7 +6969,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -6959,7 +7005,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -6974,7 +7020,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7010,7 +7056,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -7166,7 +7212,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7202,7 +7248,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -7293,7 +7339,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7329,13 +7375,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7371,7 +7417,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -7510,8 +7556,7 @@ } } } - }, - "image/png": "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" + } }, "metadata": {}, "output_type": "display_data" @@ -7521,7 +7566,7 @@ "# Tornado: vary each scenario driver Β±25% (clamped to 0–1), hold others\n", "DRIVERS = [\"voice_bot_deflection\", \"voice_bot_avg_minutes\", \"agentic_va_deflection\",\n", " \"voice_summarization_eligibility\", \"voice_knowledge_eligibility\",\n", - " \"email_auto_respond_rate\", \"email_auto_suggest_acceptance\"]\n", + " \"email_auto_respond_rate\"]\n", "\n", "def npv_with(field, factor):\n", " v = getattr(scenario, field) * factor\n", @@ -7548,7 +7593,14 @@ "cell_type": "code", "execution_count": 17, "id": "2b3dee90", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:23.485264Z", + "iopub.status.busy": "2026-07-08T14:26:23.485095Z", + "iopub.status.idle": "2026-07-08T14:26:24.814498Z", + "shell.execute_reply": "2026-07-08T14:26:24.813929Z" + } + }, "outputs": [ { "name": "stdout", @@ -7671,7 +7723,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7707,7 +7759,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -7731,7 +7783,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7767,7 +7819,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -7794,7 +7846,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7830,7 +7882,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -7845,7 +7897,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -7881,7 +7933,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -8037,7 +8089,7 @@ }, "colorscale": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -8073,7 +8125,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], @@ -8164,7 +8216,7 @@ ], "sequential": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -8200,13 +8252,13 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ], "sequentialminus": [ [ - 0, + 0.0, "#0d0887" ], [ @@ -8242,7 +8294,7 @@ "#fdca26" ], [ - 1, + 1.0, "#f0f921" ] ] @@ -8377,8 +8429,8 @@ "xaxis": { "anchor": "y", "domain": [ - 0, - 1 + 0.0, + 1.0 ], "title": { "text": "Email Auto-Respond rate" @@ -8387,16 +8439,15 @@ "yaxis": { "anchor": "x", "domain": [ - 0, - 1 + 0.0, + 1.0 ], "title": { "text": "3-yr NPV ($)" } } } - }, - "image/png": "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+Vqc+hBAAAEEEEAAAQQQQAABBBBAAAEEhOl7PAQIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAABBBBAAAEEEEAAAQQQQAABBBAgKMUzgAACCCCAAAIIIIAAAggggAACCCDgcwGCUj4np0IEEEAAAQQQQAABBBBAAAEEEEAAAYJSPAMIIIAAAggggAACCCCAAAIIIIAAAj4XICjlc3IqRAAB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" + } }, "metadata": {}, "output_type": "display_data" @@ -8432,14 +8483,21 @@ "cell_type": "code", "execution_count": 18, "id": "57611721", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-07-08T14:26:24.819382Z", + "iopub.status.busy": "2026-07-08T14:26:24.819221Z", + "iopub.status.idle": "2026-07-08T14:26:25.044813Z", + "shell.execute_reply": "2026-07-08T14:26:25.043869Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Excel β†’ /Users/robert/git/palladium/studies/202512_GenesysCX/ctm-token-calculator/exports/ctm_token_calculator_realistic.xlsx\n", - "JSON β†’ /Users/robert/git/palladium/studies/202512_GenesysCX/ctm-token-calculator/exports/ctm_scenario_realistic.json\n" + "Excel β†’ /home/robert/git/palladium/studies/202512_GenesysCX/ctm-token-calculator/exports/ctm_token_calculator_realistic.xlsx\n", + "JSON β†’ /home/robert/git/palladium/studies/202512_GenesysCX/ctm-token-calculator/exports/ctm_scenario_realistic.json\n" ] } ], @@ -8505,7 +8563,1047 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.13.7" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "06907bbe86db48ccbc956fd27da8a519": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "ToggleButtonsStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "ToggleButtonsStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "button_width": "", + "description_width": "", + "font_weight": "" + } + }, + "0cd5200fee1443ab8bf177dcda697022": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "FloatSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "FloatSliderView", + "behavior": "drag-tap", + "continuous_update": true, + "description": "VA %", + "description_allow_html": false, + "disabled": false, + "layout": "IPY_MODEL_df8a7801a2f748248ce4c6a19ae22015", + "max": 0.5, + "min": 0.0, + "orientation": "horizontal", + "readout": true, + "readout_format": ".0%", + "step": 0.01, + "style": "IPY_MODEL_997e3595822a430c929fdfb2080dd1bb", + "tabbable": null, + "tooltip": null, + "value": 0.15 + } + }, + "12617a53edb749218e7216a9a740cef8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "12e64cff7b2a49c9ab1285c5655f4457": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "ToggleButtonsModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "ToggleButtonsModel", + "_options_labels": [ + "1", + "2", + "3" + ], + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "ToggleButtonsView", + "button_style": "", + "description": "Year", + "description_allow_html": false, + "disabled": false, + "icons": [], + "index": 0, + "layout": "IPY_MODEL_746c833373da4dce892bf4db54864f28", + "style": "IPY_MODEL_4d7601df2bdd4653ae4c732ed6e7fd0a", + "tabbable": null, + "tooltip": null, + "tooltips": [] + } + }, + "12f81e44138e45b08c3def7a64399b41": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "FloatSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "FloatSliderView", + "behavior": "drag-tap", + "continuous_update": true, + "description": "Bot %", + "description_allow_html": false, + "disabled": false, + "layout": "IPY_MODEL_a118aede53134fd8b46a76f20e507670", + "max": 0.7, + "min": 0.0, + "orientation": "horizontal", + "readout": true, + "readout_format": ".0%", + "step": 0.01, + "style": "IPY_MODEL_4fb09530f11240a393f0fc5b9abf0493", + "tabbable": null, + "tooltip": null, + "value": 0.35 + } + }, + "164cc23f3e5c402999bbcf1927410042": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_12f81e44138e45b08c3def7a64399b41", + "IPY_MODEL_b86814e4dbf14956b98cf2b2a69efaa0", + "IPY_MODEL_0cd5200fee1443ab8bf177dcda697022" + ], + "layout": "IPY_MODEL_b4622b7d885a4db08b3c06f2287aceae", + "tabbable": null, + "tooltip": null + } + }, + "2124cc42f17e412695d938edaffa91c8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "21ce7908fb3d4185afeb53af2ca52a1f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "2883e60da5d444a8b3b9f1fd2b4dc5a3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "4d7601df2bdd4653ae4c732ed6e7fd0a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "ToggleButtonsStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "ToggleButtonsStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "button_width": "", + "description_width": "", + "font_weight": "" + } + }, + "4fb09530f11240a393f0fc5b9abf0493": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "638076a7ebde4826978fd461fd23d9c3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "ToggleButtonsModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "ToggleButtonsModel", + "_options_labels": [ + "floor", + "realistic", + "stretch" + ], + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "ToggleButtonsView", + "button_style": "", + "description": "Scenario", + "description_allow_html": false, + "disabled": false, + "icons": [], + "index": 1, + "layout": "IPY_MODEL_2124cc42f17e412695d938edaffa91c8", + "style": "IPY_MODEL_06907bbe86db48ccbc956fd27da8a519", + "tabbable": null, + "tooltip": null, + "tooltips": [] + } + }, + "638411fa1d2f4a56848f845b33a6cd2e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "70e5f83eee964da2acfbac46a79ac10e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "FloatSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "FloatSliderView", + "behavior": "drag-tap", + "continuous_update": true, + "description": "Completion", + "description_allow_html": false, + "disabled": false, + "layout": "IPY_MODEL_a2e49111d5364f9aafcb7280bd689664", + "max": 1.0, + "min": 0.3, + "orientation": "horizontal", + "readout": true, + "readout_format": ".0%", + "step": 0.01, + "style": "IPY_MODEL_7dc8918d4e0f49b1b73a5777ca6e2a0c", + "tabbable": null, + "tooltip": null, + "value": 0.7 + } + }, + "73ce8fea4d9444999e165a019f0a68ed": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "746c833373da4dce892bf4db54864f28": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7dc8918d4e0f49b1b73a5777ca6e2a0c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "8df8182142a542baac5e799c7cdecedf": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "95d9a518fdef4741835a899418270cce": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_70e5f83eee964da2acfbac46a79ac10e", + "IPY_MODEL_cf9e8cb142324efda5fd5fc23ea86c62", + "IPY_MODEL_a28d1ef5ddee4259a160036809f1a2b2" + ], + "layout": "IPY_MODEL_638411fa1d2f4a56848f845b33a6cd2e", + "tabbable": null, + "tooltip": null + } + }, + "997e3595822a430c929fdfb2080dd1bb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "a118aede53134fd8b46a76f20e507670": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a28d1ef5ddee4259a160036809f1a2b2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "FloatSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "FloatSliderView", + "behavior": "drag-tap", + "continuous_update": true, + "description": "Callback", + "description_allow_html": false, + "disabled": false, + "layout": "IPY_MODEL_12617a53edb749218e7216a9a740cef8", + "max": 0.3, + "min": 0.0, + "orientation": "horizontal", + "readout": true, + "readout_format": ".0%", + "step": 0.01, + "style": "IPY_MODEL_d1fe3ddf07dd4de7993bb9678116f9cc", + "tabbable": null, + "tooltip": null, + "value": 0.05 + } + }, + "a2e49111d5364f9aafcb7280bd689664": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a68f48677402477c92e96916c5201f83": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b4622b7d885a4db08b3c06f2287aceae": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b86814e4dbf14956b98cf2b2a69efaa0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "FloatSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "FloatSliderView", + "behavior": "drag-tap", + "continuous_update": true, + "description": "Bot min", + "description_allow_html": false, + "disabled": false, + "layout": "IPY_MODEL_8df8182142a542baac5e799c7cdecedf", + "max": 5.0, + "min": 0.5, + "orientation": "horizontal", + "readout": true, + "readout_format": ".2f", + "step": 0.1, + "style": "IPY_MODEL_21ce7908fb3d4185afeb53af2ca52a1f", + "tabbable": null, + "tooltip": null, + "value": 1.5 + } + }, + "cf9e8cb142324efda5fd5fc23ea86c62": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "FloatSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "FloatSliderView", + "behavior": "drag-tap", + "continuous_update": true, + "description": "Labour real.", + "description_allow_html": false, + "disabled": false, + "layout": "IPY_MODEL_73ce8fea4d9444999e165a019f0a68ed", + "max": 1.0, + "min": 0.3, + "orientation": "horizontal", + "readout": true, + "readout_format": ".0%", + "step": 0.01, + "style": "IPY_MODEL_2883e60da5d444a8b3b9f1fd2b4dc5a3", + "tabbable": null, + "tooltip": null, + "value": 0.8 + } + }, + "d1fe3ddf07dd4de7993bb9678116f9cc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "df8a7801a2f748248ce4c6a19ae22015": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f1eaf046c0694901a1630c26d9bfbe85": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "VBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "VBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "VBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_164cc23f3e5c402999bbcf1927410042", + "IPY_MODEL_95d9a518fdef4741835a899418270cce" + ], + "layout": "IPY_MODEL_a68f48677402477c92e96916c5201f83", + "tabbable": null, + "tooltip": null + } + } + }, + "version_major": 2, + "version_minor": 0 + } } }, "nbformat": 4, diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_appendix4.py b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_appendix4.py index a07e98b..a33f684 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_appendix4.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_appendix4.py @@ -41,6 +41,10 @@ def test_ramp_zeroes_year_one_licences(): 2028: 4_300_000.0} assert a4.licence_costs_by_year(0)[2026] == 4_300_000.0 assert a4.licence_costs_by_year(18)[2027] == pytest.approx(4_300_000 * 6 / 12) + # The order form's ramp is 6 months β€” licences bill from July 2026. + assert a4.DEFAULT_RAMP_MONTHS == 6 + assert a4.licence_costs_by_year() == {2026: 2_150_000.0, 2027: 4_300_000.0, + 2028: 4_300_000.0} def test_current_state_run_off(): @@ -113,3 +117,21 @@ def test_contracted_overlays_verbatim(): assert a4.TCO_VERBATIM["ccaas_annual"] == 4_300_000 # deck record intact assert a4.tco("current_annual") == a4.TCO_VERBATIM["current_annual"] assert a4.licence_costs_by_year(12, a4.tco("ccaas_annual"))[2027] == 3_200_000 + + +def test_sow_milestones_and_managed_services(): + assert a4.PS_CONTRACTED_TOTAL == pytest.approx(2_025_446.48) + for m in a4.PS_MILESTONES: # amounts match the shares + assert m["amount"] == pytest.approx(m["share"] * a4.PS_CONTRACTED_TOTAL, + abs=0.01) + ps = a4.ps_costs_by_year(contracted=True) # 50/50 across 2026-27 + assert ps[2026] == pytest.approx(607_633.94 + 405_089.30 + 167_000) + assert ps[2027] == pytest.approx(607_633.94 + 405_089.30) + assert ps[2028] == 0.0 + # The deck's verbatim year-1 lump stays intact for the as-pitched frame. + assert a4.ps_costs_by_year() == {2026: 2_567_000, 2027: 0.0, 2028: 0.0} + # Managed services bill from the month after MCX go-live (Sep 30 β†’ Oct). + ms = a4.managed_services_by_year() + assert ms[2026] == pytest.approx(410_918.40 * 3 / 12) + assert ms[2027] == pytest.approx(410_918.40) + assert ms[2028] == pytest.approx(410_918.40) diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_benefit_model.py b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_benefit_model.py index 1e3b114..75ea8db 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_benefit_model.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_benefit_model.py @@ -47,11 +47,9 @@ def test_email_benefit_split(): [site], FeatureScope("Email AI (Auto-Respond)", ["Small"]), "realistic", year=1, ) + # Auto-Suggest is not a separate line β€” it lives inside Agent Copilot. lines = set(df["benefit_line"]) - assert lines == { - "Email Auto-Respond (displaced handling)", - "Email Auto-Suggest (drafting time)", - } + assert lines == {"Email Auto-Respond (displaced handling)"} # auto-respond: 1,000Γ—12 Γ— 20% Γ— 600s Γ— 50% Γ— $0.01 = $7,200 respond = df[df["benefit_line"].str.contains("Respond")]["annual_value"].sum() assert respond == pytest.approx(7_200) diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_meters.py b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_meters.py index d1b2b85..f9e8997 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_meters.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_meters.py @@ -28,8 +28,8 @@ def test_all_spec_meters_present(): "AI Translate", # Genesys Cloud Copilot "Genesys Cloud Copilot", - # Email AI (rates TBD) - "Email AI (Auto-Suggest)", "Email AI (Auto-Respond)", + # Email AI (rate TBD; Auto-Suggest is inside Agent Copilot) + "Email AI (Auto-Respond)", } assert expected == set(DEFAULT_METERS) @@ -59,9 +59,7 @@ def test_confirmed_rates(): def test_unknown_meters_flagged(): unknown = {f for f, m in DEFAULT_METERS.items() if m.confidence is Confidence.UNKNOWN} - assert unknown == { - "Email AI (Auto-Suggest)", "Email AI (Auto-Respond)", - } + assert unknown == {"Email AI (Auto-Respond)"} assert Confidence.UNKNOWN.icon == "πŸ”΄" assert Confidence.CONFIRMED.icon == "🟒" diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_migration_wfm.py b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_migration_wfm.py index 5c48a51..25dcc4e 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tests/test_migration_wfm.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tests/test_migration_wfm.py @@ -41,20 +41,46 @@ def test_runrate_saving_annual(): assert mw.runrate_saving_annual(regions=["NA"]) == pytest.approx(3_000_000) assert mw.runrate_saving_annual(licence_annual=4_800_000, regions=[]) == pytest.approx(2_500_000) + # Contracted frame: managed services stay in the run-rate forever. + assert mw.runrate_saving_annual( + a4.tco("ccaas_annual"), managed_annual=a4.MANAGED_SERVICES_ANNUAL + ) == pytest.approx(6_589_081.60) + + +def _default_wfm_benefits_by_year(): + ben = mw.wfm_benefits_by_year(_default_benefit_rollout()) + return {y: float(ben.loc[ben.year == y, "benefit"].sum()) for y in a4.YEARS} def test_breakeven_extrapolates_past_window(): + # Deck frame: deck licence rate (6-month ramp), verbatim PS lump, + # no managed services. cs = a4.current_state_inputs(SITES) cur = a4.current_costs_by_year(cs) lic = a4.licence_costs_by_year() ps = a4.ps_costs_by_year() total = {y: cur[y] + lic[y] + ps[y] for y in a4.YEARS} - ben = mw.wfm_benefits_by_year(_default_benefit_rollout()) - ben_y = {y: float(ben.loc[ben.year == y, "benefit"].sum()) for y in a4.YEARS} - inc, net = a4.case_flows(total, ben_y) - assert sum(net.values()) == pytest.approx(-1_553_000, abs=1_000) + inc, net = a4.case_flows(total, _default_wfm_benefits_by_year()) + assert sum(net.values()) == pytest.approx(-3_703_000, abs=1_000) label = mw.runrate_breakeven_label(net, mw.runrate_saving_annual()) - assert label == "40 months (~Apr 2029, extrapolated)" + assert label == "44 months (~Aug 2029, extrapolated)" + + +def test_contracted_frame_with_sow_and_managed_services(): + # Contracted frame: signed licence rate, SOW PS milestones, managed + # services from MCX go-live β€” the case the notebook leads with. + cs = a4.current_state_inputs(SITES) + cur = a4.current_costs_by_year(cs) + lic = a4.licence_costs_by_year(annual=a4.tco("ccaas_annual")) + ps = a4.ps_costs_by_year(contracted=True) + man = a4.managed_services_by_year() + total = {y: cur[y] + lic[y] + ps[y] + man[y] for y in a4.YEARS} + inc, net = a4.case_flows(total, _default_wfm_benefits_by_year()) + assert sum(net.values()) == pytest.approx(-1_503_013, abs=1_000) + runrate = mw.runrate_saving_annual( + a4.tco("ccaas_annual"), managed_annual=a4.MANAGED_SERVICES_ANNUAL) + label = mw.runrate_breakeven_label(net, runrate) + assert label == "39 months (~Mar 2029, extrapolated)" def test_breakeven_defers_in_window_and_guards_zero_runrate(): diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/appendix4.py b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/appendix4.py index 565f7d5..d72da02 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/appendix4.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/appendix4.py @@ -107,6 +107,26 @@ TCO_CONTRACTED: dict[str, float] = { "ccaas_annual": 3_200_000, # signed licence run-rate (deck pitched $4.3M/yr) } +#: NTT professional services β€” SOW billing milestones (🟒 contractual). +#: The deck's verbatim anchor books $2.4M PS in year 1; the signed SOW +#: bills $2,025,446.48 in four milestones split 50/50 across 2026-27. +PS_MILESTONES: list[dict] = [ + {"name": "SOW Effective Date", "date": dt.date(2026, 3, 15), + "share": 0.30, "amount": 607_633.94}, + {"name": "Start of client UAT (first region)", "date": dt.date(2026, 9, 30), + "share": 0.20, "amount": 405_089.30}, + {"name": "Start of client UAT (last region)", "date": dt.date(2027, 6, 30), + "share": 0.30, "amount": 607_633.94}, + {"name": "Completion of last go-live migration", "date": dt.date(2027, 9, 30), + "share": 0.20, "amount": 405_089.30}, +] +PS_CONTRACTED_TOTAL = sum(m["amount"] for m in PS_MILESTONES) + +#: NTT managed services β€” commences billing at MCX go-live (🟒 contractual). +#: Not in the deck's TCO at all; an ongoing run-rate cost thereafter. +MANAGED_SERVICES_ANNUAL = 410_918.40 +MCX_GO_LIVE = dt.date(2026, 9, 30) + def tco(key: str) -> float: """Contracted value where one exists, else the deck's verbatim anchor.""" @@ -120,7 +140,7 @@ REALIZE_MONTH = {r: m + BENEFIT_LAG_MONTHS for r, m in IMPL_MONTH.items()} #: NA Gantt exception: Email implemented Jan 2027, realizes Apr 2027. NA_EMAIL_IMPL_MONTH = 13 -DEFAULT_RAMP_MONTHS = 12 # Genesys ramp programme +DEFAULT_RAMP_MONTHS = 6 # Genesys ramp programme (🟒 order form) DEFAULT_TERMINATION = dt.date(2027, 12, 31) # current-platform term contracts # ── Region ⇄ site mapping ──────────────────────────────────────────── @@ -275,12 +295,42 @@ def licence_costs_by_year( for y in YEARS} -def ps_costs_by_year() -> dict[int, float]: - """Base professional services + training β€” verbatim, year 1 only.""" - return {2026: TCO_VERBATIM["prof_services_y1"] + TCO_VERBATIM["training_y1"], +def ps_costs_by_year(contracted: bool = False) -> dict[int, float]: + """Base professional services + training. + + Verbatim: the deck's $2.4M PS lump plus training, all in year 1. + Contracted: PS phased on the SOW billing milestones (50/50 across + 2026-27, $2.03M total); training stays the verbatim year-1 line β€” + the SOW milestones don't itemize it separately. + """ + training = TCO_VERBATIM["training_y1"] + if contracted: + ps = {y: 0.0 for y in YEARS} + for m in PS_MILESTONES: + ps[m["date"].year] += m["amount"] + return {y: ps[y] + (training if y == 2026 else 0.0) for y in YEARS} + return {2026: TCO_VERBATIM["prof_services_y1"] + training, 2027: 0.0, 2028: 0.0} +def ps_milestones_dataframe() -> pd.DataFrame: + """The SOW billing milestones as a display table.""" + return pd.DataFrame(PS_MILESTONES) + + +def managed_services_by_year( + annual: float = MANAGED_SERVICES_ANNUAL, start: dt.date = MCX_GO_LIVE +) -> dict[int, float]: + """Managed services bill from the month after go-live (Sep 30 β†’ Oct), + then run at the full annual rate β€” an ongoing cost with no end date + inside the model window.""" + def _months(y: int) -> int: + if y < start.year: + return 0 + return 12 if y > start.year else 12 - start.month + return {y: annual * _months(y) / 12 for y in YEARS} + + # ── Token consumption (missing cost #1) ────────────────────────────── @@ -293,7 +343,6 @@ def claim_scenario(email_auto_respond_rate: float = 0.255) -> Scenario: voice_summarization_eligibility=0.0, voice_knowledge_eligibility=0.0, # unused by the Appendix-4 scope set email_auto_respond_rate=email_auto_respond_rate, - email_auto_suggest_acceptance=0.0, # Auto-Suggest is inside Copilot (V2 #1) consumption_cost_realization={1: 1.0, 2: 1.0, 3: 1.0}, ) diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/benefit_model.py b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/benefit_model.py index eb69d10..22333ef 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/benefit_model.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/benefit_model.py @@ -126,11 +126,12 @@ def calculate_email_ai_benefit( params: str = "realistic", rollout: RolloutPlan | None = None, ) -> pd.DataFrame: - """Email Auto-Respond (full displacement at the respond rate) plus - Auto-Suggest (time saving Γ— acceptance on the remainder).""" + """Email Auto-Respond β€” full displacement at the respond rate. + + (Email Auto-Suggest is not a separate benefit line: it is included + in Agent Copilot, whose per-user meter carries the drafting help.)""" sc = get_scenario(scenario) if isinstance(scenario, str) else scenario ro = rollout or NO_ROLLOUT - suggest_saving = _param("email_auto_suggest_time_saving", params) realization = sc.realization(year) rows = [] for s in sites: @@ -145,11 +146,6 @@ def calculate_email_ai_benefit( respond_seconds = ( annual_emails * respond_rate * s.email_aht_seconds * realization ) - suggest_seconds = ( - annual_emails * (1 - respond_rate) - * sc.email_auto_suggest_acceptance * s.email_aht_seconds - * suggest_saving * realization - ) rate = s.agent_cost_per_second rows.append( { @@ -160,15 +156,6 @@ def calculate_email_ai_benefit( "confidence": Confidence.UNKNOWN.value, # meter rate unsourced } ) - rows.append( - { - "benefit_line": "Email Auto-Suggest (drafting time)", - "scope": s.site_name, - "annual_value": suggest_seconds * rate - * ro.fraction_live(s.site_name, year), - "confidence": Confidence.UNKNOWN.value, - } - ) return _df(rows) diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/cost_model.py b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/cost_model.py index a24e1d0..c92541f 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/cost_model.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/cost_model.py @@ -86,8 +86,7 @@ def calculate_per_user_ai_cost( use_contracted: bool = False, rollout: RolloutPlan | None = None, ) -> pd.DataFrame: - """Per-user-per-month AI features (STA, Agent Copilot, AI Translate, - Email Auto-Suggest). + """Per-user-per-month AI features (STA, Agent Copilot, AI Translate). No adoption ramp and no rounding (users Γ— tokens/user/month is exact) β€” but token usage only starts at site go-live, so the year diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/defaults.py b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/defaults.py index 020e60f..3dee028 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/defaults.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/defaults.py @@ -210,15 +210,9 @@ DEFAULT_METERS: dict[str, TokenMeter] = { ), source_url=_GENESYS_TOKEN_METERS, ), - # ── Email AI (rates not yet published) ──────────────────────── - TokenMeter( - feature="Email AI (Auto-Suggest)", - meter_type=MeterType.PER_USER_PER_MONTH, - units_per_token=0.0, - tokens_per_unit=0.0, - confidence=Confidence.UNKNOWN, - notes="Requires Agent Copilot. Token rate not yet published.", - ), + # ── Email AI (rate not yet published) ───────────────────────── + # Email Auto-Suggest is included in Agent Copilot's per-user + # meter (no standalone SKU) β€” only Auto-Respond is listed here. TokenMeter( feature="Email AI (Auto-Respond)", meter_type=MeterType.PER_MESSAGE, @@ -423,7 +417,6 @@ CTM_DEFAULT_FEATURE_SCOPES: list[FeatureScope] = [ FeatureScope("AI Summary & Insights", ALL_SITE_NAMES, phase=1, adoption_curve=_RAMP), FeatureScope("Direct Messaging", ALL_SITE_NAMES, phase=1, adoption_curve=_RAMP), - FeatureScope("Email AI (Auto-Suggest)", ["NAM", "EMEA"], phase=2), FeatureScope("AI Translate", ["APAC HK", "APAC SG", "APAC SH", "APAC GZ", "APAC JP", "APAC TW"], phase=3), diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/migration_wfm.py b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/migration_wfm.py index 8a5a250..52bede2 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/migration_wfm.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/migration_wfm.py @@ -57,13 +57,18 @@ def runrate_saving_annual( licence_annual: float | None = None, regions: list[str] | None = None, baseline_annual: float | None = None, + managed_annual: float = 0.0, ) -> float: """Steady-state annual saving once term contracts end and the ramp - is over: (baseline βˆ’ licence run-rate) + scoped WFM annual values. + is over: (baseline βˆ’ licence run-rate βˆ’ managed services) + scoped + WFM annual values. + + Defaults are the deck frame (deck licence rate, no managed + services); the contracted frame passes ``a4.MANAGED_SERVICES_ANNUAL``. """ lic = a4.TCO_VERBATIM["ccaas_annual"] if licence_annual is None else licence_annual base = a4.TCO_VERBATIM["current_annual"] if baseline_annual is None else baseline_annual - return (base - lic) + wfm_annual_runrate(regions) + return (base - lic - managed_annual) + wfm_annual_runrate(regions) def runrate_breakeven_label( diff --git a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/scenarios.py b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/scenarios.py index 0ecf65b..e94f82c 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/scenarios.py +++ b/studies/202512_GenesysCX/ctm-token-calculator/tokencalc/scenarios.py @@ -25,7 +25,6 @@ class Scenario: voice_summarization_eligibility: float voice_knowledge_eligibility: float email_auto_respond_rate: float # share of email auto-responded - email_auto_suggest_acceptance: float # ── Virtual Agent benefit realization factors ─────────────────── # Applied to both Voice Bot and Agentic VA deflection benefits. @@ -75,7 +74,6 @@ BENEFIT_PARAMS: dict[str, dict[str, float]] = { "digital_aht_reduction": {"claim": 0.18, "realistic": 0.085}, # 5-12% Y1 "digital_acw_reduction": {"claim": 1.00, "realistic": 0.40}, # 30-50% Y1 "sta_aht_reduction": {"claim": 0.04, "realistic": 0.015}, # 1-2% Y1 - "email_auto_suggest_time_saving": {"claim": 0.40, "realistic": 0.30}, # Γ— acceptance; Genesys claims 40% # ESTIMATED lines (no Genesys claim published): "supervisor_copilot_time_saving": {"claim": 0.10, "realistic": 0.05}, "predictive_routing_aht_reduction": {"claim": 0.04, "realistic": 0.02}, @@ -97,7 +95,6 @@ SCENARIOS: dict[str, Scenario] = { voice_summarization_eligibility=0.50, voice_knowledge_eligibility=0.40, email_auto_respond_rate=0.10, - email_auto_suggest_acceptance=0.25, # VA realization: conservative β€” low completion, limited staffing flex # Combined: 0.60 Γ— 0.70 Γ— (1 βˆ’ 0.05) β‰ˆ 0.40 va_completion_rate=0.60, @@ -113,7 +110,6 @@ SCENARIOS: dict[str, Scenario] = { voice_summarization_eligibility=0.70, voice_knowledge_eligibility=0.60, email_auto_respond_rate=0.20, - email_auto_suggest_acceptance=0.40, # VA realization: production midpoints per spec analysis # Combined: 0.70 Γ— 0.80 Γ— (1 βˆ’ 0.05) β‰ˆ 0.53 va_completion_rate=0.70, @@ -129,7 +125,6 @@ SCENARIOS: dict[str, Scenario] = { voice_summarization_eligibility=0.90, voice_knowledge_eligibility=0.80, email_auto_respond_rate=0.50, - email_auto_suggest_acceptance=0.60, # VA realization: optimistic β€” high completion, good staffing flexibility # Combined: 0.75 Γ— 0.85 Γ— (1 βˆ’ 0.03) β‰ˆ 0.62 va_completion_rate=0.75,