/* Layout: a lamplit library desk. Sticky ribbon of tabs, then facing pages set as framed cards; dark academia style. One committed dark look. */
:root{
  --paper:#28221F; --leaf:#342a28; --ink:#E2D6BE; --text:#C9C2B6; --faded:#ABA296; --rule:#4d4843;
  --brass:#C0B098; --gold:#96896E; --indigo:#E2D6BE; --moss:#A3A58A; --wine:#D7907F; --oxblood:#4D2117;
  --wash:rgba(192,176,152,.10);
  --display:"Cormorant Garamond",Garamond,"Times New Roman",serif;
  --body:"EB Garamond",Garamond,Georgia,serif;
  --label:"EB Garamond",Garamond,Georgia,serif;
  --script:"Pinyon Script","Snell Roundhand",cursive;
  --caps:"IM Fell English SC","Cormorant Garamond",Garamond,serif; --plum:#3F2A42;
  color-scheme:dark;
}
*{box-sizing:border-box}
body{background:var(--paper);color:var(--text);font:18px/1.55 var(--body);margin:0}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:10;background:var(--paper)}
.wrap{max-width:1100px;margin:0 auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));padding-block:0 48px}
header.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:5;background:var(--paper);border-bottom:1px solid var(--rule)}
.brand{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-block:14px 6px}
.brand h1{font:400 1.9rem/1.1 var(--caps);margin:0;letter-spacing:.08em;color:var(--ink)}
.brand .tag{font:400 1.5rem/1 var(--script);color:var(--brass);margin-left:10px;letter-spacing:0;text-transform:none}
.status{font:400 .78rem var(--label);letter-spacing:.14em;text-transform:uppercase;color:var(--faded);display:flex;align-items:center;gap:6px}
.status b{width:8px;height:8px;border-radius:50%;background:var(--moss);display:inline-block}
.status.warn b{background:var(--brass)}
nav.tabs{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;margin-inline:-4px}
nav.tabs::-webkit-scrollbar{display:none}
nav.tabs button{flex:none;border:0;background:none;color:var(--faded);font:400 1.02rem var(--caps);letter-spacing:.1em;padding:10px 12px 12px;border-bottom:2px solid transparent;cursor:pointer;min-height:44px}
nav.tabs button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--brass)}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--indigo);outline-offset:2px}
section.view{padding-top:22px}
.spread{display:grid;grid-template-columns:1fr;gap:20px}
@media (min-width:820px){.spread{grid-template-columns:1fr 1fr}}
.page{background:var(--leaf);border:1px solid var(--gold);outline:1px solid var(--gold);outline-offset:4px;margin:5px;padding:22px;min-width:0}
h2{font:italic 500 1.75rem/1.15 var(--display);margin:0 0 6px;text-wrap:balance;color:var(--ink)}
h3{font:400 .8rem var(--label);letter-spacing:.16em;text-transform:uppercase;color:var(--faded);margin:20px 0 8px;display:flex;align-items:center;gap:10px}
h3::after{content:"";flex:1;border-top:1px solid var(--rule)}
.sub{color:var(--faded);margin:0 0 12px;font-size:.95rem}
label.f{display:grid;gap:4px;margin-bottom:12px;font:400 .78rem var(--label);letter-spacing:.14em;text-transform:uppercase;color:var(--faded)}
input[type=text],input[type=number],input[type=date],select,textarea{width:100%;background:var(--paper);border:1px solid var(--rule);border-radius:0;padding:10px 12px;font:18px/1.4 var(--body);color:var(--ink);min-height:44px;text-transform:none;letter-spacing:0}
input::placeholder,textarea::placeholder{color:#8f877c}
textarea{min-height:84px;resize:vertical}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.row>*{min-width:0}
.btn{border:1px solid var(--gold);background:var(--oxblood);color:var(--ink);padding:10px 18px;border-radius:0;cursor:pointer;font:400 .95rem var(--caps);letter-spacing:.12em;min-height:44px}
.btn.ghost{background:none;color:var(--brass);border-color:var(--gold)}
.btn.small{padding:6px 10px;min-height:36px;font-size:.82rem}
.btn.danger{background:none;color:var(--wine);border-color:var(--wine)}
.checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.chk{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--rule);border-radius:0;cursor:pointer;min-height:44px;background:var(--paper)}
.chk input{width:20px;height:20px;accent-color:var(--brass)}
.chk:has(input:checked){border-color:var(--brass);background:var(--wash)}
.scale{display:flex;gap:6px}
.scale button{flex:1;min-height:44px;border:1px solid var(--rule);background:var(--paper);border-radius:0;font-family:var(--display);font-size:1.1rem;cursor:pointer;color:var(--faded)}
.scale button[aria-pressed="true"]{border-color:var(--brass);color:var(--ink);background:var(--wash);font-weight:700}
.daynav{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.daynav .date{font:italic 500 1.6rem var(--display);color:var(--ink)}
.moonline{display:flex;align-items:center;gap:10px;color:var(--faded);font-size:.95rem}
.moonline svg{flex:none}
.card{border-top:1px solid var(--rule);padding:12px 0}
.card:first-child{border-top:0}
.card .meta{font:400 .78rem var(--label);letter-spacing:.12em;text-transform:uppercase;color:var(--faded);display:flex;gap:8px;justify-content:space-between;flex-wrap:wrap}
.card p{margin:4px 0;white-space:pre-wrap;overflow-wrap:anywhere}
.card .k{font:400 .74rem var(--label);letter-spacing:.14em;text-transform:uppercase;color:var(--brass);margin-right:8px}
.empty{color:var(--faded);font-style:italic;padding:8px 0}
.note{border:1px solid var(--rule);padding:6px 12px;color:var(--faded);font-size:.95rem;margin:8px 0}
.plan{display:grid;gap:4px;font-size:.98rem}
.plan b{font-weight:700}
.tbl{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:.95rem}
th,td{text-align:left;padding:8px 8px;border-bottom:1px solid var(--rule);vertical-align:top}
th{font:400 .74rem var(--label);letter-spacing:.14em;text-transform:uppercase;color:var(--faded)}
.nums{font-variant-numeric:tabular-nums}
.moons{display:grid;grid-template-columns:auto 1fr;gap:4px 10px;align-items:center}
.moons .m{font:400 .76rem var(--label);letter-spacing:.12em;text-transform:uppercase;color:var(--faded)}
.moons .d{display:grid;grid-template-columns:repeat(31,minmax(0,1fr));gap:3px}
.moons .d button{aspect-ratio:1;max-width:100%;border-radius:50%;border:1px solid var(--rule);background:none;padding:0;cursor:pointer}
.moons .d button.today{outline:1.5px solid var(--ink);outline-offset:1px}
.key{display:flex;gap:6px;align-items:center;font-size:.85rem;color:var(--faded);flex-wrap:wrap;margin-top:10px}
.key i{width:14px;height:14px;border-radius:50%;display:inline-block;border:1px solid var(--brass)}
.fund{display:grid;gap:8px}
.fund .big{font:500 2rem var(--display);color:var(--ink)}
.dots20{display:grid;grid-template-columns:repeat(10,1fr);gap:6px;max-width:420px}
.dots20 i{aspect-ratio:1;border-radius:50%;border:1px solid var(--rule)}
.dots20 i.on{background:var(--brass);border-color:var(--brass)}
.pill{display:inline-block;font:400 .72rem var(--label);letter-spacing:.12em;text-transform:uppercase;padding:2px 9px;border-radius:0;border:1px solid var(--rule);color:var(--faded)}
.pill.ok{border-color:var(--moss);color:var(--moss)}
.pill.wait{border-color:var(--brass);color:var(--brass)}
.drawn{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;margin:8px 0 14px}
.tcard{border:1px solid var(--gold);outline:1px solid var(--gold);outline-offset:-5px;border-radius:0;padding:16px 12px;text-align:center;background:#2a2220;min-height:120px;display:grid;align-content:center;gap:6px}
.tcard .pos{font:400 .7rem var(--label);letter-spacing:.14em;text-transform:uppercase;color:var(--faded)}
.tcard .nm{font:italic 500 1.25rem/1.2 var(--display);color:var(--ink)}
.tcard.rev .nm{color:var(--wine)}
.counter{display:flex;align-items:center;gap:10px}
.counter .n{font:500 1.8rem var(--display);color:var(--ink);min-width:2ch;text-align:center}
.wip{display:grid;grid-template-columns:1fr;gap:20px}
@media (min-width:820px){.wip{grid-template-columns:1fr 1fr}}
.tally{border:1px solid var(--rule);padding:14px;display:grid;gap:10px;justify-items:center;text-align:center}
.tally .lbl{font:400 .78rem var(--label);letter-spacing:.16em;text-transform:uppercase;color:var(--faded)}
.tally .big{font:500 3.4rem/1 var(--display);color:var(--ink);font-variant-numeric:tabular-nums}
.tally .of{font-size:1rem;color:var(--faded)}
.tally .btns{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.tally .btns button{min-width:64px;min-height:56px;font-size:1.3rem}
.tally .btns .plus{min-width:120px}
.tally.done{border-color:var(--moss)}
.lock{position:fixed;inset:0;z-index:30;background:radial-gradient(ellipse at 50% 40%,#2c2129 0%,#1A1614 72%);display:grid;place-items:center;align-content:center;gap:18px;padding:max(16px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(16px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px));transition:opacity .7s ease}
.lock.gone{opacity:0;pointer-events:none}
.book{position:relative;width:min(84vw,400px,calc(68vh*.72));aspect-ratio:360/500;perspective:1800px}
.book .under{position:absolute;inset:0;background:#E9DFCB;border:1px solid #96896E;box-shadow:inset 18px 0 30px -18px rgba(40,34,31,.6);display:grid;place-items:center;text-align:center;color:#3C2B2F;padding:24px}
.book .under p{margin:0;font:400 2.1rem/1.2 var(--script)}
.book .under small{display:block;font:500 .8rem var(--label);letter-spacing:.18em;text-transform:uppercase;margin-top:10px;color:#795D4F}
.book .cover{position:absolute;inset:0;transform-origin:left center;transition:transform 1.4s cubic-bezier(.6,.05,.3,1);transform-style:preserve-3d;filter:drop-shadow(0 18px 30px rgba(0,0,0,.45))}
.book .cover svg{width:100%;height:100%;display:block}
.book.open .cover{transform:rotateY(-165deg)}
.clasp{transition:transform .8s ease .25s,opacity .6s ease .45s;transform-box:view-box}
.book.unlocked .clasp{transform:translate(60px,10px) rotate(14deg);opacity:0}
#key{cursor:grab;touch-action:none}
#key:active{cursor:grabbing}
#key:focus-visible .keybow{stroke:#E2D6BE}
.frieze{display:block;margin-bottom:2px}
.lock .hint{font:400 .82rem var(--label);letter-spacing:.18em;text-transform:uppercase;color:var(--faded);text-align:center}
.frontgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.chapter{display:grid;gap:4px;text-align:left;background:none;border:1px solid var(--rule);padding:14px 16px;cursor:pointer;color:var(--text);min-height:44px}
.chapter:hover{border-color:var(--gold)}
.chapter b{font:italic 500 1.3rem var(--display);color:var(--ink)}
.chapter span{font-size:.92rem;color:var(--faded)}
.greet{font:400 2.4rem/1.1 var(--script);color:var(--brass);margin:0}
.glance{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px}
.glance div{display:grid;gap:2px}
.glance .lbl{font:400 .74rem var(--label);letter-spacing:.16em;text-transform:uppercase;color:var(--faded)}
.glance .v{font:500 1.35rem var(--display);color:var(--ink)}
@media (prefers-reduced-motion:reduce){.book .cover,.clasp,.lock{transition:none}}
.foot{margin-top:28px;color:var(--faded);font-size:.85rem}
.pad{display:grid;gap:10px}
.tools{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.tools button.t{min-height:44px;min-width:44px;border:1px solid var(--rule);background:var(--paper);border-radius:0;cursor:pointer;padding:0 10px;font:600 .78rem var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.tools button.t[aria-pressed="true"]{border-color:var(--brass);background:var(--wash)}
.tools .sw{width:32px;height:32px;min-width:32px;border-radius:50%;border:2px solid var(--rule);cursor:pointer;padding:0}
.tools .sw[aria-pressed="true"]{border-color:var(--ink);outline:2px solid var(--brass);outline-offset:1px}
.tools input[type=range]{width:110px;accent-color:var(--brass)}
.sheet{position:relative;width:100%;max-width:100%;aspect-ratio:1/1.414;border:1px solid var(--rule);border-radius:3px;overflow:hidden;background:#E9DFCB}
.sheet.wide{aspect-ratio:4/3}
.sheet canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.gallery figure{margin:0;display:grid;gap:6px}
.gallery img{width:100%;border:1px solid var(--rule);border-radius:3px;background:#E9DFCB;cursor:zoom-in}
.gallery figcaption{font-size:.85rem;color:var(--faded);display:flex;justify-content:space-between;gap:6px;align-items:center;flex-wrap:wrap}
.thumb{max-width:220px;width:100%;border:1px solid var(--rule);border-radius:3px;background:#E9DFCB;display:block;margin:6px 0}
.viewer{position:fixed;inset:0;z-index:20;background:rgba(10,12,20,.85);display:grid;place-items:center;padding:max(16px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(16px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}
.viewer img{max-width:100%;max-height:85vh;background:#E9DFCB;border-radius:3px}
/* Black velvet ribbon with the moon padlock, as on the website. */
.brand{padding-right:64px}
nav.tabs{margin-right:52px}
.ribbon{position:absolute;right:6px;top:0;width:44px;height:80px;display:flex;flex-direction:column;align-items:center;padding:12px 0 0;border:0;cursor:pointer;
  background:linear-gradient(90deg,rgba(0,0,0,.35),rgba(255,255,255,.10) 50%,rgba(0,0,0,.35)),#1A1614;box-shadow:inset 0 0 0 1px rgba(150,137,110,.55),3px 3px 6px rgba(0,0,0,.45);z-index:6}
.ribbon::after{content:"";position:absolute;left:0;right:0;bottom:-12px;height:13px;background:#1A1614;clip-path:polygon(0 0,100% 0,100% 100%,50% 0,0 100%)}
.ribbon .lbl{writing-mode:vertical-rl;font:400 .8rem "IM Fell English SC",var(--display);letter-spacing:.16em;color:var(--brass)}
.charm{position:absolute;left:0;right:0;top:calc(100% - 4px);display:flex;flex-direction:column;align-items:center;transform:rotate(7deg);transform-origin:50% 0;pointer-events:none;transition:transform .6s ease}
.ribbon:hover .charm,.ribbon:focus-visible .charm{transform:rotate(-5deg)}
.charm .lk{margin-top:-4px;filter:drop-shadow(0 4px 4px rgba(0,0,0,.6))}
.charm .mn{margin:-7px 0 0 26px;transform:rotate(-14deg)}
.book .bookmark{position:absolute;right:18%;top:calc(100% - 8px);width:30px;height:46px;background:linear-gradient(90deg,rgba(0,0,0,.35),rgba(255,255,255,.10) 50%,rgba(0,0,0,.35)),#1A1614;box-shadow:2px 3px 5px rgba(0,0,0,.45);z-index:2}
.book .bookmark::after{content:"";position:absolute;left:0;right:0;bottom:-10px;height:11px;background:#1A1614;clip-path:polygon(0 0,100% 0,100% 100%,50% 0,0 100%)}
.book .bookmark .charm{top:calc(100% + 2px)}
.lock .hint{margin-top:88px}
@media (max-width:520px){.brand{padding-right:50px}nav.tabs{margin-right:40px}.ribbon{width:36px;height:66px;right:2px}.ribbon .lbl{font-size:.7rem}}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
