/*
  PULSE workspace stylesheet (round 2, current direction)
  ---------------------------------------------------------------------------
  Load order in App.razor <head>:
    1. lib/bootstrap/dist/css/bootstrap.min.css        (Bootstrap 5.3.x)
    2. _content/Blazor.Bootstrap/blazor.bootstrap.css  (only if Blazor Bootstrap is used)
    3. _content/Pulse.Web.Components/css/fonts.css
    4. _content/Pulse.Web.Components/css/pulse.tokens.css
    5. _content/Pulse.Web.Components/css/intelligence.tokens.css
    6. _content/Pulse.Web.Components/css/pulse-workspace.css   (this file, last)

  Theme: set BOTH attributes on <html>: data-bs-theme="dark|light" and data-theme="dark|light".
  Every colour below is a literal value from the PULSE design system (Direction 01) except the
  proposed token --pulse-line (pending brand approval). Do not add raw hex in components; use the
  custom properties defined here.

  Naming: .pulse-* classes are PULSE patterns. Bootstrap classes (.btn, .form-control, .table,
  .nav, .offcanvas, .modal, .dropdown) keep their Bootstrap markup and are re-skinned through
  --bs-* variables and the overrides in section 3.
*/

/* 1. Tokens ---------------------------------------------------------------- */
:root,
[data-bs-theme="dark"] {
  --pulse-page: #071720;
  --pulse-band: #091B25;
  --pulse-panel: #0B202B;
  --pulse-surface: #102C38;
  --pulse-raised: #163745;
  --pulse-stroke: #2C4D57;
  --pulse-line: #1A3542;            /* proposed token: hairline separators */
  --pulse-text: #F4F8FA;
  --pulse-muted: #B6C9D0;
  --pulse-faint: #8FA6AE;
  --pulse-action: #FF6B8A;          /* rose: PULSE identity and primary action (O-1) */
  --pulse-action-hover: #FF86A0;
  --pulse-action-pressed: #F25578;
  --pulse-on-action: #071720;
  --pulse-rose: #FF6B8A;
  --pulse-link: #3DE0CD;            /* teal: links, focus, map editing handles */
  --pulse-focus: #3DE0CD;
  --pulse-ok: #5FA88F;
  --pulse-warn: #E8962E;
  --pulse-danger: #FF6B7D;
  --pulse-marking: #FF6B7D;         /* placeholder only: AIC.Marker owns marking colour (O-2) */
  --pulse-inset: #F4F8FA;           /* light inset behind threat gauge so report colours keep meaning */

  --pulse-map-water: #0A1D27;
  --pulse-map-land: #0F2733;
  --pulse-map-road: #2C4D57;
  --pulse-map-road-minor: #173543;
  --pulse-map-label: #9FB6BE;
  --pulse-map-halo: #071720;
  --pulse-map-building: #13303D;
  --pulse-map-park: #10303A;

  --pulse-topbar-h: 48px;
  --pulse-rail-w: 56px;
  --pulse-status-h: 24px;
  --pulse-tabbar-h: 60px;
  --pulse-radius-control: 8px;
  --pulse-radius-panel: 12px;
  --pulse-ease: cubic-bezier(.2,.7,.2,1);

  /* Bootstrap mapping */
  --bs-body-bg: var(--pulse-page);
  --bs-body-color: var(--pulse-text);
  --bs-secondary-color: var(--pulse-muted);
  --bs-tertiary-color: var(--pulse-faint);
  --bs-border-color: var(--pulse-stroke);
  --bs-border-color-translucent: var(--pulse-line);
  --bs-link-color: var(--pulse-link);
  --bs-link-color-rgb: 61,224,205;
  --bs-link-hover-color: var(--pulse-link);
  --bs-secondary-bg: var(--pulse-surface);
  --bs-tertiary-bg: var(--pulse-panel);
  --bs-emphasis-color: var(--pulse-text);
  --bs-focus-ring-color: var(--pulse-focus);
  --bs-body-font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif;
  --bs-body-font-size: .875rem;      /* 14 px workspace base */
  --bs-body-line-height: 1.45;
  --bs-border-radius: var(--pulse-radius-control);
  --bs-border-radius-lg: var(--pulse-radius-panel);
}

[data-bs-theme="light"] {
  --pulse-page: #F4F8FA;
  --pulse-band: #FFFFFF;
  --pulse-panel: #FFFFFF;
  --pulse-surface: #FFFFFF;
  --pulse-raised: #E9F1F3;
  --pulse-stroke: #CBD8DD;
  --pulse-line: #DFE8EB;
  --pulse-text: #071720;
  --pulse-muted: #405A63;
  --pulse-faint: #5C747C;
  --pulse-action: #B62D57;
  --pulse-action-hover: #A2234B;
  --pulse-action-pressed: #8C193E;
  --pulse-on-action: #FFFFFF;
  --pulse-rose: #B62D57;
  --pulse-link: #00685F;
  --pulse-focus: #007C72;
  --pulse-ok: #2F7A60;
  --pulse-warn: #9A5B00;
  --pulse-danger: #B3122A;
  --pulse-marking: #C8102E;
  --pulse-map-water: #DCE9EA;
  --pulse-map-land: #F7F8F6;
  --pulse-map-road: #C3D0CE;
  --pulse-map-road-minor: #E1E8E6;
  --pulse-map-label: #36515A;
  --pulse-map-halo: #FFFFFF;
  --pulse-map-building: #ECEFEB;
  --pulse-map-park: #E3EEE6;
  --bs-link-color-rgb: 0,104,95;
}

/* 2. Base ------------------------------------------------------------------ */
body { background: var(--pulse-page); color: var(--pulse-text); font-feature-settings: "tnum" 1, "cv11" 1; }
h1, h2, h3, .pulse-display { font-family: "Inter Display", Inter, system-ui, sans-serif; font-weight: 600; letter-spacing: -.02em; line-height: 1.2; }
h1 { font-size: 1.375rem; }  /* 22 px app pages; 24 px reader title via .pulse-reader-title */
h2 { font-size: 1rem; }
h3 { font-size: .875rem; letter-spacing: 0; }
a { text-underline-offset: 3px; text-decoration-thickness: 1px; }
:focus-visible { outline: 3px solid var(--pulse-focus) !important; outline-offset: 2px; box-shadow: none !important; }
.pulse-cap { font-size: .6875rem; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; color: var(--pulse-faint); }
.pulse-mono { font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace; font-size: .75rem; }
.pulse-muted { color: var(--pulse-muted); } .pulse-faint { color: var(--pulse-faint); }
.pulse-icon { width: 16px; height: 16px; flex: none; fill: currentColor; vertical-align: -3px; }
.pulse-icon-lg { width: 18px; height: 18px; }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; } }

/* 3. Bootstrap re-skin ----------------------------------------------------- */
.btn { --bs-btn-padding-y: 0; --bs-btn-padding-x: .75rem; --bs-btn-font-size: .8125rem; --bs-btn-font-weight: 500;
  --bs-btn-border-radius: var(--pulse-radius-control); height: 32px; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  transition: background-color .15s var(--pulse-ease), border-color .15s var(--pulse-ease), color .15s var(--pulse-ease); white-space: nowrap; }
.btn-lg { height: 44px; --bs-btn-font-size: .9375rem; --bs-btn-padding-x: 1rem; }
@media (pointer: coarse) { .btn { min-height: 44px; } }
.btn-primary { --bs-btn-bg: var(--pulse-action); --bs-btn-border-color: var(--pulse-action); --bs-btn-color: var(--pulse-on-action); --bs-btn-font-weight: 600;
  --bs-btn-hover-bg: var(--pulse-action-hover); --bs-btn-hover-border-color: var(--pulse-action-hover); --bs-btn-hover-color: var(--pulse-on-action);
  --bs-btn-active-bg: var(--pulse-action-pressed); --bs-btn-active-border-color: var(--pulse-action-pressed); --bs-btn-active-color: var(--pulse-on-action);
  --bs-btn-disabled-bg: var(--pulse-raised); --bs-btn-disabled-border-color: var(--pulse-stroke); --bs-btn-disabled-color: var(--pulse-faint); --bs-btn-disabled-opacity: 1; }
.btn-outline-secondary, .btn-secondary { --bs-btn-bg: transparent; --bs-btn-color: var(--pulse-text); --bs-btn-border-color: var(--pulse-stroke);
  --bs-btn-hover-bg: var(--pulse-raised); --bs-btn-hover-color: var(--pulse-text); --bs-btn-hover-border-color: var(--pulse-rose);
  --bs-btn-active-bg: var(--pulse-raised); --bs-btn-active-color: var(--pulse-text); --bs-btn-active-border-color: var(--pulse-rose); }
.btn-link, .btn-quiet { --bs-btn-color: var(--pulse-muted); --bs-btn-border-color: transparent; --bs-btn-hover-color: var(--pulse-text); --bs-btn-hover-bg: var(--pulse-raised); text-decoration: none; }
.btn-icon { width: 32px; padding: 0; }
.form-control, .form-select { height: 32px; font-size: .8125rem; border-radius: var(--pulse-radius-control); background-color: var(--pulse-page); border-color: var(--pulse-stroke); color: var(--pulse-text); }
[data-bs-theme="light"] .form-control, [data-bs-theme="light"] .form-select { background-color: #FFFFFF; }
textarea.form-control { height: auto; min-height: 72px; padding-top: .5rem; }
.form-control::placeholder { color: var(--pulse-faint); }
.form-control.is-invalid, .form-select.is-invalid { border-color: var(--pulse-danger); background-image: none; }
.invalid-feedback { color: var(--pulse-danger); font-size: .75rem; }
.form-label { font-weight: 600; font-size: .8125rem; margin-bottom: .3rem; }
.form-text { color: var(--pulse-faint); font-size: .75rem; margin-top: 0; margin-bottom: .3rem; }
.form-check-input:checked { background-color: var(--pulse-action); border-color: var(--pulse-action); }
.table { --bs-table-bg: transparent; --bs-table-color: var(--pulse-text); --bs-table-border-color: var(--pulse-line); font-size: .8125rem; margin: 0; }
.table > thead th { font-size: .6875rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--pulse-faint); height: 30px; padding: 0 10px; vertical-align: middle; border-bottom-color: var(--pulse-stroke); white-space: nowrap; background: var(--pulse-panel); }
.table > tbody td { height: 34px; padding: 0 10px; vertical-align: middle; white-space: nowrap; }
.table > tbody tr.is-selected > td, .table > tbody tr[aria-selected="true"] > td { background: var(--pulse-raised); }
.table > tbody tr.is-selected > td:first-child, .table > tbody tr[aria-selected="true"] > td:first-child { box-shadow: inset 3px 0 0 var(--pulse-rose); }
.nav-underline { --bs-nav-underline-gap: 1.25rem; --bs-nav-underline-border-width: 2px; --bs-nav-link-color: var(--pulse-muted); --bs-nav-link-hover-color: var(--pulse-text); --bs-nav-underline-link-active-color: var(--pulse-text); font-size: .8125rem; }
.nav-underline .nav-link.active, .nav-underline .nav-link[aria-current="page"] { border-bottom-color: var(--pulse-rose); font-weight: 600; }
.offcanvas, .modal-content, .dropdown-menu { --bs-offcanvas-bg: var(--pulse-band); --bs-modal-bg: var(--pulse-band); --bs-dropdown-bg: var(--pulse-band); --bs-dropdown-border-color: var(--pulse-stroke); box-shadow: none; }
.modal-backdrop { --bs-backdrop-bg: rgb(3 13 18); --bs-backdrop-opacity: .8; }
.badge { font-weight: 600; }

/* 4. Shell ----------------------------------------------------------------- */
.pulse-topbar { position: fixed; inset: 0 0 auto 0; height: var(--pulse-topbar-h); z-index: 1030; display: flex; align-items: center; gap: 12px; padding-right: 12px;
  background: var(--pulse-band); border-bottom: 1px solid var(--pulse-stroke); }
.pulse-topbar-brand { width: var(--pulse-rail-w); height: 100%; display: flex; align-items: center; justify-content: center; border-right: 1px solid var(--pulse-line); }
.pulse-wordmark img { height: 15px; width: auto; display: block; }
.pulse-crumb { display: flex; align-items: center; gap: 8px; font-size: .8125rem; color: var(--pulse-muted); white-space: nowrap; }
.pulse-crumb [aria-current="page"] { color: var(--pulse-text); font-weight: 600; }
.pulse-command { height: 32px; width: min(440px, 34vw); margin-inline: auto; display: flex; align-items: center; gap: 8px; padding: 0 6px 0 10px;
  border: 1px solid var(--pulse-stroke); border-radius: var(--pulse-radius-control); background: var(--pulse-page); color: var(--pulse-faint); font-size: .8125rem; }
.pulse-kbd { font: 500 11px/1 ui-monospace, monospace; border: 1px solid var(--pulse-stroke); border-radius: 4px; padding: 3px 5px; color: var(--pulse-faint); }
.pulse-count { position: absolute; top: 3px; right: 2px; min-width: 16px; height: 16px; border-radius: 8px; background: var(--pulse-rose); color: var(--pulse-on-action); font: 700 10px/16px Inter, sans-serif; text-align: center; }
.pulse-rail { position: fixed; top: var(--pulse-topbar-h); bottom: 0; left: 0; width: var(--pulse-rail-w); z-index: 1020; display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 8px 0;
  background: var(--pulse-band); border-right: 1px solid var(--pulse-stroke); }
.pulse-rail a { position: relative; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border-radius: 8px; color: var(--pulse-faint); }
.pulse-rail a:hover { color: var(--pulse-text); background: var(--pulse-raised); }
.pulse-rail a[aria-current="page"] { color: var(--pulse-text); background: var(--pulse-raised); }
.pulse-rail a[aria-current="page"]::before { content: ""; position: absolute; left: -8px; top: 8px; bottom: 8px; width: 3px; border-radius: 0 3px 3px 0; background: var(--pulse-rose); }
.pulse-rail hr { width: 24px; margin: 6px 0; border-color: var(--pulse-line); opacity: 1; }
.pulse-main { position: fixed; top: var(--pulse-topbar-h); left: var(--pulse-rail-w); right: 0; bottom: var(--pulse-status-h); overflow: auto; }
.pulse-statusbar { position: fixed; inset: auto 0 0 0; height: var(--pulse-status-h); z-index: 1030; display: flex; align-items: center; gap: 18px; padding: 0 12px;
  background: var(--pulse-band); border-top: 1px solid var(--pulse-stroke); font-size: .6875rem; color: var(--pulse-faint); }
.pulse-tabbar { display: none; }
@media (max-width: 767.98px) {
  .pulse-rail, .pulse-statusbar, .pulse-command { display: none; }
  .pulse-main { left: 0; bottom: var(--pulse-tabbar-h); top: 52px; }
  .pulse-topbar { height: 52px; }
  .pulse-tabbar { position: fixed; inset: auto 0 0 0; height: calc(var(--pulse-tabbar-h) + env(safe-area-inset-bottom)); padding-bottom: env(safe-area-inset-bottom); z-index: 1030;
    display: grid; grid-template-columns: repeat(4, 1fr); background: var(--pulse-band); border-top: 1px solid var(--pulse-stroke); }
  .pulse-tabbar a { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; font-size: 11px; color: var(--pulse-faint); text-decoration: none; }
  .pulse-tabbar a[aria-current="page"] { color: var(--pulse-text); font-weight: 600; }
  .pulse-tabbar a[aria-current="page"]::before { content: ""; position: absolute; top: 0; left: 30%; right: 30%; height: 3px; border-radius: 0 0 3px 3px; background: var(--pulse-rose); }
}

/* 5. Panels and workspace grid -------------------------------------------- */
.pulse-workspace { display: grid; height: 100%; grid-template-columns: var(--pulse-ws-left, 360px) minmax(0, 1fr) var(--pulse-ws-right, 384px); grid-template-rows: minmax(0, 1fr) auto; }
.pulse-workspace > .pulse-ws-left { grid-row: 1 / 3; border-right: 1px solid var(--pulse-stroke); background: var(--pulse-panel); overflow: auto; }
.pulse-workspace > .pulse-ws-centre { position: relative; min-height: 0; }
.pulse-workspace > .pulse-ws-bottom { grid-column: 2; border-top: 1px solid var(--pulse-stroke); background: var(--pulse-band); }
.pulse-workspace > .pulse-ws-right { grid-row: 1 / 3; grid-column: 3; border-left: 1px solid var(--pulse-stroke); background: var(--pulse-panel); overflow: auto; }
@media (max-width: 1279.98px) { .pulse-workspace { --pulse-ws-left: 320px; --pulse-ws-right: 0px; } .pulse-workspace > .pulse-ws-right { position: fixed; right: 0; top: var(--pulse-topbar-h); bottom: var(--pulse-status-h); width: 384px; z-index: 1025; } }
@media (max-width: 767.98px) { .pulse-workspace { display: block; } }
.pulse-panel-head { height: 40px; display: flex; align-items: center; gap: 8px; padding: 0 12px; border-bottom: 1px solid var(--pulse-line); flex: none; }
.pulse-section { padding: 14px 16px; border-bottom: 1px solid var(--pulse-line); }
.pulse-card { background: var(--pulse-panel); border: 1px solid var(--pulse-line); border-radius: var(--pulse-radius-panel); overflow: hidden; }
.pulse-card > .pulse-panel-head { padding: 0 16px; }
.pulse-card-body { padding: 14px 16px; }
.pulse-kv { display: grid; grid-template-columns: auto 1fr; gap: 6px 14px; margin: 0; font-size: .8125rem; }
.pulse-kv dt { color: var(--pulse-faint); font-weight: 400; } .pulse-kv dd { margin: 0; }
.pulse-page-header { background: var(--pulse-band); border-bottom: 1px solid var(--pulse-stroke); padding: 12px 16px 0; }

/* 6. Tags, chips, segmented ----------------------------------------------- */
.pulse-tag { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 7px; border-radius: 5px; border: 1px solid var(--pulse-stroke); font-size: .75rem; color: var(--pulse-muted); white-space: nowrap; }
.pulse-tag-warn { border-color: var(--pulse-warn); color: var(--pulse-warn); }
.pulse-tag-danger { border-color: var(--pulse-danger); color: var(--pulse-danger); }
.pulse-tag-ok { border-color: var(--pulse-ok); color: var(--pulse-ok); }
.pulse-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; flex: none; background: var(--pulse-faint); }
.pulse-dot-ok { background: var(--pulse-ok); } .pulse-dot-warn { background: var(--pulse-warn); } .pulse-dot-danger { background: var(--pulse-danger); } .pulse-dot-rose { background: var(--pulse-rose); }
.pulse-segmented { display: inline-flex; border: 1px solid var(--pulse-stroke); border-radius: var(--pulse-radius-control); overflow: hidden; }
.pulse-segmented > button { height: 28px; padding: 0 10px; border: 0; border-right: 1px solid var(--pulse-stroke); background: transparent; color: var(--pulse-muted); font-size: .75rem; white-space: nowrap; }
.pulse-segmented > button:last-child { border-right: 0; }
.pulse-segmented > button[aria-pressed="true"] { background: var(--pulse-raised); color: var(--pulse-text); font-weight: 600; box-shadow: inset 0 -2px 0 var(--pulse-rose); }
@media (pointer: coarse) { .pulse-segmented > button { height: 36px; } }

/* 7. Intelligence signals -------------------------------------------------- */
.pulse-phia { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: 5px; font-size: .75rem; font-weight: 600; white-space: nowrap; box-shadow: inset 0 0 0 1px rgb(255 255 255 / .18); }
/* colours come from intelligence.tokens.css: .pulse-probability-1 ... -7 ; apply both classes */
.pulse-horizon { display: inline-flex; align-items: center; height: 22px; padding: 0 7px; border-radius: 5px; border: 1px solid var(--pulse-stroke); font: 600 11px/1 Inter, sans-serif; letter-spacing: .06em; white-space: nowrap; }
.pulse-threat-label { display: inline-flex; align-items: center; gap: 6px; font-size: .8125rem; font-weight: 600; white-space: nowrap; }
.pulse-threat-label > i { width: 10px; height: 10px; border-radius: 2px; display: inline-block; box-shadow: 0 0 0 1px rgb(255 255 255 / .25); }
.pulse-gauge { display: grid; grid-template-columns: repeat(5, 1fr); gap: 3px; padding: 5px; border-radius: 7px; background: var(--pulse-inset); }
.pulse-gauge > span { height: 8px; border-radius: 2px; opacity: .35; }
.pulse-gauge > span[aria-current="true"] { opacity: 1; outline: 2px solid #071720; outline-offset: 1px; }
.pulse-gauge-labels { display: grid; grid-template-columns: repeat(5, 1fr); font-size: .6875rem; color: var(--pulse-faint); text-align: center; margin-top: 4px; }
.pulse-gauge-labels > [aria-current="true"] { color: var(--pulse-text); font-weight: 600; }
.pulse-change-up { color: var(--pulse-warn); } .pulse-change-down, .pulse-change-none { color: var(--pulse-faint); }
.pulse-judgement { border-inline-start: 2px solid var(--pulse-rose); padding: 2px 0 2px 12px; }
.pulse-judgement.is-selected { outline: 2px solid var(--pulse-focus); outline-offset: 6px; border-radius: 2px; }
.pulse-judgement-statement { margin: 8px 0 0; font-size: 1rem; line-height: 1.55; }
.pulse-judgement-compact .pulse-judgement-statement { font-size: .875rem; margin-top: 6px; }
.pulse-judgement-meta { margin-top: 6px; font-size: .75rem; color: var(--pulse-faint); }
.pulse-marking-strip { background: var(--pulse-panel); border-block: 1px solid var(--pulse-line); padding: 7px 0; text-align: center; position: sticky; top: 0; z-index: 5; }
/* AIC.Marker renders inside .pulse-marking-strip; do not style its text from PULSE. */

/* 8. Register rows -------------------------------------------------------- */
.pulse-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 10px; padding: 10px 12px; border-bottom: 1px solid var(--pulse-line); position: relative; cursor: pointer; }
.pulse-row:hover { background: color-mix(in srgb, var(--pulse-raised) 60%, transparent); }
.pulse-row[aria-selected="true"] { background: var(--pulse-raised); }
.pulse-row[aria-selected="true"]::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--pulse-rose); }
.pulse-row-title { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pulse-row-meta { grid-column: 1 / -1; display: flex; gap: 8px; align-items: center; font-size: .75rem; color: var(--pulse-muted); white-space: nowrap; margin-top: 4px; }

/* 9. Map ------------------------------------------------------------------- */
.pulse-map { position: absolute; inset: 0; background: var(--pulse-map-water); overflow: hidden; }
.pulse-map-chips { position: absolute; left: 12px; top: 12px; display: flex; gap: 6px; z-index: 2; }
.pulse-map-chip { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border-radius: 999px; background: var(--pulse-band); border: 1px solid var(--pulse-stroke); font-size: .75rem; color: var(--pulse-text); }
.pulse-map-chip[aria-pressed="false"] { color: var(--pulse-faint); }
.pulse-map-tools { position: absolute; right: 12px; top: 12px; display: flex; flex-direction: column; background: var(--pulse-band); border: 1px solid var(--pulse-stroke); border-radius: 8px; overflow: hidden; z-index: 2; }
.pulse-map-tools > button { width: 32px; height: 32px; border: 0; border-bottom: 1px solid var(--pulse-line); background: transparent; color: var(--pulse-muted); }
@media (pointer: coarse) { .pulse-map-tools > button { width: 44px; height: 44px; } }
.pulse-map-callout { position: absolute; background: var(--pulse-band); border: 1px solid var(--pulse-stroke); border-radius: 10px; padding: 10px 12px; font-size: .8125rem; width: 240px; z-index: 3; }
.pulse-map-attribution { position: absolute; right: 8px; bottom: 6px; font-size: 11px; color: var(--pulse-map-label); background: color-mix(in srgb, var(--pulse-map-halo) 75%, transparent); padding: 1px 6px; border-radius: 4px; z-index: 2; }
.pulse-map-scale { position: absolute; left: 12px; bottom: 8px; font-size: 11px; color: var(--pulse-map-label); z-index: 2; }
.pulse-timeline { height: 120px; position: relative; }
.pulse-timeline-edition { width: 10px; height: 10px; transform: rotate(45deg); background: var(--pulse-muted); position: absolute; }
.pulse-timeline-edition[aria-current="true"] { background: var(--pulse-rose); }
.pulse-timeline-bar { position: absolute; bottom: 24px; background: var(--pulse-stroke); border-radius: 2px 2px 0 0; }

/* 10. Notices and states -------------------------------------------------- */
.pulse-notice { display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; border: 1px solid var(--pulse-line); border-inline-start: 3px solid var(--pulse-stroke); border-radius: 8px; background: var(--pulse-surface); font-size: .8125rem; }
.pulse-notice-info { border-inline-start-color: var(--pulse-link); }
.pulse-notice-warn { border-inline-start-color: var(--pulse-warn); }
.pulse-notice-danger { border-inline-start-color: var(--pulse-danger); }
.pulse-empty { border: 1px dashed var(--pulse-stroke); border-radius: var(--pulse-radius-panel); padding: 20px; text-align: center; }
.pulse-error-summary { border: 1px solid var(--pulse-danger); border-inline-start-width: 3px; border-radius: 8px; padding: 12px 14px; background: var(--pulse-surface); }

/* 11. Forms and steps ----------------------------------------------------- */
.pulse-step-header { position: fixed; inset: 0 0 auto 0; height: 56px; display: flex; align-items: center; gap: 14px; padding: 0 16px; background: var(--pulse-band); border-bottom: 1px solid var(--pulse-stroke); z-index: 1030; }
.pulse-steps { display: flex; gap: 6px; list-style: none; margin: 0; padding: 0; font-size: .75rem; }
.pulse-steps > li { display: flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border-radius: 999px; border: 1px solid var(--pulse-line); color: var(--pulse-faint); }
.pulse-steps > li.is-done { color: var(--pulse-text); }
.pulse-steps > li[aria-current="step"] { border-color: var(--pulse-rose); color: var(--pulse-text); font-weight: 600; }
.pulse-step-body { position: fixed; top: 56px; bottom: 64px; left: 0; right: 0; overflow: auto; }
.pulse-step-grid { display: grid; grid-template-columns: minmax(0, 640px) 380px; gap: 32px; justify-content: center; padding: 28px 24px; }
.pulse-step-footer { position: fixed; inset: auto 0 0 0; height: 64px; display: flex; align-items: center; gap: 10px; padding: 0 24px; background: var(--pulse-band); border-top: 1px solid var(--pulse-stroke); z-index: 1030; }
@media (max-width: 767.98px) {
  .pulse-steps { display: none; }
  .pulse-step-grid { grid-template-columns: 1fr; padding: 16px 14px; }
  .pulse-step-body { top: 52px; bottom: calc(104px + env(safe-area-inset-bottom)); }
  .pulse-step-footer { height: calc(104px + env(safe-area-inset-bottom)); flex-direction: column; align-items: stretch; justify-content: center; padding: 8px 14px calc(12px + env(safe-area-inset-bottom)); }
}
.pulse-choice { display: flex; gap: 10px; padding: 12px 14px; border: 1px solid var(--pulse-line); border-radius: 10px; background: var(--pulse-surface); }
.pulse-choice:has(input:checked) { border-color: var(--pulse-rose); background: var(--pulse-raised); }
.pulse-save-status { font-size: .75rem; color: var(--pulse-muted); display: inline-flex; gap: 6px; align-items: center; }
.pulse-save-status.is-retrying { color: var(--pulse-warn); } .pulse-save-status.is-failed { color: var(--pulse-danger); }

/* 12. Phone sheet --------------------------------------------------------- */
.pulse-sheet { position: fixed; left: 0; right: 0; bottom: 0; background: var(--pulse-band); border: 1px solid var(--pulse-stroke); border-radius: 16px 16px 0 0; z-index: 1040; padding: 0 14px calc(14px + env(safe-area-inset-bottom)); }
.pulse-sheet-grab { width: 36px; height: 4px; border-radius: 2px; background: var(--pulse-stroke); margin: 8px auto; }

/* 13. Forced colours ------------------------------------------------------ */
@media (forced-colors: active) {
  .pulse-row[aria-selected="true"]::before, .pulse-rail a[aria-current="page"]::before { background: Highlight; }
  .pulse-phia, .pulse-horizon, .pulse-tag, .pulse-gauge > span { border: 1px solid CanvasText; forced-color-adjust: none; }
  .pulse-judgement { border-inline-start-color: CanvasText; }
}

/* 14. Blazor build additions (classes used by the Razor components) ------- */
.pulse-skip { position: absolute; left: 8px; top: calc(var(--pulse-mark-h, 28px) + 8px); z-index: 2000; background: var(--pulse-band); padding: 8px 12px; border-radius: 8px; }
.pulse-pdot { font: 700 17px/1 "Inter Display", Inter, sans-serif; display: inline-flex; align-items: flex-end; gap: 2px; color: var(--pulse-text); }
.pulse-pdot i { width: 6px; height: 6px; border-radius: 50%; background: var(--pulse-rose); display: inline-block; margin-bottom: 3px; }
.pulse-topbar-brand { text-decoration: none; }
.pulse-wordmark { display: inline-flex; align-items: center; }
.pulse-wordmark img { height: 15px; width: auto; }
.pulse-on-light { display: none !important; }
[data-bs-theme="light"] .pulse-on-light { display: block !important; }
[data-bs-theme="light"] .pulse-on-dark { display: none !important; }
.pulse-divider { width: 1px; height: 20px; background: var(--pulse-line); flex: none; }
.pulse-crumb-link { color: var(--pulse-muted); text-decoration: none; }
.pulse-crumb-link:hover { color: var(--pulse-text); text-decoration: underline; }
.pulse-avatar { width: 30px; height: 30px; border-radius: 50%; background: var(--pulse-raised); border: 1px solid var(--pulse-stroke); display: inline-flex; align-items: center; justify-content: center; font: 600 11px Inter, sans-serif; color: var(--pulse-text); text-decoration: none; flex: none; }
button.pulse-command { cursor: text; text-align: left; }
.pulse-command-hit { display: flex; flex-direction: column; padding: 8px 10px; border-radius: 8px; text-decoration: none; color: var(--pulse-text); }
.pulse-command-hit:hover, .pulse-command-hit:focus { background: var(--pulse-raised); }
.pulse-rail a.active { color: var(--pulse-text); background: var(--pulse-raised); }
.pulse-rail a.active::before { content: ""; position: absolute; left: -8px; top: 8px; bottom: 8px; width: 3px; border-radius: 0 3px 3px 0; background: var(--pulse-rose); }
.pulse-segmented > a { height: 28px; padding: 0 10px; display: inline-flex; align-items: center; border-right: 1px solid var(--pulse-stroke); color: var(--pulse-muted); font-size: .75rem; white-space: nowrap; text-decoration: none; }
.pulse-segmented > a:last-child { border-right: 0; }
.pulse-segmented > a[aria-pressed="true"] { background: var(--pulse-raised); color: var(--pulse-text); font-weight: 600; box-shadow: inset 0 -2px 0 var(--pulse-rose); }
@media (pointer: coarse) { .pulse-segmented > a { height: 36px; } }
.pulse-page-header h1 { font-size: 1.25rem; }
.pulse-tabs { margin-top: 8px; }
.pulse-tabs .nav-link { padding: 10px 0; }
.pulse-tabs .nav-link.active { color: var(--pulse-text); font-weight: 600; border-bottom-color: var(--pulse-rose); }
.pulse-workspace.no-bottom > .pulse-ws-left, .pulse-workspace.no-bottom > .pulse-ws-right { grid-row: 1 / 2; }
.pulse-workspace.no-bottom { grid-template-rows: minmax(0, 1fr); }
.pulse-ws-left, .pulse-ws-right { display: flex; flex-direction: column; }
.pulse-inspector-title { font-size: 1.25rem; margin: 4px 0 2px; }
.pulse-threat-value { font: 600 20px "Inter Display", Inter, sans-serif; }
.pulse-threat-head { margin: 6px 0 8px; }
.pulse-phia-neutral { border: 1px solid var(--pulse-stroke); color: var(--pulse-muted); }
.pulse-text-warn { color: var(--pulse-warn); } .pulse-text-rose { color: var(--pulse-rose); } .pulse-text-danger { color: var(--pulse-danger); }
.pulse-tag-rose { border-color: var(--pulse-rose); color: var(--pulse-rose); }
.pulse-tag-info { border-color: var(--pulse-link); color: var(--pulse-link); }
.pulse-source { padding: 12px 0; border-top: 1px solid var(--pulse-line); }
.pulse-source-title { font-size: .875rem; font-weight: 600; margin: 6px 0 2px; letter-spacing: 0; font-family: Inter, sans-serif; }
.pulse-extract { margin: 8px 0 0; padding: 8px 10px; border: 1px solid var(--pulse-line); border-radius: 8px; font-size: .8125rem; color: var(--pulse-muted); }
.pulse-marking-strip { position: static; }
.pulse-marking-strip.is-sticky { position: sticky; top: 0; z-index: 5; }
.pulse-marking-placeholder { text-align: center; font: 700 12px/1.3 Barlow, Inter, sans-serif; letter-spacing: .12em; text-transform: uppercase; color: var(--pulse-marking); }
.pulse-edition-header { background: var(--pulse-band); border-bottom: 1px solid var(--pulse-stroke); padding: 14px 32px; }
.pulse-reader-title { font-size: 1.5rem; margin: 2px 0 4px; }
.pulse-row { color: inherit; text-decoration: none; }
.pulse-row:focus-visible { outline-offset: -3px; }
.pulse-row-attention { grid-column: 1 / -1; margin-top: 6px; }
.pulse-attention { border-bottom: 1px solid var(--pulse-line); padding-bottom: 4px; }
.pulse-stages { list-style: none; margin: 0; padding: 0; }
.pulse-stages > li { display: flex; gap: 10px; align-items: flex-start; padding: 6px 0; font-size: .8125rem; }
.pulse-stage-mark { width: 18px; height: 18px; border-radius: 50%; flex: none; display: inline-flex; align-items: center; justify-content: center; border: 2px solid var(--pulse-stroke); }
.pulse-stages > li.is-done .pulse-stage-mark { background: var(--pulse-ok); border-color: var(--pulse-ok); color: #071720; }
.pulse-stages > li.is-current .pulse-stage-mark { border-color: var(--pulse-rose); }
.pulse-stages > li.is-pending { color: var(--pulse-faint); }
.pulse-status-text { display: inline-flex; align-items: center; gap: 6px; }
.pulse-step-title h1 { font-size: 1rem; margin: 0; }
.pulse-step-aside { display: flex; flex-direction: column; gap: 14px; }
.pulse-step-main { display: flex; flex-direction: column; gap: 16px; }
.pulse-pirs { display: flex; flex-direction: column; gap: 8px; }
.pulse-pir { display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; border: 1px solid var(--pulse-line); border-radius: 10px; background: var(--pulse-surface); }
.pulse-check-row { display: flex; gap: 12px; align-items: flex-start; padding: 12px 14px; border-bottom: 1px solid var(--pulse-line); }
.pulse-check-row:last-child { border-bottom: 0; }
.pulse-choice-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.pulse-map-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.pulse-map-area { fill: var(--pulse-rose); fill-opacity: .07; stroke: var(--pulse-rose); stroke-width: 1.8; vector-effect: non-scaling-stroke; stroke-linejoin: round; cursor: pointer; }
.pulse-map-area.is-selected { fill-opacity: .14; stroke-width: 3; }
.pulse-map-area.is-previous { fill-opacity: 0; stroke-dasharray: 8 6; stroke-width: 2; }
.pulse-map-area-label { font: 600 14px Inter, sans-serif; fill: var(--pulse-text); stroke: var(--pulse-map-halo); stroke-width: 4px; paint-order: stroke; pointer-events: none; }
.pulse-map-feature { stroke: var(--pulse-map-halo); stroke-width: 2.5; cursor: pointer; vector-effect: non-scaling-stroke; }
.pulse-map-selected { fill: none; stroke: var(--pulse-focus); stroke-width: 3; vector-effect: non-scaling-stroke; }
.pulse-map-radius { fill: none; stroke-width: 1.5; stroke-dasharray: 4 4; vector-effect: non-scaling-stroke; }
.pulse-map-cluster { cursor: pointer; }
.pulse-map-cluster circle { fill: var(--pulse-band); stroke: var(--pulse-muted); stroke-width: 1.5; }
.pulse-map-cluster text { font: 700 12px Inter, sans-serif; fill: var(--pulse-text); }
.pulse-map-tools > a { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; color: var(--pulse-muted); }
.pulse-map-tools > button:last-child { border-bottom: 0; }
.pulse-map-scale { display: flex; flex-direction: column; gap: 2px; }
.pulse-map-scale i { display: block; width: 80px; height: 6px; border: 1.5px solid var(--pulse-map-label); border-top: 0; }
.pulse-map-features-list { position: absolute; left: 0; top: 0; margin: 0; padding: 0; list-style: none; z-index: 4; }
.pulse-map-features-list a:focus { display: block; background: var(--pulse-band); padding: 6px 10px; border-radius: 8px; margin: 8px; }
.pulse-timeline-wrap { height: 100%; display: flex; flex-direction: column; }
.pulse-timeline { flex: 1; position: relative; }
.pulse-timeline-key { width: 8px; height: 8px; transform: rotate(45deg); background: var(--pulse-muted); display: inline-block; }
.pulse-timeline-edition { top: 8px; display: block; }
.pulse-timeline-axis { position: absolute; bottom: 6px; font-size: 11px; color: var(--pulse-faint); white-space: nowrap; }
.pulse-layer-list { margin: 0; padding: 0; border: 0; }
.pulse-layer-row { display: flex; align-items: center; gap: 10px; height: 34px; padding: 0 12px; border-bottom: 1px solid var(--pulse-line); font-size: .8125rem; margin: 0; }
.pulse-draw { cursor: crosshair; }
.pulse-draw-box { fill: var(--pulse-rose); fill-opacity: .12; stroke: var(--pulse-focus); stroke-width: 2.5; vector-effect: non-scaling-stroke; cursor: move; }
.pulse-draw-handle { fill: var(--pulse-page); stroke: var(--pulse-focus); stroke-width: 2.5; vector-effect: non-scaling-stroke; cursor: grab; }
.pulse-float { position: absolute; background: var(--pulse-band); border: 1px solid var(--pulse-stroke); border-radius: 12px; z-index: 3; }
/* Page helpers */
.pulse-page { padding: 16px 24px; }
.pulse-split { display: grid; grid-template-columns: minmax(0, 1fr) var(--pulse-split-aside, 380px); gap: 20px; }
.pulse-split-panel { display: grid; grid-template-columns: minmax(0, 1fr) var(--pulse-split-aside, 400px); height: 100%; }
.pulse-split-panel > :first-child { border-right: 1px solid var(--pulse-stroke); overflow: auto; }
.pulse-split-panel > aside { background: var(--pulse-panel); padding: 16px; overflow: auto; display: flex; flex-direction: column; gap: 12px; }
.pulse-reader-grid { display: grid; grid-template-columns: 200px minmax(0, 680px) 360px; gap: 24px; padding: 22px 32px 32px; align-items: start; }
.pulse-reader-grid.no-evidence { grid-template-columns: 200px minmax(0, 680px); }
.pulse-contents a { display: block; padding: 5px 10px; border-radius: 6px; text-decoration: none; color: var(--pulse-muted); font-size: .8125rem; }
.pulse-contents a[aria-current="true"] { color: var(--pulse-text); background: var(--pulse-raised); font-weight: 600; box-shadow: inset 2px 0 0 var(--pulse-rose); }
.pulse-evidence { background: var(--pulse-band); border: 1px solid var(--pulse-stroke); border-radius: 12px; position: sticky; top: 48px; }
.pulse-three { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.pulse-four { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.pulse-two { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
.pulse-summary-row { display: grid; grid-template-columns: 180px minmax(0, 1fr) auto; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--pulse-line); font-size: .875rem; }
.pulse-summary-row > dt { color: var(--pulse-faint); font-weight: 400; }
.pulse-summary-row > dd { margin: 0; }
.pulse-bar { height: 8px; background: var(--pulse-line); border-radius: 4px; overflow: hidden; }
.pulse-bar > span { display: block; height: 100%; background: var(--pulse-muted); }
.pulse-show-phone { display: none !important; }
@media (max-width: 1279.98px) {
  .pulse-reader-grid { grid-template-columns: 200px minmax(0, 1fr); }
  .pulse-reader-grid > .pulse-evidence { grid-column: 1 / -1; position: static; }
}
@media (max-width: 767.98px) {
  .pulse-hide-phone { display: none !important; }
  .pulse-show-phone { display: block !important; }
  .pulse-topbar { gap: 6px; }
  .pulse-topbar-brand { width: auto; padding: 0 8px 0 14px; border-right: 0; }
  button.pulse-command { width: 44px; height: 44px; margin-left: auto; justify-content: center; border: 0; background: transparent; padding: 0; }
  .pulse-workspace { display: flex; flex-direction: column; height: auto; min-height: 100%; }
  .pulse-workspace > .pulse-ws-centre { order: 1; height: 170px; flex: none; }
  .pulse-workspace > .pulse-ws-left { order: 2; border-right: 0; }
  .pulse-workspace > .pulse-ws-bottom, .pulse-workspace > .pulse-ws-right { display: none; }
  .pulse-workspace.is-map-page > .pulse-ws-centre { height: 60vh; }
  .pulse-split, .pulse-split-panel, .pulse-two, .pulse-three, .pulse-four { grid-template-columns: 1fr; }
  .pulse-split-panel > aside { display: none; }
  .pulse-reader-grid { grid-template-columns: 1fr; padding: 14px; }
  .pulse-reader-grid > .pulse-contents { display: none; }
  .pulse-edition-header { padding: 14px; }
  .pulse-page { padding: 14px; }
  .pulse-page-header { padding: 12px 14px 0; }
  .pulse-page-actions { display: none !important; }
  .pulse-summary-row { grid-template-columns: 1fr auto; }
  .pulse-summary-row > dt { grid-column: 1 / -1; }
  .pulse-choice-grid { grid-template-columns: 1fr; }
  .pulse-tabs { overflow-x: auto; flex-wrap: nowrap; }
}
/* 15. Page layouts used by the Blazor app --------------------------------- */
.pulse-page-stack { display: flex; flex-direction: column; height: 100%; }
.pulse-page-stack > .pulse-workspace { flex: 1; min-height: 0; height: auto; }
.pulse-definition { display: grid; grid-template-columns: 300px minmax(0, 1fr); }
.pulse-definition > .pulse-ws-left { background: var(--pulse-panel); border-right: 1px solid var(--pulse-stroke); }
.pulse-review { display: grid; grid-template-columns: 280px minmax(0, 1fr) 380px; height: 100%; }
.pulse-review > .pulse-ws-left { background: var(--pulse-panel); border-right: 1px solid var(--pulse-stroke); overflow: auto; }
.pulse-review > .pulse-ws-right { background: var(--pulse-panel); border-left: 1px solid var(--pulse-stroke); display: flex; flex-direction: column; min-height: 0; }
.pulse-finding-target { outline: 2px solid var(--pulse-danger); outline-offset: 6px; border-radius: 4px; }
.pulse-reader-h2 { font-size: 1.1875rem; margin: 28px 0 0; }
.pulse-create-area { position: fixed; inset: 0; }
.pulse-create-area > .pulse-map { position: absolute; inset: 56px 0 0 0; }
.pulse-draw-search { left: 16px; top: 16px; width: 360px; overflow: hidden; }
.pulse-draw-search .form-control { border: 0; border-bottom: 1px solid var(--pulse-line); border-radius: 0; background: var(--pulse-band); }
.pulse-place { padding: 9px 12px; border-bottom: 1px solid var(--pulse-line); }
.pulse-place.is-selected { background: var(--pulse-raised); box-shadow: inset 3px 0 0 var(--pulse-rose); }
.pulse-draw-tools { left: 16px; top: 278px; width: 160px; padding: 6px; display: flex; flex-direction: column; gap: 2px; }
.pulse-draw-tools .btn.is-on { border-color: var(--pulse-rose); background: var(--pulse-raised); }
.pulse-draw-hint { left: 50%; transform: translateX(-50%); top: 16px; border-radius: 999px; padding: 6px 14px; font-size: .8125rem; white-space: nowrap; }
.pulse-draw-summary { right: 16px; top: 16px; width: 340px; }
.pulse-review-split { display: contents; }
@media (max-width: 1279.98px) { .pulse-draw-hint { display: none; } }
@media (max-width: 767.98px) {
  .pulse-definition, .pulse-review { grid-template-columns: 1fr; height: auto; }
  .pulse-review > .pulse-ws-left, .pulse-review > .pulse-ws-right { border: 0; }
  .pulse-create-area > .pulse-map { top: 52px; }
  .pulse-draw-search { left: 10px; right: 10px; top: 8px; width: auto; }
  .pulse-draw-search ul, .pulse-draw-search > div:last-child { display: none; }
  .pulse-draw-tools { left: 10px; right: 10px; top: auto; bottom: 240px; width: auto; flex-direction: row; }
  .pulse-draw-tools .pulse-kbd { display: none; }
  .pulse-draw-summary { left: 0; right: 0; top: auto; bottom: 0; width: auto; border-radius: 16px 16px 0 0; max-height: 236px; overflow: auto; }
  .pulse-draw-summary dl, .pulse-draw-summary .pulse-notice { display: none; }
  .pulse-step-header { height: 52px; }
  .pulse-step-header .btn { padding: 0 8px; }
}
.pulse-system-nav { display: flex; gap: 6px; flex-wrap: wrap; }
.pulse-system-nav a { padding: 4px 10px; border: 1px solid var(--pulse-stroke); border-radius: 999px; font-size: .75rem; color: var(--pulse-muted); text-decoration: none; }
.pulse-system-section { padding: 28px 0; border-bottom: 1px solid var(--pulse-line); }
.pulse-system-section > h2 { font-size: 1.125rem; margin: 0; }
.pulse-system-section > .pulse-mono { margin: 4px 0 16px; }
.pulse-pir > .pulse-mono { white-space: nowrap; }
.pulse-steps > li { white-space: nowrap; }
@media (max-width: 767.98px) {
  .pulse-topbar button.pulse-command { display: inline-flex; }
  .pulse-workspace:not(.is-map-page) > .pulse-ws-centre .pulse-map-chips,
  .pulse-workspace:not(.is-map-page) > .pulse-ws-centre .pulse-map-callout,
  .pulse-workspace:not(.is-map-page) > .pulse-ws-centre .pulse-map-tools,
  .pulse-workspace:not(.is-map-page) > .pulse-ws-centre .pulse-map-scale { display: none; }
  .pulse-reader-grid, .pulse-reader-grid.no-evidence { grid-template-columns: minmax(0, 1fr); }
  .pulse-step-title > .small { display: none; }
  .pulse-step-title h1 { font-size: .9375rem; line-height: 1.25; }
  .pulse-step-header .pulse-save-status > span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .pulse-step-header { gap: 8px; padding: 0 10px; }
}
