/* Pitlamp design tokens (brand pass, 2026-10-09).
   One system for both colour modes: the website's violet (#6D28D9), the same status hues, violet-biased neutrals;
   only lightness/saturation move per mode. --pl-* are the tokens; --bs-* lines map them onto Bootstrap.
   Every text/background pair below is >= 4.5:1 (WCAG AA) on the surface it is meant for. */
@import url("../fonts/fonts.css");

:root, [data-bs-theme="light"] {
  /* violet ramp roles */
  --pl-primary: #6D28D9; --pl-primary-hover: #5B21B6; --pl-primary-active: #4C1D95; --pl-primary-text: #6D28D9;
  --pl-primary-soft: #EDE9FE; --pl-primary-border: #C4B5FD; --pl-on-primary: #fff;
  /* the lamp's amber: only the logo and the brand illustration may use it; it is not a status or text colour */
  --pl-accent: #F59E0B;
  /* neutrals (hue 250, low saturation) */
  --pl-bg: #F6F6F9; --pl-surface: #FFFFFF; --pl-surface-2: #F0EFF5; --pl-border: #E3E0EB; --pl-border-strong: #C9C4D6;
  --pl-text: #1D1B2C; --pl-text-2: #5A5568; --pl-text-3: #6B6680;
  /* status family + soft tints (backgrounds behind text of the same status) */
  --pl-critical: #C41F47; --pl-critical-soft: #FDE8EE; --pl-high: #B84A00; --pl-high-soft: #FFEFE3;
  --pl-medium: #946200; --pl-medium-soft: #FFF6DA; --pl-info: #2B6CB0; --pl-info-soft: #E6F0FB; --pl-ok: #177A43; --pl-ok-soft: #E3F5EA;
  --pl-shadow-1: 0 1px 2px rgba(27, 24, 38, .08); --pl-shadow-2: 0 3px 8px rgba(27, 24, 38, .12); --pl-shadow-3: 0 8px 24px rgba(27, 24, 38, .16);
}
[data-bs-theme="dark"] {
  --pl-primary: #7C3AED; --pl-primary-hover: #8B5CF6; --pl-primary-active: #6D28D9; --pl-primary-text: #A78BFA;
  --pl-primary-soft: #2A1440; --pl-primary-border: #5B21B6; --pl-on-primary: #fff;
  --pl-accent: #F59E0B;
  --pl-bg: #121118; --pl-surface: #1A1822; --pl-surface-2: #221F2C; --pl-border: #2E2A3A; --pl-border-strong: #433D52;
  --pl-text: #ECEAF2; --pl-text-2: #A8A3B6; --pl-text-3: #8E88A0;
  --pl-critical: #FF5C7A; --pl-critical-soft: #3A1520; --pl-high: #FF8A3D; --pl-high-soft: #3A2314;
  --pl-medium: #FFC53D; --pl-medium-soft: #3A3010; --pl-info: #6FA8FF; --pl-info-soft: #14243A; --pl-ok: #4CD07A; --pl-ok-soft: #12301E;
  --pl-shadow-1: 0 1px 2px rgba(0, 0, 0, .35); --pl-shadow-2: 0 3px 8px rgba(0, 0, 0, .45); --pl-shadow-3: 0 8px 24px rgba(0, 0, 0, .55);
}

/* ---- Bootstrap mapping (both modes read the --pl-* above) ---- */
:root, [data-bs-theme="light"], [data-bs-theme="dark"] {
  --bs-font-sans-serif: "Plus Jakarta Sans Variable", "Segoe UI", system-ui, -apple-system, sans-serif;
  --bs-font-monospace: "IBM Plex Mono", ui-monospace, "Cascadia Mono", Menlo, Consolas, monospace;
  --bs-body-font-size: 1rem; --bs-body-line-height: 1.5;
  --bs-body-bg: var(--pl-bg); --bs-body-color: var(--pl-text);
  --bs-secondary-color: var(--pl-text-2); --bs-tertiary-color: var(--pl-text-3);
  --bs-secondary-bg: var(--pl-surface-2); --bs-tertiary-bg: var(--pl-surface-2);
  --bs-border-color: var(--pl-border); --bs-border-color-translucent: var(--pl-border);
  --bs-primary: var(--pl-primary); --bs-primary-rgb: 109, 40, 217;
  --bs-primary-text-emphasis: var(--pl-primary-text); --bs-primary-bg-subtle: var(--pl-primary-soft); --bs-primary-border-subtle: var(--pl-primary-border);
  --bs-link-color: var(--pl-primary-text); --bs-link-hover-color: var(--pl-primary-hover);
  --bs-link-color-rgb: 109, 40, 217; --bs-link-hover-color-rgb: 91, 33, 182;
  --bs-focus-ring-color: color-mix(in srgb, var(--pl-primary) 30%, transparent);
  --bs-danger: var(--pl-critical); --bs-danger-rgb: 196, 31, 71; --bs-warning: var(--pl-medium); --bs-success: var(--pl-ok); --bs-info: var(--pl-info);
  --bs-danger-bg-subtle: var(--pl-critical-soft); --bs-success-bg-subtle: var(--pl-ok-soft); --bs-warning-bg-subtle: var(--pl-medium-soft); --bs-info-bg-subtle: var(--pl-info-soft);
  --bs-danger-text-emphasis: var(--pl-critical); --bs-success-text-emphasis: var(--pl-ok); --bs-warning-text-emphasis: var(--pl-medium); --bs-info-text-emphasis: var(--pl-info);
  --bs-danger-border-subtle: color-mix(in srgb, var(--pl-critical) 40%, transparent); --bs-success-border-subtle: color-mix(in srgb, var(--pl-ok) 40%, transparent);
  --bs-warning-border-subtle: color-mix(in srgb, var(--pl-medium) 40%, transparent); --bs-info-border-subtle: color-mix(in srgb, var(--pl-info) 40%, transparent);
  --bs-secondary: var(--pl-text-2); --bs-secondary-rgb: 90, 85, 104;
  /* radius by role: 3 chips · 6 controls/rows/cards · 10 panels · 14 dialogs */
  --bs-border-radius-xs: 3px; --bs-border-radius-sm: 6px; --bs-border-radius: 10px; --bs-border-radius-lg: 14px; --bs-border-radius-xl: 14px; --bs-border-radius-pill: 999px;
  --bs-card-border-radius: 10px; --bs-list-group-border-radius: 6px;
}
/* Root font size is fluid, see site.css. Every size below is in rem so the whole UI scales with it. */
body { -webkit-font-smoothing: antialiased; font-variant-numeric: tabular-nums; }
.container { max-width: 1600px; padding-inline: clamp(1rem, 2.5vw, 2.5rem); }
main { padding-block: 1.5rem 2.5rem; }

/* ---- Type scale ---- */
h1, .h1 { font-size: 1.85rem; font-weight: 600; letter-spacing: -.02em; text-wrap: balance; }
h2, .h2 { font-size: 1.35rem; font-weight: 600; letter-spacing: -.01em; }
h3, .h3 { font-size: 1.35rem; font-weight: 600; letter-spacing: -.01em; }
.h5 { font-size: 1.2rem; font-weight: 600; }
h4, .h4, .h6, h6 { font-size: 1.05rem; font-weight: 600; }
.page-header { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: .5rem .75rem; margin-bottom: 1.25rem; }

/* control widths: replace inline style="width: Nrem"; every one caps at the container */
.w-ctl-sm, .w-ctl-md, .w-ctl-lg { max-width: 100%; }
.w-ctl-sm { width: 9rem; }   /* numbers, short selects, dates */
.w-ctl-md { width: 12rem; }  /* selects, names */
.w-ctl-lg { width: 15rem; }  /* search boxes */
.w-ctl-grow { flex: 1 1 14rem; min-width: 0; }
.maxw-form { max-width: 28rem; }

/* things that stick beneath the (measured, see site.js) nav */
:root { --pl-nav-h: 3.6rem; }
.sticky-under-nav { position: sticky; top: calc(var(--pl-nav-h) + .5rem); z-index: 5; }
@media (max-width: 575.98px) { .sticky-under-nav { position: static; } }

/* keyboard focus on links, chips and icon buttons (form controls and buttons already have Bootstrap's ring) */
a:focus-visible, .icon-btn:focus-visible, .badge:focus-visible, .list-group-item-action:focus-visible, .card-title-link:focus-visible { outline: 2px solid var(--pl-primary); outline-offset: 2px; border-radius: 3px; }
.skip-link { position: absolute; left: -999px; top: .5rem; z-index: 2000; padding: .5rem .75rem; background: var(--pl-surface); color: var(--pl-text); border-radius: 6px; box-shadow: var(--pl-shadow-3); }
.skip-link:focus { left: .5rem; }
.page-header h1 { margin-bottom: .1rem; }
.page-header .h3 { font-size: 1.85rem; letter-spacing: -.02em; }
small, .small { font-size: .9rem; }
.eyebrow, .text-uppercase.small.fw-semibold, .dash .card h2, .dash .card .h6 {
  font-size: .78rem; text-transform: uppercase; letter-spacing: .08em; font-weight: 600; color: var(--pl-text-3);
}
.text-muted { color: var(--pl-text-2) !important; }
/* mono for identifiers only: ids, versions, hosts, times, hashes */
code, .mono { font-family: var(--bs-font-monospace); font-size: .875em; font-variant-numeric: tabular-nums; letter-spacing: -.01em; color: var(--pl-text); background: var(--pl-surface-2); padding: .05em .3em; border-radius: 3px; }
.mono-plain, .mono.mono-plain { background: transparent; padding: 0; color: inherit; }
pre code { background: transparent; padding: 0; }

/* ---- Buttons: one solid primary per view; secondary = neutral outline; tertiary = text; destructive = red outline ---- */
.btn { border-radius: 6px; font-weight: 500; --bs-btn-padding-y: .375rem; }
.btn-sm { border-radius: 6px; }
.btn-primary {
  --bs-btn-bg: var(--pl-primary); --bs-btn-border-color: var(--pl-primary); --bs-btn-color: var(--pl-on-primary);
  --bs-btn-hover-bg: var(--pl-primary-hover); --bs-btn-hover-border-color: var(--pl-primary-hover); --bs-btn-hover-color: #fff;
  --bs-btn-active-bg: var(--pl-primary-active); --bs-btn-active-border-color: var(--pl-primary-active); --bs-btn-active-color: #fff;
  --bs-btn-disabled-bg: var(--pl-primary); --bs-btn-disabled-border-color: var(--pl-primary); --bs-btn-focus-shadow-rgb: 109, 40, 217;
}
.btn-outline-primary, .btn-outline-secondary, .btn-secondary, .btn-light, .btn-outline-dark {
  --bs-btn-bg: transparent; --bs-btn-color: var(--pl-text); --bs-btn-border-color: var(--pl-border-strong);
  --bs-btn-hover-bg: var(--pl-surface-2); --bs-btn-hover-color: var(--pl-text); --bs-btn-hover-border-color: var(--pl-border-strong);
  --bs-btn-active-bg: var(--pl-surface-2); --bs-btn-active-color: var(--pl-text); --bs-btn-active-border-color: var(--pl-border-strong);
  --bs-btn-disabled-color: var(--pl-text-3); --bs-btn-disabled-border-color: var(--pl-border); --bs-btn-focus-shadow-rgb: 109, 40, 217;
}
.btn-outline-primary { --bs-btn-color: var(--pl-primary-text); --bs-btn-hover-color: var(--pl-primary-text); --bs-btn-active-color: var(--pl-primary-text); }
.btn-link { --bs-btn-color: var(--pl-primary-text); --bs-btn-hover-color: var(--pl-primary-hover); text-decoration: none; font-weight: 500; }
.btn-link:hover { text-decoration: underline; }
.btn-danger, .btn-outline-danger {
  --bs-btn-bg: transparent; --bs-btn-color: var(--pl-critical); --bs-btn-border-color: var(--pl-critical);
  --bs-btn-hover-bg: var(--pl-critical); --bs-btn-hover-color: #fff; --bs-btn-hover-border-color: var(--pl-critical);
  --bs-btn-active-bg: var(--pl-critical); --bs-btn-active-color: #fff; --bs-btn-active-border-color: var(--pl-critical);
}
.btn-success, .btn-outline-success {
  --bs-btn-bg: var(--pl-ok); --bs-btn-color: #fff; --bs-btn-border-color: var(--pl-ok);
  --bs-btn-hover-bg: color-mix(in srgb, var(--pl-ok) 85%, black); --bs-btn-hover-color: #fff; --bs-btn-hover-border-color: var(--pl-ok);
  --bs-btn-active-bg: var(--pl-ok); --bs-btn-active-color: #fff; --bs-btn-active-border-color: var(--pl-ok);
}
.btn-outline-success { --bs-btn-bg: transparent; --bs-btn-color: var(--pl-ok); }
/* per-row status buttons: status-coloured text on a neutral border, so the one solid primary still stands out */
.btn-outline-success, .btn-outline-danger { --bs-btn-border-color: var(--pl-border-strong); }

/* ---- Controls ---- */
.form-control, .form-select { border-radius: 6px; background: var(--pl-surface); border-color: var(--pl-border-strong); color: var(--pl-text); }
.form-control:focus, .form-select:focus, .form-check-input:focus { border-color: var(--pl-primary-border); box-shadow: 0 0 0 .2rem var(--bs-focus-ring-color); background: var(--pl-surface); color: var(--pl-text); }
.form-control::placeholder { color: var(--pl-text-3); }
.form-check-input:checked { background-color: var(--pl-primary); border-color: var(--pl-primary); }
.input-group > .form-control, .input-group > .form-select, .input-group > .btn, .input-group-text { border-radius: 6px; }
.input-group > :not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; }
.input-group > :not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.input-group-text { background: var(--pl-surface-2); border-color: var(--pl-border-strong); color: var(--pl-text-2); }
.alert { border-radius: 6px; }
.table { --bs-table-bg: transparent; --bs-table-color: var(--pl-text); }
.table th { font-size: .78rem; text-transform: uppercase; letter-spacing: .08em; color: var(--pl-text-3); font-weight: 600; border-bottom-color: var(--pl-border-strong); }
.table-hover > tbody > tr:hover > * { --bs-table-accent-bg: color-mix(in srgb, var(--pl-primary) 4%, transparent); }
.progress { background: var(--pl-surface-2); border-radius: 3px; }
.progress-bar { background-color: var(--pl-primary); }
.nav-tabs { --bs-nav-tabs-border-color: var(--pl-border); }
.nav-tabs .nav-link { color: var(--pl-text-2); border-radius: 6px 6px 0 0; }
.nav-tabs .nav-link.active { color: var(--pl-primary-text); background: var(--pl-bg); border-color: var(--pl-border) var(--pl-border) var(--pl-bg); font-weight: 500; }
.nav-pills .nav-link.active { background-color: var(--pl-primary); }
.nav-pills .nav-link.active .badge-soft { background-color: rgba(255, 255, 255, .22); color: #fff; border-color: transparent; }
.list-group-item { background: var(--pl-surface); color: var(--pl-text); border-color: var(--pl-border); }
.list-group-item.active, .dropdown-item.active, .dropdown-item:active { background-color: var(--pl-primary); border-color: var(--pl-primary); color: #fff; }
.dropdown-menu { border-radius: 10px; box-shadow: var(--pl-shadow-3); border-color: var(--pl-border); }
.modal-content { border-radius: 14px; box-shadow: var(--pl-shadow-3); }
.accordion { --bs-accordion-btn-padding-y: .8rem; --bs-accordion-border-radius: 10px; --bs-accordion-inner-border-radius: 9px; --bs-accordion-border-color: var(--pl-border); --bs-accordion-bg: var(--pl-surface); --bs-accordion-btn-bg: var(--pl-surface); --bs-accordion-active-bg: var(--pl-surface-2); --bs-accordion-active-color: var(--pl-text); --bs-accordion-btn-focus-box-shadow: 0 0 0 .2rem var(--bs-focus-ring-color); }

/* ---- Badges: one family. badge-soft (+ tone-* / sev-*), never Bootstrap text-bg-* ---- */
.badge { border-radius: 4px; font-weight: 600; text-transform: none; font-size: .8em; padding: .3em .6em; line-height: 1.25; border: 1px solid transparent; }
.badge.rounded-pill { border-radius: 999px; }
.badge-soft { background-color: var(--pl-surface-2); color: var(--pl-text); border-color: var(--pl-border-strong); }
.badge.sev-critical { background: var(--pl-critical-soft); color: var(--pl-critical); border-color: color-mix(in srgb, var(--pl-critical) 45%, transparent); }
.badge.sev-medium { background: var(--pl-medium-soft); color: var(--pl-medium); border-color: color-mix(in srgb, var(--pl-medium) 45%, transparent); }
.badge.sev-high { background: var(--pl-high-soft); color: var(--pl-high); border-color: color-mix(in srgb, var(--pl-high) 45%, transparent); }
.badge.sev-low { background: var(--pl-info-soft); color: var(--pl-info); border-color: color-mix(in srgb, var(--pl-info) 45%, transparent); }
.text-primary { color: var(--pl-primary-text) !important; }
.text-danger { color: var(--pl-critical) !important; }
.text-success { color: var(--pl-ok) !important; }
.border-primary { border-color: var(--pl-primary-border) !important; }

/* ---- Status lights (NOC) ---- */
.led { display: inline-block; width: 9px; height: 9px; border-radius: 50%; vertical-align: middle; background: var(--pl-ok); box-shadow: 0 0 0 2px color-mix(in srgb, var(--pl-ok) 25%, transparent); }
.led.led-critical { background: var(--pl-critical); box-shadow: 0 0 0 2px color-mix(in srgb, var(--pl-critical) 28%, transparent); animation: pl-pulse 1.6s ease-in-out infinite; }
.led.led-high { background: var(--pl-high); box-shadow: 0 0 0 2px color-mix(in srgb, var(--pl-high) 25%, transparent); }
.led.led-medium { background: var(--pl-medium); box-shadow: 0 0 0 2px color-mix(in srgb, var(--pl-medium) 25%, transparent); }
.led.led-off { background: var(--pl-text-3); box-shadow: none; }
@keyframes pl-pulse { 50% { box-shadow: 0 0 0 5px color-mix(in srgb, var(--pl-critical) 12%, transparent); } }
@media (prefers-reduced-motion: reduce) { .led.led-critical { animation: none; } }
.status-strip { display: flex; flex-wrap: wrap; gap: .4rem 1.2rem; font-size: .9rem; color: var(--pl-text-2); }
.status-strip .led { margin-right: .4rem; }

/* ---- Surfaces by content type ---- */
/* level 1: panels */
.card { background: var(--pl-surface); border: 1px solid var(--pl-border); border-radius: 10px; box-shadow: none; }
.card.attention { border-top: 3px solid var(--pl-critical); }
.card.attention-medium { border-top: 3px solid var(--pl-medium); }
.dash .card .card-body { padding: .9rem 1rem 1rem; }
.dash .display-6 { font-size: 2.27rem; line-height: 1.1; margin-bottom: .25rem; font-weight: 600; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.surface-2 { background-color: var(--pl-surface-2); }
.empty-state { border: 1px dashed var(--pl-border-strong); border-radius: 10px; padding: 1.5rem; color: var(--pl-text-2); background: var(--pl-surface); }
.empty-state a { font-weight: 500; }
.empty-state.empty-state-sm { padding: .55rem .85rem; font-size: .9rem; border-radius: 6px; }
.empty-state .led { margin-right: .5rem; }
.border-dashed { border-style: dashed !important; }
/* Done, resolved and archived things are muted by colour (never by opacity, which breaks contrast for everything inside) */
.is-muted { background: var(--pl-surface-2) !important; }
.is-muted .card-title-link, .is-muted > a:not(.btn), .is-muted .card-body { color: var(--pl-text-2); }

/* level 0: rows — advisories / EOL / incidents (the _EventTile partial). Each one is its own bubble with a severity stripe. */
.tile.card { border: 1px solid var(--pl-border); border-left: 4px solid var(--pl-border-strong); border-radius: 10px; background: var(--pl-surface); margin-bottom: .75rem !important; box-shadow: var(--pl-shadow-1); }
.tile.card .card-body { padding: .8rem 1rem .8rem 1.1rem; }
.tile.card:last-child { margin-bottom: 0 !important; }
.tile.sev-critical { border-left-color: var(--pl-critical); background: color-mix(in srgb, var(--pl-critical-soft) 55%, var(--pl-surface)); }
.tile.sev-high { border-left-color: var(--pl-high); background: color-mix(in srgb, var(--pl-high-soft) 40%, var(--pl-surface)); }
.tile.sev-medium { border-left-color: var(--pl-medium); }
.tile.sev-low { border-left-color: var(--pl-info); }
.tile.is-seen, .tile.is-archived { background: var(--pl-surface-2); border-left-color: var(--pl-border-strong); }
.tile.is-seen .card-title-link, .tile.is-archived .card-title-link { color: var(--pl-text-2); font-weight: 500; }
.tile .card-title-link { font-weight: 600; font-size: 1.05rem; }
.tile .badge { font-size: .82rem; }
.tile .card-body > .d-flex > .flex-grow-1 { min-width: 0; overflow-wrap: break-word; }
.tile pre { overflow-wrap: break-word; white-space: pre-wrap; }
.accordion-body .tile.card:first-child { margin-top: .25rem; }
.accordion-body .tile.card:last-child { margin-bottom: .25rem !important; }

/* level 0: checklist run rows */
.check-row { display: block; border-bottom: 1px solid var(--pl-border); border-left: 3px solid transparent; padding-left: .25rem; }
.check-row.row-pass { border-left-color: var(--pl-ok); color: var(--pl-text-2); }
.check-row.row-fail { border-left-color: var(--pl-critical); background: color-mix(in srgb, var(--pl-critical-soft) 55%, transparent); }
.check-row.row-skipped { border-left-color: var(--pl-border-strong); color: var(--pl-text-2); }
.check-row > .card-body { padding: .55rem .5rem; }

/* level 2: Kanban cards — the thing you pick up */
.board { display: flex; gap: 1rem; overflow-x: auto; padding-bottom: .75rem; align-items: flex-start; scroll-snap-type: x proximity; }
.board-column { flex: 0 0 20rem; width: 20rem; scroll-snap-align: start; }
.board[data-columns="1"] .board-column, .board[data-columns="2"] .board-column, .board[data-columns="3"] .board-column { flex-basis: 24rem; width: 24rem; }
@media (max-width: 576px) { .board-column { flex-basis: 85vw; width: 85vw; } }
.board-column > .surface-2 { border-radius: 10px; }
[data-board] .card { border-radius: 6px; box-shadow: var(--pl-shadow-1); transition: transform .08s ease, box-shadow .08s ease; cursor: grab; }
[data-board] .card:hover { transform: translateY(-1px); box-shadow: var(--pl-shadow-2); border-color: var(--pl-border-strong); }
[data-board] .card.prio-critical { border-left: 3px solid var(--pl-critical); }
[data-board] .card.prio-high { border-left: 3px solid var(--pl-high); }
.drop-target { outline: 2px dashed var(--pl-primary); outline-offset: -2px; background-color: color-mix(in srgb, var(--pl-primary) 8%, transparent) !important; }

/* ---- Links, top bar, misc ---- */
a { text-decoration: none; }
/* Links inside running text are underlined so they do not rely on colour alone; nav, buttons, badges and card titles are not running text */
main :is(p, li, td, th, dd, dt, small, .small, .alert, .form-text, .empty-state, .card-text, label, summary, .form-check-label) a:not(.btn, .badge, .card-title-link, .nav-link, .dropdown-item, .list-group-item-action, .icon-btn),
.guide a { text-decoration: underline; text-underline-offset: .15em; }
.card-title-link { color: var(--pl-text); font-weight: 600; }
.card-title-link:hover { color: var(--pl-primary-text); }
.navbar.pl-nav { background: var(--pl-surface); border-bottom: 1px solid var(--pl-border); padding-block: .45rem; }
.navbar.pl-nav > .container-fluid { padding-inline: 1rem; }
@media (min-width: 1400px) { .navbar.pl-nav > .container-fluid { padding-inline: 1.5rem; } }
/* The logo: one <img> per colour mode plus the mark alone for narrow screens; CSS picks, so no script is needed. */
.brand-logo { height: 1.75rem; width: auto; display: none; }
[data-bs-theme="light"] .brand-logo.brand-light, [data-bs-theme="dark"] .brand-logo.brand-dark { display: block; }
html:not([data-bs-theme]) .brand-logo.brand-light { display: block; }
@media (max-width: 575.98px) { .brand-logo.brand-light, .brand-logo.brand-dark { display: none !important; } .brand-logo.brand-mark { display: block; } }
.navbar.pl-nav .icon-btn { width: 2.1rem; height: 2.1rem; display: inline-flex; align-items: center; justify-content: center; border-radius: 6px; color: var(--pl-text-2); position: relative; }
.navbar.pl-nav .icon-btn:hover { background: var(--pl-surface-2); color: var(--pl-text); }
.navbar.pl-nav .icon-btn .badge { position: absolute; top: -.25rem; right: -.4rem; font-size: .65rem; padding: .2em .45em; }
.navbar.pl-nav .form-control { border-radius: 6px; background: var(--pl-surface-2); border-color: transparent; }
.navbar.pl-nav .form-control:focus { background: var(--pl-surface); border-color: var(--pl-primary-border); }
.navbar.pl-nav svg { width: 1.1rem; height: 1.1rem; }
.footer { border-top: 1px solid var(--pl-border); color: var(--pl-text-2); font-size: .9rem; }
.footer a { color: var(--pl-text-2); text-decoration: underline; text-underline-offset: .15em; }
.footer a:hover { color: var(--pl-text); }
/* Account banners (trial countdown, read-only): one component, brand tint by default, amber tint when something is blocked */
.banner { display: flex; flex-wrap: wrap; gap: .25rem .5rem; align-items: baseline; padding: .55rem .9rem; margin-top: 1rem; border-radius: 6px; border: 1px solid var(--pl-primary-border); border-left-width: 4px; background: var(--pl-primary-soft); color: var(--pl-text); font-size: .9rem; }
.banner a { color: var(--pl-primary-text); text-decoration: underline; text-underline-offset: .15em; font-weight: 500; }
.banner-warning { border-color: color-mix(in srgb, var(--pl-medium) 45%, transparent); border-left-color: var(--pl-medium); background: var(--pl-medium-soft); }
.banner-warning a { color: var(--pl-text); }
/* Dates never wrap mid-value (LocalTime renders every date and time as <time>) */
time { white-space: nowrap; }
.auth-shell { min-height: 70vh; display: flex; align-items: center; justify-content: center; }
.auth-card { width: 100%; max-width: 24rem; }
.auth-card-wide { max-width: 34rem; }
.auth-title { font-size: 1.35rem; font-weight: 600; letter-spacing: -.01em; margin-bottom: .75rem; }
.board-column-title { font-size: 1.05rem; font-weight: 600; color: var(--pl-text-2); }
/* QR codes stay black on white in both themes so phones can scan them */
.qr-code { display: inline-block; background: #fff; padding: .5rem; border-radius: 6px; line-height: 0; }
.qr-code svg { width: 10rem; height: 10rem; display: block; }
.recovery-codes { font-size: 1rem; line-height: 1.7; column-count: 2; column-gap: 2rem; }
.guide pre { background: var(--pl-surface-2); border-radius: 6px; }
/* Headings inside user-written Markdown sit under the page title */
.guide h1 { font-size: 1.35rem; font-weight: 600; }
.guide h2 { font-size: 1.2rem; font-weight: 600; }
.guide h3, .guide h4 { font-size: 1.05rem; font-weight: 600; }

/* ---- Projects: waterfall chart (pure CSS, positions are inline percentages) ---- */
.waterfall { font-size: .875rem; }
.waterfall-wrap { overflow-x: auto; }
.wf-header, .wf-row { display: flex; }
.wf-label { position: sticky; left: 0; z-index: 5; flex: 0 0 14rem; width: 14rem; background: var(--pl-bg); }
.wf-track { background: var(--pl-bg); }
.wf-tick { position: absolute; top: .2rem; transform: translateX(-50%); white-space: nowrap; font-family: var(--bs-font-monospace); font-size: .75rem; color: var(--pl-text-3); }
.wf-grid { position: absolute; top: 0; bottom: 0; border-left: 1px dashed var(--pl-border); }
.wf-today { position: absolute; top: 0; bottom: 0; border-left: 2px solid var(--pl-critical); z-index: 2; }
.wf-bar { position: absolute; top: .45rem; height: 1rem; border-radius: 3px; opacity: .85; }
.wf-task { position: absolute; height: 1.05rem; min-width: .9rem; border-radius: 3px; background: var(--pl-surface-2); border: 1px solid var(--pl-border-strong); color: var(--pl-text); overflow: visible; z-index: 3; text-decoration: none; }
.wf-task.done { background: var(--pl-ok-soft); border-color: var(--pl-ok); }
.wf-task.overdue { background: var(--pl-critical-soft); border-color: var(--pl-critical); }
.wf-task-label { position: absolute; left: 100%; top: -.15rem; padding-left: .35rem; white-space: nowrap; font-size: .75rem; color: var(--pl-text-2); }
.wf-task:hover .wf-task-label { color: var(--pl-text); }

/* ======== Stage 2 components ======== */
/* Icons: the Lucide sprite, sized to the text they sit beside */
.icon { width: 1.25em; height: 1.25em; vertical-align: -.3em; flex: none; }
.btn .icon, .nav-link .icon, .dropdown-item .icon { width: 1.1em; height: 1.1em; vertical-align: -.2em; margin-right: .35em; }
.btn.icon-only { width: 2.1rem; padding-inline: 0; display: inline-flex; align-items: center; justify-content: center; }
.btn.icon-only .icon { margin: 0; }

/* Page header: one h1, optional back link above, meta line below, actions right */
.page-header { align-items: flex-start; margin-bottom: 1.25rem; }
.page-header-main { min-width: 0; flex: 1 1 20rem; }
.page-title { font-size: 1.85rem; font-weight: 600; letter-spacing: -.02em; margin: 0; overflow-wrap: anywhere; }
.page-title small { font-size: .55em; font-weight: 500; color: var(--pl-text-2); }
.page-back { display: inline-flex; align-items: center; gap: .1rem; font-size: .9rem; color: var(--pl-text-2); margin-bottom: .25rem; }
.page-back:hover { color: var(--pl-primary-text); text-decoration: underline; }
.page-meta { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .5rem; margin-top: .4rem; color: var(--pl-text-2); font-size: .9rem; }
.page-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.section-title { font-size: 1.2rem; font-weight: 600; letter-spacing: -.01em; margin-bottom: .75rem; }
.section-title .badge { vertical-align: middle; }

/* A page-action toggle that has opened its form steps back so the form's own primary is the one solid button */
.btn-primary[aria-expanded="true"] { --bs-btn-bg: transparent; --bs-btn-color: var(--pl-primary-text); --bs-btn-border-color: var(--pl-primary-border); --bs-btn-hover-bg: var(--pl-primary-soft); --bs-btn-hover-color: var(--pl-primary-text); }

/* Badges: one family. badge-soft is the neutral; tones say what the thing is; sev-* are the severity tones */
.badge-soft.tone-primary { background: var(--pl-primary-soft); color: var(--pl-primary-text); border-color: var(--pl-primary-border); }
.badge-soft.tone-ok { background: var(--pl-ok-soft); color: var(--pl-ok); border-color: color-mix(in srgb, var(--pl-ok) 45%, transparent); }
.badge-soft.tone-warn { background: var(--pl-medium-soft); color: var(--pl-medium); border-color: color-mix(in srgb, var(--pl-medium) 45%, transparent); }
.badge-soft.tone-danger { background: var(--pl-critical-soft); color: var(--pl-critical); border-color: color-mix(in srgb, var(--pl-critical) 45%, transparent); }
.badge-soft.tone-info { background: var(--pl-info-soft); color: var(--pl-info); border-color: color-mix(in srgb, var(--pl-info) 45%, transparent); }
.badge-soft.tone-strong { background: var(--pl-text-2); color: var(--pl-bg); border-color: var(--pl-text-2); }
.badge-soft.tone-muted { color: var(--pl-text-2); }

/* Empty state: icon, one sentence, one action */
.empty-state { display: flex; align-items: flex-start; gap: .75rem; }
.empty-state-icon { color: var(--pl-text-3); margin-top: .15rem; }
.empty-state-body { display: flex; flex-direction: column; align-items: flex-start; gap: .6rem; min-width: 0; }
.empty-state-text { margin: 0; }
.empty-state.empty-state-sm { gap: .5rem; }
.empty-state.empty-state-sm .empty-state-body { gap: .35rem; }

/* Tables that become cards on a phone: each cell announces its column */
@media (max-width: 767.98px) {
  .table-stack thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .table-stack, .table-stack tbody, .table-stack tr, .table-stack td { display: block; width: 100%; }
  .table-stack tr { border: 1px solid var(--pl-border); border-radius: 10px; padding: .5rem .75rem; margin-bottom: .75rem; background: var(--pl-surface); }
  .table-stack td { display: flex; gap: .75rem; align-items: baseline; padding: .3rem 0; border: 0; }
  .table-stack td::before { content: attr(data-label); flex: 0 0 7rem; font-size: .78rem; text-transform: uppercase; letter-spacing: .08em; color: var(--pl-text-3); font-weight: 600; }
  .table-stack td[data-label=""]::before { display: none; }
  .table-stack td.text-end { justify-content: flex-start; }
}

/* Reading and form pages: a column, not the whole canvas */
.content-narrow { max-width: 44rem; }

/* Confirm dialog (replaces window.confirm): one <dialog> in the layout, driven by data-confirm in site.js */
dialog.confirm { border: 1px solid var(--pl-border); border-radius: 14px; box-shadow: var(--pl-shadow-3); background: var(--pl-surface); color: var(--pl-text); padding: 1.25rem 1.5rem; width: min(26rem, calc(100vw - 2rem)); }
dialog.confirm::backdrop { background: rgba(29, 27, 44, .45); }
dialog.confirm h2 { font-size: 1.05rem; font-weight: 600; margin-bottom: .5rem; }
dialog.confirm p { margin-bottom: 1rem; }
dialog.confirm .confirm-actions { display: flex; justify-content: flex-end; gap: .5rem; }

/* ======== App shell: sidebar at lg and up, off-canvas drawer below; one top bar ======== */
.app { display: flex; min-height: 100vh; }
.app-main { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
.app-main > .container { flex: 1 0 auto; width: 100%; }
.sidebar { --bs-offcanvas-width: 16rem; width: 16rem; flex: none; background: var(--pl-surface); border-right: 1px solid var(--pl-border); display: flex; flex-direction: column; }
@media (min-width: 992px) { .sidebar { position: sticky; top: 0; height: 100vh; overflow-y: auto; } }
[data-bs-theme="dark"] .sidebar { background: var(--pl-surface); }
.sidebar-top { display: flex; align-items: center; justify-content: space-between; padding: .9rem 1rem .6rem; }
.sidebar-top .navbar-brand { display: inline-flex; align-items: center; margin: 0; padding: 0; }
.sidebar-top .brand-logo.brand-mark { display: none !important; }
.sidebar-nav { padding: .25rem .6rem; display: flex; flex-direction: column; gap: 2px; flex: 1 1 auto; }
.nav-group { font-size: .72rem; text-transform: uppercase; letter-spacing: .08em; font-weight: 600; color: var(--pl-text-3); padding: .9rem .75rem .3rem; }
.sidebar-link { display: flex; align-items: center; gap: .6rem; padding: .45rem .65rem; border-radius: 6px; border-left: 3px solid transparent; color: var(--pl-text-2); font-weight: 500; text-decoration: none; width: 100%; background: none; border-top: 0; border-right: 0; border-bottom: 0; text-align: left; }
.sidebar-link .icon { width: 1.15rem; height: 1.15rem; margin: 0; color: var(--pl-text-3); }
.sidebar-link:hover { background: var(--pl-surface-2); color: var(--pl-text); }
.sidebar-link.active, .sidebar-link[aria-current="page"] { background: var(--pl-primary-soft); color: var(--pl-primary-text); font-weight: 600; border-left-color: var(--pl-primary); }
.sidebar-link.active .icon { color: var(--pl-primary-text); }
.sidebar-link:focus-visible { outline: 2px solid var(--pl-primary); outline-offset: 2px; }
.sidebar-link-text { flex: 1 1 auto; min-width: 0; }
.nav-count { margin-left: auto; display: inline-flex; align-items: center; justify-content: center; min-width: 1.5rem; height: 1.35rem; padding: 0 .4rem; border-radius: 999px; font-size: .72rem; font-weight: 600; background: var(--pl-primary-soft); color: var(--pl-primary-text); border: 1px solid var(--pl-primary-border); }
.sidebar-link.active .nav-count { background: var(--pl-surface); }
.sidebar-bottom { border-top: 1px solid var(--pl-border); padding: .6rem; display: flex; flex-direction: column; gap: 2px; }
.account-btn.dropdown-toggle::after { margin-left: auto; }
.sidebar-bottom .dropdown-menu { width: calc(100% - 1.2rem); }
.dropdown-item .icon { color: var(--pl-text-3); }
/* top bar */
.navbar.pl-nav.topbar { min-height: 3.25rem; }
.navbar.pl-nav .navbar-brand { display: inline-flex; align-items: center; padding-block: 0; margin-right: .5rem; }
.nav-search { flex: 1 1 6rem; min-width: 0; max-width: 20rem; }
.navbar.pl-nav.topbar > .container-fluid { flex-wrap: nowrap; gap: .5rem; }
.nav-search .form-control { border-radius: 6px; background: var(--pl-surface-2); border-color: transparent; }
.nav-search .form-control:focus { background: var(--pl-surface); border-color: var(--pl-primary-border); }
.icon-btn .nav-count-float { position: absolute; top: -.3rem; right: -.45rem; margin: 0; height: 1.15rem; min-width: 1.15rem; font-size: .65rem; padding: 0 .3rem; }
.icon-btn .icon { width: 1.2rem; height: 1.2rem; margin: 0; }
@media (max-width: 991.98px) { .navbar.pl-nav .brand-logo.brand-light, .navbar.pl-nav .brand-logo.brand-dark { display: none !important; } .navbar.pl-nav .brand-logo.brand-mark { display: block; } }
@media (min-width: 992px) { .navbar.pl-nav .brand-logo.brand-mark { display: none !important; } }

.btn-danger-solid { --bs-btn-bg: var(--pl-critical); --bs-btn-color: #fff; --bs-btn-border-color: var(--pl-critical); }

/* ======== Stage 3: dashboard ======== */
.get-started { border-color: var(--pl-primary-border); border-left: 4px solid var(--pl-primary); }
.get-started-steps { list-style: none; margin: 0; padding: 0; display: grid; gap: .5rem; }
.get-started-steps li { display: flex; align-items: center; gap: .75rem; }
.get-started-mark { width: 1.6rem; height: 1.6rem; border-radius: 50%; border: 2px solid var(--pl-border-strong); display: inline-flex; align-items: center; justify-content: center; flex: none; color: #fff; }
.get-started-steps li.is-done .get-started-mark { background: var(--pl-ok); border-color: var(--pl-ok); }
.get-started-steps li.is-done .get-started-text { color: var(--pl-text-2); }
.get-started-text { flex: 1 1 auto; }
.today-title { font-size: 1rem; font-weight: 600; margin: 0; }
.today-list li { padding: .35rem 0; border-top: 1px solid var(--pl-border); line-height: 1.4; }
.today-list li:first-child { border-top: 0; }
.today-list a { color: var(--pl-text); overflow-wrap: break-word; }
.today-list .badge { vertical-align: middle; white-space: nowrap; }
.today-list a:hover { color: var(--pl-primary-text); }

/* ======== Stage 3: first run ======== */
.shortlist-card { display: flex; align-items: flex-start; gap: .6rem; width: 100%; height: 100%; padding: .65rem .75rem; border: 1px solid var(--pl-border-strong); border-radius: 10px; background: var(--pl-surface); cursor: pointer; margin: 0; }
.shortlist-card:hover { border-color: var(--pl-primary-border); }
.shortlist-card.is-on { border-color: var(--pl-primary); background: var(--pl-primary-soft); }
.shortlist-card:has(:focus-visible) { outline: 2px solid var(--pl-primary); outline-offset: 2px; }
.shortlist-card .form-check-input { margin-top: .2rem; flex: none; }
.shortlist-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.shortlist-name { font-weight: 600; }
/* The sticky save bar must never cover the last rows: the page keeps room for it (height measured in site.js) */
main:has([data-save-bar]) { padding-bottom: calc(var(--pl-save-bar-h, 4rem) + 1rem); }
[data-save-bar] { z-index: 4; }

/* ======== Stage 3: checklist run, template, card, project ======== */
.check-pass-mark { display: inline-flex; width: 1.4rem; height: 1.4rem; border-radius: 50%; background: var(--pl-ok); color: #fff; align-items: center; justify-content: center; flex: none; }
.check-pass-mark .icon { width: .9rem; height: .9rem; margin: 0; }
.check-row.row-pass { opacity: 1; }
.check-actions { display: flex; gap: .25rem; }
@media (max-width: 767.98px) {
  .check-actions { width: 100%; }
  .check-actions .btn { flex: 1 1 0; min-height: 44px; font-size: 1rem; }
}
.item-row .min-w-0 { min-width: 0; overflow-wrap: anywhere; }
.card-details > summary { cursor: pointer; list-style: none; }
.card-details > summary::-webkit-details-marker { display: none; }
.card-details[open] > summary { border-bottom: 1px solid var(--pl-border); }
.phase-empty { padding: .4rem .75rem; border: 1px dashed var(--pl-border-strong); border-radius: 6px; }

/* ======== Stage 3: board stacks and the phone column switcher ======== */
.card-stack { border: 1px solid var(--pl-border); border-radius: 6px; background: var(--pl-surface); box-shadow: var(--pl-shadow-1); position: relative; }
.card-stack::before, .card-stack::after { content: ""; position: absolute; left: .35rem; right: .35rem; bottom: -.25rem; height: .25rem; border: 1px solid var(--pl-border); border-top: 0; border-radius: 0 0 6px 6px; background: var(--pl-surface); z-index: -1; }
.card-stack::after { left: .7rem; right: .7rem; bottom: -.5rem; }
.card-stack-head { display: flex; align-items: center; gap: .5rem; width: 100%; padding: .5rem .6rem; background: none; border: 0; text-align: left; color: var(--pl-text); border-radius: 6px; }
.card-stack-head:hover { background: var(--pl-surface-2); }
.card-stack-head .icon { margin: 0; color: var(--pl-text-3); flex: none; }
.card-stack-text { flex: 1 1 auto; min-width: 0; font-size: .95rem; }
.card-stack-chevron { transition: transform .15s; }
.card-stack-head[aria-expanded="true"] .card-stack-chevron { transform: rotate(180deg); }
.card-stack-body { padding: .25rem .4rem .1rem; border-top: 1px solid var(--pl-border); }
.card-stack-body .card { box-shadow: none; }
.board-switcher { display: flex; gap: .35rem; overflow-x: auto; padding-bottom: .25rem; }
.board-switcher .btn { white-space: nowrap; flex: none; }
.board-switcher .btn[aria-pressed="true"] { --bs-btn-bg: var(--pl-primary-soft); --bs-btn-color: var(--pl-primary-text); --bs-btn-border-color: var(--pl-primary-border); font-weight: 600; }
@media (max-width: 767.98px) {
  .board.has-switcher { overflow-x: visible; }
  .board.has-switcher .board-column { display: none; width: 100%; flex-basis: 100%; }
  .board.has-switcher .board-column.is-active { display: block; }
}
