/* PaperSprocket — PaperSprocket.com static site.
   Visual direction: developer-infrastructure product.
   Off-white paper, perforated sprocket edges, graphite/ink technical elements,
   restrained green accent, IBM Plex self-hosted type. */

/* ============ Fonts (self-hosted, OFL, no third-party requests) ============ */
@font-face{font-family:"IBM Plex Sans";src:url(/assets/fonts/IBMPlexSans-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Sans";src:url(/assets/fonts/IBMPlexSans-SemiBold.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Sans Condensed";src:url(/assets/fonts/IBMPlexSansCondensed-SemiBold.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url(/assets/fonts/IBMPlexMono-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}

/* ============ Tokens ============ */
:root{
  --ink:#1C2230;
  --paper:#FBFAF6;
  --white:#FFFFFF;
  --accent:#1E6B4A;
  --accent-hover:#14503A;
  --bars:#E8F1EA;
  --graphite:#4A5163;
  --graphite-strong:#3F4656;
  --rule:#E2E5DE;
  --perf:#C9CFC5;
  --strip:#F3F4EF;
  --hole:#D6DBD2;
  --code-bg:#1C2230;
  --code-rule:#2E3547;
  --code-text:#D4D9E3;
  --code-muted:#9BA3B4;
  --code-green:#7FD1A6;
  --code-blue:#9CB8F0;
  --code-string:#E8C98F;

  --font:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --display:"IBM Plex Sans Condensed","Arial Narrow",var(--font);
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;

  --strip-w:40px;
  --gutter:clamp(20px,5.5vw,80px);
  --band:clamp(56px,8vw,96px);
  --radius:10px;
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.6;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
img,svg{display:block;max-width:100%}
a{color:var(--accent);text-underline-offset:3px}
a:hover{color:var(--accent-hover)}
h1,h2,h3,p{margin:0}
h1,h2{font-family:var(--display);font-weight:600;letter-spacing:-0.015em;line-height:1.05;text-wrap:balance}
h3{font-size:1.3rem;font-weight:600;line-height:1.3}
code,pre{font-family:var(--mono)}
:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:4px}
[id]{scroll-margin-top:88px}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *{transition:none!important}
}

.skip{position:absolute;left:-9999px;top:8px;z-index:100;background:var(--ink);color:var(--paper);padding:10px 16px;border-radius:8px}
.skip:focus{left:56px;color:var(--paper)}

/* ---------- The sheet: perforated sprocket margins down both edges ---------- */
.sheet{position:relative;padding-inline:var(--strip-w);min-height:100vh}
.sheet::before,.sheet::after{
  content:"";position:absolute;top:0;bottom:0;width:var(--strip-w);z-index:1;pointer-events:none;
  background-color:var(--strip);
  background-image:radial-gradient(circle at 50% 18px,var(--hole) 5px,transparent 5.5px);
  background-size:var(--strip-w) 36px;
}
.sheet::before{left:0;border-right:1.5px dashed var(--perf)}
.sheet::after{right:0;border-left:1.5px dashed var(--perf)}

/* ---------- Layout primitives ---------- */
.container{width:100%;max-width:calc(1200px + 2 * var(--gutter));margin-inline:auto;padding-inline:var(--gutter)}
.band{padding-block:var(--band)}
.band--white{background:var(--white);border-block:1px solid var(--rule)}
.band--bars{background:var(--bars)}
.band--ink{background:var(--ink);color:var(--paper)}
.perforation{border:0;border-top:1.5px dashed var(--perf);margin:0}
.lede{font-size:1.125rem;color:var(--graphite);max-width:34rem}
.section-head{display:flex;justify-content:space-between;align-items:flex-end;gap:32px 64px;flex-wrap:wrap;margin-bottom:56px}
.section-head h2{max-width:38rem}
.section-head .lede{max-width:28rem}
.h2{font-size:clamp(2.1rem,3.6vw,3rem)}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:0 26px;border-radius:var(--radius);font-size:1.0625rem;font-weight:600;text-decoration:none;border:1px solid transparent;transition:background-color .15s,border-color .15s,color .15s}
.btn--primary{background:var(--accent);color:var(--white)}
.btn--primary:hover{background:var(--accent-hover);color:var(--white)}
.btn--secondary{background:var(--white);color:var(--ink);border-color:var(--perf)}
.btn--secondary:hover{border-color:var(--ink);color:var(--ink)}
.btn--light{background:var(--paper);color:var(--ink)}
.btn--light:hover{background:var(--white);color:var(--ink)}
.btn--ghost-dark{color:var(--paper);border-color:#4A5366}
.btn--ghost-dark:hover{border-color:var(--paper);color:var(--paper)}
.btn--sm{min-height:44px;padding:0 18px;font-size:.9375rem}

/* ---------- Announcement strip ---------- */
.announce{background:var(--bars);font-size:.875rem;color:var(--graphite-strong);padding:11px 0;text-align:center}
.announce strong{color:var(--ink);font-weight:600;margin-right:6px}
.announce a{font-weight:600;margin-left:6px}

/* ---------- Header ---------- */
.site-header{position:sticky;top:0;z-index:50;background:rgba(251,250,246,.92);-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--rule)}
.site-header .container{display:flex;align-items:center;justify-content:space-between;height:76px}
.brand{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none}
.brand:hover{color:var(--ink)}
.brand span{font-family:var(--display);font-size:1.375rem;font-weight:600;letter-spacing:-0.01em}
/* Brand mark: explicit concrete dimensions (height + width, aspect 48/46) so
   it can never collapse to 0 width or distort regardless of cache/engine. */
.site-header .brand-mark{display:block;height:30px;width:auto;flex:none}
.site-footer .brand-mark{display:block;height:26px;width:auto;flex:none}
.nav{display:flex;align-items:center;gap:36px}
.nav a:not(.btn){color:var(--graphite-strong);text-decoration:none;font-size:.9375rem}
.nav a:not(.btn):hover{color:var(--ink)}
.menu{display:none;position:relative}
.menu summary{list-style:none;width:44px;height:44px;display:flex;align-items:center;justify-content:center;border:1px solid var(--perf);border-radius:8px;background:var(--white);cursor:pointer}
.menu summary::-webkit-details-marker{display:none}
.menu-panel{position:absolute;right:0;top:52px;width:240px;background:var(--white);border:1px solid var(--rule);border-radius:12px;box-shadow:0 16px 40px rgba(28,34,48,.14);padding:8px;display:flex;flex-direction:column}
.menu-panel a:not(.btn){padding:12px 14px;border-radius:8px;color:var(--ink);text-decoration:none}
.menu-panel a:not(.btn):hover{background:var(--paper)}
.menu-panel .btn{margin-top:8px}

/* ---------- Hero ---------- */
.hero{padding-block:clamp(48px,7vw,88px) clamp(56px,8vw,96px)}
.hero .container{display:grid;grid-template-columns:minmax(0,560px) minmax(0,1fr);gap:64px;align-items:center}
.hero h1{font-size:clamp(2.9rem,6vw,4.75rem);line-height:1;letter-spacing:-0.02em}
.hero .lede{font-size:clamp(1.0625rem,1.6vw,1.25rem);margin-top:28px;max-width:31rem}
.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:36px}
.hero-note{margin-top:22px;font-size:.9375rem;color:var(--graphite)}

.composition{position:relative;min-height:650px}
.pdf-sheet{position:absolute;right:8px;top:215px;width:290px;height:380px;background:var(--white);border-radius:4px;box-shadow:0 2px 4px rgba(28,34,48,.08),0 28px 56px rgba(28,34,48,.2);transform:rotate(2deg);padding:30px 28px;display:flex;flex-direction:column;gap:14px;font-size:10px;line-height:1.4;color:var(--ink);z-index:2}
.pdf-sheet .row{display:flex;justify-content:space-between;gap:8px}
.pdf-sheet .row-strong{font-weight:600;font-size:12px}
.pdf-sheet .row-right{text-align:right}
.pdf-sheet .muted{color:#6B7182}
.pdf-sheet .title{font-family:var(--display);font-size:18px;font-weight:600}
.pdf-sheet .rule{border-top:1px solid var(--ink)}
.pdf-sheet .rule--light{border-top-color:#D5D9DF}
.pdf-sheet .total{font-weight:600;font-size:13px}
.pdf-sheet .foot{margin-top:auto;color:#8A90A0}
.result-chip{position:absolute;left:24px;bottom:0;z-index:3;display:inline-flex;align-items:center;gap:10px;background:var(--white);border:1px solid #D5DAD1;border-radius:8px;padding:10px 16px;font-size:.875rem;box-shadow:0 8px 20px rgba(28,34,48,.08)}
.result-chip strong{font-weight:600}
.illustrative-tag{position:absolute;top:0;left:24px;z-index:4;display:inline-flex;align-items:center;gap:6px;background:var(--ink);color:var(--paper);font-family:var(--mono);font-size:.6875rem;letter-spacing:.04em;text-transform:uppercase;padding:6px 10px;border-radius:6px}

/* ---------- Code window ---------- */
.code{position:relative;z-index:1;width:100%;max-width:500px;margin-top:24px;background:var(--code-bg);border-radius:12px;box-shadow:0 24px 48px rgba(28,34,48,.22);overflow:hidden}
.code-bar{display:flex;align-items:center;justify-content:space-between;padding:0 12px 0 16px;border-bottom:1px solid var(--code-rule)}
.code-file{color:var(--code-muted);font-family:var(--mono);font-size:.75rem}
.tabs{display:flex}
.tab{background:none;border:0;border-bottom:2px solid transparent;color:var(--code-muted);font-family:var(--font);font-size:.8125rem;padding:14px 12px 12px;cursor:pointer}
.tab[aria-selected="true"]{color:var(--paper);font-weight:600;border-bottom-color:var(--code-green)}
.tab:hover{color:var(--paper)}
.copy{display:flex;align-items:center;gap:6px;background:none;border:1px solid #3A4257;border-radius:6px;height:32px;padding:0 10px;color:var(--code-muted);font-family:var(--font);font-size:.75rem;cursor:pointer}
.copy:hover{color:var(--paper);border-color:var(--code-muted)}
.code pre{margin:0;padding:22px 24px 26px;font-size:13px;line-height:1.75;color:var(--code-text);overflow-x:auto;tab-size:2}
.code pre[hidden]{display:none}
.t-cmd{color:var(--code-green)}
.t-flag{color:var(--code-blue)}
.t-str{color:var(--code-string)}
.t-kw{color:var(--code-blue)}
.t-com{color:var(--code-muted)}

/* ---------- Facts ---------- */
.facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:2px solid var(--ink)}
.fact{padding:32px 40px 8px}
.fact:first-child{padding-left:0}
.fact:last-child{padding-right:0}
.fact + .fact{border-left:1px solid var(--rule)}
.fact p{margin-top:12px;color:var(--graphite)}
.fact .detail{margin-top:20px;color:var(--ink);font-size:.875rem;font-family:var(--mono)}
.fact .detail--accent{font-family:var(--font);font-weight:600;font-size:.9375rem;color:var(--accent)}

/* ---------- Steps ---------- */
.steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:48px;list-style:none;margin:0;padding:0;counter-reset:step}
.step{display:flex;flex-direction:column;gap:14px;counter-increment:step}
.step-num{display:flex;align-items:center;gap:16px}
.step-num::before{content:counter(step);font-family:var(--display);font-size:4rem;line-height:1;font-weight:600;color:var(--accent)}
.step-num::after{content:"";flex-grow:1;border-top:1.5px dashed var(--perf)}
.step:last-child .step-num::after{display:none}
.step h3{margin-top:8px}
.step p{color:var(--graphite)}

/* ---------- Split + ledger (API section) ---------- */
.split{display:grid;grid-template-columns:minmax(0,360px) minmax(0,1fr);gap:80px}
.split .lede{margin-top:20px}
.split .split-note{margin-top:20px;font-size:.9375rem;color:var(--graphite)}
.ledger{margin:0;border-top:2px solid var(--ink);border-bottom:1px solid var(--rule)}
.ledger-row{display:grid;grid-template-columns:200px minmax(0,1fr);gap:32px;padding:22px 24px}
.ledger-row:nth-child(odd){background:var(--bars)}
.ledger dt{font-weight:600;font-size:1.0625rem}
.ledger dd{margin:0;color:var(--graphite-strong)}

/* ---------- Pricing ticket ---------- */
.center-head{text-align:center;max-width:46rem;margin:0 auto 64px}
.center-head .lede{margin:20px auto 0}
.center-head h2{font-size:clamp(2.3rem,4.2vw,3.5rem)}
.pricing{display:flex;justify-content:center;align-items:flex-start;gap:48px 72px;flex-wrap:wrap}
.ticket{display:flex;width:100%;max-width:500px;background:var(--white);border:1px solid #D5DAD1;border-radius:6px;box-shadow:0 20px 44px rgba(28,34,48,.1);overflow:hidden}
.ticket-strip{width:28px;flex-shrink:0;background-color:var(--bars);background-image:radial-gradient(circle at 50% 16px,var(--white) 4.5px,transparent 5px);background-size:28px 32px;border-right:1.5px dashed var(--perf)}
.ticket-body{flex:1;padding:40px 40px 36px}
.ticket-kicker{font-weight:600;color:var(--graphite-strong)}
.ticket-amount{display:flex;align-items:baseline;gap:12px;margin-top:14px}
.ticket-amount strong{font-family:var(--display);font-size:5.5rem;line-height:.95;font-weight:600;letter-spacing:-0.02em}
.ticket-amount span{font-size:1.375rem;color:var(--graphite)}
.ticket-price{font-size:1.125rem;margin-top:12px}
.ticket-price strong{font-weight:600}
.ticket hr{border:0;border-top:1.5px dashed var(--perf);margin:28px 0 24px}
.checks{list-style:none;margin:0 0 32px;padding:0;display:flex;flex-direction:column;gap:14px}
.checks li{display:flex;gap:12px;align-items:center}
.checks svg{flex-shrink:0}
.ticket-note{margin-top:16px;font-size:.875rem;color:var(--graphite);text-align:center}
.faq{width:100%;max-width:460px}
.faq h3{font-size:1.375rem;margin-bottom:8px}
.faq details{border-bottom:1px solid var(--rule)}
.faq details:last-child{border-bottom:0}
.faq summary{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:20px 0;font-weight:600;font-size:1.0625rem;cursor:pointer;list-style:none}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";width:10px;height:10px;flex-shrink:0;border-right:2px solid var(--graphite);border-bottom:2px solid var(--graphite);transform:rotate(45deg) translateY(-3px);transition:transform .15s}
.faq details[open] summary::after{transform:rotate(-135deg) translateY(-3px)}
.faq details p{padding:0 0 20px;color:var(--graphite)}

/* ---------- Closing dark CTA ---------- */
.cta{text-align:center;padding-block:clamp(64px,9vw,104px)}
.cta h2{font-size:clamp(2.3rem,4.6vw,3.75rem)}
.cta p{margin:20px auto 0;max-width:36rem;font-size:1.1875rem;color:#C3C9D5}
.cta-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:40px}
.support-contact{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center}
.support-email{display:inline-flex;align-items:center;min-height:52px;padding:0 26px;border-radius:var(--radius);background:var(--paper);color:var(--ink);font-size:1.0625rem;font-weight:600}
.support-copy{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border-radius:var(--radius);background:none;border:1px solid #4A5366;color:var(--paper);font-family:var(--font);font-size:.875rem;font-weight:600;cursor:pointer;transition:border-color .15s,color .15s,background-color .15s}
.support-copy:hover{border-color:var(--paper);color:var(--paper);background:rgba(255,255,255,.06)}
.support-copy-label{min-width:2.5em;text-align:left}

/* ---------- Footer ---------- */
.site-footer{padding-block:64px 40px}
.footer-top{display:flex;justify-content:space-between;gap:48px 64px;flex-wrap:wrap}
.footer-about{max-width:320px}
.footer-about p{margin-top:16px;font-size:.9375rem;color:var(--graphite)}
.footer-cols{display:flex;gap:96px}
.footer-cols h2{font-family:var(--font);font-size:.9375rem;letter-spacing:0;line-height:1.6;margin-bottom:12px}
.footer-cols ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.footer-cols a{color:var(--graphite-strong);text-decoration:none;font-size:.9375rem}
.footer-cols a:hover{color:var(--ink);text-decoration:underline}
.footer-legal{margin-top:56px;padding-top:24px;border-top:1px solid var(--rule);font-size:.875rem;color:var(--graphite)}

/* ============ Legal / policy pages ============ */
.legal-hero{padding-block:clamp(48px,7vw,88px) clamp(32px,4vw,48px)}
.legal-hero h1{font-size:clamp(2.5rem,5vw,3.75rem);line-height:1}
.page-sub{margin-top:14px;font-size:.9375rem;color:var(--graphite);font-family:var(--mono)}
.legal-body{max-width:760px;padding-bottom:64px;margin-inline:auto}
.legal-note{border:1px solid var(--perf);border-left:3px solid var(--accent);background:var(--bars);border-radius:8px;padding:16px 20px;margin:28px 0 48px;font-size:.9375rem;color:var(--graphite-strong)}
.legal-note strong{color:var(--ink)}
.legal-body h2{font-family:var(--font);font-size:1.5rem;font-weight:600;margin:40px 0 12px;letter-spacing:0;line-height:1.3}
.legal-body p{color:var(--graphite-strong);margin-bottom:16px}
.legal-body a{font-weight:600}
.legal-placeholder{color:var(--graphite)}

/* ============ 404 ============ */
.error-wrap{max-width:760px;margin-inline:auto;padding-inline:var(--gutter);min-height:52vh;display:flex;align-items:center}
.error-code{font-family:var(--display);font-size:clamp(4rem,10vw,7rem);line-height:1;font-weight:600;color:var(--accent)}
.error-body{margin-top:16px;font-size:1.125rem;color:var(--graphite);max-width:34rem}
.error-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}

/* ---------- Responsive ---------- */
@media (max-width:1080px){
  .hero .container{grid-template-columns:minmax(0,1fr);gap:48px}
  .hero .lede{max-width:36rem}
  .composition{max-width:640px}
}
@media (max-width:900px){
  :root{--strip-w:22px}
  .sheet::before,.sheet::after{background-image:radial-gradient(circle at 50% 14px,var(--hole) 3.5px,transparent 4px);background-size:var(--strip-w) 28px}
  .nav{display:none}
  .menu{display:block}
  .facts{grid-template-columns:minmax(0,1fr)}
  .fact,.fact:first-child,.fact:last-child{padding:24px 0}
  .fact + .fact{border-left:0;border-top:1px solid var(--rule)}
  .steps{grid-template-columns:1fr;gap:40px}
  .step .step-num::after{display:none}
  .split{grid-template-columns:minmax(0,1fr);gap:36px}
  .footer-cols{gap:56px}
  .legal-hero .container{max-width:760px;margin-inline:auto}
}
@media (max-width:600px){
  :root{--strip-w:14px}
  .sheet::before,.sheet::after{background-image:radial-gradient(circle at 50% 12px,var(--hole) 3px,transparent 3.5px);background-size:var(--strip-w) 24px}
  .site-header .container{height:64px}
  .brand span{font-size:1.1875rem}
  .announce .announce-long{display:none}
  .hero-actions .btn{flex:1 1 100%}
  .hero-note{text-align:center}
  .composition{min-height:0}
  .pdf-sheet{display:none}
  .result-chip{position:static;margin:12px 0 0}
  .illustrative-tag{position:static;width:max-content;margin-bottom:10px}
  .code{margin-top:0}
  .code pre{font-size:12px;padding:18px}
  .ledger-row{grid-template-columns:1fr;gap:4px;padding:18px 16px}
  .ticket-body{padding:28px 22px}
  .ticket-strip{width:20px;background-size:20px 28px;background-image:radial-gradient(circle at 50% 14px,var(--white) 3.5px,transparent 4px)}
  .ticket-amount strong{font-size:4rem}
  .cta-actions .btn{flex:1 1 100%}
  .pricing{gap:48px 0}
}