:root{--parchment:#f2e6cc;--parchment-deep:#e6d5b0;--ink:#2b2118;--ink-soft:#6b5a45;--fire:#d9892b;--cold:#5f7398;--spirit:#bfe6f0;--spirit-ink:#3c7f93;--night:#1b2a26;--earth:#8a6a3d;--blame:#9a4434;--line:#2b21182e;--radius:14px;--serif:"Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{background:var(--night);height:100%;color:var(--ink);font-family:var(--serif);-webkit-font-smoothing:antialiased;overscroll-behavior:none;margin:0}#app{position:fixed;inset:0;overflow:hidden}#stage{position:absolute;inset:0}#loading{color:var(--parchment);letter-spacing:.02em;place-items:center;font-size:1.1rem;display:grid;position:absolute;inset:0}button,select{font:inherit;color:inherit}button{cursor:pointer}.topbar{padding:calc(env(safe-area-inset-top) + 10px) 12px 0;pointer-events:none;flex-direction:column;gap:8px;display:flex;position:absolute;top:0;left:0;right:0}.topbar .row{border:1px solid var(--line);border-radius:var(--radius);pointer-events:auto;background:#f2e6ccf0;align-items:center;gap:8px;padding:6px 8px 6px 12px;display:flex;box-shadow:0 2px 10px #00000040}.date{font-variant-numeric:tabular-nums;white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.86rem;overflow:hidden}.presence{min-height:34px;color:var(--spirit-ink);font-variant-numeric:tabular-nums;white-space:nowrap;background:0 0;border:0;padding:4px 2px;font-weight:600}.controls{justify-content:space-between;align-items:center;gap:8px;display:flex}.valley{pointer-events:auto;background:#f2e6ccf0;min-width:42px;font-size:1rem}.speeds{border:1px solid var(--line);pointer-events:auto;background:#f2e6ccf0;border-radius:999px;gap:2px;padding:3px;display:flex}.speed{letter-spacing:-.1em;background:0 0;border:0;border-radius:999px;min-width:40px;min-height:34px;font-size:.75rem}.speed.on{background:var(--ink);color:var(--parchment)}.chip{border:1px solid var(--line);background:var(--parchment);text-transform:capitalize;border-radius:999px;min-height:34px;padding:6px 12px}.chip.on{background:var(--ink);color:var(--parchment)}.weather{white-space:nowrap}.sheet{background:var(--parchment);height:34%;max-height:34%;padding-bottom:env(safe-area-inset-bottom);border-top-left-radius:20px;border-top-right-radius:20px;flex-direction:column;transition:max-height .25s,height .25s;display:flex;position:absolute;bottom:0;left:0;right:0;box-shadow:0 -4px 20px #00000059}.sheet.expanded{height:72%;max-height:72%}.handle{background:0 0;border:0;flex:none;align-self:center;width:56px;height:18px;position:relative}.handle:after{content:"";background:var(--line);border-radius:2px;height:4px;position:absolute;top:7px;left:12px;right:12px}.tabs{border-bottom:1px solid var(--line);flex:none;gap:4px;padding:0 14px 6px;display:flex}.tab{color:var(--ink-soft);background:0 0;border:0;border-radius:10px;padding:6px 10px}.tab.on{background:var(--parchment-deep);color:var(--ink);font-weight:600}.tab:disabled{opacity:.4}.sheet-body{-webkit-overflow-scrolling:touch;padding:8px 16px 20px;overflow-y:auto}.toggle{color:var(--ink-soft);margin:4px 0 8px;font-size:.8rem;display:block}.events{margin:0;padding:0;list-style:none}.event{border-bottom:1px dashed var(--line);cursor:pointer;grid-template-columns:7.2em 1fr;gap:8px;padding:7px 0;font-size:.92rem;line-height:1.35;display:grid}.event.spirit .what,.why .spirit>.what{color:var(--spirit-ink);font-style:italic}.when{color:var(--ink-soft);font-variant-numeric:tabular-nums;padding-top:2px;font-size:.75rem}.empty{color:var(--ink-soft);padding:12px 0;font-style:italic}.person h2{align-items:center;gap:8px;margin:4px 0 0;font-size:1.3rem;display:flex}.person h3{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);margin:16px 0 6px;font-size:.78rem}.dot{border:1.5px solid var(--ink);border-radius:50%;width:14px;height:14px;display:inline-block}.sub{color:var(--ink-soft);margin:2px 0 8px;font-size:.85rem}.intent{margin:8px 0;font-style:italic;line-height:1.4}.kin{margin:6px 0 10px;font-size:.88rem}.link{text-decoration:underline;-webkit-text-decoration-color:var(--line);text-decoration-color:var(--line);text-underline-offset:3px;background:0 0;border:0;padding:0}.traits{grid-template-columns:6em 1fr;align-items:center;gap:6px 10px;margin:0;font-size:.85rem;display:grid}.traits dd{margin:0}.bar{background:var(--parchment-deep);vertical-align:middle;border-radius:4px;width:100%;max-width:220px;height:7px;display:inline-block;overflow:hidden}.bar .fill{border-radius:4px;height:100%;display:block}.ties,.memories{margin:0;padding:0;font-size:.88rem;list-style:none}.ties li{grid-template-columns:1fr auto 90px 4.2em;align-items:center;gap:8px;padding:5px 0;display:grid}.ties .link{text-align:left}.tag{border:1px solid var(--line);color:var(--ink-soft);border-radius:999px;padding:1px 6px;font-size:.68rem}.num{color:var(--ink-soft);font-size:.72rem}.memories li{border-bottom:1px dashed var(--line);cursor:pointer;padding:5px 0}.primary{background:var(--spirit-ink);color:#f4fbfd;border:0;border-radius:12px;width:100%;min-height:44px;margin:12px 0 4px;font-weight:600;display:block}.primary.danger{background:var(--ink);color:var(--parchment)}.primary:disabled{opacity:.45}.modal{background:#0a10148c;justify-content:center;align-items:flex-end;display:flex;position:absolute;inset:0}.modal[hidden]{display:none}.card{background:var(--parchment);width:100%;max-width:520px;max-height:85%;padding:18px 18px calc(env(safe-area-inset-bottom) + 18px);border-top-left-radius:20px;border-top-right-radius:20px;position:relative;overflow-y:auto}.card h2{margin:0 0 4px}.close{background:0 0;border:0;width:40px;height:40px;font-size:1.6rem;position:absolute;top:8px;right:10px}.options{flex-wrap:wrap;gap:6px;margin:10px 0;display:flex}.stepper{align-items:center;gap:8px;margin:6px 0;display:flex}.count{text-align:center;min-width:1.5em;font-weight:600}.field{color:var(--ink-soft);flex-direction:column;gap:4px;font-size:.85rem;display:flex}.field select{border:1px solid var(--line);min-height:40px;color:var(--ink);background:#fbf5e7;border-radius:10px;padding:0 8px}.why,.why ul{margin:0;padding:0;list-style:none}.why ul{border-left:2px solid var(--line);margin-left:10px;padding-left:12px}.why li{flex-direction:column;padding:6px 0;display:flex}.because{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);margin-top:6px;font-size:.72rem}.readings h3{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);margin:16px 0 6px;font-size:.78rem}.views{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.view{grid-template-columns:1fr;gap:3px;display:grid}.view .bar{max-width:none;height:6px}.view .fill{background:var(--ink-soft)}.view.spirit .fill{background:var(--spirit-ink)}.view.ancestors .fill{background:var(--earth)}.view.person .fill{background:var(--blame)}.view.chance .fill{opacity:.45}.view .what{line-height:1.3}.view .reasons{color:var(--ink-soft);font-size:.85rem;font-style:italic;line-height:1.3}.view .who{color:var(--ink-soft);flex-wrap:wrap;align-items:center;gap:6px;font-size:.78rem;display:flex}.tag.seer{border-color:var(--spirit-ink);color:var(--spirit-ink)}.tag.suspect{border-color:var(--blame);color:var(--blame)}.quote{border-left:3px solid var(--spirit-ink);cursor:pointer;padding-left:10px;font-style:italic}.memories .charm,.memories.tales li{cursor:default;font-style:italic}.myth{margin:10px 0 16px}.myth .quote{border-left-color:var(--fire);cursor:default;margin-bottom:2px}.myth .sub{margin-top:0}.myth summary{cursor:pointer;color:var(--spirit-ink);padding:6px 0;font-size:.9rem}.memories li.spirit{color:var(--spirit-ink)}.toast{left:50%;top:calc(env(safe-area-inset-top) + 110px);background:var(--ink);max-width:90%;color:var(--parchment);opacity:0;pointer-events:none;border-radius:12px;padding:10px 14px;font-size:.9rem;transition:opacity .2s,transform .2s;position:absolute;transform:translate(-50%)translateY(-8px)}.toast.show{opacity:1;transform:translate(-50%)}.toast.bad{background:#7a3324}@media (min-width:900px){.sheet,.sheet.expanded{border-radius:20px;width:400px;height:auto;max-height:none;inset:120px 16px 16px auto}.handle{display:none}}
