:root{--sun:#ffc5d3;--sun-wash:#ffdce4;--sun-deep:#f4a9bd;--ink:#2e2024;--ink-soft:#6e5760;--paper:#fdf6f4;--card:#fefaf9;--hairline:#f2b3c3;--hairline-soft:#efdbdb;--peri:#c9cdec;--powder:#cbdaf1;--sage:#c7dab2;--butter:#f0ea8c;--butter-deep:#e4da63;--danger:#b0563f;--on-ink:#fdf6f4;--focus-ring:rgba(46,32,36,0.35);--shadow-chrome:0 2px 6px rgba(0,0,0,0.12);--shadow-lifted:0 4px 10px rgba(0,0,0,0.18);--scrim:rgba(46,32,36,0.35);--font-serif:"New York",ui-serif,Georgia,"Iowan Old Style","Times New Roman",serif;--font-sans:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Inter,ui-sans-serif,system-ui,sans-serif;--r-pill:999px;--r-sheet:24px;--r-card:18px;--r-input:14px;--r-small:10px}html[data-theme=dark]{--sun:#261319;--sun-wash:#372028;--sun-deep:#543040;--ink:#f5e9ed;--ink-soft:#c0a2ad;--paper:#2e1b22;--card:#362229;--hairline:#5c3644;--hairline-soft:#4a2f39;--peri:#4d5588;--powder:#40628f;--sage:#55683c;--butter:#877d2f;--butter-deep:#a89c3d;--danger:#d0745a;--on-ink:#2e1b22;--focus-ring:rgba(245,233,237,0.4);--shadow-chrome:0 2px 6px rgba(0,0,0,0.4);--shadow-lifted:0 4px 12px rgba(0,0,0,0.5);--scrim:rgba(10,5,7,0.55)}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{background:var(--sun);color:var(--ink);font-family:var(--font-sans);font-size:16px;font-weight:500;-webkit-font-smoothing:antialiased;overscroll-behavior:none}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}input,textarea{font:inherit;color:var(--ink)}::placeholder{color:var(--ink-soft);opacity:.8}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.serif-title{font-size:40px;letter-spacing:-.5px}.serif-subtitle,.serif-title{font-family:var(--font-serif);font-weight:600}.serif-subtitle{font-size:26px}.serif-sheet{font-family:var(--font-serif);font-size:21px;font-weight:600}.micro-label{font-size:13px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase}.meta,.micro-label{color:var(--ink-soft)}.meta{font-size:14px;font-weight:500}.card{background:var(--card);border:.5px solid var(--hairline-soft);border-radius:var(--r-card)}.pill-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:38px;padding:0 16px;border-radius:var(--r-pill);font-size:14px;font-weight:700;transition:transform .15s cubic-bezier(.34,1.56,.64,1);white-space:nowrap}.pill-btn:active{transform:scale(.96)}.pill-ink{background:var(--ink);color:var(--on-ink)}.pill-butter{background:var(--butter);border:.5px solid var(--butter-deep);color:var(--ink)}.pill-wash{background:var(--sun-wash);border:.5px solid var(--hairline);color:var(--ink)}.pill-peri{background:var(--peri);color:var(--ink)}.pill-powder{background:var(--powder);color:var(--ink)}.pill-danger{background:var(--danger);color:var(--paper)}.chip{display:inline-flex;align-items:center;gap:5px;height:34px;padding:0 14px;border-radius:var(--r-pill);font-size:14px;font-weight:500;background:var(--sun-wash);border:.5px solid var(--hairline-soft);color:var(--ink);transition:transform .15s cubic-bezier(.34,1.56,.64,1)}.chip:active{transform:scale(.96)}.chip[data-selected=true]{background:var(--sun-deep);border-color:var(--sun-deep)}.key-hint{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 5px;border-radius:6px;color:var(--ink-soft);font-family:var(--font-sans);font-size:11.5px;font-weight:700}.key-hint,.text-input{border:.5px solid var(--hairline-soft);background:var(--paper)}.text-input{width:100%;border-radius:var(--r-input);padding:12px 14px;font-size:16px;font-weight:500}.text-input:focus{outline:2px solid var(--focus-ring);outline-offset:0}.scrim{position:fixed;inset:0;background:var(--scrim);z-index:40;animation:fade-in .15s ease-out}.sheet{background:var(--paper);border:.5px solid var(--hairline-soft);border-radius:var(--r-sheet);box-shadow:var(--shadow-lifted);animation:sheet-in .2s cubic-bezier(.34,1.3,.64,1)}@keyframes fade-in{0%{opacity:0}}@keyframes sheet-in{0%{opacity:0;transform:translateY(10px) scale(.98)}}@keyframes toast-in{0%{opacity:0;transform:translateY(14px)}}@keyframes row-expand{0%{opacity:0;transform:translateY(-3px)}}.row-expansion{animation:row-expand .16s ease-out}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;transition-duration:.01ms!important}}*{scrollbar-width:thin;scrollbar-color:var(--hairline) transparent}