/* ===========================================================================
   Allora design language — web (financial model)
   Brand Guidelines v1.0 (Aug 2025). Standalone; not shared with density app.
   =========================================================================== */

/* ---- Fonts -------------------------------------------------------------- */
@font-face { font-family:'Giga Sans'; font-weight:300; font-style:normal;
  src:url('/static/fonts/GigaSans-Light.otf') format('opentype'); font-display:swap; }
@font-face { font-family:'Giga Sans'; font-weight:400; font-style:normal;
  src:url('/static/fonts/GigaSans-Regular.otf') format('opentype'); font-display:swap; }
@font-face { font-family:'Giga Sans'; font-weight:500; font-style:normal;
  src:url('/static/fonts/GigaSans-Medium.otf') format('opentype'); font-display:swap; }
@font-face { font-family:'Giga Sans'; font-weight:600; font-style:normal;
  src:url('/static/fonts/GigaSans-SemiBold.otf') format('opentype'); font-display:swap; }
@font-face { font-family:'Giga Sans'; font-weight:700; font-style:normal;
  src:url('/static/fonts/GigaSans-Bold.otf') format('opentype'); font-display:swap; }

/* ---- Tokens ------------------------------------------------------------- */
:root{
  --noxen:#0A2536; --navaris:#33566D; --nivelle:#F3FAFF;
  --cymaris:#5EA8A8; --claria:#DAF6EF;
  --muted:#6E8597; --hairline:#D7E0E6;
  --noxen-2:#123549;                 /* raised surface on dark */
  --noxen-3:#1B4159;                 /* hover surface on dark */

  --font-ui:'Giga Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --font-num:'Giga Sans',ui-monospace,'SF Mono',sans-serif;

  --radius:14px;
  --shadow:0 1px 3px rgba(10,37,54,.08),0 8px 30px rgba(10,37,54,.07);
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
html,body{margin:0;padding:0;}
body{
  font-family:var(--font-ui); color:var(--noxen); background:#fff;
  line-height:1.5; -webkit-font-smoothing:antialiased;
}
.num{font-family:var(--font-num); font-variant-numeric:tabular-nums lining-nums;}

/* ---- Header band (Noxen) + Cymaris accent rule ------------------------- */
.app-header{
  background:var(--noxen); color:#fff;
  display:flex; align-items:center; justify-content:space-between;
  padding:0 clamp(16px,4vw,40px); height:64px;
  border-bottom:3px solid var(--cymaris);
  position:sticky; top:0; z-index:20;
}
.app-header img.wordmark{height:26px;}
.app-header .ctx{
  font-size:.72rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--cymaris); font-weight:600;
}
.hnav{display:flex; align-items:center; gap:22px;}
.navlink{
  color:#fff; text-decoration:none; font-size:.88rem; font-weight:600;
  padding:.35rem .9rem; border:1px solid rgba(255,255,255,.28);
  border-radius:999px; transition:all .15s;
}
.navlink:hover{background:var(--cymaris); border-color:var(--cymaris);
  color:var(--noxen);}

/* ---- Layout ------------------------------------------------------------- */
main{max-width:1240px; margin:0 auto; padding:0 clamp(16px,4vw,40px) 64px;}
.hero{padding:44px 0 26px; max-width:640px;}
.hero h1{font-size:clamp(2rem,4.6vw,3rem); margin:0 0 8px; color:var(--noxen);
  letter-spacing:-.01em;}
.hero h1 em{font-style:normal; color:var(--cymaris);}
.hero p{color:var(--muted); font-size:1.06rem; margin:0;}
.hero a{color:var(--cymaris); font-weight:600; text-decoration:none;}
.hero a:hover{text-decoration:underline;}

.layout-app{display:grid; grid-template-columns:350px minmax(0,1fr);
  gap:30px; align-items:start;}
@media (max-width:920px){ .layout-app{grid-template-columns:1fr;} }

/* ---- Control panel (dark) ----------------------------------------------- */
.panel{
  background:linear-gradient(168deg,var(--noxen) 0%,#0D2C41 60%,#103850 100%);
  color:#fff; border-radius:var(--radius); box-shadow:var(--shadow);
  padding:8px 22px 18px; position:sticky; top:80px;
  max-height:calc(100vh - 96px); overflow:auto;
}
@media (max-width:920px){ .panel{position:static; max-height:none;} }

.step{padding:18px 0 14px; border-bottom:1px solid rgba(255,255,255,.09);}
.step.last{border-bottom:none; padding-bottom:6px;}
.step-head{display:flex; align-items:center; gap:10px; margin-bottom:10px;}
.step-head h3{margin:0; font-size:1.02rem; font-weight:600; color:#fff;}
.step-no{
  width:22px; height:22px; border-radius:50%; flex:0 0 22px;
  background:var(--cymaris); color:var(--noxen); font-weight:700;
  font-size:.78rem; display:flex; align-items:center; justify-content:center;
}
.hint{font-size:.76rem; color:rgba(255,255,255,.55); margin:8px 0 0; line-height:1.45;}

.fld{display:flex; flex-direction:column; gap:4px; margin:10px 0;}
.fld span{font-size:.72rem; font-weight:600; letter-spacing:.04em;
  text-transform:uppercase;}
.fld input, .fld select{
  font-family:var(--font-num); font-variant-numeric:tabular-nums;
  border-radius:8px; padding:.55rem .65rem; font-size:1rem; width:100%;
}
.fld.dark span{color:rgba(255,255,255,.65);}
.fld.dark input{
  background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.18);
  color:#fff; caret-color:var(--cymaris);
}
.fld.dark input:focus{outline:none; border-color:var(--cymaris);
  box-shadow:0 0 0 3px rgba(94,168,168,.28); background:rgba(255,255,255,.1);}
.fld.slim{max-width:170px;}
.fld-cap{display:block; font-size:.72rem; font-weight:600; letter-spacing:.04em;
  text-transform:uppercase; color:rgba(255,255,255,.65); margin:12px 0 6px;}

/* Segmented control (radio pills) */
.seg{display:flex; gap:6px;}
.seg.wrap{flex-wrap:wrap;}
.seg label{flex:1;}
.seg input{position:absolute; opacity:0; pointer-events:none;}
.seg span{
  display:block; text-align:center; padding:.5rem .8rem; border-radius:8px;
  background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.16);
  color:rgba(255,255,255,.85); font-size:.85rem; font-weight:600;
  cursor:pointer; white-space:nowrap; transition:all .15s;
}
.seg span:hover{background:rgba(255,255,255,.13);}
.seg input:checked + span{
  background:var(--cymaris); border-color:var(--cymaris); color:var(--noxen);
  box-shadow:0 2px 10px rgba(94,168,168,.4);
}
.seg input:focus-visible + span{outline:2px solid var(--claria); outline-offset:2px;}

/* Custom positioning fields — revealed when the Custom pill is selected */
.custom-fields{display:none; margin-top:10px; padding:12px 14px;
  border-radius:10px; background:rgba(94,168,168,.14);
  border:1px dashed rgba(94,168,168,.55);}
.custom-fields .fld{margin:6px 0;}
#positioning:has(input[value="custom"]:checked) .custom-fields{display:block;}

/* Choice cards (project type) */
.choice{display:block; margin:8px 0; cursor:pointer;}
.choice input{position:absolute; opacity:0; pointer-events:none;}
.choice-body{
  display:block; padding:11px 14px; border-radius:10px;
  background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.15);
  transition:all .15s;
}
.choice-body b{display:block; font-size:.95rem; color:#fff;}
.choice-body small{color:rgba(255,255,255,.55); font-size:.76rem;}
.choice:hover .choice-body{background:rgba(255,255,255,.11);}
.choice input:checked + .choice-body{
  background:rgba(94,168,168,.22); border-color:var(--cymaris);
  box-shadow:inset 3px 0 0 var(--cymaris);
}
.choice input:checked + .choice-body b{color:var(--claria);}
.choice input:focus-visible + .choice-body{outline:2px solid var(--claria);}

/* ---- Results ------------------------------------------------------------ */
#results{min-width:0;}
#results.busy{opacity:.45; transition:opacity .15s;}

.results-head{display:flex; align-items:flex-end; justify-content:space-between;
  gap:16px; flex-wrap:wrap; margin-bottom:16px;}
.eyebrow{font-size:.7rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--cymaris); font-weight:700;}
.proj-name{margin:2px 0 0; font-size:1.5rem; color:var(--noxen);}

/* Capacity flow strip */
.flow-strip{display:flex; align-items:stretch; gap:8px; flex-wrap:wrap;
  margin:0 0 12px;}
.flow-strip > div{
  flex:1 1 110px; background:var(--nivelle); border:1px solid var(--hairline);
  border-radius:10px; padding:10px 14px;
}
.flow-strip > .arrow{flex:0 0 auto; border:none; background:none; padding:0;
  align-self:center; color:var(--muted); font-size:1.1rem;}
.flow-strip span{display:block; font-size:.64rem; letter-spacing:.08em;
  text-transform:uppercase; color:var(--muted); font-weight:600;}
.flow-strip b{font-size:1.12rem; color:var(--noxen);}
.flow-strip > .hot{background:var(--claria); border-color:var(--cymaris);}
.flow-strip > .hot b{color:var(--noxen); font-size:1.3rem;}

/* Key-figures grid (derived assumptions) */
.facts{
  display:grid; grid-template-columns:repeat(auto-fill,minmax(148px,1fr));
  background:#fff; border:1px solid var(--hairline); border-radius:12px;
  overflow:hidden; margin:0 0 22px; gap:1px;
}
.fact{
  background:#fff; padding:10px 14px; outline:1px solid var(--hairline);
}
.fact span{display:block; font-size:.62rem; letter-spacing:.08em;
  text-transform:uppercase; color:var(--muted); font-weight:600;
  margin-bottom:2px;}
.fact b{font-size:.98rem; color:var(--noxen); font-weight:700;}
.fact b em{font-style:normal; font-weight:500; color:var(--muted);
  font-size:.78rem; margin-left:2px;}
.fact.hot{background:var(--claria);}
.fact.good{background:var(--claria);}
.fact.bad{background:#FBEFEF;}
.fact.bad b, .fact.bad span{color:#8A3B3B;}

/* Derived-assumption chips */
.chip-row{display:flex; flex-wrap:wrap; gap:8px; margin:0 0 22px;}
.chip{
  background:#fff; border:1px solid var(--hairline); border-radius:999px;
  padding:.34rem .9rem; font-size:.8rem; color:var(--muted); font-weight:500;
}
.chip b{color:var(--noxen); font-weight:700;}
.chip.ok{border-color:var(--cymaris); background:var(--claria);}
.chip.bad{border-color:#C25E5E; background:#FBEFEF; color:#8A3B3B;}
.chip.bad b{color:#8A3B3B;}

/* Feasibility warning */
.warn-banner{
  background:#FBEFEF; border:1px solid #E3B7B7; border-left:4px solid #C25E5E;
  border-radius:10px; padding:12px 16px; margin:0 0 22px;
  color:#6E2F2F; font-size:.9rem; line-height:1.5;
}
.warn-banner b{color:#8A3B3B;}

/* Hero stat */
.stat-hero{
  background:linear-gradient(135deg,var(--cymaris) 0%,#4E9494 55%,var(--navaris) 130%);
  color:#fff; border-radius:var(--radius); box-shadow:var(--shadow);
  display:grid; grid-template-columns:minmax(220px,1.1fr) 1.4fr;
  gap:18px; padding:26px 28px; margin-bottom:22px;
}
.stat-hero.neg{
  background:linear-gradient(135deg,var(--navaris) 0%,var(--noxen) 100%);}
.stat-main .label{font-size:.72rem; letter-spacing:.1em; text-transform:uppercase;
  font-weight:700; opacity:.85; display:block;}
.stat-main .value{font-size:clamp(2.3rem,4.5vw,3.2rem); font-weight:700;
  line-height:1.05; display:block; margin:6px 0 4px; letter-spacing:-.01em;}
.stat-main .verdict{font-size:.9rem; opacity:.9;}
.stat-side{display:grid; grid-template-columns:repeat(3,1fr); gap:10px 18px;
  align-content:center;}
.stat-side > div{border-left:2px solid rgba(255,255,255,.35); padding-left:12px;}
.stat-side span{display:block; font-size:.64rem; letter-spacing:.08em;
  text-transform:uppercase; font-weight:700; opacity:.8;}
.stat-side b{font-size:1.15rem; font-weight:700;}
@media (max-width:700px){
  .stat-hero{grid-template-columns:1fr;}
  .stat-side{grid-template-columns:repeat(2,1fr);}
}

/* P&L card */
.pl-card{background:#fff; border:1px solid var(--hairline);
  border-radius:var(--radius); box-shadow:var(--shadow);
  padding:20px 22px; margin-bottom:22px;}
.pl-card h3{margin:0 0 14px; font-size:1.05rem;}
.pl-bar{display:flex; height:14px; border-radius:7px; overflow:hidden;
  margin-bottom:14px; background:var(--nivelle);}
.pl-bar span{display:block; min-width:2px;}
.pl-bar .seg-constr{background:var(--navaris);}
.pl-bar .seg-other{background:var(--muted);}
.pl-bar .seg-tax{background:#9DBECE;}
.pl-bar .seg-profit{background:var(--cymaris);}
.pl-rows > div{display:flex; justify-content:space-between; align-items:baseline;
  gap:12px; padding:7px 0; border-bottom:1px solid var(--hairline);
  font-size:.94rem;}
.pl-rows > div:last-child{border-bottom:none;}
.pl-rows .tot{font-weight:700; font-size:1.02rem;}
.pl-rows .tot b em{font-style:normal; color:var(--cymaris); margin-left:6px;}
.dot{display:inline-block; width:9px; height:9px; border-radius:50%;
  margin-right:8px; vertical-align:1px;}
.dot.rev{background:var(--noxen);} .dot.constr{background:var(--navaris);}
.dot.other{background:var(--muted);} .dot.profit{background:var(--cymaris);}
.dot.tax{background:#9DBECE;}

/* Side-by-side cards (P&L + cost donut) */
.card-row{display:grid; grid-template-columns:1.25fr 1fr; gap:18px;
  margin-bottom:22px; align-items:stretch;}
.card-row .pl-card{margin-bottom:0;}
@media (max-width:1080px){ .card-row{grid-template-columns:1fr;} }

.donut-wrap{display:flex; align-items:center; gap:18px; flex-wrap:wrap;}
.donut-svg{flex:0 1 190px; min-width:150px;}
.donut-legend{list-style:none; margin:0; padding:0; flex:1 1 200px;}
.donut-legend li{display:flex; align-items:baseline; gap:8px;
  padding:5px 0; border-bottom:1px solid var(--hairline); font-size:.86rem;}
.donut-legend li:last-child{border-bottom:none;}
.donut-legend li span{flex:1; color:var(--navaris);}
.donut-legend li b{white-space:nowrap;}
.donut-legend li b em{font-style:normal; color:var(--muted); font-weight:500;
  margin-left:4px; font-size:.78rem;}

/* Chart cards */
.chart-card{background:#fff; border:1px solid var(--hairline);
  border-radius:var(--radius); box-shadow:var(--shadow);
  padding:16px 18px 10px; margin-bottom:18px;}
.chart-head{display:flex; align-items:baseline; justify-content:space-between;
  margin-bottom:8px;}
.chart-head h3{margin:0; font-size:1rem;}
.chart-head span{font-size:.7rem; letter-spacing:.1em; text-transform:uppercase;
  color:var(--muted); font-weight:600;}

/* ---- Section header motif (thin rule + right label) -------------------- */
.section-rule{
  display:flex; align-items:baseline; justify-content:space-between;
  border-bottom:2px solid var(--navaris); padding-bottom:8px; margin:28px 0 18px;
}
.section-rule h2{margin:0; font-size:1.4rem; font-weight:700; color:var(--noxen);}
.section-rule .label{
  font-size:.7rem; letter-spacing:.14em; text-transform:uppercase;
  color:var(--muted); font-weight:600;
}

/* ---- Docs ("Inside the model" page) -------------------------------------- */
.docs{margin-top:56px;}
.docs-intro{color:var(--muted); max-width:640px; margin:0 0 20px;}
.docs-page{padding-bottom:24px;}
.docs-sect{
  font-size:.78rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--cymaris); font-weight:700; margin:34px 0 14px;
  padding-bottom:8px; border-bottom:2px solid var(--navaris);
}
.docs-page .docs-grid{align-items:stretch;}
.docs-page .doc{background:#fff; box-shadow:var(--shadow);}
.docs-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:14px; align-items:start;}
.doc{background:var(--nivelle); border:1px solid var(--hairline);
  border-radius:12px; padding:4px 18px;}
.doc summary{
  font-weight:700; color:var(--noxen); cursor:pointer; padding:12px 0;
  font-size:.98rem; list-style:none; position:relative; padding-right:24px;
}
.doc summary::-webkit-details-marker{display:none;}
.doc summary::after{content:"+"; position:absolute; right:2px; top:10px;
  color:var(--cymaris); font-size:1.2rem; font-weight:600;}
.doc[open] summary::after{content:"−";}
.doc p{font-size:.88rem; color:var(--navaris); margin:0 0 12px; line-height:1.55;}
.doc-list{list-style:none; margin:0 0 10px; padding:0;}
.doc-list li{padding:8px 0; border-top:1px solid var(--hairline);}
.doc-list li b{display:inline-block; min-width:120px;}
.doc-list li > .num{float:right; color:var(--noxen); font-weight:600;
  font-size:.86rem;}
.doc-list li p{margin:4px 0 0; clear:both;}

/* ---- Buttons ------------------------------------------------------------ */
.btn{
  display:inline-block; background:var(--cymaris); color:#fff; border:none;
  border-radius:8px; font-weight:600; font-family:var(--font-ui);
  padding:.65rem 1.4rem; cursor:pointer; text-decoration:none; font-size:.93rem;
  box-shadow:0 2px 10px rgba(94,168,168,.35); transition:all .15s;
}
.btn:hover{background:var(--navaris); box-shadow:0 2px 12px rgba(51,86,109,.4);}
.btn.ghost{background:transparent; color:var(--cymaris);
  border:1.5px solid var(--cymaris); box-shadow:none;}
.btn.ghost:hover{background:var(--claria); color:var(--noxen);}
.head-actions{display:flex; gap:8px; flex-wrap:wrap;}

/* ---- Tables (kept for future detailed views) ---------------------------- */
table.allora{width:100%; border-collapse:collapse; font-size:.92rem;}
table.allora thead th{
  background:var(--noxen); color:#fff; font-weight:600; text-align:right;
  padding:10px 12px; position:sticky; top:0;
}
table.allora thead th:first-child{text-align:left;}
table.allora td{padding:8px 12px; text-align:right; border-bottom:1px solid var(--hairline);}
table.allora td:first-child{text-align:left; font-weight:500;}
table.allora tbody tr:nth-child(even){background:var(--nivelle);}
.table-wrap{overflow-x:auto; -webkit-overflow-scrolling:touch;}

/* ---- Footer ------------------------------------------------------------- */
.app-footer{
  border-top:1px solid var(--hairline); margin-top:48px; padding:18px 0;
  display:flex; align-items:center; justify-content:space-between;
  color:var(--muted); font-size:.82rem; max-width:1240px;
  margin-left:auto; margin-right:auto; padding-left:clamp(16px,4vw,40px);
  padding-right:clamp(16px,4vw,40px);
}
.app-footer img{height:18px;}

/* ---- Mobile ------------------------------------------------------------- */
@media (max-width:640px){
  main{padding-left:14px; padding-right:14px;}
  .app-header{height:56px; border-bottom-width:2px;}
  .app-header img.wordmark{height:22px;}
  .app-header .ctx{font-size:.62rem; letter-spacing:.1em;}
  .hero{padding:26px 0 18px;}
  .hero h1{font-size:1.9rem;}
  .hero p{font-size:.98rem;}
  .section-rule{margin:22px 0 14px;}
  .section-rule h2{font-size:1.2rem;}

  /* prevent iOS auto-zoom: inputs must be >= 16px */
  .fld input, .fld select{font-size:16px; padding:.6rem .65rem;}
  .seg span{font-size:.82rem; padding:.55rem .6rem;}

  .panel{padding:4px 16px 12px;}
  .results-head{align-items:stretch; flex-direction:column;}
  .results-head .btn{text-align:center;}
  .flow-strip > div{flex:1 1 46%;}
  .flow-strip > .arrow{display:none;}
  .stat-hero{padding:20px 18px;}
  .stat-side{gap:10px 12px;}
  .chip-row{gap:6px;}
  .chip{font-size:.74rem; padding:.3rem .7rem;}
}
