/* ==== Bravo Protocol: service subpage template (PROTOTYPE, local only; never deployed) ====
   Shared by all seven subpages; pages differ only in content (content/*.json -> tools/build.py).
   Tokens, buttons and footer are copied from the live home stylesheet (assets/home/style.css, v7) so the pages match.
   Classes only, no inline styles, no external requests. Motion is the pw-bulb text-shadow only. */
@font-face{font-family:'Bodoni Moda';font-weight:400 900;font-style:normal;font-display:swap;src:url(/fonts/bodoni-moda-855ea6.woff2) format('woff2')}
@font-face{font-family:'Manrope';font-weight:200 800;font-style:normal;font-display:swap;src:url(/fonts/manrope-814019.woff2) format('woff2')}

/* ---- tokens (same values as home) ---- */
:root{
  --bg:#0a1220;--bg2:#0d1829;--bg3:#111f35;--ink:#f3eee4;--muted:#98a3b3;--gold:#c6a568;--gold-d:#7d5f2e;--ink-2:#c9cfd8;
  --hair:rgba(198,165,104,.24);--hair-strong:rgba(198,165,104,.55);--hair-faint:rgba(243,238,228,.08);
  --disp:'Bodoni Moda',Georgia,serif;--sans:'Manrope',system-ui,sans-serif;
  --fs-body:16px;--fs-caps:11.5px;
  --s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--s8:64px;--s9:96px;--s10:128px;
  --pad:clamp(24px,6vw,96px);--maxw:1240px;
  --ease-out:cubic-bezier(.2,.7,.2,1);--ease-io:cubic-bezier(.65,0,.35,1);--t-fast:.28s;--t-med:.6s;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink)}
body{font-family:var(--sans);font-weight:400;font-size:var(--fs-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
::selection{background:rgba(198,165,104,.35);color:var(--ink)}
.sp-wrap{width:100%;max-width:calc(var(--maxw) + 2 * var(--pad));margin:0 auto;padding:0 var(--pad)}

/* ---- buttons (home .btn / .btn.ghost) ---- */
.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;isolation:isolate;min-height:48px;
  font-family:var(--sans);font-size:var(--fs-caps);font-weight:600;letter-spacing:.24em;text-transform:uppercase;text-decoration:none;
  padding:20px 38px;border:1px solid var(--gold);background:var(--gold);color:var(--bg);transition:color var(--t-med) var(--ease-out),border-color var(--t-med) var(--ease-out)}
.btn::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--bg);transform:scaleX(0);transform-origin:right;transition:transform var(--t-med) var(--ease-io)}
.btn:hover::before,.btn:focus-visible::before{transform:scaleX(1);transform-origin:left}
.btn:hover,.btn:focus-visible{color:var(--gold)}
.btn:focus-visible{outline:1px solid var(--gold);outline-offset:5px}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--hair-strong)}
.btn.ghost::before{background:var(--gold)}
.btn.ghost:hover,.btn.ghost:focus-visible{color:var(--bg);border-color:var(--gold)}

/* ---- header: label, headline, small line, intro; quiet hairline accent on the right ---- */
.sp-head{position:relative;padding-top:calc(var(--nav-h,76px) + clamp(56px,9vh,112px));padding-bottom:clamp(48px,7vh,88px)}
.sp-head::before{content:"";position:absolute;inset:0 0 auto 0;height:min(640px,90vh);pointer-events:none;
  background:radial-gradient(60% 70% at 78% 18%,rgba(198,165,104,.07),transparent 70%)}
.sp-head-grid{position:relative;display:grid;grid-template-columns:minmax(0,1fr) clamp(220px,24vw,340px);gap:clamp(40px,6vw,120px);align-items:start}
/* caps label with the gold rule (home section label / caption style) */
.sp-label{display:flex;align-items:center;gap:16px;margin:0 0 var(--s6);font-size:var(--fs-caps);font-weight:600;letter-spacing:.3em;text-transform:uppercase;color:var(--ink-2)}
.sp-label::after{content:"";width:48px;height:1px;background:var(--gold);flex:none}
.sp-label>span{min-width:0}   /* label text is one flex item, so a .nw span inside it can't split the label */
.sp-h{font-family:var(--disp);font-weight:400;font-size:clamp(44px,4.6vw,72px);line-height:1.04;letter-spacing:-.012em;margin:0 0 var(--s6);color:var(--ink);text-wrap:balance;max-width:14em}
/* small line (home .ai-line) */
.sp-line{margin:0 0 var(--s6);font-size:12.5px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
.sp-line .dot{display:inline-block;margin:0 .7em;color:var(--gold)}
.sp-intro{margin:0;max-width:38em;font-size:17px;line-height:1.7;color:var(--ink-2);text-wrap:pretty}
/* the area's small gold hairline visual (same svg as the drawer thumbnail), framed by two hairlines */
.sp-accent{margin:clamp(8px,1.5vw,24px) 0 0;padding:18px 0;border-top:1px solid var(--hair);border-bottom:1px solid var(--hair-faint)}
.sp-accent img{display:block;width:100%;height:auto;aspect-ratio:5/3}

/* ---- pw-bulb: the one glow word (same filament keyframes, 1.6 s, as the approved home sections) ----
   Default (no JS, reduced motion) = the steady lit state. sub-head.js adds .fx-armed (plain gold) before first paint;
   sub.js adds .fx-in once fonts are ready, which plays the warm-up. Colour/text-shadow only: no layout change. */
.sp-lit.pw-bulb{color:#fff6e3;text-shadow:0 0 1px #fff0cc,0 0 2px #e6cf9c,0 0 4px #c6a568,0 0 9px rgba(222,168,80,.45),0 0 16px rgba(222,168,80,.14)}
.fx-armed:not(.fx-in) .sp-lit.pw-bulb{color:#c6a568;text-shadow:0 0 1px rgba(198,165,104,.4)}
.fx-in .sp-lit.pw-bulb{animation:fx-filament 1.6s cubic-bezier(.3,0,.2,1) .15s both}
@keyframes fx-filament{
  0%{color:#c6a568;text-shadow:0 0 1px rgba(198,165,104,.4),0 0 2px rgba(230,207,156,0),0 0 4px rgba(198,165,104,0),0 0 9px rgba(222,168,80,0),0 0 16px rgba(222,168,80,0)}
  42%{color:#fffbf2;text-shadow:0 0 1px #ffffff,0 0 3px #f6e2b4,0 0 6px #d9b56f,0 0 12px rgba(222,168,80,.7),0 0 22px rgba(222,168,80,.24)}
  54%{color:#fff3da;text-shadow:0 0 1px #fff0cc,0 0 2px #e6cf9c,0 0 4px #c6a568,0 0 8px rgba(222,168,80,.36),0 0 14px rgba(222,168,80,.10)}
  60%{color:#fff8ea;text-shadow:0 0 1px #fff4d8,0 0 2px #ecd6a6,0 0 5px #cdab6c,0 0 10px rgba(222,168,80,.52),0 0 18px rgba(222,168,80,.17)}
  100%{color:#fff6e3;text-shadow:0 0 1px #fff0cc,0 0 2px #e6cf9c,0 0 4px #c6a568,0 0 9px rgba(222,168,80,.45),0 0 16px rgba(222,168,80,.14)}}

/* ---- three blocks: grid of cards (desktop), stacked (<=900px) ---- */
.sp-blocks{padding-bottom:clamp(64px,9vh,112px)}
.sp-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(16px,1.8vw,28px)}
.sp-card{position:relative;padding:clamp(28px,2.6vw,40px) clamp(24px,2.4vw,36px) clamp(32px,2.8vw,44px);
  background:linear-gradient(180deg,rgba(17,31,53,.55),rgba(13,24,41,.35));border:1px solid var(--hair-faint);border-top-color:var(--hair)}
.sp-card::before{content:"";position:absolute;top:-1px;left:-1px;width:48px;height:1px;background:var(--gold)}
.sp-idx{display:block;margin:0 0 var(--s5);font-size:11px;font-weight:600;letter-spacing:.3em;color:var(--muted)}
/* card number 01-03 drawn by a CSS counter (decorative, aria-hidden): keeps "03" from reading as part of the card heading in text scans */
.sp-grid{counter-reset:sp-card}.sp-card{counter-increment:sp-card}.sp-idx::before{content:counter(sp-card,decimal-leading-zero)}
.sp-card h2{font-family:var(--disp);font-weight:400;font-size:clamp(26px,2.1vw,32px);line-height:1.15;letter-spacing:-.005em;margin:0 0 var(--s5);color:var(--ink)}
.sp-list{list-style:none;margin:0;padding:var(--s5) 0 0;border-top:1px solid var(--hair)}
.sp-list li{position:relative;padding-left:26px;font-size:15px;line-height:1.6;letter-spacing:.005em;color:var(--ink-2);text-wrap:pretty}
.sp-list li+li{margin-top:var(--s3)}
/* v9.1 (owner): bold lead phrase + regular text, the home v7 card list look (lead in ivory 600, the rest stays body ivory) */
.sp-list .sp-lead{color:var(--ink);font-weight:600;letter-spacing:.003em}
/* home .area-list diamond marker */
.sp-list li::before{content:"";position:absolute;left:2px;top:.62em;width:5px;height:5px;transform:rotate(45deg);border:1px solid var(--gold);background:rgba(198,165,104,.25)}

/* ---- how it starts + Request Service ---- */
.sp-begin{padding:clamp(56px,8vh,96px) 0;border-top:1px solid var(--hair)}
.sp-begin-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s6) clamp(40px,6vw,120px);align-items:end}
.sp-begin .sp-label{margin-bottom:var(--s5)}
.sp-begin-p{margin:0;max-width:24em;font-family:var(--disp);font-size:clamp(24px,2.2vw,34px);line-height:1.3;color:var(--ink);text-wrap:balance}

/* ---- related ---- */
.sp-related{padding:0 0 clamp(64px,9vh,112px)}
.sp-rel{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--s3) var(--s6);padding:var(--s6) 0;border-top:1px solid var(--hair-faint);border-bottom:1px solid var(--hair-faint);text-decoration:none}
.sp-rel-k{flex:none;width:100%;font-size:11px;font-weight:600;letter-spacing:.3em;text-transform:uppercase;color:var(--muted)}
.sp-rel-t{font-family:var(--disp);font-size:clamp(24px,2vw,30px);line-height:1.2;color:var(--ink)}
.sp-rel-t .arr{display:inline-block;margin-left:.4em;font-family:var(--sans);font-size:.6em;color:var(--gold);transition:transform var(--t-med) var(--ease-out)}
.sp-rel-d{font-size:15px;line-height:1.6;color:rgba(243,238,228,.65)}
.sp-rel-t span.u{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:7px;text-decoration-color:rgba(243,238,228,0);transition:text-decoration-color var(--t-med) var(--ease-out)}
.sp-rel:hover .sp-rel-t span.u,.sp-rel:focus-visible .sp-rel-t span.u{text-decoration-color:var(--gold)}
.sp-rel:hover .arr,.sp-rel:focus-visible .arr{transform:translateX(3px)}
.sp-rel:focus-visible{outline:1px solid var(--gold);outline-offset:6px}

/* ---- footer (home .foot, unchanged text) ---- */
.foot{position:relative;background:var(--bg);display:flex;justify-content:space-between;align-items:center;gap:var(--s5);padding:var(--s6) var(--pad);border-top:1px solid var(--hair)}
.foot-mark{font-family:var(--disp);font-size:15px;letter-spacing:.32em;text-transform:uppercase;color:var(--ink)}
.foot-copy{font-size:12px;letter-spacing:.14em;color:var(--muted)}
.foot-sep{margin:0 .7em;opacity:.7}
.foot-link{color:var(--muted);text-decoration:none;transition:color var(--t-fast)}
.foot-link:hover,.foot-link:focus-visible{color:var(--ink);text-decoration:underline;text-decoration-color:var(--hair-strong);text-underline-offset:4px}
.foot-link:focus-visible{outline:1px solid var(--gold);outline-offset:4px}

/* current page in the drawer: underline shown, not clickable twice */
.nav-a[aria-current="page"] .nav-t::after{transform:scaleX(1)}

/* ---- card entrance (v9.1, owner: "the cards appearing smoothly", like the home area cards). Same card look once settled.
   Armed by sub-head.js (html.cd-armed) unless reduced motion; no JS = cards shown. sub.js adds .in at 12% in view.
   Home pattern: the card fades in and rises 18px (1.1s ease-out, .11s stagger per card in a row) while a soft gold wash
   (the home stack's --hair backing) fades out behind its content, and the gold corner tick draws out last.
   Opacity / transform only, all out of layout (no layout shift). */
[data-d="0"]{--d:0}[data-d="1"]{--d:1}[data-d="2"]{--d:2}
.cd-armed .sp-card,.cd-armed .ab-area{isolation:isolate;opacity:0;transform:translate3d(0,18px,0);
  transition:opacity 1.1s var(--ease-out),transform 1.1s var(--ease-out);transition-delay:calc(var(--d,0) * .11s)}
.cd-armed .sp-card::after,.cd-armed .ab-area::after{content:"";position:absolute;inset:-1px;z-index:-1;pointer-events:none;
  background:var(--hair);opacity:1;transition:opacity 1.5s var(--ease-out) calc(var(--d,0) * .11s + .3s)}
.cd-armed .sp-card::before,.cd-armed .ab-area::before{transform:scaleX(0);transform-origin:left;
  transition:transform .9s var(--ease-out) calc(var(--d,0) * .11s + .55s)}
.cd-armed .sp-card.in,.cd-armed .ab-area.in{opacity:1;transform:none}
.cd-armed .sp-card.in::after,.cd-armed .ab-area.in::after{opacity:0}
.cd-armed .sp-card.in::before,.cd-armed .ab-area.in::before{transform:none}

/* ---- tablet / phone ---- */
@media (max-width:900px){
  .sp-grid{grid-template-columns:1fr}
  .sp-head-grid{grid-template-columns:1fr;gap:0}
  .sp-accent{order:-1;width:clamp(132px,36vw,200px);margin:0 0 var(--s6);padding:12px 0}
  .sp-begin-row{grid-template-columns:1fr;align-items:start}
}
@media (max-width:760px){
  :root{--fs-caps:11px}
  .sp-head{padding-top:calc(var(--nav-h,64px) + 40px);padding-bottom:var(--s7)}
  .sp-h{font-size:clamp(40px,11vw,52px)}
  .sp-intro{font-size:16px}
  .sp-card{padding:28px 24px 30px}
  .sp-begin .btn{width:100%}
  .foot{flex-direction:column;text-align:center}
}
@media (prefers-reduced-motion:reduce){
  .fx-in .sp-lit.pw-bulb{animation:none}
  .btn,.btn::before,.sp-rel-t .arr,.sp-rel-t span.u,.foot-link{transition:none}
}

/* phones: the full-screen drawer is .96 navy, so flat page text ghosts through it (on home the film hides this).
   Same treatment home uses for its captions: fade the page out under the open drawer (opacity only, no layout change). */
@media (max-width:760px){
  #main{transition:opacity .3s var(--nav-ease,ease)}
  .nav-open #main,html:not(.nav-js) body:has(.nav-drawer:target) #main{opacity:0}
}
@media (max-width:760px) and (prefers-reduced-motion:reduce){#main{transition:none}}

/* hyphenated words never break at the hyphen (build.py wraps them; owner fix 2026-10-25) */
.nw{white-space:nowrap}

/* ==== About layout (layouts/about.html), v2 2026-10-25: two-column hero with the eagle, tighter rows, area cards ==== */
.sp-badge{display:inline-flex;align-items:center;gap:12px;margin:0 0 var(--s6);padding:10px 18px;border:1px solid var(--hair-strong);
  font-size:11px;font-weight:600;letter-spacing:.26em;text-transform:uppercase;color:var(--ink)}
.sp-badge::before{content:"";width:5px;height:5px;transform:rotate(45deg);border:1px solid var(--gold);background:rgba(198,165,104,.25);flex:none}
.sp-intro--lead{font-family:var(--disp);font-size:clamp(22px,1.9vw,28px);line-height:1.35;color:var(--ink);max-width:22em}
.sp-head--about{padding-bottom:clamp(40px,6vh,72px)}
.sp-head--about .sp-head-grid{align-items:center}

/* eagle emblem: box reserved by aspect-ratio (no layout shift). Default = finished drawing (no JS / reduced motion).
   sub-head.js adds html.eg-armed (strokes hidden) unless reduced motion; sub.js adds .eg-in on #eagle when it enters view (once). */
.sp-eagle{margin:0;justify-self:end;width:100%;max-width:340px;aspect-ratio:1/1}
.sp-eagle .eg{display:block;width:100%;height:100%;overflow:visible}
.eg-s{stroke-dasharray:1 1;stroke-dashoffset:0}
.eg-lines{filter:drop-shadow(0 0 1.5px rgba(222,168,80,.32)) drop-shadow(0 0 5px rgba(222,168,80,.12))}   /* settled warm glow */
.eg-armed .eg-s{stroke-dashoffset:1}
.eg-armed .eg-grid,.eg-armed .eg-base{opacity:0}
.eg-armed .eg-lines{filter:drop-shadow(0 0 1.5px rgba(222,168,80,0)) drop-shadow(0 0 5px rgba(222,168,80,0))}
.eg-armed .eg-in .eg-s{stroke-dashoffset:0;transition:stroke-dashoffset 1.5s cubic-bezier(.33,1,.68,1) var(--egd,0s)}
.eg-armed .eg-in .eg-grid,.eg-armed .eg-in .eg-base{opacity:1;transition:opacity 1.2s var(--ease-out)}
.eg-armed .eg-in .eg-lines{filter:drop-shadow(0 0 1.5px rgba(222,168,80,.32)) drop-shadow(0 0 5px rgba(222,168,80,.12));transition:filter .9s var(--ease-out) 1.7s}
.eg-1{--egd:0s}.eg-2{--egd:.18s}.eg-3{--egd:.36s}.eg-4{--egd:.52s}.eg-5{--egd:.7s}          /* last stroke ends at 2.2 s */

/* rows: narrow label column, content at a reading measure */
.sp-rows{padding-bottom:clamp(24px,4vh,48px)}
.sp-row{display:grid;align-items:start;grid-template-columns:clamp(150px,14vw,200px) minmax(0,1fr);gap:var(--s4) clamp(24px,3.4vw,56px);
  padding:clamp(32px,4.4vh,48px) 0;border-top:1px solid var(--hair)}
.sp-row .sp-label{margin:7px 0 0;white-space:nowrap;gap:12px}
.sp-row .sp-label::after{width:24px}
.sp-row-body{max-width:44em}
.sp-row-body p{margin:0;font-size:16px;line-height:1.75;color:var(--ink-2);text-wrap:pretty}
.sp-row-body p+p{margin-top:var(--s5)}
/* advisor pull line: its own beat between Background and How we work, aligned to the content column */
.sp-pull{padding:0 0 clamp(32px,4.4vh,48px) calc(clamp(150px,14vw,200px) + clamp(24px,3.4vw,56px))}
.sp-advisor{position:relative;margin:0;max-width:26em;padding-top:var(--s5);font-family:var(--disp);font-size:clamp(22px,2vw,30px);line-height:1.35;color:var(--ink);text-wrap:balance}
.sp-advisor::before{content:"";position:absolute;top:0;left:0;width:48px;height:1px;background:var(--gold)}

/* areas: three cards like the service blocks, with the drawer thumbnails beside the names */
.sp-areas-sec{padding:clamp(48px,7vh,80px) 0 clamp(56px,8vh,96px);border-top:1px solid var(--hair)}
.sp-areas-sec .sp-label{margin-bottom:var(--s6)}
.sp-area-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 var(--s4);padding-bottom:var(--s4);border-bottom:1px solid var(--hair)}
.sp-area-h{margin:0;white-space:nowrap;font-family:var(--disp);font-weight:400;font-size:clamp(21px,1.6vw,24px);line-height:1.2;color:var(--ink)}
.sp-area-thumb{flex:0 1 auto;min-width:48px;display:block;width:clamp(56px,5.4vw,88px);aspect-ratio:5/3}
.sp-area-thumb img{display:block;width:100%;height:100%}
.sp-area-list{list-style:none;margin:0;padding:0}
.sp-area-a{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:10px 0;text-decoration:none}
.sp-area-t{font-size:15px;line-height:1.45;color:var(--gold);transition:color var(--t-fast) var(--ease-out)}
.sp-area-a .arr{flex:none;font-size:13px;color:var(--muted);transition:transform var(--t-med) var(--ease-out),color var(--t-fast)}
.sp-area-a:hover .sp-area-t,.sp-area-a:focus-visible .sp-area-t{color:#e6cf9c}
.sp-area-a:hover .arr,.sp-area-a:focus-visible .arr{transform:translateX(3px);color:var(--gold)}
.sp-area-a:focus-visible{outline:1px solid var(--gold);outline-offset:4px}

/* end: Request Service, then the small print, then the footer */
.sp-end{padding:clamp(48px,7vh,80px) 0 clamp(40px,6vh,64px);border-top:1px solid var(--hair)}
.sp-small{margin:var(--s6) 0 0;max-width:40em;font-size:12.5px;line-height:1.7;letter-spacing:.02em;color:var(--muted)}

@media (max-width:900px){
  .sp-head--about .sp-head-grid{align-items:start}
  .sp-eagle{order:-1;justify-self:start;width:clamp(104px,30vw,148px);margin:0 0 var(--s5)}
  .sp-row{grid-template-columns:1fr}
  .sp-row .sp-label{margin:0}
  .sp-pull{padding-left:0}
}
@media (max-width:760px){
  .sp-end .btn{width:100%}
  .sp-head--about{padding-top:calc(var(--nav-h,64px) + 24px)}
}
@media (prefers-reduced-motion:reduce){.sp-area-t,.sp-area-a .arr{transition:none}}

