/* ─────────────────────────────────────────────────────────────────────────
   Client portals — the future-state screens, read-only prototype.
   One stylesheet for the whole folder, the way the demo world does it, and
   the way white-label/admin-demo/admin.css does it next door. Deliberately a
   SIBLING of that file rather than a shared import: the two tabs must be able
   to move independently, and a shared stylesheet is how one tab's restyle
   silently redraws another.
   System fonts only: the folder fetches nothing, from anywhere.

   PREFIX. pf- ("portal frame") for the drawn app chrome, where the white-label
   folder's stylesheet uses its own. Different folder, different stylesheet, so
   there is no collision — the separate prefix is for the reader, not the
   cascade. Deliberately not named after the invented firm: a prefix that
   encodes a persona's name has to be re-slugged every time the cast changes,
   which has now happened twice.

   COLOUR CARRIES NOTHING ON ITS OWN. FOUNDER is red/green colourblind, and the
   pack's standing constraint is that state is "a word plus a shape, never a
   colour on its own". Every state in here is told by a WORD (the .st label) and
   a SHAPE (border style, inset rule, glyph). Read the whole folder in greyscale
   and nothing is lost. No red/green pair appears anywhere.
   ───────────────────────────────────────────────────────────────────────── */

:root[data-theme="light"]{
  --g0:#FAFBFD;--g1:#FFFFFF;--g2:#F0F3F8;--g3:#E6EBF2;
  --ink:#14171D;--mid:#444B59;--dim:#545B68;
  --line:rgba(20,23,29,.14);--soft:rgba(20,23,29,.07);
  --gilt:#5C4108;--giltline:rgba(111,78,8,.40);
  --shadow:0 1px 2px rgba(21,30,45,.05);
}
:root[data-theme="dark"]{
  --g0:#101318;--g1:#1A1D24;--g2:#222732;--g3:#2B313D;
  --ink:#F2F4F8;--mid:#BAC2CE;--dim:#A9B0BC;
  --line:rgba(242,244,248,.18);--soft:rgba(242,244,248,.09);
  --gilt:#D8B470;--giltline:rgba(216,180,112,.42);
  --shadow:none;
}
/* Atlantica's colour — a deep petrol, the invented beachwear maker's own.
   Petrol rather than the neighbouring tab's green so the two prototypes are
   visibly different firms, and because petrol/ink is a contrast pair that
   survives every colour-vision deficiency. */
:root{--acc:#0F6276;--acc-lift:#7FB6C6;--acc-ink:var(--acc);
  --sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --serif:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,"Times New Roman",serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace}
:root[data-theme="dark"]{--acc-ink:var(--acc-lift)}

*{box-sizing:border-box}
html,body{margin:0;background:var(--g0);color:var(--ink)}
body{font-family:var(--sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}
h1,h2,h3,.serif{font-family:var(--serif);font-weight:700;letter-spacing:-.005em}
.mono{font-family:var(--mono)}
:focus-visible{outline:2px solid var(--gilt);outline-offset:2px;border-radius:5px}
[hidden]{display:none!important}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ── the bar that carries the posture, on every page ──────────────────── */
.bw-bar{position:sticky;top:0;z-index:60;background:var(--g1);border-bottom:1px solid var(--line)}
.bw-in{max-width:1180px;margin:0 auto;display:flex;align-items:center;gap:10px 12px;padding:9px 14px;flex-wrap:wrap}
.bw-lock{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--ink);min-height:44px}
.bw-lock .m{width:22px;height:22px;border-radius:6px;background:var(--acc);display:grid;place-items:center;flex:none}
.bw-lock .m i{width:8px;height:8px;border-radius:3px;background:#fff;display:block;transform:translate(-2px,2px)}
.bw-lock b{font-family:var(--serif);font-weight:700;font-size:17px;letter-spacing:-.005em}
.bw-ro{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;
  padding:5px 11px;font-size:12px;font-weight:600;color:var(--ink);line-height:1.35}

/* the canonical top-level nav row, light-ground variant, copied from the
   White label page. Three states told by border STYLE and weight, never hue.
   Every target is 44px. These pages are a CHILD of Client portals, so the
   parent carries aria-current="true" ("current item within a set") and never
   "page", which would tell a screen-reader user they are somewhere they are
   not. Do not collapse the two states into one. */
.bnav{margin-left:auto;display:flex;align-items:center;gap:6px;min-width:0;flex-wrap:wrap}
.bnav-a{display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:0 12px;border-radius:10px;
  text-decoration:none;color:var(--mid);border:1px solid transparent;
  font-family:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:9.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;line-height:1.3;white-space:nowrap}
.bnav-a:hover{color:var(--ink);background:var(--g2);border-color:var(--line)}
.bnav-a[aria-current="page"]{color:var(--ink);border-color:var(--ink)}
.bnav-a[aria-current="true"]{color:var(--ink);border-style:dashed;border-color:var(--ink)}

.bw-sub{border-top:1px solid var(--soft);background:var(--g2)}
.bw-sub-in{max-width:1180px;margin:0 auto;display:flex;align-items:center;gap:4px;padding:2px 14px;flex-wrap:wrap}
.bw-sub-in a{display:inline-flex;align-items:center;min-height:40px;padding:6px 10px;border-radius:9px;
  border:1px solid transparent;color:var(--mid);font-size:13px;text-decoration:none}
.bw-sub-in a:hover{color:var(--ink);border-color:var(--line)}
.bw-sub-in button{display:inline-flex;align-items:center;justify-content:center;min-height:40px;margin-left:auto;
  padding:6px 10px;border:1px solid var(--line);border-radius:9px;background:var(--g1);color:var(--ink);
  font:inherit;font-size:13px;cursor:pointer}
@media (max-width:640px){.bw-ro{font-size:11.5px;padding:4px 9px}.bw-lock b{font-size:16px}}

/* ── page furniture ───────────────────────────────────────────────────── */
.wrap{max-width:1180px;margin:0 auto;padding:22px 14px 0}
.kick{font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--gilt);margin:0 0 5px}
h1.pt{font-size:clamp(23px,4.6vw,33px);line-height:1.1;margin:0 0 8px;text-wrap:balance}
.lede{color:var(--mid);font-size:16px;margin:0 0 6px;max-width:62ch}
.sub{color:var(--dim);font-size:14.5px;margin:0 0 4px;max-width:66ch}
.sub a,.lede a,.bw-foot a{color:var(--ink);text-decoration:underline;text-underline-offset:2px;
  text-decoration-color:var(--giltline)}

/* the invented-label. The pack's standing constraint: any invented person or
   business is labelled as invented where FOUNDER can see it. */
.invented{display:inline-flex;align-items:center;gap:6px;border:1px dashed var(--line);border-radius:999px;
  padding:3px 10px;font-size:11.5px;color:var(--dim);margin:0 0 10px}
.invented b{color:var(--ink);font-weight:600}

/* ── the app frame ────────────────────────────────────────────────────── */
.stage{max-width:1180px;margin:18px auto 0;padding:0 14px}
.pf-frame{border:1px solid var(--line);border-radius:16px;background:var(--g1);overflow:hidden;
  box-shadow:var(--shadow)}
.pf-top{display:flex;align-items:center;gap:9px;padding:10px 12px;border-bottom:1px solid var(--line);
  background:var(--g1);min-height:46px}
.pf-mark{width:24px;height:24px;border-radius:7px;background:var(--acc);display:grid;place-items:center;flex:none}
.pf-mark i{width:9px;height:9px;border-radius:3px;background:#fff;display:block;transform:translate(-2px,2px)}
.pf-name{font-family:var(--serif);font-weight:700;font-size:16px;line-height:1.1;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.pf-where{margin-left:auto;font-size:12px;color:var(--dim);white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;max-width:48%}
.pf-back{padding:8px 12px;border-bottom:1px solid var(--line);background:var(--g2);font-size:12px}
.pf-back a{color:var(--dim);text-decoration:none;display:inline-flex;align-items:center;min-height:32px}
.pf-back a:hover{color:var(--ink);text-decoration:underline}

/* the band that says whose screen this is — the firm's, or the client's */
.pf-whose{display:flex;gap:8px;align-items:center;padding:9px 12px;background:var(--ink);color:var(--g1);
  font-size:12px;line-height:1.4}
/* THE FOREGROUND HAS TO COME WITH THE BACKGROUND. The base rule above pairs
   background:var(--ink) with color:var(--g1), and both tokens FLIP between the
   themes — in dark, --ink is the near-white #F2F4F8 and --g1 is the dark
   #1A1D24. So this override, which pinned the background to #000 and said
   nothing about the text, left the dark theme rendering #1A1D24 on #000: a
   band at 1.25:1, invisible on all 19 screens that carry it. Pinning one half
   of a two-token pair is the whole bug; the colour is now pinned with it.
   (CD gate on PR #1948, 2026-08-12.) */
:root[data-theme="dark"] .pf-whose{background:#000;color:#f2f4f8}
.pf-whose b{font-weight:700}
.pf-whose a{margin-left:auto;color:inherit;border:1px solid rgba(255,255,255,.42);border-radius:8px;
  padding:4px 9px;text-decoration:none;white-space:nowrap;min-height:32px;display:inline-flex;align-items:center}

.pf-strip{display:flex;gap:3px;padding:7px 8px;border-bottom:1px solid var(--line);background:var(--g2);overflow-x:auto}
.pf-strip a{flex:1 0 auto;min-width:62px;text-align:center;padding:8px 6px;border-radius:9px;
  border:1px solid transparent;color:var(--dim);font-size:12.5px;text-decoration:none;min-height:38px;
  display:inline-flex;align-items:center;justify-content:center}
.pf-strip a:hover{border-color:var(--line);color:var(--ink)}
.pf-strip a[aria-current="page"]{color:var(--ink);font-weight:700;background:var(--g1);border-color:var(--line);
  box-shadow:inset 0 -2px 0 var(--ink)}

.pf-cols{display:block}
.pf-rail{display:none}
.pf-body{padding:14px;display:grid;gap:11px;background:var(--g0);align-content:start;font-size:14px;
  min-height:340px}
.pf-tabs{display:flex;border-top:1px solid var(--line);background:var(--g1)}
.pf-tabs span{flex:1;text-align:center;padding:9px 2px;font-size:10.5px;color:var(--dim);min-width:0}
.pf-tabs span em{display:block;font-style:normal;font-family:var(--mono);font-size:10px;font-weight:600;color:var(--ink)}
.pf-tabs span.on{color:var(--ink);font-weight:700;box-shadow:inset 0 2px 0 var(--acc)}

@media (min-width:900px){
  .pf-cols{display:grid;grid-template-columns:224px 1fr;align-items:stretch}
  .pf-rail{display:block;border-right:1px solid var(--line);background:var(--g1);padding:10px 9px}
  .pf-rail h2{font-size:11px;font-family:var(--mono);font-weight:600;letter-spacing:.14em;text-transform:uppercase;
    color:var(--dim);margin:2px 0 8px;padding-left:6px}
  .pf-rail ul{list-style:none;margin:0;padding:0;display:grid;gap:2px}
  .pf-rail span.r{display:flex;gap:9px;align-items:center;padding:8px 7px;border-radius:9px;color:var(--dim);font-size:13px}
  .pf-rail span.r em{font-style:normal;font-family:var(--mono);font-size:10.5px;color:var(--ink);
    border:1px solid var(--line);border-radius:5px;padding:1px 4px;flex:none}
  .pf-rail span.r.on{color:var(--ink);font-weight:700;background:var(--g2)}
  .pf-tabs{display:none}
  .pf-body{min-height:460px;padding:16px}
}

/* ── the pieces on the screens ────────────────────────────────────────── */
.h{font-family:var(--serif);font-size:19px;margin:2px 0 0;line-height:1.2;font-weight:700}
.l{color:var(--dim);margin:0;font-size:13.5px;line-height:1.5}
.l b{color:var(--ink)}
.card{border:1px solid var(--line);border-radius:12px;background:var(--g1);padding:12px 13px}
.card.tight{padding:10px 12px}
.card.strong{border-color:var(--ink)}
.card>b{display:block;font-size:13.5px;margin-bottom:3px}
.row{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:12px;
  background:var(--g1);padding:11px 12px}
.row .who{flex:1;min-width:0}
.row b{display:block;font-size:13.5px}
.row i{font-style:normal;color:var(--dim);display:block;font-size:12.5px;line-height:1.45}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:9px 13px;
  border:1px solid var(--line);border-radius:10px;background:var(--g1);font:inherit;font-size:13.5px;
  font-weight:600;color:var(--ink);text-decoration:none}
.btn.p{background:var(--acc);border-color:var(--acc);color:#fff;width:100%}
.btn.wide{width:100%}
.btn.sm{min-height:34px;padding:6px 10px;font-size:12.5px}
.btn[disabled],.btn[aria-disabled="true"]{opacity:.55;cursor:not-allowed}
.chip{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:999px;
  padding:4px 10px;font-size:12px;font-weight:600;white-space:nowrap;background:var(--g1);color:var(--ink)}
.chip.acc{border-color:var(--acc-ink);color:var(--acc-ink)}
.fence{border:1px dashed var(--line);border-radius:12px;background:var(--g2);padding:11px 12px;color:var(--dim)}
.fence b{color:var(--ink);font-size:13px;display:block}
.fence .lb{display:inline-block;font-family:var(--mono);font-size:10px;letter-spacing:.11em;text-transform:uppercase;
  border:1px solid var(--line);border-radius:5px;padding:1px 5px;margin-bottom:6px}
.code{font-family:var(--mono);font-size:12px;background:var(--g2);border:1px solid var(--line);border-radius:8px;
  padding:9px 10px;overflow-x:auto;white-space:nowrap;color:var(--ink)}
label.fl{display:block;font-size:12.5px;font-weight:600;margin:0 0 5px}
input[type=text],input[type=email]{width:100%;min-height:44px;border:1px solid var(--line);border-radius:10px;
  background:var(--g2);color:var(--dim);padding:9px 11px;font:inherit;font-size:14.5px}

/* ── the persona chooser — the screen the whole architecture turns on ──
   One row per kind. The chosen one is told by a WORD ("Chosen"), a SOLID
   border and an inset rule; the others by a dashed edge and no word. Never by
   colour, and never by colour alone. */
.picks{display:grid;gap:9px}
.pick{display:block;border:1px dashed var(--line);border-radius:12px;background:var(--g1);padding:12px 13px;
  text-decoration:none;color:var(--ink)}
.pick:hover{border-color:var(--ink)}
.pick.on{border-style:solid;border-color:var(--acc);box-shadow:inset 3px 0 0 var(--acc);background:var(--g1)}
.pick .pt-r{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap}
.pick b{font-size:14.5px}
.pick .st{font-family:var(--mono);font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:var(--acc-ink);
  border:1px solid var(--acc-ink);border-radius:5px;padding:1px 5px;margin-left:auto}
.pick i{font-style:normal;display:block;color:var(--dim);font-size:12.5px;line-height:1.5;margin-top:4px}
.pick .kv{display:grid;gap:2px;margin-top:8px;padding-top:8px;border-top:1px solid var(--soft)}
.pick .kv span{display:flex;gap:8px;font-size:12px;color:var(--dim)}
.pick .kv span em{font-style:normal;color:var(--ink);font-weight:600;min-width:104px;flex:none}

/* the parameter table — what the persona actually decides */
.params{width:100%;border-collapse:collapse;font-size:13px;margin-top:4px}
.params th,.params td{text-align:left;padding:8px 9px;border-bottom:1px solid var(--soft);vertical-align:top}
.params th{font-size:11px;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--dim);
  font-weight:600;white-space:nowrap}
.params td:first-child{font-weight:600;color:var(--ink);white-space:nowrap}
.params td{color:var(--dim)}
@media (max-width:620px){
  .params,.params tbody,.params tr,.params td{display:block;width:100%}
  .params thead{display:none}
  .params tr{border:1px solid var(--line);border-radius:11px;margin-bottom:8px;padding:8px 10px;background:var(--g1)}
  .params td{border:0;padding:3px 0}
  .params td:first-child{font-size:13.5px}
  .params td[data-l]:before{content:attr(data-l) " — ";font-family:var(--mono);font-size:10px;
    letter-spacing:.09em;text-transform:uppercase;color:var(--dim)}
}

/* ── the wait, with a date on it — the screen that carries the promise ──
   Steps are told by a word and a shape: done = filled square, now = ringed
   square with the word "Now", later = hollow square. No colour is doing work. */
.steps{display:grid;gap:0;margin-top:4px}
.step{display:grid;grid-template-columns:26px 1fr;gap:11px;padding:0 0 14px;position:relative}
.step:before{content:"";position:absolute;left:12px;top:19px;bottom:0;width:1px;background:var(--line)}
.step:last-child{padding-bottom:0}
.step:last-child:before{display:none}
.step .g{width:25px;height:25px;border-radius:7px;border:1.5px solid var(--ink);display:grid;place-items:center;
  background:var(--g1);font-size:11px;font-weight:700;z-index:1}
.step.done .g{background:var(--ink);color:var(--g1)}
.step.now .g{outline:2px solid var(--acc);outline-offset:2px}
.step.later .g{border-color:var(--line);color:var(--dim);border-style:dashed}
.step .tx b{display:block;font-size:13.5px}
.step .tx i{font-style:normal;display:block;color:var(--dim);font-size:12.5px;line-height:1.45}
.step .tx .when{display:inline-block;margin-top:4px;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;
  text-transform:uppercase;border:1px solid var(--line);border-radius:5px;padding:1px 6px;color:var(--ink)}
/* ── .nb — WHAT THIS STEP DESCRIBES AND CANNOT DO, ON THE STEP ────────────
   The portals tree carries a page-level banner ("Future state — drawn, not
   built") and a 7-phase ladder one click away. Both are true and neither is
   where the site's own rule puts them: anything not built "says so on its own
   row rather than in a footnote". A claim step that narrates three photographs
   arriving, on a screen where nothing takes a file, is exactly the row that
   rule was written for.
   DELIBERATELY THE SHAPE OF .when AND NOT ITS TWIN: same mono chip so it reads
   as the step's own marker rather than as page furniture, DASHED and dimmed so
   a reader can tell a fact about the wait (a date) from a fact about the
   product (this part is drawn) without reading either. Non-hue, so it survives
   greyscale and both CVD views. */
.step .tx .nb{display:inline-block;margin-top:4px;margin-right:6px;font-family:var(--mono);font-size:10.5px;
  letter-spacing:.06em;text-transform:uppercase;border:1px dashed var(--line);border-radius:5px;
  padding:1px 6px;color:var(--dim)}

/* ── portal tags — how a message says which door it came through ──────── */
.tag{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:6px;
  padding:1px 7px;font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink);background:var(--g2);white-space:nowrap}
.tag em{font-style:normal;color:var(--dim)}
.grp-hd{display:flex;align-items:center;gap:9px;margin:6px 0 0;flex-wrap:wrap}
.grp-hd h3{font-size:14px;margin:0;font-family:var(--serif)}
.grp-hd .n{font-family:var(--mono);font-size:11px;color:var(--dim)}

/* ── the published manual, on the firm's own address ──────────────────── */
.site{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--g1)}
.site-url{display:flex;align-items:center;gap:8px;padding:8px 11px;background:var(--g2);
  border-bottom:1px solid var(--line);font-family:var(--mono);font-size:12px;color:var(--ink)}
.site-url .dot{width:9px;height:9px;border-radius:50%;border:1px solid var(--line);flex:none}
.site-body{padding:16px 15px}
.site-body h3{font-family:var(--serif);font-size:21px;margin:0 0 4px}
.site-body .by{font-size:12px;color:var(--dim);margin:0 0 12px}
.site-list{list-style:none;margin:0;padding:0;display:grid;gap:7px}
.site-list a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 11px;
  text-decoration:none;color:var(--ink);font-size:13.5px}
.site-list a:hover{border-color:var(--ink)}
.site-list a span{display:block;color:var(--dim);font-size:12.5px;margin-top:2px}

.note{border:1px solid var(--line);border-left:3px solid var(--giltline);background:var(--g1);border-radius:12px;
  padding:13px 15px;margin:16px 0 0;font-size:14px;color:var(--mid);max-width:74ch}
.note b{color:var(--ink)}
.note p{margin:0 0 8px}.note p:last-child{margin:0}

/* the honest not-built marker. Never a dead button: it says what it is and
   links somewhere real. */
.soon{border:1px dashed var(--line);border-radius:12px;background:var(--g2);padding:11px 13px;font-size:13px;
  color:var(--mid)}
.soon b{display:block;color:var(--ink);font-size:13px;margin-bottom:3px}
.soon .lb{display:inline-block;font-family:var(--mono);font-size:10px;letter-spacing:.11em;text-transform:uppercase;
  border:1px solid var(--line);border-radius:5px;padding:1px 5px;margin-bottom:6px;color:var(--ink)}
.soon a{color:var(--ink);text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--giltline)}

/* ── index (all screens) ──────────────────────────────────────────────── */
.grp{max-width:1180px;margin:0 auto;padding:22px 14px 0}
.grp h2{font-size:19px;margin:0 0 10px;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.grp h2 span{font-family:var(--sans);font-size:13.5px;font-weight:400;color:var(--dim);letter-spacing:0}
.grid{list-style:none;margin:0;padding:0;display:grid;gap:10px;grid-template-columns:1fr}
@media (min-width:640px){.grid{grid-template-columns:1fr 1fr}}
@media (min-width:980px){.grid{grid-template-columns:repeat(3,1fr)}}
.grid a{display:block;border:1px solid var(--line);border-radius:13px;background:var(--g1);padding:13px 14px;
  text-decoration:none;color:var(--ink);box-shadow:var(--shadow);min-height:44px}
.grid a:hover{border-color:var(--ink)}
.grid b{display:block;font-size:14.5px;margin-bottom:3px}
.grid span{display:block;color:var(--dim);font-size:13px;line-height:1.45}
.grid .pin{display:inline-block;margin-top:6px;font-family:var(--mono);font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;border:1px solid var(--line);border-radius:5px;padding:1px 5px;color:var(--dim)}

/* ── foot ─────────────────────────────────────────────────────────────── */
.bw-foot{max-width:1180px;margin:26px auto 0;padding:22px 14px 56px;color:var(--dim);font-size:13.5px;
  line-height:1.6;border-top:1px solid var(--line)}
.bw-foot h2{font-size:14.5px;color:var(--ink);margin:0 0 8px;font-family:var(--sans)}
.bw-foot p{max-width:74ch}
.bw-foot b{color:var(--ink)}
