/* v: 12 */
/* ============ Notelix — "Ink Editorial" shared system ============ */
@font-face{font-family:"Caveat";src:url("/assets/fonts/Caveat[wght].ttf") format("truetype");font-weight:400 700;font-display:swap;}
@font-face{font-family:"Patrick Hand";src:url("/assets/fonts/PatrickHand-Regular.ttf") format("truetype");font-weight:400;font-display:swap;}
@font-face{font-family:"Kalam";src:url("/assets/fonts/Kalam-Regular.ttf") format("truetype");font-weight:400;font-display:swap;}

:root{
  --paper:#F6EFE0; --paper-2:#EDE3CF; --card:#FBF7EE; --ink:#1C1813; --ink-soft:#5C5446; --ink-faint:#8A8270;
  --line:#DCD2BC; --line-strong:#C9BC9E; --accent:#2C40D4; --accent-2:#4D5FEA; --marigold:#E8A33D;
  --night:#14110B; --night-2:#1F1A11; --night-line:#3A3122; --night-ink:#F3EAD6; --night-soft:#A99E84;
  --maxw:1240px;
  --serif:"Fraunces",Georgia,"Times New Roman",serif;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,system-ui,sans-serif;
  --hand:"Caveat",cursive;
}
*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;scroll-behavior:auto;}
body{margin:0;font-family:var(--sans);color:var(--ink);background:var(--paper);font-size:18px;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden;}
a{color:inherit;text-decoration:none;}
img{display:block;max-width:100%;}
.serif{font-family:var(--serif);font-weight:500;letter-spacing:-.02em;line-height:1.0;}
.hand{font-family:var(--hand);font-weight:700;letter-spacing:0;}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px;}
.muted{color:var(--ink-soft);}
.ruled{background-image:repeating-linear-gradient(to bottom,transparent 0 33px,rgba(44,64,212,.05) 33px 34px);}
.dotted{background-image:radial-gradient(rgba(28,24,19,.08) 1.1px,transparent 1.3px);background-size:24px 24px;}
section{position:relative;}
.band{padding:128px 0;} .band.tight{padding:100px 0;}
.hairline-top{border-top:1px solid var(--line);}

/* ---------- accessibility: skip link + focus rings ---------- */
/* "Skip to content" — injected by site.js as the first focusable element.
   Visually hidden (clipped off-screen) until focused, then a clear on-brand pill
   at the top-left above all chrome (nav z-index is 60, mobile menu 80). */
.skip-link{
  position:fixed;top:12px;left:12px;z-index:1000;
  transform:translateY(-150%);
  background:var(--accent);color:#fff;
  font-family:var(--sans);font-weight:650;font-size:.95rem;
  padding:12px 18px;border-radius:8px;
  box-shadow:0 8px 24px -8px rgba(28,24,19,.5);
  text-decoration:none;
  transition:transform .18s ease;
  /* clip while off-screen so it never affects layout or AT order beyond first-focus */
  clip-path:inset(50%);
}
.skip-link:focus,.skip-link:focus-visible{
  transform:translateY(0);
  clip-path:none;
  outline:2px solid #fff;outline-offset:2px;
}
/* Consistent visible focus ring for keyboard users across interactive elements.
   On-brand accent, works in both light & dark (accent flips per theme). */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible,
[role="tab"]:focus-visible,
summary:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:2px;
  border-radius:4px;
}
/* round-element rings hug their shape */
.theme-toggle:focus-visible,
.play-swatches button:focus-visible,
.wb-bar .sw:focus-visible,
.ask-bar .send:focus-visible{ border-radius:50%; }
.btn:focus-visible{ border-radius:4px; }
/* range inputs: keep the offset ring clear of the track */
input[type=range]:focus-visible{ outline-offset:4px; border-radius:8px; }
/* the text input already has a bespoke focus glow — add the accent ring too for parity */
.play-controls input[data-play-text]:focus-visible{ outline:2px solid var(--accent);outline-offset:2px; }

/* ---------- paper grain (subtle, site-wide) ---------- */
/* Procedural feTurbulence noise as a single data-URI so no per-page SVG markup is needed.
   Faint multiply over the warm paper; never muddies the sheet, never blocks clicks. */
.grain{
  position:fixed;inset:0;z-index:1;pointer-events:none;
  opacity:.05;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size:160px 160px;
}
@media (pointer:coarse){ .grain{display:none;} }

/* icons */
.fic,.mic{stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
.fic{width:23px;height:23px;display:block;} .mic{width:30px;height:30px;display:block;}

/* ---------- progress bar + cursor ---------- */
.progress{position:fixed;top:0;left:0;height:3px;width:0;background:var(--accent);z-index:90;transition:width .1s linear;}
.cursor,.cursor-ring{position:fixed;top:0;left:0;border-radius:50%;pointer-events:none;z-index:95;mix-blend-mode:multiply;will-change:transform;}
.cursor{width:8px;height:8px;background:var(--accent);margin:-4px 0 0 -4px;}
.cursor-ring{width:34px;height:34px;border:1.5px solid var(--accent);margin:-17px 0 0 -17px;opacity:.5;transition:width .2s,height .2s,opacity .2s,margin .2s;}
.cursor-ring.grow{width:58px;height:58px;margin:-29px 0 0 -29px;opacity:.9;}
@media (hover:none),(pointer:coarse){.cursor,.cursor-ring{display:none!important;}}
body.has-cursor{cursor:none;} body.has-cursor a,body.has-cursor button{cursor:none;}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;gap:9px;font-family:var(--sans);font-weight:650;font-size:.95rem;padding:13px 20px;border-radius:4px;background:var(--ink);color:var(--paper);cursor:pointer;border:1.5px solid var(--ink);transition:transform .15s,background .2s,color .2s;}
.btn:hover{transform:translateY(-2px);}
.btn .apple,.btn .fic{width:15px;height:15px;margin-top:-1px;}
.btn .fic{stroke:currentColor;}
.btn-ghost{background:transparent;color:var(--ink);} .btn-ghost:hover{background:var(--ink);color:var(--paper);}
.btn-accent{background:var(--accent);border-color:var(--accent);color:#fff;}
.btn-lg{padding:16px 26px;font-size:1.02rem;}

/* ---------- nav ---------- */
.promo{background:var(--ink);color:var(--paper);text-align:center;font-size:.82rem;letter-spacing:.02em;padding:8px 16px;}
.promo b{color:var(--marigold);}
nav{position:sticky;top:0;z-index:60;transition:background .3s,box-shadow .3s,backdrop-filter .3s;border-bottom:1px solid transparent;}
nav .wrap{display:flex;align-items:center;gap:22px;height:70px;}
nav.scrolled{background:rgba(246,239,224,.86);backdrop-filter:saturate(1.3) blur(12px);border-bottom-color:var(--line);}
.brand{display:flex;align-items:center;gap:11px;}
.brand img{width:30px;height:30px;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.2);}
.brand b{font-family:var(--serif);font-weight:600;font-size:1.35rem;letter-spacing:-.01em;}
.nav-links{margin-left:auto;display:flex;gap:26px;align-items:center;}
.nav-links a{font-size:.92rem;font-weight:550;color:var(--ink-soft);position:relative;}
.nav-links a:hover{color:var(--ink);}
.nav-links a.active{color:var(--ink);}
.nav-links a.active::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:2px;background:var(--accent);}
.nav-toggle{display:none;margin-left:auto;background:none;border:none;color:var(--ink);cursor:pointer;padding:6px;}
.nav-toggle .fic{width:26px;height:26px;}
.mobile-menu{position:fixed;inset:0;z-index:80;background:var(--paper);transform:translateY(-100%);transition:transform .4s cubic-bezier(.7,0,.2,1);display:flex;flex-direction:column;padding:24px 28px;}
.mobile-menu.open{transform:translateY(0);}
.mobile-menu .mm-top{display:flex;align-items:center;height:46px;}
.mobile-menu .mm-top button{margin-left:auto;background:none;border:none;color:var(--ink);cursor:pointer;}
.mobile-menu a{font-family:var(--serif);font-weight:500;font-size:2rem;padding:14px 0;border-bottom:1px solid var(--line);}
.mobile-menu .btn{margin-top:24px;justify-content:center;}
@media(max-width:880px){ .nav-links{display:none;} .nav-toggle{display:inline-flex;} }

/* ---------- theme toggle (sun/moon, SF-symbol-style; never emoji) ---------- */
.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;flex:0 0 auto;border-radius:10px;background:none;border:1px solid transparent;color:var(--ink-soft);cursor:pointer;padding:0;transition:color .2s,background .2s,border-color .2s;}
.theme-toggle:hover{color:var(--ink);background:color-mix(in srgb,var(--ink) 7%,transparent);border-color:var(--line);}
.theme-toggle:focus-visible{outline:none;color:var(--ink);box-shadow:0 0 0 3px rgba(44,64,212,.28);border-color:var(--accent);}
.theme-toggle .fic{width:21px;height:21px;}
/* show exactly one glyph for the effective theme: moon while light (→ switch to dark), sun while dark (→ switch to light) */
.theme-toggle .ic-moon,.theme-toggle .ic-sun{display:none;}
.theme-toggle[data-effective="light"] .ic-moon{display:block;}
.theme-toggle[data-effective="dark"] .ic-sun{display:block;}
/* the desktop toggle lives at the end of .nav-links and hides with them on mobile; a mirror sits in the mobile menu top bar */
.mm-top .theme-toggle{margin-left:auto;margin-right:8px;color:var(--ink-soft);}

/* ---------- editorial section head ---------- */
.sec-head{display:flex;align-items:center;gap:16px;margin-bottom:30px;}
.idx{font-family:var(--serif);font-weight:500;font-size:1.05rem;color:var(--accent);font-feature-settings:"tnum";display:inline-flex;align-items:center;}
.sec-head .rule{height:1px;background:var(--line-strong);flex:0 0 56px;}
.eyebrow{font-size:.78rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft);}
.display{font-family:var(--serif);font-weight:500;letter-spacing:-.025em;line-height:1.02;font-size:clamp(2.3rem,5vw,4rem);}
.center .display,.center .sub{margin-left:auto;margin-right:auto;}
.lead{font-size:1.18rem;color:var(--ink-soft);line-height:1.55;}
.sub{font-size:1.12rem;color:var(--ink-soft);margin-top:18px;max-width:54ch;}

/* ---------- device plates (full, uncropped) ---------- */
.device{position:relative;border-radius:40px;background:#100f0c;padding:7px;box-shadow:0 50px 90px -34px rgba(28,24,19,.55),0 10px 26px rgba(28,24,19,.16);}
.device img{display:block;width:100%;height:auto;border-radius:33px;}
.plate{position:relative;border-radius:14px;background:#100f0c;padding:8px;box-shadow:0 50px 90px -38px rgba(28,24,19,.55);}
.plate img{display:block;width:100%;height:auto;border-radius:8px;}

/* ---------- hero ---------- */
.hero{position:relative;padding:64px 0 90px;overflow:visible;}
.hero-wash{position:absolute;inset:0;overflow:hidden;z-index:0;pointer-events:none;}
.hero-wash .b1{position:absolute;right:-8%;top:-12%;width:560px;height:560px;border-radius:50%;background:radial-gradient(circle,#cdd5ff 0%,transparent 70%);opacity:.55;filter:blur(20px);}
.hero-wash .b2{position:absolute;left:-12%;bottom:-18%;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,#ffe2b0 0%,transparent 70%);opacity:.5;filter:blur(20px);}
.hero .wrap{position:relative;z-index:1;display:grid;grid-template-columns:1.02fr .98fr;gap:48px;align-items:center;min-height:74vh;}
.hero h1{font-family:var(--serif);font-weight:500;letter-spacing:-.03em;line-height:.98;font-size:clamp(2.9rem,6.6vw,5.4rem);margin:18px 0 0;}
.hero h1 .ln{display:block;}
.em-wrap{position:relative;display:inline-block;}
.em-wrap .uline{position:absolute;left:-2%;bottom:-.16em;width:104%;height:.34em;overflow:visible;pointer-events:none;}
.em-wrap .uline path{fill:none;stroke:var(--accent);stroke-width:7;stroke-linecap:round;}
.hl{position:relative;white-space:nowrap;}
.hl .swipe{position:absolute;left:-.08em;right:-.08em;top:.12em;bottom:.06em;background:var(--marigold);opacity:.42;transform-origin:left center;transform:scaleX(0);z-index:-1;border-radius:2px;}
.hand-accent{font-family:var(--hand);color:var(--accent);font-weight:700;font-size:1.04em;}
.hero p.subt{font-size:1.22rem;color:var(--ink-soft);margin:28px 0 32px;max-width:34ch;line-height:1.5;}
.hero-cta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;}
.hero-note{margin-top:20px;font-size:.92rem;color:var(--ink-soft);} .hero-note b{color:var(--ink);}
.hero-stage{position:relative;display:flex;justify-content:center;align-items:center;}
.hero-stage .d-main{width:min(322px,76%);position:relative;z-index:2;transform:rotate(2.5deg);}
.hero-stage .d-side{position:absolute;left:-2%;bottom:-4%;width:min(210px,48%);z-index:1;transform:rotate(-9deg);}
.hero-stage .stamp{position:absolute;right:-2%;top:-4%;z-index:3;font-family:var(--hand);color:var(--accent);font-size:1.5rem;transform:rotate(-8deg);}
.hero-stage .stamp svg{width:84px;height:40px;display:block;margin-top:-6px;}
.hero-stage .stamp svg path{fill:none;stroke:var(--accent);stroke-width:3;stroke-linecap:round;}

/* sub-page hero */
.subhero{padding:96px 0 64px;position:relative;}
.subhero h1{font-family:var(--serif);font-weight:500;letter-spacing:-.03em;line-height:1;font-size:clamp(2.6rem,6vw,4.6rem);margin:14px 0 0;max-width:18ch;}
.subhero .sub{font-size:1.2rem;max-width:48ch;}

/* ---------- splits & feature lists ---------- */
.split{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center;}
.split.rev .col-media{order:-1;}
@media(max-width:880px){.hero .wrap,.split{grid-template-columns:1fr;gap:42px;} .split.rev .col-media{order:0;} }
.feat{list-style:none;padding:0;margin:30px 0 0;display:grid;gap:2px;}
.feat li{display:flex;gap:16px;align-items:flex-start;padding:16px 0;border-top:1px solid var(--line);}
.feat .n{flex:0 0 auto;width:24px;height:24px;color:var(--accent);margin-top:1px;}
.feat b{display:block;font-size:1.05rem;} .feat span{color:var(--ink-soft);font-size:.97rem;}
.media-cap{margin-top:16px;font-family:var(--hand);font-size:1.45rem;color:var(--accent);text-align:center;}
/* whiteboard */
.wb-wrap{margin-top:40px;border:1px solid var(--line-strong);border-radius:16px;overflow:hidden;background:var(--card);box-shadow:0 30px 70px -40px rgba(28,24,19,.45);}
.wb-bar{display:flex;gap:10px;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line);background:var(--paper-2);}
.wb-bar .sp{flex:1;}
.wb-bar button{font:inherit;font-weight:600;font-size:.86rem;padding:8px 14px;border-radius:8px;border:1px solid var(--line-strong);background:var(--card);color:var(--ink);cursor:pointer;}
.wb-bar button.accent{background:var(--accent);border-color:var(--accent);color:#fff;}
.wb-bar .sw{width:22px;height:22px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px var(--line-strong);cursor:pointer;padding:0;}
.wb-bar .sw.on{box-shadow:0 0 0 2px var(--accent);}
.wb-surface{position:relative;height:340px;}
.wb-canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:crosshair;background:var(--card);}
.wb-reply{position:absolute;left:22px;right:22px;bottom:12px;font-family:var(--hand);color:var(--accent);pointer-events:none;}
.tag{display:inline-block;font-size:.7rem;font-weight:700;letter-spacing:.05em;padding:3px 9px;border-radius:999px;background:#e7eaff;color:var(--accent);vertical-align:middle;margin-left:8px;text-transform:uppercase;}
.tag.free{background:#e7f1e7;color:#2f7d3f;} .tag.plus{background:#fbeed6;color:#9a6712;}

/* ---------- stats counters ---------- */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-top:1px solid var(--line-strong);border-bottom:1px solid var(--line-strong);}
@media(max-width:680px){.stats{grid-template-columns:1fr 1fr;}}
.stat{padding:34px 18px;text-align:center;border-right:1px solid var(--line);}
.stat:last-child{border-right:none;}
.stat .num{font-family:var(--serif);font-weight:500;font-size:clamp(2.4rem,5vw,3.4rem);letter-spacing:-.02em;line-height:1;font-variant-numeric:tabular-nums;}
/* keep counting digits from jittering while animating */
[data-count]{font-variant-numeric:tabular-nums;}
.stat .lbl{margin-top:8px;font-size:.9rem;color:var(--ink-soft);}

/* ---------- steps (how it works) ---------- */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;margin-top:50px;}
@media(max-width:780px){.steps{grid-template-columns:1fr;}}
.step{position:relative;padding-top:26px;border-top:2px solid var(--ink);}
.step .sn{font-family:var(--serif);font-weight:500;font-size:1rem;color:var(--accent);}
.step h3{font-family:var(--serif);font-weight:500;font-size:1.6rem;margin:8px 0 10px;}
.step p{margin:0;color:var(--ink-soft);font-size:1rem;}

/* ---------- marquee ---------- */
.marquee{overflow:hidden;white-space:nowrap;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:26px 0;-webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);}
.marquee .track{display:inline-flex;gap:48px;will-change:transform;}
.marquee .chip{font-family:var(--hand);font-size:2.3rem;color:var(--ink);font-weight:700;}
.marquee .chip.blue{color:var(--accent);} .marquee .chip.dot{color:var(--marigold);}

/* ---------- mini cards ---------- */
.mini{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-top:50px;}
@media(max-width:780px){.mini{grid-template-columns:1fr;}}
.mini .card{background:var(--card);padding:34px;transition:background .25s;}
.mini .card:hover{background:#fff;}
.mini .card .ic{margin-bottom:16px;color:var(--accent);display:block;}
.mini .card h3{font-family:var(--serif);font-weight:500;font-size:1.5rem;margin:0 0 8px;}
.mini .card p{margin:0;color:var(--ink-soft);font-size:.98rem;}

/* ---------- tilt cards ---------- */
[data-tilt]{transform-style:preserve-3d;transition:transform .2s ease-out;will-change:transform;}

/* ---------- AI ink-night ---------- */
.night{background:var(--night);color:var(--night-ink);}
/* Linear-style surface ladder: a 1px top light edge + hairline border so dark panels read as refined raised surfaces. */
.night,.ai-paper,footer{box-shadow:inset 0 1px 0 rgba(255,255,255,.06);border-top:1px solid rgba(255,255,255,.08);}
.night .idx{color:var(--marigold);} .night .eyebrow{color:var(--night-soft);} .night .lead,.night .sub{color:var(--night-soft);}
.night .sec-head .rule{background:var(--night-line);}
.night .display{color:var(--night-ink);}
.ai-stage{min-height:100svh;display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:center;padding:70px 0;}
@media(max-width:880px){.ai-stage{grid-template-columns:1fr;min-height:auto;}.ai-demo-grid{grid-template-columns:1fr!important;gap:34px!important;}}
.ai-points{list-style:none;padding:0;margin:34px 0 0;display:grid;gap:0;}
.ai-points li{padding:20px 0;border-top:1px solid var(--night-line);display:flex;gap:14px;align-items:flex-start;}
.ai-points .n{flex:0 0 auto;color:var(--marigold);margin-top:2px;}
.ai-points b{font-family:var(--serif);font-weight:500;font-size:1.4rem;}
.ai-points span{color:var(--night-soft);}
.ai-paper{position:relative;background:#fbf7ee;color:var(--ink);border-radius:16px;padding:34px;min-height:330px;overflow:hidden;box-shadow:0 40px 90px -30px rgba(0,0,0,.6);background-image:radial-gradient(rgba(28,24,19,.07) 1.1px,transparent 1.3px);background-size:22px 22px;}
.ai-paper::after{content:"";position:absolute;inset:0;border-radius:16px;box-shadow:0 0 60px 6px rgba(77,95,234,0);transition:box-shadow .4s;pointer-events:none;}
.ai-paper.lit::after{box-shadow:0 0 70px 8px rgba(77,95,234,.25);}
.ask-bar{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:999px;padding:10px 16px;color:var(--ink-soft);font-size:.95rem;background:#fff;}
.ask-bar input{border:none;background:none;outline:none;font:inherit;color:var(--ink);flex:1;min-width:0;}
.ask-bar .send{margin-left:auto;width:30px;height:30px;border-radius:50%;background:var(--accent);color:#fff;display:grid;place-items:center;border:none;cursor:pointer;flex:0 0 auto;}
.ask-bar .send .fic{width:16px;height:16px;stroke:#fff;}
.hw-answer{font-family:var(--hand);color:var(--accent);font-size:2.1rem;line-height:1.5;margin-top:26px;font-weight:700;min-height:1.5em;}
.hw-line{position:relative;display:block;width:max-content;max-width:100%;}
.hw-nib{position:absolute;top:.1em;width:13px;height:13px;pointer-events:none;}
.hw-nib svg{width:100%;height:100%;fill:var(--accent);filter:drop-shadow(0 1px 1px rgba(0,0,0,.25));}

/* ---------- handwritten math mini-demo ---------- */
.math-card{position:relative;background:#fbf7ee;border:1px solid var(--line);border-radius:16px;padding:30px 30px 22px;box-shadow:0 26px 60px -34px rgba(28,24,19,.45);background-image:radial-gradient(rgba(28,24,19,.06) 1.1px,transparent 1.3px);background-size:22px 22px;overflow:hidden;}
.math-card-tab{display:inline-flex;align-items:center;gap:7px;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);font-weight:700;margin-bottom:14px;}
.math-card-tab .fic{color:var(--marigold);}
.math-ink{min-height:96px;display:flex;align-items:center;color:var(--accent);font-size:34px;overflow-x:auto;}
.math-ink canvas{max-width:100%;}

/* ---------- privacy guarantee cards (icon grid) ---------- */
.priv-cards{grid-template-columns:repeat(4,1fr);}
@media(max-width:880px){.priv-cards{grid-template-columns:repeat(2,1fr);}}
@media(max-width:520px){.priv-cards{grid-template-columns:1fr;}}
.priv-cards .card .ic{margin-bottom:16px;color:var(--accent);display:block;}

/* ---------- tabs ---------- */
.tabs{margin-top:42px;}
.tablist{display:flex;gap:8px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:14px;}
.tablist button{font-family:var(--sans);font-weight:600;font-size:.95rem;color:var(--ink-soft);background:none;border:1px solid var(--line-strong);border-radius:999px;padding:9px 16px;cursor:pointer;transition:.2s;}
.tablist button[aria-selected="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.tabpanels{margin-top:34px;}
.tabpanel{display:none;}
.tabpanel.show{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;}
@media(max-width:880px){.tabpanel.show{grid-template-columns:1fr;gap:36px;}}

/* ---------- font picker (interactive) ---------- */
.fontpick{margin-top:40px;display:grid;grid-template-columns:.9fr 1.1fr;gap:48px;align-items:center;}
@media(max-width:820px){.fontpick{grid-template-columns:1fr;}}
.fontpick .chips{display:flex;flex-wrap:wrap;gap:10px;}
.fontpick .chips button{font-family:var(--hand);font-size:1.4rem;font-weight:700;padding:8px 16px;border:1px solid var(--line-strong);border-radius:10px;background:var(--card);cursor:pointer;color:var(--ink);transition:.2s;}
.fontpick .chips button.on{background:var(--accent);color:#fff;border-color:var(--accent);}
.fontpick .chips button[data-locked]::after{content:" ◍";color:var(--marigold);font-size:.8em;}
.fontpick .sample{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:38px;min-height:230px;box-shadow:0 30px 60px -38px rgba(28,24,19,.5);background-image:radial-gradient(rgba(28,24,19,.06) 1.1px,transparent 1.3px);background-size:22px 22px;}
.fontpick .sample .ink{font-family:var(--hand);color:var(--accent);font-size:2.6rem;line-height:1.5;transition:opacity .2s;}
.fontpick .sample .meta{margin-top:18px;font-size:.85rem;color:var(--ink-soft);}

/* ---------- interactive handwriting playground ---------- */
.play{margin-top:40px;background:var(--card);border:1px solid var(--line-strong);border-radius:18px;padding:28px;box-shadow:0 30px 70px -42px rgba(28,24,19,.5);}
.play-controls{display:flex;flex-wrap:wrap;align-items:center;gap:14px 18px;}
.play-controls input[data-play-text]{flex:1 1 240px;min-width:200px;font-family:var(--hand);font-size:1.5rem;color:var(--ink);background:var(--paper);border:1px solid var(--line-strong);border-radius:10px;padding:8px 14px;transition:border-color .2s,box-shadow .2s;}
.play-controls input[data-play-text]:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(44,64,212,.16);}
.play-controls label{display:inline-flex;align-items:center;gap:10px;font-family:var(--sans);font-weight:600;font-size:.82rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.04em;}
.play-controls input[type=range]{accent-color:var(--accent);width:104px;cursor:pointer;}

.play-fonts{display:flex;flex-wrap:wrap;gap:8px;}
.play-fonts button{font-family:var(--hand);font-size:1.25rem;line-height:1;min-height:46px;display:inline-flex;align-items:center;justify-content:center;padding:7px 16px;border:1px solid var(--line-strong);border-radius:10px;background:var(--paper);color:var(--ink);cursor:pointer;transition:background .2s,color .2s,border-color .2s,transform .15s;}
.play-fonts button:hover{transform:translateY(-1px);}
.play-fonts button.on{background:var(--accent);color:#fff;border-color:var(--accent);}
/* each font button is set in its own typeface so you can see the hand */
.play-fonts button[data-font="caveat"]{font-family:"Caveat",cursive;font-weight:700;}
.play-fonts button[data-font="italianno"]{font-family:"Italianno",cursive;font-weight:400;font-size:1.75rem;}
.play-fonts button[data-font="tangerine"]{font-family:"Tangerine",cursive;font-weight:700;font-size:1.95rem;}
.play-fonts button[data-font="parisienne"]{font-family:"Parisienne",cursive;font-weight:400;font-size:1.4rem;}
.play-fonts button[data-font="kleeone"]{font-family:"Klee One",serif;font-weight:600;font-size:1.2rem;}
/* tactile hover — refined, across every block type (incl. divided/gridded cells) */
section[id]{scroll-margin-top:84px;}
@media (hover:hover) and (pointer:fine){
  /* free-standing cards lift on a soft, expo-out ease */
  .card,.plan{transition:transform .42s cubic-bezier(.16,1,.3,1),box-shadow .42s cubic-bezier(.16,1,.3,1),border-color .3s ease;}
  .card:hover,.plan:hover{transform:translateY(-4px);box-shadow:0 18px 34px -24px rgba(28,24,19,.45),0 6px 14px -12px rgba(28,24,19,.30);border-color:color-mix(in srgb,var(--accent) 38%,var(--line-strong));}
  /* divided / gridded cells: never lift (would reveal the 1px grid gaps) — accent inset edge + raise instead */
  .mini .card{position:relative;transition:background .3s ease,box-shadow .3s ease;}
  .mini .card:hover{transform:none;z-index:2;box-shadow:inset 0 2px 0 var(--accent),inset 0 0 0 1px color-mix(in srgb,var(--accent) 20%,transparent);}
  .mini .card .ic{transition:transform .3s cubic-bezier(.16,1,.3,1);}
  .mini .card:hover .ic{transform:translateY(-2px);}
  /* stat cells (divider lines) */
  .stat{transition:background .3s ease;}
  .stat .num{transition:color .3s ease;}
  .stat:hover{background:color-mix(in srgb,var(--accent) 7%,transparent);}
  .stat:hover .num{color:var(--accent);}
  /* steps (top rule) */
  .step{transition:border-color .3s ease,transform .42s cubic-bezier(.16,1,.3,1);}
  .step .sn{transition:color .3s ease;}
  .step:hover{transform:translateY(-3px);border-top-color:var(--accent);}
  .step:hover .sn{color:var(--accent);}
}
@media (prefers-reduced-motion:reduce){
  .card,.plan,.step,.mini .card,.stat{transition:none;}
  .card:hover,.plan:hover,.step:hover{transform:none;}
}

/* ---------- section navigator (scroll-spy, desktop only) ---------- */
.sectnav{position:fixed;right:20px;top:50%;transform:translateY(-50%);z-index:55;display:flex;flex-direction:column;gap:2px;align-items:flex-end;}
.sectnav a{display:flex;align-items:center;justify-content:flex-end;gap:11px;padding:6px 3px;color:var(--ink-soft);}
.sectnav .sn-lbl{font-family:var(--sans);font-size:.78rem;font-weight:600;white-space:nowrap;opacity:0;transform:translateX(8px);transition:opacity .28s ease,transform .28s cubic-bezier(.16,1,.3,1),color .2s;pointer-events:none;}
.sectnav .sn-dot{width:9px;height:9px;border-radius:50%;flex:none;background:transparent;border:1.5px solid var(--line-strong);transition:background .25s,border-color .25s,transform .25s;}
.sectnav a:hover .sn-lbl,.sectnav a.on .sn-lbl{opacity:1;transform:translateX(0);}
.sectnav a:hover{color:var(--ink);} .sectnav a.on{color:var(--ink);}
.sectnav a:hover .sn-dot{border-color:var(--accent);transform:scale(1.18);}
.sectnav a.on .sn-dot{background:var(--accent);border-color:var(--accent);}
@media (max-width:1320px){.sectnav{display:none;}}
@media (hover:none),(pointer:coarse){.sectnav{display:none;}}
@media (prefers-reduced-motion:reduce){.sectnav .sn-lbl{transition:opacity .2s;transform:none;}}

/* ---------- colophon / "built with" credit (footer) ---------- */
.colophon{margin-top:44px;padding-top:24px;border-top:1px solid var(--night-line);font-size:.9rem;line-height:1.75;color:var(--night-soft);max-width:74ch;}
.colophon a{color:var(--night-ink);opacity:.92;border-bottom:1px solid var(--night-line);transition:color .2s,border-color .2s;}
.colophon a:hover{color:var(--marigold);border-color:var(--marigold);}

.play-swatches{display:inline-flex;align-items:center;gap:9px;}
.play-swatches button{width:24px;height:24px;border-radius:50%;border:1.5px solid rgba(28,24,19,.18);cursor:pointer;padding:0;box-shadow:inset 0 0 0 0 var(--card);transition:transform .15s,box-shadow .2s,border-color .2s;}
.play-swatches button:hover{transform:scale(1.08);}
.play-swatches button.on{border-color:var(--ink);box-shadow:inset 0 0 0 2.5px var(--card);transform:scale(1.06);}

.play-stage{margin-top:24px;min-height:190px;display:flex;align-items:center;justify-content:center;padding:30px;border-radius:14px;background:var(--paper);background-image:radial-gradient(rgba(28,24,19,.07) 1.1px,transparent 1.3px);background-size:22px 22px;border:1px solid var(--line);overflow:hidden;}
.play-stage [data-play-out]{font-family:var(--hand);line-height:1.4;max-width:100%;}
.play-stage [data-play-out] canvas{max-width:100%;height:auto;}
@media(max-width:560px){.play{padding:20px;}.play-controls input[type=range]{width:84px;}}

/* ---------- privacy / grids ---------- */
.priv-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin-top:48px;border-top:1px solid var(--line-strong);}
@media(max-width:880px){.priv-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:520px){.priv-grid{grid-template-columns:1fr;}}
.priv{padding:28px 24px 28px 0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);}
.priv .pn{font-family:var(--serif);color:var(--accent);font-size:.9rem;}
.priv b{display:block;font-family:var(--serif);font-weight:500;font-size:1.3rem;margin:8px 0 6px;}
.priv span{color:var(--ink-soft);font-size:.95rem;}
.priv-fine{margin-top:28px;font-size:.86rem;color:var(--ink-soft);max-width:72ch;} .priv-fine a{color:var(--accent);text-decoration:underline;}

/* ---------- quote ---------- */
.quote{text-align:center;max-width:24ch;margin:0 auto;}
.quote .q-ic{color:var(--marigold);width:40px;height:40px;margin:0 auto 18px;}
.quote p{font-family:var(--serif);font-weight:500;font-size:clamp(1.8rem,3.6vw,2.8rem);line-height:1.18;letter-spacing:-.02em;}

/* ---------- long-form essay (Why by hand) ---------- */
.essay{max-width:66ch;margin:0 auto;padding:0 4px;}
.essay-lead{font-family:var(--serif);font-weight:400;font-size:clamp(1.4rem,2.6vw,1.85rem);line-height:1.4;color:var(--ink);letter-spacing:-.01em;}
.essay h2{font-family:var(--serif);font-weight:500;letter-spacing:-.022em;line-height:1.08;font-size:clamp(1.9rem,3.6vw,2.7rem);margin:0 0 6px;}
.essay h2 .ah{font-family:var(--serif);font-weight:500;font-size:.62em;color:var(--accent);font-feature-settings:"tnum";display:block;letter-spacing:0;margin-bottom:10px;}
.essay p{font-size:1.16rem;line-height:1.72;color:var(--ink);margin:0 0 1.25em;}
.essay p+p{margin-top:0;}
.essay section{margin-top:64px;}
.essay section:first-of-type{margin-top:0;}
.essay-sig{font-family:var(--hand);font-size:1.5rem;color:var(--accent);margin-top:8px;}
/* drop cap on the opening paragraph */
.essay .dropcap::first-letter{font-family:var(--serif);font-weight:500;float:left;font-size:5.4rem;line-height:.82;padding:.06em .1em 0 0;margin-top:.04em;color:var(--accent);letter-spacing:-.03em;}
/* pull-quote — pulled to the measure, hand-feel left rule */
.pullquote{margin:48px 0;padding:6px 0 6px 28px;border-left:3px solid var(--marigold);}
.pullquote p{font-family:var(--serif);font-weight:500;font-size:clamp(1.5rem,3vw,2.1rem);line-height:1.22;letter-spacing:-.02em;color:var(--ink);margin:0;}
.pullquote cite{display:block;margin-top:14px;font-style:normal;font-family:var(--sans);font-size:.82rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);}
/* closing handwritten line */
.essay-close{margin-top:72px;text-align:center;border-top:1px solid var(--line);padding-top:56px;}
.essay-close [data-why-ink]{display:block;min-height:64px;color:var(--accent);font-size:40px;line-height:1;}
.essay-close .fallback{font-family:var(--hand);color:var(--accent);font-size:40px;}
/* ---------- legal / support long-form (Privacy, Support) ---------- */
.essay h3{font-family:var(--serif);font-weight:500;letter-spacing:-.018em;line-height:1.2;font-size:clamp(1.2rem,2vw,1.5rem);margin:0 0 8px;color:var(--ink);}
.essay a{color:var(--accent);text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:.06em;}
.essay em{font-style:italic;color:var(--ink-soft);}
.essay ul{margin:0 0 1.25em;padding-left:1.3em;}
.essay li{font-size:1.16rem;line-height:1.72;color:var(--ink);margin:0 0 .5em;}
.essay table{border-collapse:collapse;width:100%;margin:1.5em 0;font-size:1rem;}
.essay th,.essay td{border:1px solid var(--line);padding:10px 12px;text-align:left;vertical-align:top;line-height:1.5;}
.essay th{background:var(--paper-2);font-family:var(--sans);font-weight:700;font-size:.84rem;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);}
.essay .legal-updated{font-size:.86rem;letter-spacing:.12em;text-transform:uppercase;font-weight:700;font-family:var(--sans);color:var(--ink-soft);}

/* ---------- devices band ---------- */
.devices{position:relative;margin-top:56px;display:flex;align-items:flex-end;justify-content:center;min-height:420px;}
.devices .mac{width:min(760px,88%);position:relative;z-index:1;}
.devices .ipad{position:absolute;left:2%;bottom:0;width:min(290px,30%);z-index:3;}
.devices .ph{position:absolute;right:3%;bottom:-10px;width:min(158px,17%);z-index:4;}
@media(max-width:680px){.devices .ipad{display:none;}}

/* ---------- pricing ---------- */
.price-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:50px;max-width:900px;margin-left:auto;margin-right:auto;}
@media(max-width:720px){.price-grid{grid-template-columns:1fr;}}
.plan{background:var(--card);border:1px solid var(--line-strong);border-radius:14px;padding:38px;position:relative;}
.plan.featured{border:2px solid var(--accent);}
.plan .pname{font-family:var(--serif);font-weight:500;font-size:1.7rem;}
.plan .price{font-family:var(--serif);font-weight:500;font-size:3rem;margin:8px 0 0;letter-spacing:-.02em;font-variant-numeric:tabular-nums;}
.plan .price small{font-size:1rem;font-weight:400;color:var(--ink-soft);font-family:var(--sans);}
.plan ul{list-style:none;padding:0;margin:24px 0 28px;display:grid;gap:13px;}
.plan li{display:flex;gap:11px;align-items:flex-start;font-size:.98rem;}
.plan li .fic{flex:0 0 auto;width:18px;height:18px;color:var(--accent);margin-top:3px;}
.plan .ribbon{position:absolute;top:-14px;left:38px;background:var(--accent);color:#fff;font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:5px 13px;border-radius:999px;}

/* comparison table */
.cmp{margin-top:54px;width:100%;border-collapse:collapse;font-size:.98rem;}
.cmp th,.cmp td{text-align:left;padding:16px 18px;border-bottom:1px solid var(--line);}
.cmp thead th{font-family:var(--serif);font-weight:500;font-size:1.2rem;}
.cmp tbody th{font-weight:550;color:var(--ink);}
.cmp td{text-align:center;color:var(--ink-soft);} .cmp td:first-of-type{}
.cmp .yes{color:var(--accent);} .cmp col.feat-col{width:40%;}

/* ---------- accordion ---------- */
.acc{margin-top:40px;border-top:1px solid var(--line);}
.acc-item{border-bottom:1px solid var(--line);}
.acc-q{width:100%;text-align:left;background:none;border:none;cursor:pointer;font-family:var(--serif);font-weight:500;font-size:1.3rem;color:var(--ink);padding:24px 40px 24px 0;position:relative;}
.acc-q::after{content:"+";position:absolute;right:6px;top:50%;transform:translateY(-50%);font-family:var(--sans);font-size:1.5rem;color:var(--accent);transition:transform .3s;}
.acc-item.open .acc-q::after{transform:translateY(-50%) rotate(45deg);}
.acc-a{overflow:hidden;height:0;}
.acc-a-inner{padding:0 0 24px;color:var(--ink-soft);max-width:70ch;}

/* ---------- CTA band ---------- */
.cta-band{text-align:center;}
.cta-band .display{margin-bottom:26px;}

/* ---------- footer ---------- */
footer{background:var(--night);color:var(--night-ink);padding:80px 0 44px;}
.foot-top{display:flex;justify-content:space-between;gap:36px;flex-wrap:wrap;align-items:flex-start;}
.foot-top .brand b{color:var(--night-ink);}
.foot-tag{font-family:var(--hand);font-size:1.9rem;color:var(--marigold);margin:16px 0 0;}
.foot-cols{display:flex;gap:60px;flex-wrap:wrap;}
.foot-col h4{font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;color:var(--night-soft);margin:0 0 14px;font-weight:700;}
.foot-col a{display:block;color:var(--night-ink);opacity:.82;font-weight:500;padding:5px 0;font-size:.96rem;}
.foot-col a:hover{opacity:1;color:var(--marigold);}
.foot-bottom{margin-top:48px;padding-top:26px;border-top:1px solid var(--night-line);display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:.84rem;color:var(--night-soft);}

/* page load fade */
body{opacity:1;}
body.preload{opacity:0;}
.page-fade{opacity:1;transition:opacity .35s ease;}
.page-fade.out{opacity:0;}

/* ---------- cross-document View Transitions ----------
   Opt in to native cross-document transitions. Shared with all pages via this
   one stylesheet, so the @view-transition rule is present on both the outgoing
   and incoming documents (a hard requirement for cross-document transitions).
   The nav brand and the footer keep their on-screen identity (morph) across
   navigations; everything else cross-fades subtly via the default root snapshot.
   Note on the existing JS page fade: site.js only fades the body IN on load
   (removes body.preload) and never adds .page-fade.out on navigation, so there
   is no JS-driven OUTBOUND fade to double-animate with the native transition.
   The native VT therefore stays the only navigation animation; JS left untouched. */
@view-transition{ navigation: auto; }
/* Each name must be unique among rendered elements during a transition.
   .brand appears 3x per page (nav, mobile menu, footer) — only the always-visible
   nav brand gets vt-brand; the single <footer> gets vt-footer. One element each. */
#nav .brand{ view-transition-name: vt-brand; }
footer{ view-transition-name: vt-footer; }
/* Tasteful, subtle root cross-fade (~240ms). Kept short so it never fights perception. */
::view-transition-old(root),::view-transition-new(root){ animation-duration:.24s; animation-timing-function:ease; }
/* Respect reduced-motion: opt back out of navigation transitions entirely. */
@media (prefers-reduced-motion: reduce){ @view-transition{ navigation: none; } }

/* ---------- templates gallery (18 CSS-drawn paper patterns) ---------- */
.tpl-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:24px;margin-top:50px;}
@media(max-width:1080px){.tpl-grid{grid-template-columns:repeat(4,1fr);}}
@media(max-width:760px){.tpl-grid{grid-template-columns:repeat(3,1fr);}}
@media(max-width:480px){.tpl-grid{grid-template-columns:repeat(2,1fr);gap:18px;}}
.tpl-card{display:flex;flex-direction:column;gap:11px;}
.tpl-paper{display:block;width:100%;aspect-ratio:5/7;border-radius:7px;background-color:var(--card);border:1px solid var(--line);box-shadow:0 10px 26px -16px rgba(28,24,19,.5),0 2px 6px rgba(28,24,19,.08);transition:transform .25s,box-shadow .25s;background-repeat:no-repeat,no-repeat,no-repeat,no-repeat;}
.tpl-card:hover .tpl-paper{transform:translateY(-4px);box-shadow:0 22px 40px -18px rgba(28,24,19,.55),0 4px 10px rgba(28,24,19,.12);}
.tpl-label{display:flex;align-items:center;gap:8px;font-size:.9rem;font-weight:600;color:var(--ink);letter-spacing:-.005em;}
.tpl-label .fic{width:16px;height:16px;flex:0 0 auto;color:var(--accent);}
.tpl-note{margin-top:34px;font-family:var(--hand);font-size:1.5rem;color:var(--accent);text-align:center;}

/* shared pattern tokens */
:root{--tline:rgba(28,24,19,.16);--tline-soft:rgba(28,24,19,.10);--tdot:rgba(28,24,19,.30);--taccent:rgba(44,64,212,.55);--tred:rgba(199,62,46,.5);}

/* 1 Ruled — horizontal lines */
.tpl-ruled{background-image:repeating-linear-gradient(to bottom,transparent 0 17px,var(--tline) 17px 18px);background-position:0 14px;}
/* 2 Narrow ruled — tighter lines */
.tpl-narrow{background-image:repeating-linear-gradient(to bottom,transparent 0 10px,var(--tline) 10px 11px);background-position:0 10px;}
/* 3 College ruled — ruling + a coloured left margin rule */
.tpl-college{background-image:linear-gradient(to right,transparent 0 22%,var(--tred) 22% calc(22% + 1px),transparent calc(22% + 1px)),repeating-linear-gradient(to bottom,transparent 0 15px,var(--taccent) 15px 16px);background-position:0 0,0 14px;}
/* 4 Dot grid — tiled dots */
.tpl-dot{background-image:radial-gradient(var(--tdot) 1.3px,transparent 1.6px);background-size:15px 15px;background-position:7px 7px;}
/* 5 Square grid — coarse two-axis grid */
.tpl-square{background-image:repeating-linear-gradient(to right,transparent 0 19px,var(--tline) 19px 20px),repeating-linear-gradient(to bottom,transparent 0 19px,var(--tline) 19px 20px);background-position:0 0,0 0;}
/* 6 Graph paper — fine grid + bold every 5th line */
.tpl-graph{background-image:repeating-linear-gradient(to right,transparent 0 7px,var(--tline-soft) 7px 8px),repeating-linear-gradient(to bottom,transparent 0 7px,var(--tline-soft) 7px 8px),repeating-linear-gradient(to right,transparent 0 39px,var(--tline) 39px 40px),repeating-linear-gradient(to bottom,transparent 0 39px,var(--tline) 39px 40px);}
/* 7 Isometric — three angled rulings */
.tpl-iso{background-image:repeating-linear-gradient(to right,transparent 0 17px,var(--tline) 17px 18px),repeating-linear-gradient(60deg,transparent 0 17px,var(--tline) 17px 18px),repeating-linear-gradient(-60deg,transparent 0 17px,var(--tline) 17px 18px);}
/* 8 Cornell notes — left cue column + bottom summary rule over ruling */
.tpl-cornell{background-image:linear-gradient(to right,transparent 0 30%,var(--taccent) 30% calc(30% + 1px),transparent calc(30% + 1px)),linear-gradient(to bottom,transparent 0 78%,var(--taccent) 78% calc(78% + 1px),transparent calc(78% + 1px)),repeating-linear-gradient(to bottom,transparent 0 15px,var(--tline) 15px 16px);background-position:0 0,0 0,0 14px;}
/* 9 Music staves — grouped 5-line staves with gaps */
.tpl-music{background-image:repeating-linear-gradient(to bottom,var(--tline) 0 1px,transparent 1px 7px,var(--tline) 7px 8px,transparent 8px 14px,var(--tline) 14px 15px,transparent 15px 21px,var(--tline) 21px 22px,transparent 22px 28px,var(--tline) 28px 29px,transparent 29px 50px);background-position:0 12px;}
/* 10 Legal pad — ruling + double red left margin */
.tpl-legal{background-image:linear-gradient(to right,transparent 0 15%,var(--tred) 15% calc(15% + 1px),transparent calc(15% + 1px) calc(15% + 3px),var(--tred) calc(15% + 3px) calc(15% + 4px),transparent calc(15% + 4px)),repeating-linear-gradient(to bottom,transparent 0 16px,var(--taccent) 16px 17px);background-position:0 0,0 14px;}
/* 11 Blank — clean paper, faint vignette only */
.tpl-blank{background-image:radial-gradient(120% 120% at 50% 0%,transparent 70%,var(--tline-soft) 100%);}
/* 12 Storyboard — grid of framed panels */
.tpl-story{background-image:linear-gradient(var(--tline),var(--tline)),linear-gradient(var(--tline),var(--tline)),repeating-linear-gradient(to bottom,transparent 0 31px,var(--tline) 31px 32px),repeating-linear-gradient(to right,transparent 0 47px,var(--tline) 47px 48px);background-size:100% 1px,1px 100%,100% 100%,100% 100%;background-position:0 0,0 0,0 0,0 0;}
/* 13 Monthly calendar — header strip + 7x5 cells */
.tpl-month{background-image:linear-gradient(to bottom,var(--taccent) 0 14%,transparent 14%),repeating-linear-gradient(to right,transparent 0 calc(100%/7 - 1px),var(--tline) calc(100%/7 - 1px) calc(100%/7)),repeating-linear-gradient(to bottom,transparent 0 calc((100% - 14%)/5 - 1px + 14%/5),var(--tline) 0);background-size:100% 100%,100% 100%,100% calc((86%)/5);background-position:0 0,0 0,0 14%;}
/* 14 Weekly planner — soft day rail + divider + day rows */
.tpl-week{background-image:linear-gradient(to right,rgba(44,64,212,.10) 0 30%,transparent 30%),linear-gradient(to right,transparent 0 30%,var(--taccent) 30% calc(30% + 1px),transparent calc(30% + 1px)),repeating-linear-gradient(to bottom,var(--tline) 0 1px,transparent 1px 27px);background-size:100% 100%,100% 100%,100% 100%;background-position:0 0,0 0,0 13px;}
/* 15 Checklist / to-do — tiled checkbox squares + write lines */
.tpl-todo{background-image:repeating-linear-gradient(to bottom,var(--tline-soft) 0 1px,transparent 1px 26px),linear-gradient(to right,var(--tline) 0 1px,transparent 1px 11px,var(--tline) 11px 12px,transparent 12px),linear-gradient(to bottom,var(--tline) 0 1px,transparent 1px 11px,var(--tline) 11px 12px,transparent 12px);background-size:100% 100%,12px 26px,12px 26px;background-position:0 14px,10px 22px,10px 22px;background-repeat:repeat,repeat-y,repeat-y;}
/* 16 Handwriting guides — baseline + dashed midline groups */
.tpl-hwguide{background-image:repeating-linear-gradient(to bottom,var(--tline) 0 1px,transparent 1px 20px,var(--tline) 20px 21px,transparent 21px 40px),repeating-linear-gradient(to bottom,transparent 0 10px,var(--tred) 10px 11px,transparent 11px 40px);background-size:100% 40px,6px 40px;background-position:0 12px,0 12px;background-repeat:repeat,repeat;}
/* 17 Manuscript (genkō yōshi) — square cells with centre column gap */
.tpl-manuscript{background-image:repeating-linear-gradient(to right,var(--tline) 0 1px,transparent 1px 16px),repeating-linear-gradient(to right,var(--tline-soft) 7px 8px,transparent 8px 16px),repeating-linear-gradient(to bottom,var(--tline) 0 1px,transparent 1px 16px);background-size:100% 100%,100% 100%,100% 100%;background-position:6px 12px,6px 12px,6px 12px;}
/* 18 Hexagon grid — approximated with three angled rulings + verticals */
.tpl-hex{background-image:repeating-linear-gradient(60deg,transparent 0 15px,var(--tline) 15px 16px),repeating-linear-gradient(-60deg,transparent 0 15px,var(--tline) 15px 16px),repeating-linear-gradient(to right,transparent 0 26px,var(--tline-soft) 26px 27px);}

/* ============ DARK THEME ============
   Dark styling is controllable by an explicit data-theme on <html> and
   defaults to the system preference. Each dark block below is declared TWICE,
   kept adjacent and identical so the two paths stay in sync:
     (A) :root[data-theme="dark"] …            -> explicit dark (wins over OS)
     (B) @media (prefers-color-scheme: dark){
           :root:not([data-theme="light"]) … } -> system dark, unless forced light
   :root[data-theme="light"] never enters either path, so the default :root
   light palette above always wins when the user forces light. */

/* (A) Explicit dark — KEEP IN SYNC with the (B) media block below */
:root[data-theme="dark"]{--paper:#15120b;--paper-2:#1d190f;--card:#1f1a11;--ink:#F3EAD6;--ink-soft:#b3a98f;--ink-faint:#857c66;--line:#332c1e;--line-strong:#473d29;--accent:#9aa6ff;--tline:rgba(28,24,19,.18);--tline-soft:rgba(28,24,19,.11);--tdot:rgba(28,24,19,.34);--taccent:rgba(44,64,212,.5);--tred:rgba(199,62,46,.5);}
:root[data-theme="dark"] nav.scrolled{background:rgba(21,18,11,.86);}
:root[data-theme="dark"] .ai-paper,:root[data-theme="dark"] .fontpick .sample{background:#fbf7ee;color:#1c1813;}
:root[data-theme="dark"] .ask-bar{color:#5c5446;background:#fff;} :root[data-theme="dark"] .ask-bar input{color:#1c1813;}
:root[data-theme="dark"] .hero-wash .b1{opacity:.22;} :root[data-theme="dark"] .hero-wash .b2{opacity:.2;}
:root[data-theme="dark"] .mini .card:hover{background:#241e14;}
:root[data-theme="dark"] .cursor,:root[data-theme="dark"] .cursor-ring{mix-blend-mode:screen;}
/* grain reads on dark paper via screen blend (also flips on manual dark, not just system dark) */
:root[data-theme="dark"] .grain{mix-blend-mode:screen;opacity:.06;}
/* templates: lift pattern paper to a warm light sheet so ruling reads in dark mode */
:root[data-theme="dark"] .tpl-paper{background-color:#fbf7ee;border-color:#d8ccb2;}

/* (B) System dark (unless explicitly forced light) — KEEP IN SYNC with (A) above */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){--paper:#15120b;--paper-2:#1d190f;--card:#1f1a11;--ink:#F3EAD6;--ink-soft:#b3a98f;--ink-faint:#857c66;--line:#332c1e;--line-strong:#473d29;--accent:#9aa6ff;--tline:rgba(28,24,19,.18);--tline-soft:rgba(28,24,19,.11);--tdot:rgba(28,24,19,.34);--taccent:rgba(44,64,212,.5);--tred:rgba(199,62,46,.5);}
  :root:not([data-theme="light"]) nav.scrolled{background:rgba(21,18,11,.86);}
  :root:not([data-theme="light"]) .ai-paper,:root:not([data-theme="light"]) .fontpick .sample{background:#fbf7ee;color:#1c1813;}
  :root:not([data-theme="light"]) .ask-bar{color:#5c5446;background:#fff;} :root:not([data-theme="light"]) .ask-bar input{color:#1c1813;}
  :root:not([data-theme="light"]) .hero-wash .b1{opacity:.22;} :root:not([data-theme="light"]) .hero-wash .b2{opacity:.2;}
  :root:not([data-theme="light"]) .mini .card:hover{background:#241e14;}
  :root:not([data-theme="light"]) .cursor,:root:not([data-theme="light"]) .cursor-ring{mix-blend-mode:screen;}
  /* grain reads on dark paper via screen blend */
  :root:not([data-theme="light"]) .grain{mix-blend-mode:screen;opacity:.06;}
  /* templates: lift pattern paper to a warm light sheet so ruling reads in dark mode */
  :root:not([data-theme="light"]) .tpl-paper{background-color:#fbf7ee;border-color:#d8ccb2;}
}
