/* ============================================================
   Rocket Hash — guides & documentation layout
   Three columns: section nav, article, on-this-page.
   ============================================================ */

.docs{
  --sidebar-w:272px;
  --toc-w:244px;
  --gutter:48px;
  display:grid;
  grid-template-columns:var(--sidebar-w) minmax(0,1fr) var(--toc-w);
  gap:0 var(--gutter);
  align-items:start;
  width:100%;max-width:1480px;margin-inline:auto;
  padding:0 26px 96px
}
@media (max-width:1240px){
  .docs{grid-template-columns:var(--sidebar-w) minmax(0,1fr);--toc-w:0px}
  .docs .toc{display:none}
}
@media (max-width:940px){
  .docs{grid-template-columns:minmax(0,1fr);gap:0;padding-inline:20px}
}

/* --------------------------------------------------- breadcrumbs --- */
.crumbs{max-width:1480px;margin-inline:auto;padding:calc(var(--nav-h) + 42px) 26px 0;font-size:13px;color:var(--ink-4)}
.crumbs ol{display:flex;flex-wrap:wrap;gap:6px;list-style:none}
.crumbs li + li::before{content:"/";margin-right:6px;color:var(--ink-4);opacity:.6}
.crumbs a{color:var(--ink-3)}
.crumbs a:hover{color:var(--ink)}
.crumbs [aria-current]{color:var(--ink-2)}
@media (max-width:940px){.crumbs{padding-top:calc(var(--nav-h) + 28px);padding-inline:20px}}

/* ------------------------------------------------------- sidebar --- */
.docs-side{
  position:sticky;top:calc(var(--nav-h) + 26px);align-self:start;
  max-height:calc(100vh - var(--nav-h) - 48px);
  overflow-y:auto;overscroll-behavior:contain;
  padding:6px 10px 40px 0;font-size:14.5px;
  scrollbar-width:thin;scrollbar-color:var(--fill-3) transparent
}
.docs-side::-webkit-scrollbar{width:8px}
.docs-side::-webkit-scrollbar-thumb{background:var(--fill-3);border-radius:8px}
.docs-side::-webkit-scrollbar-track{background:transparent}
.docs-group{border:0}
.docs-group > summary{
  display:flex;align-items:center;gap:8px;
  padding:9px 10px;border-radius:var(--r-8);
  font-size:13.5px;font-weight:640;letter-spacing:.005em;
  color:var(--ink-3);cursor:pointer;list-style:none
}
.docs-group > summary::-webkit-details-marker{display:none}
.docs-group > summary::before{
  content:"";width:6px;height:6px;
  border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;
  transform:rotate(-45deg);transition:transform .2s var(--smooth);flex:none
}
.docs-group[open] > summary::before{transform:rotate(45deg)}
.docs-group > summary:hover{color:var(--ink);background:var(--fill-1)}
.docs-side ul{list-style:none;margin:0 0 10px;padding:0 0 0 8px}
.docs-side li{margin:0}
.docs-side ul a{display:block;padding:7px 10px;border-radius:var(--r-6);color:var(--ink-2);line-height:1.4;transition:color .16s,background .16s}
.docs-side ul a:hover{color:var(--ink);background:var(--fill-1);text-decoration:none}
.docs-side ul a[aria-current="page"]{color:var(--accent-ink);background:var(--accent-soft);font-weight:600}
.docs-nav-toggle{display:none}
.docs-scrim{display:none}
@media (max-width:940px){
  .docs-nav-toggle{
    display:inline-flex;align-items:center;gap:8px;
    margin:18px 0 4px;padding:9px 14px;border-radius:980px;
    background:var(--fill-2);color:var(--ink);font-size:14px;font-weight:600
  }
  .docs-nav-toggle svg{width:15px;height:15px}
  .docs-side{
    position:fixed;inset:0 auto 0 0;z-index:80;
    width:min(320px,86vw);max-height:none;padding:84px 16px 32px;
    background:var(--bg);border-right:1px solid var(--hairline);
    transform:translateX(-102%);transition:transform .28s var(--snappy)
  }
  .docs-side.open{transform:none}
  .docs-scrim{
    display:block;position:fixed;inset:0;z-index:70;
    background:rgba(0,0,0,.56);opacity:0;pointer-events:none;
    transition:opacity .28s var(--smooth)
  }
  .docs-scrim.open{opacity:1;pointer-events:auto}
}

/* -------------------------------------------------- on this page --- */
.toc{position:sticky;top:calc(var(--nav-h) + 26px);align-self:start;max-height:calc(100vh - var(--nav-h) - 48px);overflow-y:auto;padding:6px 0 40px;font-size:13.5px}
.toc h2{font-size:12.5px;font-weight:640;letter-spacing:.005em;color:var(--ink-4);margin-bottom:10px;padding-left:15px}
.toc ul{list-style:none;border-left:1px solid var(--hairline)}
.toc a{display:block;padding:6px 0 6px 15px;margin-left:-1px;border-left:2px solid transparent;color:var(--ink-4);line-height:1.4;transition:color .16s,border-color .16s}
.toc a:hover{color:var(--ink-2);text-decoration:none}
.toc a.active{color:var(--accent-ink);border-left-color:var(--accent-ink);font-weight:550}
.toc .lvl-3 a{padding-left:28px;font-size:13px}

/* ------------------------------------------------------- article --- */
.docs-main{min-width:0;padding:8px 0 0}
.article-head{padding:10px 0 4px}
.article-eyebrow{display:inline-block;margin-bottom:12px;font-size:13px;font-weight:620;letter-spacing:.01em;color:var(--accent-2)}
.article-title{font-size:clamp(30px,4.1vw,45px);line-height:1.08;letter-spacing:-.032em;font-weight:660;text-wrap:balance}
.article-standfirst{margin-top:16px;max-width:var(--measure);font-size:18.5px;line-height:1.6;color:var(--ink-2);text-wrap:pretty}
.article-meta{margin-top:20px;padding-bottom:22px;border-bottom:1px solid var(--hairline-soft);display:flex;flex-wrap:wrap;gap:6px 18px;font-size:12.5px;color:var(--ink-4)}
.article-meta > *{display:inline-flex;align-items:center;gap:6px}

.prose{max-width:var(--measure);font-size:16.5px;line-height:1.72;color:var(--ink-2);text-wrap:pretty}
.prose > * + *{margin-top:1.15em}
.prose h2{margin-top:2.2em;font-size:26px;line-height:1.22;letter-spacing:-.024em;color:var(--ink);scroll-margin-top:calc(var(--nav-h) + 40px)}
.prose h3{margin-top:1.8em;font-size:19.5px;line-height:1.32;letter-spacing:-.018em;color:var(--ink);scroll-margin-top:calc(var(--nav-h) + 40px)}
.prose h4{margin-top:1.5em;font-size:16.5px;color:var(--ink)}
.prose strong{color:var(--ink);font-weight:620}
.prose a{color:var(--accent-ink);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2.5px;transition:opacity .16s}
.prose a:hover{opacity:.72}
.prose ul,.prose ol{padding-left:1.35em}
.prose li + li{margin-top:.45em}
.prose li::marker{color:var(--ink-4)}
.prose hr{border:0;border-top:1px solid var(--hairline-soft);margin:2.4em 0}
.prose blockquote{border-left:2px solid var(--hairline);padding-left:18px;color:var(--ink-3)}
.prose figure{margin:1.9em 0}
.prose figcaption{margin-top:11px;font-size:13px;line-height:1.55;color:var(--ink-4)}
.prose code:not(pre code),.mono-inline{
  font-family:var(--font-mono);font-size:.9em;
  padding:1px 6px;border-radius:var(--r-6);
  background:var(--fill-2);border:1px solid var(--hairline-soft);
  white-space:nowrap;color:var(--ink)
}
.prose code.wrap,.mono-inline.wrap{white-space:normal;word-break:break-all}
.path{font-weight:600;color:var(--ink);white-space:nowrap}

kbd{
  display:inline-block;min-width:1.9em;padding:2px 7px 3px;
  font-family:var(--font-sans);font-size:.86em;font-weight:600;line-height:1.5;
  text-align:center;color:var(--ink);
  background:linear-gradient(180deg,var(--fill-2),var(--fill-1));
  border:1px solid var(--hairline);border-bottom-width:2px;border-radius:var(--r-6);
  box-shadow:inset 0 1px 0 var(--fill-hi);vertical-align:baseline;white-space:nowrap
}
.keys{display:inline-flex;align-items:center;gap:3px;white-space:nowrap}
.keys .plus{color:var(--ink-4);font-size:.78em;margin:0 1px}

/* screenshot figure */
.shot{margin:1.9em 0}
.shot img{
  /* 666px is exactly half the 1333px source, so a Retina screen draws these
     1:1 rather than enlarging them past their own resolution */
  width:100%;max-width:666px;display:block;margin-inline:auto;
  border-radius:var(--r-14);
  border:1px solid var(--hairline-soft);
  box-shadow:0 24px 60px -26px rgba(0,0,0,.9)
}

/* ------------------------------------------------------ callouts --- */
.callout{
  display:grid;grid-template-columns:auto 1fr;gap:13px;
  margin:1.9em 0;padding:15px 18px;border-radius:var(--r-10);
  border:1px solid var(--hairline-soft);border-left:3px solid var(--co);
  background:var(--co-bg);font-size:15.5px;line-height:1.62
}
.callout > svg{width:19px;height:19px;color:var(--co);margin-top:2px;flex:none}
.callout-body > * + *{margin-top:.7em}
.callout b{display:block;margin-bottom:3px;font-size:14.5px;font-weight:640;color:var(--ink)}
.callout.note{--co:var(--blue);--co-bg:var(--blue-soft)}
.callout.tip{--co:var(--green);--co-bg:var(--green-soft)}
.callout.important{--co:var(--accent);--co-bg:var(--accent-soft)}
.callout.warning{--co:var(--amber);--co-bg:var(--amber-soft)}
.callout.danger{--co:var(--red);--co-bg:var(--red-soft)}

/* --------------------------------------------------------- steps --- */
.steps{list-style:none;counter-reset:step;padding:0;margin:2em 0}
.steps > li{position:relative;counter-increment:step;padding:0 0 30px 46px}
.steps > li::before{
  content:counter(step);position:absolute;left:0;top:-1px;
  width:28px;height:28px;display:grid;place-items:center;border-radius:50%;
  background:var(--accent);color:var(--on-accent);
  font-size:14px;font-weight:640;font-variant-numeric:tabular-nums
}
.steps > li::after{content:"";position:absolute;left:13.5px;top:34px;bottom:8px;width:1px;background:var(--hairline)}
.steps > li:last-child{padding-bottom:0}
.steps > li:last-child::after{display:none}
.steps h3{margin:3px 0 0;font-size:17.5px;font-weight:640;letter-spacing:-.014em;color:var(--ink);scroll-margin-top:calc(var(--nav-h) + 40px)}
.steps p{margin-top:.6em}
.steps figure,.steps .callout,.steps .codeblock,.steps .spec-table{margin:1.1em 0 0}

/* --------------------------------------------------------- table --- */
.spec-table{width:100%;margin:1.9em 0;overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--r-10);border:1px solid var(--hairline-soft)}
.spec-table table{width:100%;border-collapse:collapse;font-size:14.5px;line-height:1.5;font-variant-numeric:tabular-nums}
.spec-table th,.spec-table td{padding:11px 14px;text-align:left;border-bottom:1px solid var(--hairline-soft)}
.spec-table thead th{font-size:13px;font-weight:640;letter-spacing:.005em;color:var(--ink-3);background:var(--fill-1)}
.spec-table tbody tr:last-child td{border-bottom:0}
.spec-table tbody tr:hover{background:var(--fill-1)}
.spec-table td:first-child{color:var(--ink)}
.spec-table td code,.spec-table th code{white-space:normal;word-break:break-all}

/* ----------------------------------------------------- codeblock --- */
.codeblock{position:relative;margin:1.8em 0;border-radius:var(--r-10);background:var(--c-bg);border:1px solid var(--hairline-soft);overflow:hidden}
.codeblock-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 8px 14px;border-bottom:1px solid var(--hairline-soft);font-size:12px;letter-spacing:.02em;color:var(--ink-4)}
.codeblock-name{font-family:var(--font-mono)}
.codeblock pre{overflow-x:auto;padding:15px 17px;font-family:var(--font-mono);font-size:13.5px;line-height:1.65;color:var(--c-ink);-webkit-overflow-scrolling:touch}
.codeblock code{font-family:inherit;white-space:pre}
.copy-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:var(--r-6);font-size:12px;font-weight:600;color:var(--ink-3);background:var(--fill-2);border:1px solid var(--hairline-soft);transition:color .16s,background .16s}
.copy-btn:hover{color:var(--ink);background:var(--fill-3)}
.copy-btn svg{width:13px;height:13px}
.copy-btn[data-copied]{color:var(--green)}
.tk-kw{color:var(--c-kw)}
.tk-ty{color:var(--c-type)}
.tk-str{color:var(--c-str)}
.tk-tag{color:var(--c-tag)}
.tk-num{color:var(--c-num)}
.tk-com{color:var(--c-com);font-style:normal}
.tk-fn{color:var(--c-fn)}
.tk-attr{color:var(--c-attr)}
.tk-pun{color:var(--c-punct)}

/* ----------------------------------------------- digest specimen --- */
/* a static illustration of one row as the app draws it */
.digest-demo{margin:1.8em 0;border-radius:var(--r-10);border:1px solid var(--hairline-soft);background:var(--fill-1);padding:8px 14px}
.digest-demo .row{display:flex;align-items:center;gap:14px;padding:7px 0;min-width:0}
.digest-demo .row + .row{border-top:1px solid var(--hairline-soft)}
.digest-demo .hex{font-family:var(--font-mono);font-size:12.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}
.algo-chip{
  flex:none;display:inline-block;font-family:var(--font-mono);
  font-size:10.5px;font-weight:600;letter-spacing:.02em;
  padding:3px 10px;border-radius:980px;min-width:72px;text-align:center;
  border:1px solid transparent
}
.algo-chip.c-blue{background:rgba(58,130,255,.15);color:#8fb7ff;border-color:rgba(58,130,255,.32)}
.algo-chip.c-cyan{background:rgba(89,214,238,.15);color:#86e1f3;border-color:rgba(89,214,238,.32)}
.algo-chip.c-amber{background:rgba(255,159,46,.16);color:#ffb259;border-color:rgba(255,159,46,.35)}
.algo-chip.c-gray{background:var(--fill-2);color:var(--ink-3);border-color:var(--hairline)}
:root[data-theme="light"] .algo-chip.c-blue{background:rgba(18,99,224,.1);color:#0d52c2;border-color:rgba(18,99,224,.3)}
:root[data-theme="light"] .algo-chip.c-cyan{background:rgba(15,146,184,.12);color:#0a6f8c;border-color:rgba(15,146,184,.3)}
:root[data-theme="light"] .algo-chip.c-amber{background:rgba(154,88,0,.1);color:#8a4f00;border-color:rgba(154,88,0,.28)}

/* ----------------------------------------------------------- faq --- */
.faq{margin:2.6em 0 0}
.faq h2{margin-bottom:6px}
.faq details{border-bottom:1px solid var(--hairline-soft)}
.faq summary{display:block;position:relative;padding:17px 34px 17px 0;cursor:pointer;list-style:none;font-size:16.5px;font-weight:600;color:var(--ink);line-height:1.45}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";position:absolute;right:5px;top:24px;width:8px;height:8px;border-right:1.8px solid var(--ink-4);border-bottom:1.8px solid var(--ink-4);transform:rotate(45deg);transition:transform .22s var(--smooth)}
.faq details[open] summary::after{transform:rotate(-135deg)}
.faq .faq-a{padding:0 0 18px;font-size:15.5px;line-height:1.68;color:var(--ink-2)}
.faq .faq-a > * + *{margin-top:.8em}

/* ------------------------------------------------------- related --- */
.related{margin:54px 0 0;padding-top:34px;border-top:1px solid var(--hairline-soft)}
.related h2{font-size:19px;font-weight:640;letter-spacing:-.018em;margin-bottom:18px}
.related-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(228px,1fr));gap:14px}
.related-card{display:block;padding:18px 20px;border-radius:var(--r-14);background:var(--fill-1);border:1px solid var(--hairline-soft);transition:transform .24s var(--snappy),background .18s}
.related-card:hover{transform:translateY(-3px);background:var(--fill-2);text-decoration:none}
.related-card .rc-eyebrow{font-size:12px;font-weight:600;color:var(--ink-4)}
.related-card h3{margin-top:8px;font-size:17px;font-weight:620;letter-spacing:-.015em;line-height:1.32;color:var(--ink)}
.related-card p{margin-top:7px;font-size:14.5px;line-height:1.55;color:var(--ink-3)}

/* --------------------------------------------------- index pages --- */
.guides-hero{padding:30px 0 8px}
.guides-hero h1{font-size:clamp(34px,5vw,55px);letter-spacing:-.034em;line-height:1.05;font-weight:660;text-wrap:balance}
.guides-hero .lede{margin-top:18px;max-width:40rem}
.guides-section{margin-top:46px}
.guides-section > h2{font-size:13.5px;font-weight:640;letter-spacing:.005em;color:var(--ink-3);padding-bottom:12px;border-bottom:1px solid var(--hairline-soft)}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:16px;margin-top:20px}
.doc-card{display:flex;flex-direction:column;padding:24px 26px;border-radius:var(--r-18);background:var(--fill-1);border:1px solid var(--hairline-soft);transition:transform .26s var(--snappy),background .18s,border-color .18s}
.doc-card:hover{transform:translateY(-4px);background:var(--fill-2);border-color:var(--hairline);text-decoration:none}
.doc-card .dc-eyebrow{font-size:12.5px;font-weight:620;color:var(--accent-2)}
.doc-card h3{margin-top:0;font-size:19px;font-weight:620;letter-spacing:-.018em;line-height:1.3;color:var(--ink)}
.doc-card p{margin-top:9px;font-size:15px;line-height:1.58;color:var(--ink-3);flex:1}
.doc-card .dc-meta{margin-top:16px;font-size:12.5px;color:var(--ink-4)}

.utility-page{padding:44px 0 100px;text-align:center}
.utility-page.no-crumbs{padding-top:calc(var(--nav-h) + 60px)}
.utility-title{font-size:clamp(30px,4.6vw,48px);letter-spacing:-.032em;line-height:1.08;font-weight:660;margin-top:8px}
.utility-page .lede{margin:18px auto 0;max-width:36rem}
.utility-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(248px,1fr));gap:14px;margin-top:44px;text-align:left}
.utility-card{display:block;padding:22px 24px;border-radius:var(--r-14);background:var(--fill-1);border:1px solid var(--hairline-soft);transition:transform .24s var(--snappy),background .18s}
.utility-card:hover{transform:translateY(-3px);background:var(--fill-2);text-decoration:none}
.utility-card h2{font-size:16.5px;font-weight:620;letter-spacing:-.014em;color:var(--ink)}
.utility-card p{margin-top:7px;font-size:13.5px;line-height:1.55;color:var(--ink-3)}

/* ---------------------------------------------------- brand link --- */
.prose .brand-link,.article-standfirst .brand-link,.lede .brand-link{
  color:inherit;font-weight:650;
  text-decoration:underline;text-decoration-thickness:from-font;
  text-decoration-color:color-mix(in srgb,var(--accent-2) 55%,transparent);
  text-underline-offset:2px;
  transition:color .15s,text-decoration-color .15s
}
.prose .brand-link:hover,.article-standfirst .brand-link:hover,.lede .brand-link:hover{color:var(--accent-2);text-decoration-color:var(--accent-2)}
.prose .brand-link:focus-visible,.article-standfirst .brand-link:focus-visible{outline:2px solid var(--accent-2);outline-offset:2px;border-radius:3px}
.prose h2 .brand-link,.prose h3 .brand-link{text-decoration-color:transparent}
.prose h2 .brand-link:hover,.prose h3 .brand-link:hover{text-decoration-color:var(--accent-2)}

@keyframes settle{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
.rv.in{animation:settle .7s var(--ease-reveal) both}
@media (prefers-reduced-motion:reduce){
  .rv.in{animation:none}
  .doc-card:hover,.related-card:hover,.utility-card:hover{transform:none}
  .docs-side{transition:none}
}
