/* ============================================================================
   Bluebird Horizon — shared theme (Bluebird Advisory look)
   Single source of the tokens every page references. Pages link this BEFORE
   their inline <style> and drop their own :root token blocks so the palette
   stays consistent. Palette extracted from bluebirdadvisory.com.au: DM Sans,
   electric blue-violet #5D4FFF, blue #0787D9, navy #00294B, cyan #7EF9FF,
   white / light-gray surfaces.
   ========================================================================== */

:root{
  /* brand */
  --brand:#5D4FFF; --blue:#0787D9; --cyan:#7EF9FF; --navy:#00294B;
  /* legacy bb-* names (index/chat components reference these) */
  --bb-night:#00294B; --bb-royal:#5D4FFF; --bb-bloom:#0787D9; --bb-petal:#EDF1FA;
  --bb-petal-ink:#22365B;
  /* chrome */
  --page:#FFFFFF; --surface:#F7F9FC; --ink:#0F1E33; --ink-2:#4A5A72; --muted:#7B8CA4;
  --grid:#E4EAF2; --baseline:#CBD5E1; --border:rgba(15,30,51,0.10);
  /* series (blue/navy/cyan family — readable on white) */
  --s1:#5D4FFF; --s2:#0787D9; --s3:#0EA5E9; --s4:#6366F1; --s5:#334155; --s6:#7C3AED;
  /* sequential ramp (blue) */
  --seq-lo:#E8F1FB; --seq-hi:#1E4E8C;
  /* status */
  --st-good:#16A34A; --st-warn:#D97706; --st-serious:#EA580C; --st-crit:#DC2626;
  --st-good-text:#15803D;
  --ribbon:#00294B; --ribbon-ink:#FFFFFF;
  --paper:#FFFFFF;
  --shadow:0 1px 2px rgba(15,30,51,.06),0 6px 20px rgba(15,30,51,.06);
  /* categorical — light. worst adjacent deutan dE 9.2, normal-vision 20.7 */
  --c1:#5D4FFF; --c2:#A16207; --c3:#0E9594;
  --c4:#BE185D; --c5:#0787D9; --c6:#4D7C0F;
  /* sequential (magnitude, one hue) — light. light end 2.14:1 vs surface */
  --seq1:#8AB0D9; --seq2:#6493C8; --seq3:#4173AE; --seq4:#255490; --seq5:#123568;
  /* chart chrome */
  --chart-surface:#F7F9FC;
  --chart-gap:#F7F9FC;      /* 2px spacer between adjacent fills */
}

@media (prefers-color-scheme: dark){
  :root:not([data-theme=light]){
    --page:#0B1B33; --surface:#10274A; --ink:#E8F0FA; --ink-2:#B0C2D9; --muted:#7E93AD;
    --grid:#1D3A5F; --baseline:#2A4A74; --border:rgba(232,240,250,0.12);
    --s1:#8B81FF; --s2:#3FA2E8; --s3:#4FC1F0; --s4:#7C8CFF; --s5:#9FB2CC; --s6:#A78BFA;
    --seq-lo:#1E3A5F; --seq-hi:#6FA8E8;
    --bb-petal:#123055; --bb-petal-ink:#C6D6EC; --bb-night:#E8F0FA;
    --st-good-text:#6FCB7B;
    --paper:#10274A;
    --ribbon:#0F2A4A; --ribbon-ink:#E8F0FA;
    --shadow:0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.3);
    /* categorical — dark. worst adjacent deutan dE 9.0.
       --c4 sits at 2.81:1 contrast, which obligates visible labels or a table
       view. Both ship on every chart, so the obligation is met. */
    --c1:#6462F2; --c2:#C08A18; --c3:#249F9E;
    --c4:#CC1F68; --c5:#0B88DA; --c6:#669733;
    /* sequential — dark. dim end 2.57:1 vs surface */
    --seq1:#33689F; --seq2:#4A80BC; --seq3:#649BD4; --seq4:#84B6E7; --seq5:#A9D2F5;
    --chart-surface:#10274A;
    --chart-gap:#10274A;
  }
}
:root[data-theme=dark]{
  --page:#0B1B33; --surface:#10274A; --ink:#E8F0FA; --ink-2:#B0C2D9; --muted:#7E93AD;
  --grid:#1D3A5F; --baseline:#2A4A74; --border:rgba(232,240,250,0.12);
  --s1:#8B81FF; --s2:#3FA2E8; --s3:#4FC1F0; --s4:#7C8CFF; --s5:#9FB2CC; --s6:#A78BFA;
  --seq-lo:#1E3A5F; --seq-hi:#6FA8E8;
  --bb-petal:#123055; --bb-petal-ink:#C6D6EC; --bb-night:#E8F0FA;
  --st-good-text:#6FCB7B;
  --paper:#10274A;
  --ribbon:#0F2A4A; --ribbon-ink:#E8F0FA;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.3);
  /* categorical — dark. worst adjacent deutan dE 9.0.
     --c4 sits at 2.81:1 contrast, which obligates visible labels or a table
     view. Both ship on every chart, so the obligation is met. */
  --c1:#6462F2; --c2:#C08A18; --c3:#249F9E;
  --c4:#CC1F68; --c5:#0B88DA; --c6:#669733;
  /* sequential — dark. dim end 2.57:1 vs surface */
  --seq1:#33689F; --seq2:#4A80BC; --seq3:#649BD4; --seq4:#84B6E7; --seq5:#A9D2F5;
  --chart-surface:#10274A;
  --chart-gap:#10274A;
}

/* ============================= base ============================= */
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:var(--page); color:var(--ink);
  font:15px/1.55 "DM Sans",-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
  font-feature-settings:"kern" 1;
}
h1,h2,h3{font-family:"DM Sans",-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
a{color:var(--bb-royal)}
:root[data-theme=dark] a{color:var(--bb-bloom)}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--bb-bloom);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
}

/* ============================= masthead (index + chat/news) ============================= */
.masthead{background:var(--surface);border-bottom:1px solid var(--border);padding:12px 20px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.masthead-row{display:flex;align-items:center;gap:14px;max-width:1380px;margin:0 auto;flex:1;min-width:0}
.bb-mark{width:34px;height:34px;flex:none}
.wordmark{display:flex;align-items:baseline;gap:10px;text-decoration:none;color:inherit}
.wordmark .name{font-family:"DM Sans",-apple-system,sans-serif;font-size:25px;font-weight:700;letter-spacing:.2px;color:var(--bb-night)}
.wordmark .product{font-size:12px;font-weight:700;letter-spacing:.26em;color:var(--bb-royal);text-transform:uppercase}
.mast-actions{margin-left:auto;display:flex;gap:8px;align-items:center}
.mast-note{font-size:12px;color:var(--muted);margin-right:6px}
.btn{
  border:1px solid var(--border); background:var(--surface); border-radius:8px;
  padding:7px 14px; cursor:pointer; font-size:13.5px; font-weight:600; text-decoration:none;
  color:var(--ink-2); display:inline-flex; align-items:center; gap:6px;
}
.btn:hover{background:var(--bb-petal);color:var(--ink)}
.btn-primary{background:var(--bb-royal);border-color:var(--bb-royal);color:#fff}
.btn-primary:hover{background:var(--blue);color:#fff}
.hairlines{max-width:1380px;margin:10px auto 0;border-top:2px solid var(--bb-royal);border-bottom:1px solid var(--border);height:3px}
.retry-btn{margin-left:8px;cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--bb-royal);border-radius:6px;padding:3px 10px;font:inherit}
.retry-btn:hover{background:var(--bb-petal);color:var(--ink)}
/* news category badges */
.cat-tag{font-weight:700;letter-spacing:.04em;text-transform:uppercase;font-size:10.5px}
.cat-parliament{color:var(--bb-royal)}
.cat-government{color:#0E7C5A}
.cat-news{color:var(--muted)}
.cat-reports{color:#8A4FFF}
.cat-evidence{color:#B0782E}
.cat-commentary{color:#A05C14}
/* news topic chips — horizontal row above the full-width feed */
.news-top{margin:0 0 18px}
.cat-row{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 10px}
.chip{cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--ink-2);
  font-family:inherit;font-size:13px;font-weight:600;border-radius:999px;padding:7px 14px;
  display:inline-flex;align-items:center;gap:7px;transition:background .12s,border-color .12s}
.chip:hover{background:var(--bb-petal);color:var(--ink)}
.chip.active{background:var(--bb-royal);border-color:var(--bb-royal);color:#fff}
.chip .s-count{font-weight:400;font-size:12px;opacity:.85}
.chip.active .s-count{color:rgba(255,255,255,.85)}
.cat-note{font-size:12px;color:var(--muted);line-height:1.5;margin:0;max-width:860px}
.ribbon{background:var(--ribbon);color:var(--ribbon-ink);text-align:center;font-size:11.5px;font-weight:650;letter-spacing:.14em;text-transform:uppercase;padding:5px 12px}

/* ============================= masthead (chat/news) ============================= */
.mast-right{margin-left:auto;display:flex;align-items:center;gap:12px}
.link{font-size:13px;font-weight:600;text-decoration:none;border:1px solid var(--border);border-radius:8px;padding:6px 12px;background:var(--surface);color:var(--ink-2)}
.link:hover{background:var(--bb-petal);color:var(--ink)}
.link.primary{background:var(--bb-royal);border-color:var(--bb-royal);color:#fff}
.link.primary:hover{background:var(--blue);color:#fff}
.topnav{display:flex;align-items:center;gap:4px;flex-wrap:wrap;background:var(--surface);border-bottom:1px solid var(--border);padding:8px 20px;flex:none}
.topnav .nav-link{font-size:13px;font-weight:600;text-decoration:none;color:var(--ink-2);padding:6px 12px;border-radius:8px;border:1px solid transparent}
.topnav .nav-link:hover{background:var(--bb-petal);color:var(--bb-petal-ink)}
.topnav .nav-link.active{background:var(--bb-royal);border-color:var(--bb-royal);color:#fff}

/* ============================= app frame + sidenav (index) ============================= */
.frame{display:flex;max-width:1380px;margin:0 auto;min-height:calc(100vh - 120px)}
.sidenav{flex:0 0 216px;padding:20px 12px 20px 20px;border-right:1px solid var(--border)}
.sidenav .group{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:16px 8px 6px;font-weight:650}
.sidenav .group:first-child{margin-top:0}
.navbtn{display:flex;align-items:center;gap:9px;width:100%;text-align:left;border:0;background:none;border-radius:8px;padding:8px 10px;cursor:pointer;font-size:14px;color:var(--ink-2)}
.navbtn:hover{background:var(--bb-petal);color:var(--ink)}
.navbtn[aria-current=page]{background:var(--bb-petal);color:var(--bb-petal-ink);font-weight:650}
.navbtn svg{width:16px;height:16px;flex:none;opacity:.75}
.navbtn-link{text-decoration:none;color:var(--bb-royal);font-weight:650}
.main{flex:1;min-width:0;padding:22px 24px 40px}
@media (max-width:960px){
  .frame{flex-direction:column}
  .sidenav{flex:none;display:flex;overflow-x:auto;border-right:0;border-bottom:1px solid var(--border);padding:8px 12px;gap:2px}
  .sidenav .group{display:none}
  .navbtn{width:auto;white-space:nowrap}
}

/* ============================= footer ============================= */
.sitefoot{border-top:1px solid var(--border);margin-top:12px;padding:20px 24px 30px;background:var(--surface)}
.sitefoot .inner{max-width:1380px;margin:0 auto;font-size:12.5px;color:var(--muted);display:flex;flex-wrap:wrap;gap:8px 28px}
.sitefoot a{color:var(--bb-royal);text-decoration:none}

/* ============================= auth chip (logged-in header) ============================= */
.user-chip{display:inline-flex;align-items:center;gap:9px;font-size:12.5px;color:var(--ink-2);border-left:1px solid var(--border);padding-left:12px;margin-left:2px}
.user-chip .u-mail{font-weight:600;color:var(--ink)}
.user-chip a{font-weight:600;text-decoration:none}

/* ============================= shared page bits (access / admin) ============================= */
/* The hidden attribute must always win over class display rules (e.g. .field)
   or a `hidden` field still shows. */
[hidden]{display:none !important}
.page-wrap{max-width:1180px;margin:0 auto;padding:34px 24px 60px}
.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:20px 22px;box-shadow:var(--shadow)}
.field{display:block;margin:14px 0}
.field label{display:block;font-size:13px;font-weight:600;color:var(--ink-2);margin-bottom:6px}
.field input{width:100%;border:1px solid var(--border);border-radius:9px;padding:10px 12px;font:inherit;font-size:14.5px;background:var(--paper);color:var(--ink)}
.field input:focus{outline:none;border-color:var(--bb-bloom);box-shadow:0 0 0 3px rgba(7,135,217,.14)}
.hint{font-size:12.5px;color:var(--muted);line-height:1.5}
.err{color:var(--st-crit);font-size:13px;font-weight:600}
.ok{color:var(--st-good);font-size:13px;font-weight:600}

/* ============================================================================
   Ironbark chart palette — VALIDATED, DO NOT EDIT WITHOUT RE-VALIDATING.

   Computed against Ironbark's chart surfaces (#F7F9FC light, #10274A dark) with
   the dataviz palette validator. All six checks pass in both modes.

   Horizon's --s1..--s6 ramp is deliberately NOT used for charts: --s5 #334155
   reads gray (chroma 0.039) and --s2/--s3 sit at normal-vision dE 8.3, below the
   15 floor. Fine for Horizon's one- and two-series charts, wrong for Ironbark's
   six-series ones. Horizon's tokens remain defined above for chrome.

   Categorical hues are assigned in fixed slot order and never cycled. A seventh
   series folds into "Other". Slot 2 is ochre, not amber, because amber #D97706
   is --st-warn and this site renders a feasibility flag.

   Token definitions: see :root (light), :root[data-theme=dark] (dark explicit),
   and @media (prefers-color-scheme: dark) :root:not([data-theme=light]) (dark OS-preference).
   ========================================================================== */

/* ============================= chart anatomy ============================= */
.figure{margin:0 0 22px}
.figure figcaption{font-size:12.5px;color:var(--muted);margin-top:8px;line-height:1.5}
.figure .fig-title{font-size:15px;font-weight:650;color:var(--ink);margin:0 0 2px}
.figure .fig-sub{font-size:12.5px;color:var(--muted);margin:0 0 10px}
.chartbox{background:var(--chart-surface);border:1px solid var(--border);
  border-radius:12px;padding:16px 18px;box-shadow:var(--shadow)}
.chartbox svg{display:block;width:100%;height:auto;overflow:visible}
.legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:0 0 12px;padding:0;list-style:none}
.legend li{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2)}
.legend .swatch{width:11px;height:11px;border-radius:3px;flex:none}
.tbl-toggle{background:none;border:0;padding:0;margin-top:10px;font-size:12.5px;
  font-weight:600;color:var(--bb-royal);cursor:pointer;text-decoration:underline}
.dtable{width:100%;border-collapse:collapse;margin-top:12px;font-size:13px}
.dtable caption{text-align:left;font-size:12.5px;color:var(--muted);padding-bottom:6px}
.dtable th,.dtable td{text-align:left;padding:6px 10px;border-bottom:1px solid var(--border)}
.dtable td.num,.dtable th.num{text-align:right;font-variant-numeric:tabular-nums}
.tip{position:absolute;pointer-events:none;background:var(--paper);color:var(--ink);
  border:1px solid var(--border);border-radius:8px;padding:7px 10px;font-size:12.5px;
  box-shadow:var(--shadow);z-index:20;white-space:nowrap}

/* ============================= stat tiles ============================= */
.tiles{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin:0 0 24px}
.tile{background:var(--surface);border:1px solid var(--border);border-radius:12px;
  padding:16px 18px;box-shadow:var(--shadow)}
.tile .t-label{font-size:12px;font-weight:600;color:var(--muted);letter-spacing:.02em;margin-bottom:6px}
.tile .t-value{font-size:30px;font-weight:700;color:var(--ink);line-height:1.1;
  font-variant-numeric:tabular-nums}
.tile .t-unit{font-size:15px;font-weight:600;color:var(--ink-2);margin-left:3px}
.tile .t-note{font-size:12px;color:var(--muted);margin-top:6px;line-height:1.45}

/* ============================= placeholder badge ============================= */
.placeholder-note{background:var(--bb-petal);color:var(--bb-petal-ink);
  border:1px solid var(--border);border-radius:10px;padding:10px 14px;
  font-size:13px;font-weight:600;margin:0 0 20px}

/* ============================= page furniture ============================= */
.page-head{margin:0 0 22px}
.page-head .eyebrow{font-size:11px;font-weight:650;letter-spacing:.16em;
  text-transform:uppercase;color:var(--bb-royal)}
.page-head h1{font-size:28px;font-weight:700;margin:2px 0 6px}
.page-head p{color:var(--ink-2);max-width:760px;margin:0}
.section{margin:0 0 34px}
.section > h2{font-size:19px;font-weight:650;margin:0 0 4px}
.section > .s-sub{font-size:13px;color:var(--muted);margin:0 0 16px;max-width:760px}
.grid-2{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
