/* KIWA 際 — shared styles for subpages (/geo/, /blog/).
   Same tokens as the homepage; lighter chrome. Homepage keeps its own inline CSS. */

/* ---------------------------------------------------------------------------
   v14 dark cinematic tokens. The site reads dark by default; the light scene
   survives as html[data-theme="ink"] (see the foot of this file), which the
   case pages crossfade into. Ratios below are WCAG relative-luminance maths
   against --paper #0E0C0A (L=.00378) and --paper-2 #161310 (L=.00674);
   scripts/contrast-check.mjs asserts them on every build.
--------------------------------------------------------------------------- */
:root{
  color-scheme:dark;                 /* scrollbars, caret, autofill, UA widgets */

  --paper:#0E0C0A;                   /* page base — v14 --bg                    */
  --paper-2:#161310;                 /* raised plate                            */
  --paper-3:#1E1A16;                 /* hover / inset                           */

  --ink:#F2EEE7;                     /* body text                        16.88  */
  --ink-hi:#FFFDF8;                  /* solid-button hover                      */
  --ink-soft:#E4DED4;                /*                                  14.59  */
  --body:#B3ACA1;                    /* long-form copy                    8.68  */
  --stone:#A49C90;                   /* small mono labels                 7.19
                                        brighter than the homepage's --dim:
                                        this sheet sets it at .60-.72rem, well
                                        under the 18px fence --dim requires.   */

  --hair:#2A2520;                    /* decorative seam                   1.29  */
  --hair-2:#3A342C;                  /* content divider                   1.59  */
  --hair-3:#6B6256;                  /* control boundary — WCAG 1.4.11    3.26  */

  --vermilion:#D8401F;               /* the accent: large/non-text only    4.34 */
  --vermilion-text:#E85A35;          /* the accent cut for small text      5.53 */
  --vermilion-on-light:#B03418;      /* the accent inside the light scene  5.42 */

  --good:#6FB37E;                    /* verdicts (was 3.17 on dark: fail)  7.83 */
  --warn:#D79A3A;                    /*                                    7.97 */

  --sans:'General Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --serif:'Instrument Serif',Georgia,serif;
  --mono:'Spline Sans Mono',ui-monospace,'SF Mono',monospace;
  --maxw:820px;
  --ease:cubic-bezier(.16,1,.3,1);
}
html{background:var(--paper)}        /* no white flash through view transitions */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  background:var(--paper);color:var(--ink);
  font-family:var(--sans);font-size:clamp(1rem,.95rem + .25vw,1.14rem);
  line-height:1.65;letter-spacing:-.011em;-webkit-font-smoothing:antialiased;
}
::selection{background:var(--ink);color:var(--paper)}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
:focus-visible{outline:2px solid var(--vermilion);outline-offset:4px}

/* skip link, as on the homepage: visible only on keyboard focus */
.skip-link{position:fixed;top:.6rem;left:.6rem;z-index:10001;background:var(--ink);color:var(--paper);
  padding:.65rem 1.1rem;border-radius:6px;font-size:.86rem;font-weight:500;
  transform:translateY(-160%);transition:transform .2s var(--ease)}
.skip-link:focus{transform:none}

/* paper grain, as on the homepage */
.grain{position:fixed;inset:-12px;width:calc(100% + 24px);height:calc(100% + 24px);z-index:9999;pointer-events:none;opacity:.05;mix-blend-mode:screen}
@media (prefers-reduced-motion:no-preference){.grain{animation:grainShift .7s steps(1,end) infinite}}
@keyframes grainShift{0%{transform:translate(0,0)}20%{transform:translate(-7px,5px)}40%{transform:translate(5px,-7px)}60%{transform:translate(-5px,-5px)}80%{transform:translate(7px,6px)}100%{transform:translate(0,0)}}

.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:clamp(1.25rem,4vw,3rem)}
.label{font-family:var(--mono);font-size:.72rem;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--stone)}

/* ============ NAV ============ */
.nav{position:sticky;top:0;z-index:500;background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:saturate(140%) blur(14px);-webkit-backdrop-filter:saturate(140%) blur(14px);
  border-bottom:1px solid var(--hair)}
.nav__inner{max-width:1320px;margin-inline:auto;padding-inline:clamp(1.25rem,4vw,4.5rem);
  display:flex;align-items:center;justify-content:space-between;gap:1.5rem;height:64px}
.brand{display:flex;align-items:baseline;gap:.55rem;font-weight:600;letter-spacing:-.02em;font-size:1.12rem}
.brand .seal{color:var(--vermilion);font-size:.92em}
.brand svg.seal{width:.92em;height:.92em;flex:none;align-self:center}
.foot__brand svg.seal{width:.85em;height:.85em;display:inline-block;vertical-align:-.08em}
.nav__links{display:flex;align-items:center;gap:clamp(.9rem,2vw,1.8rem);overflow-x:auto}
.nav__links a{font-size:.85rem;font-weight:500;color:var(--ink-soft);white-space:nowrap;padding:.35rem .2rem;border-bottom:1px solid transparent}
.nav__links a:hover,.nav__links a[aria-current="page"]{border-bottom-color:var(--vermilion)}
.nav__links a.nav__cta{background:var(--ink);color:var(--paper);border-radius:999px;padding:.5rem 1.05rem;font-size:.82rem;font-weight:500;white-space:nowrap;border-bottom:0;transition:background .2s var(--ease),box-shadow .2s var(--ease),transform .2s var(--ease)}
.nav__links a.nav__cta:hover{background:var(--ink-soft);border-bottom:0;box-shadow:0 8px 20px -8px rgba(21,19,15,.4);transform:translateY(-1px)}
.nav__links a.nav__cta:active{background:var(--ink);transform:translateY(0);box-shadow:none}
@media (max-width:640px){.nav__links a.nav__cta{padding:.42rem .85rem;font-size:.78rem}}

/* ---- services mega-dropdown (CSS-only: hover + :focus-within) ---- */
.nav__drop{position:relative}
.nav__drop::after{content:"";position:absolute;left:-1rem;right:-1rem;top:100%;height:.7rem} /* hover bridge to the menu */
.nav__drop-menu{position:absolute;top:calc(100% + .6rem);left:50%;
  display:grid;grid-template-columns:repeat(2,minmax(9rem,1fr));column-gap:1.6rem;
  width:max-content;max-width:min(30rem,92vw);
  background:var(--paper);border:1px solid var(--hair);border-radius:14px;padding:1.1rem 1.25rem .95rem;
  box-shadow:0 22px 46px -24px rgba(21,19,15,.3);z-index:600;
  opacity:0;visibility:hidden;transform:translate(-50%,7px);
  transition:opacity .18s var(--ease),transform .18s var(--ease),visibility .18s}
.nav__drop:hover .nav__drop-menu,.nav__drop:focus-within .nav__drop-menu{opacity:1;visibility:visible;transform:translate(-50%,0)}
.nav__drop.is-closed .nav__drop-menu{opacity:0 !important;visibility:hidden !important}
.nav__drop-col{display:flex;flex-direction:column;min-width:0}
.nav__drop-h{font-family:var(--mono);font-size:.62rem;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--stone);margin:.85rem 0 .3rem}
.nav__drop-col>.nav__drop-h:first-child{margin-top:0}
.nav__drop-menu a{display:block;padding:.28rem .35rem;border-radius:6px;border-bottom:0;font-size:.82rem;font-weight:500;color:var(--ink-soft);white-space:nowrap}
.nav__drop-menu a:hover{background:var(--paper-2);border-bottom:0;color:var(--vermilion)}
.nav__drop-all{grid-column:1/-1;margin-top:.8rem;padding-top:.7rem;border-top:1px solid var(--hair);font-weight:500;color:var(--vermilion-text)}
.nav__drop-all span{display:inline}
/* dropdown is desktop-only; on small screens the top link (→ /services/) does the job.
   nav__links scrolls horizontally on mobile, which would clip the menu anyway. */
@media (max-width:767px){.nav__drop-menu{display:none}.nav__drop::after{display:none}}
@media (min-width:768px){.nav__links{overflow:visible}}

/* sticky-nav offset for in-page anchors (e.g. /services/#build) */
.article :is(h2,h3)[id]{scroll-margin-top:5.2rem}

/* ============ PAGE HEAD ============ */
.crumbs{display:flex;gap:.5rem;flex-wrap:wrap;padding-top:2.2rem;font-family:var(--mono);
  font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--stone)}
.crumbs a{border-bottom:1px solid var(--hair)}
.crumbs a:hover{color:var(--ink);border-bottom-color:var(--vermilion)}
.crumbs .sep{color:var(--hair-2)}
h1{font-weight:600;letter-spacing:-.035em;line-height:1.02;
  font-size:clamp(2.3rem,1.4rem + 4.4vw,4.2rem);margin:1.1rem 0 1rem}
h1 .it{font-family:var(--serif);font-weight:400;font-style:italic;letter-spacing:-.01em}
.standfirst{font-size:clamp(1.15rem,1.05rem + .5vw,1.4rem);line-height:1.5;color:var(--body);max-width:38ch}
.meta-row{display:flex;gap:1.2rem;flex-wrap:wrap;margin-top:1.4rem;padding-bottom:2.4rem;border-bottom:1px solid var(--hair)}

/* ============ ARTICLE BODY ============ */
.article{padding:2.6rem 0 1.5rem}
.article>*+*{margin-top:1.15rem}
.article h2{font-weight:600;letter-spacing:-.03em;line-height:1.12;font-size:clamp(1.5rem,1.2rem + 1.4vw,2.1rem);margin-top:2.6rem}
.article h3{font-weight:600;letter-spacing:-.02em;font-size:1.15rem;margin-top:2rem}
.article p,.article li{color:var(--body)}
.article strong{color:var(--ink);font-weight:600}
.article a{color:var(--ink);border-bottom:1px solid var(--hair-2)}
.article a:hover{border-bottom-color:var(--vermilion)}
/* buttons inside .article keep their own colours — the ink link style above must not
   paint solid-button text/arrow ink-on-ink or underline pill buttons */
.article a.btn-solid{color:var(--paper);border-bottom:0}
.article a.btn-line{border-bottom:0}
.article ul,.article ol{padding-left:1.3rem}
.article li{margin:.45rem 0}
.article blockquote{border-left:2px solid var(--vermilion);padding:.2rem 0 .2rem 1.2rem;
  font-family:var(--serif);font-style:italic;font-size:1.25rem;line-height:1.45;color:var(--ink-soft)}
.article code{font-family:var(--mono);font-size:.86em;background:var(--paper-2);border:1px solid var(--hair);border-radius:4px;padding:.08em .35em}
.article pre{background:var(--paper-2);border:1px solid var(--hair);border-radius:8px;padding:1rem 1.2rem;overflow-x:auto}
.article pre code{background:none;border:0;padding:0}
.article hr{border:0;border-top:1px solid var(--hair);margin:2.4rem 0}
.article table{width:100%;border-collapse:collapse;font-size:.95rem}
.article th{text-align:left;font-family:var(--mono);font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--stone);font-weight:500}
.article th,.article td{padding:.6rem .8rem .6rem 0;border-bottom:1px solid var(--hair)}
.table-scroll{overflow-x:auto}

/* numbered section label, e.g. (01) */
.idx{font-family:var(--mono);font-size:.78rem;color:var(--vermilion-text);letter-spacing:.1em;margin-right:.6rem}

/* ============ BLOG INDEX CARDS ============ */
.post-list{padding:2.4rem 0 1rem}
.post{display:block;padding:1.6rem 0;border-bottom:1px solid var(--hair)}
.post:first-child{border-top:1px solid var(--hair)}
.post h2{font-weight:600;letter-spacing:-.025em;line-height:1.15;font-size:clamp(1.3rem,1.1rem + 1vw,1.7rem);margin:.35rem 0 .45rem;transition:color .18s var(--ease)}
.post:hover h2{color:var(--vermilion)}
.post p{color:var(--body);max-width:60ch}
.post .arr{display:inline-block;margin-left:.35rem;transition:transform .2s var(--ease)}
.post:hover .arr{transform:translateX(4px)}

/* ============ FAQ ============ */
.faq{margin-top:1.4rem;border-top:1px solid var(--hair)}
.faq details{border-bottom:1px solid var(--hair);padding:1rem 0}
.faq summary{cursor:pointer;font-weight:600;letter-spacing:-.015em;list-style:none;display:flex;justify-content:space-between;gap:1rem}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-family:var(--mono);color:var(--vermilion)}
.faq details[open] summary::after{content:"–"}
.faq details p{color:var(--body);margin-top:.6rem;max-width:62ch}

/* ============ RELATED / NEXT ============ */
.related{margin:3rem 0 0;padding:1.6rem 0 0;border-top:1px solid var(--hair)}
.related ul{list-style:none;padding:0;margin-top:.8rem}
.related li{margin:.5rem 0}
.related a{border-bottom:1px solid var(--hair-2)}
.related a:hover{border-bottom-color:var(--vermilion)}

/* ============ SERVICE PAGE — CTA row + "what you get" grid ============ */
.btn-row{display:flex;gap:.7rem;flex-wrap:wrap;margin:1.7rem 0 .3rem}
/* .btn-solid carries margin-top for the CTA band, where it follows a heading.
   In a flex row beside .btn-line that margin drops it ~19px out of alignment. */
.btn-row .btn-solid{margin-top:0}
.btn-line{display:inline-flex;align-items:center;gap:.5rem;border:1px solid var(--hair-2);border-radius:999px;
  padding:.8rem 1.45rem;font-size:.9rem;font-weight:500;color:var(--ink);
  transition:border-color .2s var(--ease),background .2s var(--ease),transform .2s var(--ease)}
.btn-line:hover{border-color:var(--vermilion);color:var(--ink);background:var(--paper-2);transform:translateY(-2px)}
.btn-line:active{transform:translateY(0);background:var(--hair)}
.get-grid{list-style:none;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:.9rem;margin-top:1.4rem}
.get-grid li{border:1px solid var(--hair);border-radius:12px;padding:.9rem 1rem .9rem 1.9rem;font-weight:500;
  color:var(--ink-soft);position:relative;line-height:1.35}
.get-grid li::before{content:"";position:absolute;left:.9rem;top:1.2rem;width:7px;height:7px;border-radius:2px;background:var(--vermilion)}

/* ============ CTA BAND ============ */
.cta-band{margin:3.2rem 0 0;padding:2.2rem 0;border-top:1px solid var(--hair)}
.cta-band p.big{font-size:clamp(1.5rem,1.2rem + 1.6vw,2.2rem);font-weight:600;letter-spacing:-.03em;line-height:1.12}
.cta-band .it{font-family:var(--serif);font-weight:400;font-style:italic}
.btn-solid{display:inline-flex;align-items:center;gap:.5rem;margin-top:1.2rem;background:var(--ink);color:var(--paper);cursor:pointer;
  border-radius:999px;padding:.8rem 1.5rem;font-size:.9rem;font-weight:500;box-shadow:0 1px 2px rgba(21,19,15,.14);
  transition:background .2s var(--ease),box-shadow .2s var(--ease),transform .2s var(--ease)}
.btn-solid:hover,.btn-solid:focus-visible{background:var(--ink-soft);transform:translateY(-2px);box-shadow:0 10px 24px -8px rgba(216,64,31,.32)}
.btn-solid:active{background:var(--ink);transform:translateY(0);box-shadow:0 1px 2px rgba(21,19,15,.2)}
.btn-solid .arr{transition:transform .2s var(--ease),color .2s var(--ease)}
.btn-solid:hover .arr,.btn-solid:focus-visible .arr{transform:translateX(4px);color:var(--vermilion)}

/* ============ FOOTER ============ */
.foot{margin-top:4rem;border-top:1px solid var(--hair);padding:2.2rem 0 2.6rem}
.foot__inner{max-width:1320px;margin-inline:auto;padding-inline:clamp(1.25rem,4vw,4.5rem);
  display:flex;justify-content:space-between;gap:1.5rem;flex-wrap:wrap;align-items:baseline}
.foot__brand{font-weight:600}
.foot__brand .seal{color:var(--vermilion)}
.foot__links{display:flex;gap:1.2rem;flex-wrap:wrap}
.foot__links a{font-size:.85rem;color:var(--body);border-bottom:1px solid transparent}
.foot__links a:hover{border-bottom-color:var(--vermilion)}
.foot__note{width:100%;margin-top:1rem;font-family:var(--mono);font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:var(--stone)}

@media (prefers-reduced-motion:reduce){
  .post .arr,.btn-solid .arr,.post h2{transition:none}
}

.article h3 a{border-bottom:0;color:inherit}
.article h3 a:hover{color:var(--vermilion)}

/* ============ GEO SCORE TOOL (/geo/score/) ============ */
:root{
  --good:#3F6B4A;   /* muted forest — the only greens/ambers on the site, and only for verdicts */
  --warn:#B4761E;
}

.tool{margin:2.4rem 0 0}
.tool__heading{display:block;margin-bottom:.9rem}
.tool__form{display:flex;gap:.6rem;flex-wrap:wrap;align-items:stretch}
.tool__field{flex:1 1 20rem;display:flex;align-items:center;gap:.6rem;background:var(--paper);
  border:1px solid var(--hair-2);border-radius:999px;padding:.15rem .35rem .15rem 1.1rem;
  transition:border-color .2s var(--ease),box-shadow .2s var(--ease)}
.tool__field:focus-within{border-color:var(--vermilion);box-shadow:0 0 0 4px color-mix(in srgb,var(--vermilion) 12%,transparent)}
.tool__field .scheme{font-family:var(--mono);font-size:.8rem;color:var(--stone);user-select:none}
.tool__field input{flex:1;min-width:0;border:0;background:none;font:inherit;font-size:.95rem;color:var(--ink);padding:.85rem 0}
.tool__field input:focus{outline:none}
.tool__field input::placeholder{color:var(--hair-2)}
/* .btn-solid carries margin-top:1.2rem for the CTA band; inside a flex row it must not. */
.tool__form .btn-solid,.gate__form .btn-solid{margin-top:0}
.tool__submit{flex:0 0 auto}
.tool__submit[disabled]{opacity:.55;cursor:progress;transform:none}
.tool__note{margin-top:.8rem;font-size:.82rem;color:var(--stone)}

.tool__err{display:none;margin-top:1rem;padding:.85rem 1.1rem;border:1px solid var(--vermilion);
  border-left-width:3px;border-radius:8px;background:color-mix(in srgb,var(--vermilion) 5%,transparent);
  color:var(--ink-soft);font-size:.9rem}
.tool__err.is-shown{display:block}

/* --- result --- */
.res{display:none;margin-top:2.6rem}
.res.is-shown{display:block}
.res__head{display:flex;gap:2rem;align-items:center;flex-wrap:wrap;
  padding-bottom:2rem;border-bottom:1px solid var(--hair)}
.ring{flex:0 0 auto;position:relative;width:132px;height:132px}
.ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-width:9;stroke-linecap:round}
.ring .track{stroke:var(--hair)}
.ring .fill{stroke:var(--vermilion);stroke-dasharray:339.29;stroke-dashoffset:339.29;
  transition:stroke-dashoffset 1s var(--ease),stroke .4s var(--ease)}
.ring__num{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}
.ring__num b{font-size:2.5rem;font-weight:600;letter-spacing:-.04em}
.ring__num span{font-family:var(--mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--stone);margin-top:.25rem}
.res__gist{flex:1 1 18rem;min-width:0}
.res__host{font-family:var(--mono);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--stone);
  overflow-wrap:anywhere}
.res__rating{font-size:clamp(1.4rem,1.2rem + 1vw,1.9rem);font-weight:600;letter-spacing:-.03em;margin:.35rem 0 .5rem}
.res__verdict{color:var(--body);font-size:.98rem;max-width:52ch}

.is-good{color:var(--good)} .is-warn{color:var(--warn)} .is-bad{color:var(--vermilion)}
.ring .fill.is-good{stroke:var(--good)} .ring .fill.is-warn{stroke:var(--warn)} .ring .fill.is-bad{stroke:var(--vermilion)}

/* --- category bars --- */
.cats{list-style:none;padding:0;margin:2rem 0 0;display:grid;gap:1.15rem}
.cat__top{display:flex;justify-content:space-between;align-items:baseline;gap:1rem}
.cat__name{font-weight:600;letter-spacing:-.015em;font-size:.95rem}
.cat__weight{font-family:var(--mono);font-size:.66rem;letter-spacing:.14em;color:var(--stone);text-transform:uppercase}
.cat__val{font-family:var(--mono);font-size:.9rem;font-weight:500}
.cat__bar{margin-top:.45rem;height:5px;border-radius:99px;background:var(--paper-2);overflow:hidden}
.cat__bar i{display:block;height:100%;border-radius:99px;background:var(--ink);width:0;
  transition:width .9s var(--ease)}
.cat__bar i.is-good{background:var(--good)} .cat__bar i.is-warn{background:var(--warn)} .cat__bar i.is-bad{background:var(--vermilion)}
.cat__blurb{margin-top:.4rem;font-size:.85rem;color:var(--stone);max-width:58ch}
.cat.is-locked .cat__name,.cat.is-locked .cat__val{color:var(--stone)}
.cat.is-locked .cat__bar{background:repeating-linear-gradient(135deg,var(--paper-2) 0 6px,transparent 6px 12px)}

/* --- issues --- */
.issues{list-style:none;padding:0;margin:1.2rem 0 0;display:grid;gap:.9rem}
.issue{border:1px solid var(--hair);border-radius:12px;padding:1rem 1.15rem}
.issue__top{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap}
.sev{font-family:var(--mono);font-size:.6rem;font-weight:500;letter-spacing:.16em;text-transform:uppercase;
  border-radius:99px;padding:.22rem .6rem;border:1px solid currentColor}
.sev--critical,.sev--high{color:var(--vermilion)}
.sev--medium{color:var(--warn)}
.sev--low{color:var(--stone)}
.issue__label{font-weight:600;letter-spacing:-.015em}
.issue__reason{margin-top:.55rem;color:var(--body);font-size:.92rem}
.issue__fix{margin-top:.55rem;font-size:.88rem;color:var(--ink-soft);padding-left:.9rem;border-left:2px solid var(--hair-2)}
.issue__fix b{font-family:var(--mono);font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--stone);
  display:block;margin-bottom:.2rem;font-weight:500}

/* --- gate --- */
.gate{margin-top:2.6rem;padding:1.8rem;border:1px solid var(--hair-2);border-radius:14px;background:var(--paper-2)}
.gate h3{font-weight:600;letter-spacing:-.025em;font-size:1.2rem;margin-bottom:.5rem}
.gate p{color:var(--body);font-size:.92rem;max-width:56ch}
.gate ul{margin:.9rem 0 1.2rem;padding-left:1.1rem;color:var(--body);font-size:.9rem}
.gate li{margin:.3rem 0}
.gate__form{display:flex;gap:.6rem;flex-wrap:wrap;align-items:stretch}
.gate__form input{flex:1 1 16rem;min-width:0;border:1px solid var(--hair-2);border-radius:999px;background:var(--paper);
  font:inherit;font-size:.92rem;padding:.8rem 1.1rem;color:var(--ink)}
.gate__form input:focus-visible{outline:2px solid var(--vermilion);outline-offset:2px}
.gate__hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.gate__fine{margin-top:.8rem;font-size:.76rem;color:var(--stone)}

.full{display:none;margin-top:2.6rem}
.res.is-unlocked .full{display:block}
.res.is-unlocked .gate{display:none}
.full__group{margin-top:2rem}
.full__group h3{font-weight:600;letter-spacing:-.02em;font-size:1.05rem;display:flex;align-items:baseline;gap:.7rem}
.full__group h3 em{font-family:var(--mono);font-style:normal;font-size:.7rem;letter-spacing:.14em;color:var(--stone)}
.full ul{list-style:none;padding:0;margin:.9rem 0 0;display:grid;gap:.6rem}
.chk{display:grid;grid-template-columns:auto 1fr;gap:.75rem;align-items:start;
  border-bottom:1px solid var(--hair);padding-bottom:.7rem}
.chk:last-child{border-bottom:0}
.dot{width:8px;height:8px;border-radius:2px;margin-top:.5rem}
.dot.is-good{background:var(--good)} .dot.is-warn{background:var(--warn)} .dot.is-bad{background:var(--vermilion)}
.chk__label{font-weight:600;font-size:.92rem;letter-spacing:-.01em}
.chk__reason{color:var(--body);font-size:.88rem;margin-top:.15rem}
.chk__fix{color:var(--stone);font-size:.84rem;margin-top:.3rem}

.res__actions{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:2.4rem;padding-top:1.6rem;border-top:1px solid var(--hair)}
.res__stamp{margin-top:1.2rem;font-family:var(--mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--stone)}

.spin{display:inline-block;width:13px;height:13px;border:2px solid color-mix(in srgb,var(--paper) 45%,transparent);
  border-top-color:var(--paper);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

@media (max-width:560px){
  .res__head{gap:1.4rem}
  .ring{width:104px;height:104px}
  .ring__num b{font-size:2rem}
  /* the tracked-out label outgrows the smaller ring's inner circle */
  .ring__num span{font-size:.5rem;letter-spacing:.1em}
}
@media (prefers-reduced-motion:reduce){
  .ring .fill,.cat__bar i{transition:none}
  .spin{animation:none}
}

/* ============ VIEW TRANSITIONS (cross-document; the seal morphs between pages) ============ */
@media (prefers-reduced-motion:no-preference){
  @view-transition{navigation:auto}
  .brand .seal,.brand__seal{view-transition-name:kiwa-seal}
}

/* ============ INK CHAPTERS (case pages: the whole page crossfades black/white per section) ============ */
html[data-theme="ink"]{
  --paper:#F6F3EC;--paper-2:#EDE8DE;--paper-3:#E4DED0;   /* washi */
  --ink:#1A1714;--ink-hi:#0E0C0A;--ink-soft:#332E27;     /* 16.11 */
  --body:#4C463B;                                        /*  8.44 */
  --stone:#6A6358;                                       /*  5.36 */
  --hair:#DED8CB;--hair-2:#CFC8B8;--hair-3:#A8A092;
  --vermilion-text:var(--vermilion-on-light);            /*  5.66 on washi */
  --good:#3F6B4A;--warn:#8A5A12;
}
html[data-theme="ink"] .grain{mix-blend-mode:multiply;opacity:.032}
body{transition:background-color .8s var(--ease),color .8s var(--ease)}

/* ============================================================================
   v14 DARK RE-SKIN — the parts a token flip cannot cover.
   Rules here fix three classes of problem the light theme never had:
   surfaces that were defined by shadow (invisible on black), boundaries that
   fell under the 3:1 WCAG 1.4.11 floor when inverted, and controls the UA
   repaints in light mode unless we take them.
   ==========================================================================*/

::selection{background:var(--vermilion);color:var(--paper)}
:focus-visible{outline:2px solid var(--vermilion);outline-offset:3px;box-shadow:0 0 0 1px var(--paper)}

/* chrome — elevation by hairline, not by shadow; no glass on a surface */
.nav{background:color-mix(in srgb,var(--paper) 94%,transparent);border-bottom-color:var(--hair-2)}
.nav__drop-menu{background:var(--paper-2);border-color:var(--hair-3);
  box-shadow:0 26px 52px -22px rgba(0,0,0,.72),inset 0 1px 0 rgba(255,255,255,.05)}
.nav__drop-menu a:hover{background:var(--paper-3);color:var(--vermilion-text)}

/* solid buttons: on dark, hover must BRIGHTEN — the light theme's dark shadow
   was invisible here, so hover read as no feedback at all */
.nav__links a.nav__cta:hover{background:var(--ink-hi);box-shadow:0 8px 22px -10px rgba(216,64,31,.5)}
.nav__links a.nav__cta:active{background:var(--ink-soft);box-shadow:none}
.btn-solid{box-shadow:none}
.btn-solid:hover,.btn-solid:focus-visible{background:var(--ink-hi);box-shadow:0 10px 26px -8px rgba(216,64,31,.42)}
.btn-solid:active{background:var(--ink-soft);box-shadow:none}
.btn-solid:hover .arr,.btn-solid:focus-visible .arr{color:var(--vermilion-on-light)}
.btn-line{border-color:var(--hair-3);background:color-mix(in srgb,var(--paper-2) 60%,transparent)}
.btn-line:hover{border-color:var(--vermilion);background:var(--paper-3)}
.btn-line:active{background:var(--paper-2)}

/* structure that vanished at 1.3:1 */
.article a,.related a{border-bottom-color:color-mix(in srgb,var(--ink) 42%,transparent)}
.crumbs a{border-bottom-color:var(--hair-2)}
.crumbs .sep{color:var(--stone)}
.meta-row,.article hr,.article th,.article td,.post,.post:first-child,
.faq,.faq details,.related,.cta-band,.foot,.res__head,.chk,.res__actions{border-color:var(--hair-2)}
.post:hover h2,.article h3 a:hover,.faq summary::after,.idx,.nav__drop-all,.is-bad{color:var(--vermilion-text)}

/* long-form surfaces */
.article code{background:var(--paper-3);border-color:var(--hair-2)}
.article pre{background:var(--paper-3);border-color:var(--hair-2);box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}
.article pre code{background:none;border:0}
.get-grid li,.issue{background:var(--paper-2);border-color:var(--hair-2);box-shadow:inset 0 1px 0 rgba(255,255,255,.035)}
.issue__fix{border-left-color:var(--hair-3)}
.gate{background:var(--paper-3);border-color:var(--hair-3);box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}

/* forms — without these the UA paints placeholder, caret and autofill in light mode */
.tool__field,.gate__form input{background:var(--paper-2);border-color:var(--hair-3)}
.tool__field:focus-within{border-color:var(--vermilion);box-shadow:0 0 0 4px color-mix(in srgb,var(--vermilion) 28%,transparent)}
.tool__field input,.gate__form input{color:var(--ink);caret-color:var(--vermilion-text)}
.tool__field input::placeholder,.gate__form input::placeholder{color:var(--stone);opacity:1}
.tool__field input:-webkit-autofill,.gate__form input:-webkit-autofill{
  -webkit-text-fill-color:var(--ink);-webkit-box-shadow:0 0 0 40px var(--paper-2) inset;caret-color:var(--ink)}
.tool__err{background:color-mix(in srgb,var(--vermilion) 14%,transparent);border-color:var(--vermilion-text)}
.tool__submit[disabled]{opacity:.72;filter:saturate(.6)}

/* the GEO score widget: its track, bars and badges all sat below 3:1 */
.ring .track{stroke:var(--hair-3)}
.cat__bar{background:var(--paper-3);box-shadow:inset 0 0 0 1px var(--hair)}
.cat.is-locked .cat__bar{background:var(--paper-2);
  background-image:repeating-linear-gradient(135deg,var(--hair-2) 0 6px,transparent 6px 12px)}
.sev--critical,.sev--high{color:#F0714D}   /* .6rem = 9.6px — needs headroom over 5.53 */
.sev--medium{color:var(--warn)}
.sev--low{color:var(--stone)}

/* v14 law: touch devices get no backdrop-filter and no animated filters */
@media (pointer:coarse){
  .nav{backdrop-filter:none;-webkit-backdrop-filter:none;background:color-mix(in srgb,var(--paper) 97%,transparent)}
  .grain{animation:none}
}
