/* SIGNAL Mobile — design system. Every token below is read from the enterprise SIGNAL application source
   (enterprise app module, style module, indicators-tab ticker CSS, Signal panel module and Login.CSS,
   golden extract 2026-11-08). Mobile-only departures are noted inline. Fonts: Inter (body) and Space Grotesk (brand) —
   system fallback in development; self-hosted woff2 is deferred dependency D-7. */
html,body{margin:0;background:var(--bg);font-family:var(--font);color:var(--ink)}
button,input,textarea{font-family:inherit}
*{box-sizing:border-box} html{font-size:16px}
@media (prefers-reduced-motion:reduce){ *,*::before,*::after{animation:none!important;transition:none!important} }

:root{
  /* enterprise tokens (style and app modules) */
  --navy:#0E3D9F; --navy-dark:#0F172A; --accent:#4C73FF; --accent-2:#1D4FD8; --accent-login:#4F8DFF; --dotai:#3B82F6;
  --slate:#334155; --muted:#64748B; --faint:#9CA3AF; --border:#E2E8F0; --bg:#F8FAFC; --paper:#FFFFFF; --ink:#0F172A; --chip:#EEF2F7;
  --green:#047857; --red:#D00000; --orange:#F26521; /* GREEN text darkened from #059669 for AA on white (mobile only) */
  --sev-critical:#B91C1C; --sev-high:#DC2626; --sev-moderate:#B45309; --sev-low:#047857; --sev-info:#CBD5E1;
  --amber:#B45309; --amber-bg:#FFFBEB; --amber-border:#FDE68A;
  --tick-bg:#0B1F3B; --tick-rule:#16305A; --tick-label:#CBD5E1;
  --grad:linear-gradient(90deg,#0F172A 0%,#1D4FD8 100%);
  --font:'Inter','Segoe UI',system-ui,-apple-system,sans-serif; --brand:'Space Grotesk','Inter',system-ui,sans-serif;
  --r:10px; --r-sm:6px; --shadow:0 1px 3px rgba(15,23,42,.06); --shadow-lg:0 8px 26px rgba(13,32,84,.45);
}
[data-theme="dark"]{ --bg:#050816; --paper:#0B1020; --ink:#E5E7EB; --slate:#C7CCDA; --muted:#8c92b3; --faint:#6b7280; --border:#232842; --chip:#161c33;
  --navy:#4F8DFF; --green:#34D399; --red:#F87171; --orange:#FB923C; --sev-low:#34D399; --sev-moderate:#FBBF24; --sev-high:#F87171; --sev-critical:#FCA5A5; --sev-info:#334155;
  --amber:#FBBF24; --amber-bg:#1f1a0a; --amber-border:#5a4a12; --shadow:none; }

/* ===== shell: phone-first; on desktop the app is a centred 430px device column on the enterprise page ground ===== */
.app{position:fixed;inset:0;height:100dvh;display:flex;flex-direction:column;background:var(--bg);color:var(--ink);font-size:1rem;line-height:1.45}
@media (min-width:600px){ body{background:#0F172A url(assets/signal_band_bg.jpg) center/cover no-repeat} body::before{content:"";position:fixed;inset:0;background:linear-gradient(90deg,rgba(15,23,42,.92),rgba(15,23,42,.72))}
  .app{left:50%;right:auto;transform:translateX(-50%);width:430px;max-width:100vw;box-shadow:0 0 0 1px rgba(255,255,255,.08),0 30px 60px rgba(0,0,0,.45)} }
@media (min-width:1100px){ .app{width:480px} }
/* unauthenticated screens (intro, login, expired, inactive) fill the window on desktop, as the enterprise login does; the device column is for content */
@media (min-width:600px){ body[data-screen="welcome"] .app, body[data-screen="expired"] .app, body[data-screen="inactive"] .app{left:0;right:0;transform:none;width:auto;max-width:none;box-shadow:none}
  body[data-screen="welcome"]::before, body[data-screen="expired"]::before, body[data-screen="inactive"]::before{display:none} }

/* ===== masthead — the enterprise two-band head, compressed for a phone ===== */
.mast{flex:none;color:#fff;font-family:var(--font)}
.mast .b1{background:var(--navy-dark);padding:calc(8px + env(safe-area-inset-top)) 14px 8px;display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:52px}
.wm{display:flex;align-items:center;gap:8px;text-decoration:none;color:#fff;min-height:44px}
.wm img{width:26px;height:26px}
.wm .t{font-family:var(--brand);font-weight:700;font-size:1rem;letter-spacing:-.2px;line-height:1.1}
.wm .t .dotai{color:var(--dotai)} .wm .tag{display:block;font-family:var(--font);font-weight:500;font-size:.75rem;color:#8FB0FF;letter-spacing:0}
.mast .b2{position:relative;background:linear-gradient(90deg,var(--navy-dark) 0%,rgba(15,23,42,.85) 20%,rgba(15,23,42,.45) 60%,rgba(15,23,42,.25) 100%),url(assets/signal_band_bg.jpg) center/cover no-repeat var(--navy-dark);border-bottom:2px solid var(--accent-2);padding:8px 14px 10px}
.mast .b2 .row1{display:flex;align-items:center;justify-content:space-between;gap:8px}
.sigword{font-family:var(--font);font-weight:500;font-size:1.05rem;letter-spacing:6px;color:#fff;padding-right:6px}
.sigword small{display:block;font-size:.75rem;line-height:1.3;letter-spacing:0;font-weight:600;color:#fff;opacity:.9;margin-top:2px}
.screen-title{font-family:var(--brand);font-weight:700;font-size:1.15rem;line-height:1.15;margin-top:6px}
.screen-sub{font-size:.8125rem;opacity:.9;margin-top:2px}
.ib{width:44px;height:44px;border:none;background:transparent;color:#fff;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;cursor:pointer;padding:0}
.ib svg,.backbtn svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.backbtn{display:inline-flex;align-items:center;gap:4px;background:none;border:none;color:#fff;font:600 .95rem var(--font);min-height:44px;padding:0 8px 0 0;cursor:pointer}
/* portfolio selector — persistent, prominent, one tap */
.portsel{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;flex-shrink:0;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.35);color:#fff;border-radius:999px;padding:0 12px 0 10px;font-size:.9rem;font-weight:600;min-height:40px;cursor:pointer;max-width:100%;backdrop-filter:blur(4px)}
.portsel .cnt{opacity:.75;font-weight:500} @media (max-width:374px){.portsel .cnt{display:none}}
.portsel svg{width:16px;height:16px;stroke:#fff;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.portsel .cnt{font-weight:500;opacity:.85}
.portsel .dot{width:7px;height:7px;border-radius:50%;background:#34D399;box-shadow:0 0 0 3px rgba(52,211,153,.25);flex:none}
/* ticker — enterprise TICKER_CSS */
.tick{flex:none;overflow:hidden;background:var(--tick-bg);border-bottom:1px solid var(--tick-rule);padding:5px 0}
.tick .track{display:flex;width:max-content;align-items:center;will-change:transform;animation:tick 48s linear infinite}
.tick:hover .track,.tick:focus-within .track{animation-play-state:paused}
.tick .u{padding:0 14px;display:inline-flex;align-items:baseline;gap:6px;white-space:nowrap;border-right:1px solid var(--tick-rule)}
.tick .l{color:var(--tick-label);font-size:11px;font-weight:600} .tick .v{color:#fff;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums} .tick .c{font-size:11px;font-weight:700;font-variant-numeric:tabular-nums}
.tick .c.up{color:#34D399} .tick .c.down{color:#F87171} .tick .c.flat{color:#CBD5E1}
@keyframes tick{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){ .tick{overflow-x:auto} .tick .track{animation:none} }

/* ===== content ===== */
.content{flex:1;overflow:auto;padding:12px 14px calc(var(--nav-h, 64px) + var(--fab-h, 0px) + 20px + var(--safe-bottom, env(safe-area-inset-bottom)));display:flex;flex-direction:column;gap:10px;-webkit-overflow-scrolling:touch}
.card{background:var(--paper);border:1px solid var(--border);border-radius:var(--r);padding:12px 14px;box-shadow:var(--shadow)}
.card h3{font-family:var(--brand);font-size:.95rem;margin:0 0 8px;color:var(--navy);font-weight:700;letter-spacing:.2px;text-transform:uppercase}
.row{display:flex;justify-content:space-between;align-items:center;gap:10px}
.sec{color:var(--slate);font-size:.9rem}
.meta{color:var(--muted);font-size:.8125rem}
.lbl{display:inline-block;background:var(--chip);color:var(--slate);border-radius:999px;padding:3px 9px;font-size:.78rem;font-weight:600;letter-spacing:.2px}
.sev{display:inline-block;font-weight:700;font-size:.72rem;letter-spacing:.5px;padding:3px 7px;border-radius:4px;color:#fff;text-transform:uppercase}
[data-theme="dark"] .sev{color:#050816}
.sev.critical{background:var(--sev-critical)} .sev.high{background:var(--sev-high)} .sev.moderate{background:var(--sev-moderate)} .sev.low{background:var(--sev-low)} .sev.info{background:var(--sev-info);color:#1E293B}
.st{font-weight:700;font-size:.72rem;letter-spacing:.5px;color:var(--slate)} .st.new{color:var(--accent-2)}
.up{color:var(--green);font-weight:700} .down{color:var(--red);font-weight:700} .flat{color:var(--slate);font-weight:700}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;border-radius:var(--r-sm);padding:10px 16px;background:var(--navy);color:#fff;font:600 .95rem var(--font);border:none;cursor:pointer;width:100%}
[data-theme="dark"] .btn{color:#050816}
.btn.ghost{background:transparent;border:1px solid var(--navy);color:var(--navy)} .btn.small{width:auto;min-height:40px;padding:6px 12px;font-size:.875rem}
.btn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.link{display:flex;align-items:center;justify-content:space-between;gap:8px;background:none;border:none;color:var(--navy);font:600 .95rem var(--font);padding:0;cursor:pointer;min-height:44px;text-align:left;width:100%}
.link svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.srcrow{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:46px;padding:0 12px;border:1px solid var(--border);border-radius:var(--r-sm);text-decoration:none;color:var(--navy);font:600 .9rem var(--font);background:var(--paper)}
.srcrow svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.tabs{display:flex;gap:6px;overflow:auto;padding:2px 0;scrollbar-width:none} .tabs::-webkit-scrollbar{display:none}
.tabs button{flex:none;font:600 .85rem var(--font);padding:0 14px;border-radius:999px;border:1px solid var(--border);background:var(--paper);color:var(--slate);min-height:40px;cursor:pointer}
.tabs button.on{background:var(--navy);color:#fff;border-color:var(--navy)}
[data-theme="dark"] .tabs button.on{color:#050816}
/* bottom navigation */
.bottomnav{position:absolute;left:0;right:0;bottom:0;display:flex;border-top:1px solid var(--border);background:var(--paper);padding:4px 2px calc(6px + var(--safe-bottom, env(safe-area-inset-bottom)));z-index:15}
.bottomnav button{flex:1;border:none;background:none;color:var(--muted);font:500 .72rem var(--font);display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 2px 4px;min-height:48px;cursor:pointer;border-radius:8px}
.bottomnav button.on{color:var(--navy);font-weight:700}
.bottomnav button.on span::after{content:"";display:block;height:2px;width:18px;margin:3px auto 0;background:var(--accent);border-radius:1px}
.bottomnav svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
/* AI block — the enterprise Executive Read treatment (accent rule, brand heading, disclosure line) */
.ai{border-left:3px solid var(--accent);padding:4px 0 4px 12px}
.ai .tag{font-family:var(--brand);font-size:.78rem;letter-spacing:.6px;color:var(--navy);font-weight:700;margin-bottom:4px;text-transform:uppercase}
.ai .h{font-family:var(--brand);font-size:1.15rem;font-weight:700;color:var(--navy);line-height:1.2;margin:0 0 2px}
.ai .disc{font-size:.8125rem;color:var(--slate);margin:0 0 8px} .ai .disc b{color:var(--navy)}
.ai p{margin:0;font-size:.975rem;line-height:1.55}
.fact{border-left:3px solid var(--border);padding-left:12px}
.exp{border-top:1px dashed var(--border);margin-top:10px;padding-top:10px;display:flex;flex-direction:column;gap:10px}
details summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;min-height:44px;color:var(--navy);font-weight:600;font-size:.9rem}
details summary::-webkit-details-marker{display:none}
details summary svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;transition:transform .2s} details[open] summary svg{transform:rotate(180deg)}
.item-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.item-title{font-weight:600;font-size:1rem;line-height:1.35;margin-top:4px}
/* indicators */
.ind{display:flex;justify-content:space-between;align-items:center;gap:10px;min-height:52px;padding:7px 0;border-bottom:1px solid var(--border)}
.ind:last-child{border-bottom:none}
.ind .n{font-weight:600;font-size:.95rem} .ind .u{color:var(--muted);font-size:.8125rem}
.ind .v{font-family:var(--brand);font-size:1.1rem;font-weight:700;text-align:right;font-variant-numeric:tabular-nums}
.ind .c{font-size:.85rem;text-align:right;font-variant-numeric:tabular-nums}
.ind.unavailable{opacity:.8;border-left:3px solid var(--amber-border);padding-left:8px}
.mini{display:inline-flex;align-items:flex-end;gap:2px;height:22px;width:52px} .mini i{flex:1;background:var(--accent);opacity:.55;border-radius:1px}
.gauge{display:flex;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--border)} .gauge:last-child{border-bottom:none}
.gauge .big{font-family:var(--brand);font-size:1.45rem;font-weight:700;min-width:80px;font-variant-numeric:tabular-nums}
.bars{display:flex;align-items:flex-end;gap:8px;height:84px;border-bottom:1px solid var(--border)}
.bars div{flex:1;background:var(--navy);opacity:.85;border-radius:3px 3px 0 0;position:relative}
.bars div span{position:absolute;bottom:-18px;left:0;right:0;text-align:center;font-size:.75rem;color:var(--muted)}
.kv{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)} .kv:last-child{border-bottom:none}
.demo{display:inline-block;background:var(--amber-bg);border:1px solid var(--amber-border);color:var(--amber);border-radius:6px;padding:2px 7px;font-size:.72rem;font-weight:700;letter-spacing:.3px}
.notice{border:1px solid var(--amber-border);background:var(--amber-bg);border-radius:var(--r);padding:10px 12px;font-size:.9rem} .notice b{color:var(--amber)}
.state{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:10px;padding:30px}
.state .ic{width:64px;height:64px;border-radius:50%;background:var(--chip);display:flex;align-items:center;justify-content:center}
.state .ic svg{width:28px;height:28px;stroke:var(--navy);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.skeleton{background:linear-gradient(90deg,var(--chip) 25%,var(--border) 37%,var(--chip) 63%);background-size:400% 100%;animation:sk 1.4s infinite;border-radius:8px;height:14px}
@keyframes sk{0%{background-position:100% 0}100%{background-position:0 0}}
.center{text-align:center}
.list button,.list label{display:flex;width:100%;justify-content:space-between;align-items:center;background:none;border:none;border-bottom:1px solid var(--border);padding:11px 0;font:500 .95rem var(--font);color:var(--ink);min-height:50px;cursor:pointer;text-align:left}
.list button.on{font-weight:700;color:var(--navy)}
.list button svg{width:20px;height:20px;stroke:var(--navy);fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}

/* ===== sheets (portfolio selector, assistant) ===== */
.scrim{position:absolute;inset:0;background:rgba(5,8,15,.55);z-index:19;border:none;width:100%}
.sheet{position:absolute;left:0;right:0;bottom:0;background:var(--paper);border-radius:18px 18px 0 0;padding:10px 16px calc(12px + var(--safe-bottom, env(safe-area-inset-bottom)));box-shadow:0 -12px 40px rgba(0,0,0,.35);z-index:20;max-height:86%;overflow:auto;display:flex;flex-direction:column}
.sheet .grab{width:40px;height:4px;background:var(--border);border-radius:2px;margin:0 auto 10px;flex:none}
/* assistant launcher — enterprise _LAUNCH_STYLE (gradient pill, pulse dot, wordmark) */
.fab{position:absolute;right:14px;bottom:calc(var(--nav-h, 64px) + 8px + var(--safe-bottom, env(safe-area-inset-bottom)));z-index:16;display:flex;align-items:center;gap:8px;background:var(--grad);border:none;border-radius:999px;padding:10px 16px 10px 14px;cursor:pointer;box-shadow:var(--shadow-lg);color:#fff;min-height:44px}
.fab .pulse{width:8px;height:8px;border-radius:50%;background:#34D399;box-shadow:0 0 0 4px rgba(52,211,153,.25)}
.fab .w{font-family:var(--brand);font-weight:700;font-size:.875rem} .fab .w .dotai{color:var(--dotai)} .fab .w .s{font-weight:500;letter-spacing:3px;margin-left:8px;padding-left:9px;border-left:1px solid rgba(255,255,255,.35)}
.asst{padding:0}
.asst .head{background:var(--grad);color:#fff;padding:12px 16px;border-radius:18px 18px 0 0;display:flex;align-items:center;justify-content:space-between;margin:-10px -16px 10px}
.asst .head .w{font-family:var(--brand);font-weight:700} .asst .head .w .dotai{color:var(--dotai)} .asst .head .w .s{font-weight:500;letter-spacing:3px;margin-left:8px;padding-left:9px;border-left:1px solid rgba(255,255,255,.35)}
.asst .ctx{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.asst .ctx span{background:var(--chip);color:var(--slate);border-radius:999px;padding:3px 9px;font-size:.75rem;font-weight:600}
.asst .chips{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 10px}
.asst .chips button{border:1px solid var(--border);background:var(--paper);color:var(--navy);border-radius:999px;padding:0 12px;min-height:40px;font:600 .8125rem var(--font);cursor:pointer}
.asst .convo{display:flex;flex-direction:column;gap:7px;overflow:auto;flex:1;min-height:0;max-height:48vh}
.bub{max-width:88%;padding:10px 13px;font-size:.9rem;line-height:1.55;white-space:pre-wrap}
.bub.me{align-self:flex-end;background:var(--grad);color:#fff;border-radius:14px 14px 4px 14px}
.bub.ai{align-self:flex-start;background:var(--paper);color:var(--ink);border:1px solid var(--border);border-left:3px solid var(--navy);border-radius:4px 14px 14px 14px;box-shadow:var(--shadow)}
.bub .cites{margin-top:8px;display:flex;flex-direction:column;gap:4px} .bub .cites a,.bub .cites span{font-size:.78rem;color:var(--navy);font-weight:600;text-decoration:none}
.asst .ask{display:flex;gap:8px;margin-top:8px;flex:none;padding-bottom:calc(12px + var(--safe-bottom, env(safe-area-inset-bottom)))}
.asst .ask input{flex:1;min-height:46px;border:1px solid var(--border);border-radius:var(--r-sm);padding:8px 12px;font:1rem var(--font);background:var(--paper);color:var(--ink)}
.asst .ask button{min-height:46px;padding:0 16px;border:none;border-radius:var(--r-sm);background:var(--navy);color:#fff;font:600 .9rem var(--font);cursor:pointer}
.wave span{display:inline-block;width:7px;height:7px;border-radius:50%;background:#64748B;margin-right:4px;animation:wave 1.15s ease-in-out infinite}
.wave span:nth-child(2){animation-delay:.15s} .wave span:nth-child(3){animation-delay:.3s}
@keyframes wave{0%,60%,100%{transform:translateY(0);opacity:.45}30%{transform:translateY(-5px);opacity:1}}

/* ===== login — enterprise Login.CSS: black starfield canvas + container fade-up; dark inputs #050816 / #232842 / 10px ===== */
.intro{position:relative;flex:1;background:#000;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:0 24px calc(28px + env(safe-area-inset-bottom))}
.intro canvas{position:absolute;inset:0;width:100%;height:100%;display:block;background:#000}
#login-container{position:relative;z-index:2;width:100%;max-width:380px;opacity:0;transform:translateY(20px);transition:opacity 1s ease,transform 1s ease;display:flex;flex-direction:column;gap:10px;color:#fff;text-align:center}
#login-container .pw{font-family:var(--font);font-weight:500;letter-spacing:6px;font-size:.95rem;color:#fff;margin-bottom:2px}
#login-container .pw small{display:block;letter-spacing:0;font-size:.8125rem;color:#8c92b3;font-weight:400;margin-top:4px}
.field{display:flex;flex-direction:column;gap:6px;text-align:left} .field label{font-size:.85rem;font-weight:600;color:#cbd5e1}
.field input{min-height:46px;border:1px solid #232842;border-radius:10px;padding:10px 12px;font:1rem var(--font);background:#050816;color:#fff}
.field input:hover,.field input:focus{border-color:var(--accent-login);outline:none}
.btn.login{background:var(--accent-login);color:#050816;border-radius:10px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}

/* login card (recorded enterprise login, 2026-11-08) */
.logincard{background:#0B1020;border:1px solid #232842;border-radius:16px;padding:22px 20px 14px;display:flex;flex-direction:column;gap:10px;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.6)}
.logincard img{width:52px;height:52px;margin:0 auto}
.logincard .tagline{color:#4F8DFF;font-weight:600;font-size:1rem}
.logincard .loginbar{background:#2E6BE6;color:#fff;font-weight:700;letter-spacing:.5px;border-radius:8px;min-height:40px;display:flex;align-items:center;justify-content:center;font-size:.9rem}
.logincard form{display:flex;flex-direction:column;gap:10px}
.logincard .field input::placeholder{color:#6b7280}
.pwwrap{position:relative;display:block} .pwwrap input{width:100%;padding-right:44px}
.eye{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:40px;height:40px;border:none;background:transparent;color:#8c92b3;cursor:pointer;display:flex;align-items:center;justify-content:center}
.eye svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8}
/* enterprise Daily Briefing: ruled section headings and Portfolio Topline tiles */
.ruled{font-family:var(--brand);font-weight:700;color:var(--navy);font-size:.95rem;padding:10px 0 4px;border-bottom:2px solid var(--navy);margin-bottom:10px}
.topline{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.tile{border:1px solid var(--border);border-radius:8px;padding:10px 10px 8px;background:var(--paper)}
.tile b{display:block;font-family:var(--brand);font-size:1.5rem;color:var(--navy);line-height:1.1;font-variant-numeric:tabular-nums}
.tile span{display:block;font-size:.78rem;color:var(--slate);font-weight:600;margin-top:2px} .tile small{display:block;font-size:.75rem;line-height:1.35;color:var(--slate);margin-top:4px}
@media (max-width:374px){.tile{padding:8px 8px 6px} .tile b{font-size:1.35rem} .tile span{font-size:.75rem} .tile small{font-size:.72rem}}

/* ===== utility classes (replace inline style attributes so CSP can drop 'unsafe-inline') ===== */
.mt2{margin-top:2px}.mt4{margin-top:4px}.mt6{margin-top:6px}.mt8{margin-top:8px}.mt10{margin-top:10px}.mt22{margin-top:22px}.my12{margin:12px 0}.m0{margin:0}
.mb2{margin-bottom:2px}.mb4{margin-bottom:4px}.mb6{margin-bottom:6px}.mb8{margin-bottom:8px}.mla{margin-left:auto}.ml6{margin-left:6px}
.ink{color:var(--ink)}.inklg{color:var(--ink);font-size:1rem}.cinh{color:inherit}.cmuted{color:var(--muted)}.slate5{color:var(--slate);font-weight:500}.tr{text-align:right}.jc{justify-content:center}
.logo56{width:56px;height:56px;margin:0 auto}.plaincase{text-transform:none;letter-spacing:0}.shown{opacity:1!important;transform:none!important}
.hr{border:none;border-top:1px solid var(--border);margin:12px 0}.sk90{width:90%;margin-top:10px}.sk70{width:70%;margin-top:8px}.sk40{width:40%}
.rowline{padding:8px 0;border-bottom:1px solid var(--border)}.pad1014{padding:10px 14px}.mh52top{min-height:52px;align-items:flex-start}.mh44{min-height:44px}
.mh40lg{min-height:40px;margin-top:2px;font-size:1rem}.mh40{min-height:40px;font-size:.9rem}.inlinelink{min-height:32px;font-size:.78rem;display:inline}.mh24{min-height:24px}
.ul{margin:4px 0;padding-left:18px}.bold7{font-weight:700;letter-spacing:.3px}.w600{font-weight:600}.w400mt2{font-weight:400;margin-top:2px}
.brandnavy{font-family:var(--brand);margin:0;color:var(--navy)}.brand0{font-family:var(--brand);margin:0}.brandlg{font-family:var(--brand);font-size:1.3rem}.flex4{display:flex;align-items:center;gap:4px}
.loginerr{color:#F87171;min-height:1.2em;text-align:center;font-size:.85rem}.loginlink{color:#9DB4FF;justify-content:center;margin-top:6px}.loginfoot{color:#9CA3AF;font-size:.72rem;text-align:center}
.forgot{color:#4F8DFF;justify-content:center;font-size:.875rem;min-height:40px}.bnavy{border-color:var(--navy)}.fillnavy{background:var(--navy);color:#fff}.chipbg{background:var(--chip);border-color:var(--border)}

/* toast — actionable error that never replaces the screen (e.g. portfolio change refused) */
.toast{position:absolute;left:12px;right:12px;bottom:calc(var(--nav-h, 64px) + var(--fab-h, 0px) + 24px + var(--safe-bottom, env(safe-area-inset-bottom)));z-index:30;display:flex;align-items:center;gap:10px;background:var(--navy-dark);color:#fff;border-left:3px solid var(--red);border-radius:10px;padding:10px 12px;box-shadow:var(--shadow-lg);font-size:.875rem}
.toast span{flex:1} .toast .btn.ghost{color:#fff;border-color:rgba(255,255,255,.45);min-height:36px} .toast .ib{color:#fff}
.portsel.busy .dot{animation:pulse 1s infinite} @media (prefers-reduced-motion:reduce){.portsel.busy .dot{animation:none;opacity:.6}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}

.sheet .grp{font:600 .72rem var(--font);letter-spacing:.6px;text-transform:uppercase;color:var(--muted);margin:10px 0 2px}

/* assistant statements: facts and interpretation are visibly different kinds of sentence; refusals are plain */
.bub.ai .st{display:block;margin:0 0 8px;padding-left:8px;border-left:2px solid var(--border)}
.bub.ai .st.fact{border-left-color:var(--navy)} .bub.ai .st.interpretation{border-left-color:var(--accent);background:var(--chip);border-radius:0 8px 8px 0;padding:6px 8px}
.bub.ai .st.note{border-left:none;padding-left:0;font-weight:600;color:var(--slate)} .bub.ai .st.refusal{border-left-color:var(--muted);color:var(--slate)}
.bub.ai .st .tag{display:block;font:600 .6875rem var(--font);letter-spacing:.6px;text-transform:uppercase;color:var(--muted);margin-bottom:2px}
.bub.ai .st.interpretation .tag{color:#1D4FD8} .bub.ai .st .cid{display:block;font:500 .7rem var(--font);color:var(--muted);margin-top:2px}
.bub.ai.refused{border-left-color:var(--muted)}

/* briefing: material changes */
.sevrow{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;margin-top:6px} .sevchip{display:inline-flex;align-items:center;gap:6px;font-size:.9rem} .sevchip b{color:var(--ink);font-variant-numeric:tabular-nums}
.catrow .lbl b{color:var(--ink);margin-left:2px;font-variant-numeric:tabular-nums}
.catrow{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
/* company profile: chronology */
.chrono{list-style:none;margin:6px 0 0;padding:0 0 0 4px;border-left:2px solid var(--border)} .chrono li{display:flex;gap:10px;margin:0 0 12px;position:relative}
.chrono .dot{flex:none;width:10px;height:10px;border-radius:50%;margin:5px 0 0 -10px;background:var(--muted);box-shadow:0 0 0 2px var(--paper)}
.chrono .dot.critical,.chrono .dot.high{background:var(--red)} .chrono .dot.moderate{background:#D97706} .chrono .dot.low{background:var(--green)} .chrono .dot.info{background:var(--muted)}
.tile .sevtxt.high,.tile .sevtxt.critical{color:var(--red)} .tile .sevtxt.moderate{color:#D97706} .tile .sevtxt.low{color:var(--green)}
.chiprow{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end} .chipbtn{cursor:pointer;border:1px solid var(--border);background:var(--chip);color:var(--navy);font-weight:600;min-height:28px;padding:4px 10px}
/* bottom nav labels: never clip — two lines allowed on narrow phones, single short label below 375px */
.bottomnav button span{display:block;text-align:center;line-height:1.15;white-space:nowrap}
@media (max-width:374px){.bottomnav button{font-size:.66rem;padding:6px 0 4px} .bottomnav button span{white-space:normal;max-width:60px}}

.tick:focus-visible{outline:2px solid #fff;outline-offset:-2px}
/* contrast fixes (axe-core 4.14, WCAG AA): dark-theme info badge, NEW tag, Ask button, Selected pill */
[data-theme="dark"] .sev.info{background:#475569;color:#F8FAFC} [data-theme="dark"] .st.new{color:#8FB0FF}
[data-theme="dark"] .asst .ask button{background:#2E6BE6;color:#fff} [data-theme="dark"] .fillnavy{background:#2E6BE6;color:#fff}
[data-theme="dark"] .bub.ai .st.interpretation .tag{color:#8FB0FF} [data-theme="dark"] .bub.ai .st .cid{color:#A5ABC6}
.bub.ai .st .cid{color:#5B6478}

/* ===== four-layer content grammar (T3): one visual language for facts / interpretation / source / timestamps ===== */
.lay{margin-top:8px;padding:6px 10px;border-left:3px solid var(--border);border-radius:0 8px 8px 0;font-size:.9rem;color:var(--ink)}
.lay .tag{display:block;font:600 .6875rem var(--font);letter-spacing:.6px;text-transform:uppercase;color:var(--muted);margin-bottom:3px}
.lay-facts{border-left-color:var(--navy);background:transparent} .lay-facts .tag{color:var(--navy)} .lay-facts .ul{margin:2px 0 0;padding-left:18px} .lay-facts li{margin:2px 0}
.lay-interp{border-left-color:#1D4FD8;background:var(--chip)} .lay-interp .tag{color:#1D4FD8} .lay-interp .meta{margin-top:4px;color:var(--slate)}   /* 2026-11-09: --muted on the chip background was 4.23:1 (axe); slate passes in light and dark */
.lay-source{border-left-color:var(--green);background:transparent;padding-top:4px;padding-bottom:0} .lay-source .tag{color:#047857} .lay-source .srcrow{margin-top:0}
.lay-time{border-left-color:var(--muted);background:transparent;font-size:.8rem;color:var(--slate)} .lay-time .tag{color:var(--muted)}
[data-theme="dark"] .lay-interp .tag{color:#8FB0FF} [data-theme="dark"] .lay-source .tag{color:#34D399} [data-theme="dark"] .lay-facts .tag{color:#8FB0FF}
.exp .lay:first-child{margin-top:4px}

.fab[hidden]{display:none}
/* --safe-bottom lets tests emulate a home-indicator inset; production uses the real env() value */

/* launcher compact state while scrolling: wordmark text collapses, dot and "SIGNAL" remain; no position change; target stays ≥ 44 px */
.fab .w{white-space:nowrap} .fab.compact .w{font-size:0} .fab.compact .w .s{font-size:.8rem;margin-left:0;padding-left:0;border-left:none;letter-spacing:2px}
.fab .w,.fab .w .s{transition:font-size .15s ease} @media (prefers-reduced-motion:reduce){.fab .w,.fab .w .s{transition:none}}
/* assistant: long citation labels wrap inside the bubble */
.bub .cites a,.bub .cites span{overflow-wrap:anywhere;word-break:break-word;display:block;min-height:32px;padding:4px 0}
/* internal-demonstration watermark (contract 1.3 data_source.watermark) — shown on every content screen when the service supplies it.
   2026-11-09 (Frank): Hatfield.ai blue #2E6BE6 (the accessible login-bar blue) instead of red. */
.wmk { background: #2E6BE6; color: #fff; padding: 6px 12px; font-size: 12px; line-height: 1.35; display: flex; flex-direction: column; gap: 2px; text-align: center; }
.wmk b { font-weight: 700; letter-spacing: .02em; }
