/* Sphoton docs · a paper reader: dark viewer chrome, a warm white sheet set like a research paper */
:root{--navy:#0A1628;--navy-d:#07101f;--panel:#0f1f37;--ink:#FAFAF9;--grey:#9FB0C4;--dim:#6f8299;--line:rgba(159,176,196,.16);--pur:#5B4FCF;--pur-lt:#7F77DD;--teal:#16C990;
--paper:#FBFAF7;--p-ink:#1A1A1A;--p-sec:#5e5e5e;--p-line:#E8E6E0;--p-acc:#5B4FCF;--p-acc-l:#F0EEF8;--stale:#FFB300;--z:1;--bar:56px}
*{box-sizing:border-box}
html{scroll-padding-top:calc(var(--bar) + 24px)}
body{margin:0;background:var(--navy-d);color:var(--ink);font-family:Geist,system-ui,sans-serif;-webkit-font-smoothing:antialiased}
a{color:var(--pur-lt);text-decoration:none}a:hover{color:var(--ink)}
button{font:inherit}

/* bar */
.dv-bar{position:fixed;inset:0 0 auto 0;z-index:20;height:var(--bar);display:flex;align-items:center;gap:20px;padding:0 20px;background:rgba(10,22,40,.86);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}
@supports not (backdrop-filter:blur(1px)){.dv-bar{background:var(--navy)}}
.dv-logo{display:flex;align-items:center;gap:9px;color:var(--ink);font-weight:600;font-size:16px;letter-spacing:.02em}
.dv-logo svg{width:22px;height:22px}
.dv-crumb{display:flex;align-items:center;gap:10px;min-width:0;padding-left:20px;border-left:1px solid var(--line);font-size:14px;color:var(--grey)}
.dv-crumb a{color:var(--grey)}.dv-crumb a:hover{color:var(--ink)}
.dv-sep{color:var(--dim)}
#dvCrumb{color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dv-tools{margin-left:auto;display:flex;align-items:center;gap:8px}
.dv-pos{font-family:"Geist Mono",monospace;font-size:12px;color:var(--grey);white-space:nowrap;margin-right:6px}
.dv-size{display:flex;align-items:center;height:34px;border:1px solid var(--line);border-radius:8px}
.dv-size button{width:34px;height:32px;border:0;background:none;color:var(--grey);cursor:pointer;font-size:13px;font-weight:600}
.dv-size button:hover{color:var(--ink)}
.dv-size output{min-width:44px;text-align:center;font-family:"Geist Mono",monospace;font-size:11.5px;color:var(--grey)}
.dv-tool,.dv-back,.dv-menu{display:inline-flex;align-items:center;height:34px;padding:0 12px;border:1px solid var(--line);border-radius:8px;background:none;color:var(--grey);font-size:13.5px;white-space:nowrap;cursor:pointer;transition:color .15s,border-color .15s}
.dv-tool:hover,.dv-back:hover,.dv-menu:hover{color:var(--ink);border-color:rgba(159,176,196,.4)}
.dv-back{border-color:rgba(127,119,221,.5);color:var(--ink)}
.dv-menu{display:none}
.dv-prog{position:absolute;left:0;bottom:-1px;height:2px;width:100%;background:var(--pur-lt);transform-origin:0 50%;transform:scaleX(var(--p,0))}
:focus-visible{outline:2px solid var(--pur-lt);outline-offset:2px}

/* layout */
.dv{display:grid;grid-template-columns:288px minmax(0,1fr);padding-top:var(--bar);min-height:100vh}
.dv-side{position:sticky;top:var(--bar);align-self:start;height:calc(100vh - var(--bar));overflow-y:auto;padding:24px 16px 32px;border-right:1px solid var(--line);background:var(--navy);display:flex;flex-direction:column;gap:28px}
.dv-h{margin:0 0 10px;padding:0 10px;font-family:"Geist Mono",monospace;font-weight:500;font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.dv-lib ol,.dv-out ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.dv-lib a{display:grid;grid-template-columns:52px minmax(0,1fr);gap:2px 10px;padding:9px 10px;border-radius:8px;color:var(--grey);transition:background .15s,color .15s}
.dv-lib a:hover{background:rgba(159,176,196,.07);color:var(--ink)}
.dv-lib a.on{background:rgba(91,79,207,.2);color:var(--ink)}
.dv-lib .c{grid-row:span 2;font-family:"Geist Mono",monospace;font-size:11.5px;padding-top:2px;color:var(--pur-lt)}
.dv-lib b{font-weight:500;font-size:14.5px;line-height:1.3}
.dv-lib small{font-size:12px;color:var(--dim)}
.dv-out a{display:grid;grid-template-columns:28px minmax(0,1fr);gap:8px;padding:6px 10px;border-radius:6px;font-size:13.5px;line-height:1.35;color:var(--grey);transition:color .15s,background .15s}
.dv-out a:hover{color:var(--ink)}
.dv-out a.on{color:var(--ink);background:rgba(159,176,196,.08)}
.dv-out a i{font-style:normal;font-family:"Geist Mono",monospace;font-size:11.5px;color:var(--dim);padding-top:1px}
.dv-out a.on i{color:var(--pur-lt)}
.dv-out[hidden]{display:none}

/* the sheet */
.dv-read{padding:36px 24px 80px;background:radial-gradient(1200px 600px at 50% -10%,rgba(91,79,207,.12),transparent 60%)}
.dv-paper{width:100%;max-width:840px;margin:0 auto;padding:72px clamp(28px,7vw,88px) 64px;background:var(--paper);color:var(--p-ink);border-radius:4px;box-shadow:0 1px 0 rgba(255,255,255,.04),0 30px 80px -30px rgba(0,0,0,.7),0 0 0 1px rgba(0,0,0,.2);font-size:calc(17px * var(--z));line-height:1.7;min-height:60vh}
.dv-paper.in{animation:dvIn .3s ease-out}
@keyframes dvIn{from{opacity:0;transform:translateY(8px)}}
.pp-run{display:flex;justify-content:space-between;gap:16px;padding-bottom:14px;margin-bottom:40px;border-bottom:1px solid var(--p-line);font-family:"Geist Mono",monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--p-sec)}
.pp-kind{font-family:"Geist Mono",monospace;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--p-acc);margin:0 0 12px}
.pp-t{margin:0;font-weight:700;font-size:calc(42px * var(--z));line-height:1.08;letter-spacing:-.03em;text-wrap:balance}
.pp-by{display:flex;flex-wrap:wrap;gap:4px 24px;margin:22px 0 0;font-size:calc(14.5px * var(--z));color:var(--p-sec)}
.pp-by b{font-weight:600;color:var(--p-ink)}
.pp-by .m{font-family:"Geist Mono",monospace;font-size:calc(12.5px * var(--z))}
.pp-abs{margin:36px 0 8px;padding:22px 0;border-top:1.5px solid var(--p-ink);border-bottom:1px solid var(--p-line)}
.pp-abs h2,.pp-refs h2{margin:0 0 8px;font-size:calc(12px * var(--z));font-family:"Geist Mono",monospace;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--p-sec)}
.pp-abs p{margin:0;font-size:calc(17px * var(--z));font-style:italic;color:#333}
.pp-key{margin:16px 0 0;padding:0;list-style:none;display:grid;gap:6px}
.pp-key li{position:relative;padding-left:22px;font-size:calc(15.5px * var(--z));line-height:1.55}
.pp-key li::before{content:"";position:absolute;left:4px;top:.7em;width:6px;height:6px;border-radius:50%;background:var(--p-acc)}
.pp-meta{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:14px;font-family:"Geist Mono",monospace;font-size:calc(12px * var(--z));color:var(--p-sec)}

.pp-body section{margin-top:44px}
.pp-body h2{display:grid;grid-template-columns:2.2em minmax(0,1fr);align-items:baseline;margin:0 0 14px;font-size:calc(23px * var(--z));font-weight:650;letter-spacing:-.015em;line-height:1.25}
.pp-body h2 .n{font-family:"Geist Mono",monospace;font-weight:500;font-size:.78em;color:var(--p-acc)}
.pp-body h3{margin:26px 0 8px;font-size:calc(17.5px * var(--z));font-weight:600;line-height:1.35}
.pp-body h3 .n{font-family:"Geist Mono",monospace;font-weight:500;font-size:.85em;color:var(--p-acc);margin-right:.6em}
.pp-body p{margin:0 0 14px;text-align:justify;hyphens:auto;-webkit-hyphens:auto}
.pp-body ul,.pp-body ol:not(.dc-steps){margin:0 0 14px;padding-left:1.3em}
.pp-body li{margin:4px 0}
.pp-body b,.pp-body strong{font-weight:600}
.pp-body code{font-family:"Geist Mono",monospace;font-size:.84em;padding:.08em .35em;border-radius:4px;background:var(--p-acc-l);color:#3f35a8}
.pp-body a{color:var(--p-acc);text-decoration:underline;text-decoration-color:rgba(91,79,207,.35);text-underline-offset:3px}
.pp-body a:hover{text-decoration-color:var(--p-acc)}
.tbd{background:rgba(255,179,0,.2);box-shadow:inset 0 -1px 0 rgba(200,140,0,.5);border-radius:2px;font-family:"Geist Mono",monospace;font-size:.82em;color:#6b4a00}

/* figures and tables */
.pp-fig{margin:22px 0 26px}
.pp-cap{display:block;margin:0 0 8px;font-size:calc(13.5px * var(--z));line-height:1.45;color:var(--p-sec)}
.pp-cap b{font-weight:600;color:var(--p-ink);margin-right:.4em}
.pp-tbl{overflow-x:auto}
.pp-tbl table{width:100%;border-collapse:collapse;font-size:calc(14.5px * var(--z));line-height:1.45;border-top:1.5px solid var(--p-ink);border-bottom:1.5px solid var(--p-ink)}
.pp-tbl th{text-align:left;font-weight:600;padding:9px 12px 8px 0;border-bottom:1px solid var(--p-ink);white-space:nowrap}
.pp-tbl td{padding:8px 12px 8px 0;vertical-align:top;border-top:1px solid var(--p-line)}
.pp-tbl tr:first-child td{border-top:0}
.pp-body ol.dc-steps{list-style:none;counter-reset:st;margin:0;padding:18px 20px;display:grid;gap:10px;border:1px solid var(--p-line);border-radius:8px;background:#fff}
.pp-body ol.dc-steps li{counter-increment:st;position:relative;margin:0;padding-left:44px;font-size:calc(15.5px * var(--z));line-height:1.5}
.pp-body ol.dc-steps li::before{content:counter(st,decimal-leading-zero);position:absolute;left:0;top:1px;font-family:"Geist Mono",monospace;font-size:.82em;color:var(--p-acc)}
.pp-body .dc-faq details{border-top:1px solid var(--p-line);padding:12px 0}
.pp-body .dc-faq details:last-child{border-bottom:1px solid var(--p-line)}
.pp-body .dc-faq summary{cursor:pointer;font-weight:600;list-style:none;display:grid;grid-template-columns:1.6em minmax(0,1fr) auto}
.pp-body .dc-faq summary::-webkit-details-marker{display:none}
.pp-body .dc-faq summary::before{content:"Q";font-family:"Geist Mono",monospace;font-weight:500;color:var(--p-acc)}
.pp-body .dc-faq summary::after{content:"+";font-family:"Geist Mono",monospace;color:var(--p-sec)}
.pp-body .dc-faq details[open] summary::after{content:"−"}
.pp-body .dc-faq details p{margin:8px 0 0 1.6em}
.pp-body svg{max-width:100%;height:auto}
.pp-body .dc-art{display:block;margin:8px auto;background:var(--navy);border-radius:8px;padding:12px;max-width:520px}

.pp-refs{margin-top:56px;padding-top:20px;border-top:1.5px solid var(--p-ink)}
.pp-refs ol{margin:0;padding:0;list-style:none;display:grid;gap:8px}
.pp-refs li{display:grid;grid-template-columns:2.6em minmax(0,1fr);font-size:calc(14.5px * var(--z));line-height:1.5}
.pp-refs li i{font-style:normal;font-family:"Geist Mono",monospace;color:var(--p-sec)}
.pp-refs a{color:var(--p-ink);font-weight:500}.pp-refs a:hover{color:var(--p-acc)}
.pp-refs span{color:var(--p-sec)}
.pp-end{margin-top:40px;text-align:center;font-family:"Geist Mono",monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#a3a3a3}

/* library index */
.ix-list{list-style:none;margin:28px 0 0;padding:0;border-top:1.5px solid var(--p-ink)}
.ix-list li{border-bottom:1px solid var(--p-line)}
.ix-list a{display:grid;grid-template-columns:72px minmax(0,1fr) auto;gap:4px 18px;align-items:start;padding:20px 4px;color:var(--p-ink);border-radius:4px;transition:background .15s}
.ix-list a:hover{background:#fff}
.ix-c{grid-row:span 3;font-family:"Geist Mono",monospace;font-size:12.5px;color:var(--p-acc);padding-top:4px}
.ix-k{font-family:"Geist Mono",monospace;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--p-sec)}
.ix-t{font-size:calc(21px * var(--z));font-weight:650;letter-spacing:-.015em;line-height:1.25}
.ix-d{font-size:calc(15px * var(--z));line-height:1.55;color:var(--p-sec);max-width:58ch}
.ix-m{grid-column:3;grid-row:1 / span 3;align-self:center;display:flex;align-items:center;gap:10px;font-family:"Geist Mono",monospace;font-size:12px;color:var(--p-sec);white-space:nowrap}
.ix-m em{font-style:normal;display:grid;place-items:center;width:34px;height:34px;border-radius:50%;border:1px solid var(--p-line);color:var(--p-ink);transition:background .15s,color .15s,border-color .15s}
.ix-list a:hover .ix-m em{background:var(--p-acc);border-color:var(--p-acc);color:#fff}
.pp-err{color:var(--p-sec)}

@media(max-width:1100px){.dv-pos,.dv-tool#dvOpen{display:none}}
@media(max-width:900px){.dv{grid-template-columns:minmax(0,1fr)}.dv-menu{display:inline-flex}.dv-crumb{display:none}.dv-size,.dv-tool{display:none}
.dv-side{position:fixed;top:var(--bar);left:0;bottom:0;z-index:15;width:min(320px,86vw);height:auto;transform:translateX(-100%);transition:transform .3s ease-out;box-shadow:20px 0 60px rgba(0,0,0,.5)}
.dv-side.open{transform:none}
.dv-read{padding:16px 10px 60px}.dv-paper{padding:40px 22px 40px}.pp-body p{text-align:left}.ix-list a{grid-template-columns:minmax(0,1fr)}.ix-c{grid-row:auto}.ix-m{display:none}}
@media print{body{background:#fff}.dv-bar,.dv-side{display:none}.dv{display:block;padding:0}.dv-read{padding:0;background:none}.dv-paper{box-shadow:none;max-width:none;padding:0;border-radius:0}.pp-body section{break-inside:auto}.pp-fig,.pp-body h2{break-inside:avoid}}
@media(prefers-reduced-motion:reduce){.dv-paper.in{animation:none}.dv-side{transition:none}}

.pp-run{flex-wrap:wrap}.pp-run span{white-space:nowrap}
.pp-by span{white-space:nowrap}
