:root{--paper:#efe4cc;--paper-deep:#e3d3b0;--ink:#2b2118;--ink-soft:#5c4a37;--rust:#8b3f1d;--brass:#a87b2c;--line:#c9b48a;--night:#d9cdb4;--hp:#7d2e1a;--f-text:"Alegreya", Georgia, "Times New Roman", serif;--f-label:"Alegreya Sans SC", "Alegreya", Georgia, serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{background:var(--paper);color:var(--ink);font-family:var(--f-text);margin:0;font-size:18px;line-height:1.55}button,input,select,textarea{font:inherit;color:inherit}.app{min-height:100vh;padding-bottom:calc(64px + env(safe-area-inset-bottom,0px))}.page{max-width:640px;padding:calc(12px + env(safe-area-inset-top,0px)) max(16px, env(safe-area-inset-right,0px)) 24px max(16px, env(safe-area-inset-left,0px));margin:0 auto}.loading{text-align:center;padding-top:30vh}.tg-link{background:var(--ink);color:var(--paper);border-radius:6px;margin-top:8px;padding:10px 18px;font-weight:700;text-decoration:none;display:inline-block}.tg-link:hover{background:var(--rust)}.brand{font-family:var(--f-label);letter-spacing:.08em}.head{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;padding-bottom:6px;display:flex}.head h1{margin:0;font-size:1.35rem;line-height:1.2}.sub,.clock{font-family:var(--f-label);color:var(--ink-soft);letter-spacing:.05em;font-size:.8rem}.sub{display:block}.screen.night{background:linear-gradient(var(--night), transparent 240px);margin:-12px -16px 0;padding:12px 16px 0}.hero{font-family:var(--f-label);color:var(--ink-soft);flex-wrap:wrap;gap:4px 14px;padding:6px 0;font-size:.82rem;display:flex}.stat{align-items:center;gap:6px;display:inline-flex}.bar{background:var(--paper-deep);border:1px solid var(--line);border-radius:3px;width:64px;height:6px;display:inline-block;overflow:hidden}.bar>span{background:var(--hp);height:100%;display:block}.bar.enemy>span{background:var(--ink-soft)}.quest{color:var(--ink-soft);margin:4px 0 0;font-size:.9rem;font-style:italic}.quest span{font-family:var(--f-label);color:var(--rust);margin-right:4px;font-style:normal}.text p{text-wrap:pretty;margin:.8em 0}.combat{border:1px solid var(--line);background:var(--paper-deep);border-radius:4px;margin-top:12px;padding:8px 12px}.enemy{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.steam{font-family:var(--f-label);color:var(--brass);font-size:.85rem}.clog{margin:4px 0;font-size:.95rem}.log{color:var(--rust);font-size:.85rem;font-family:var(--f-label);margin:8px 0;padding:0;list-style:none}.actions{flex-direction:column;gap:8px;margin-top:16px;display:flex}.actions button,.sheet>button,.danger button{text-align:left;border:1px solid var(--ink-soft);cursor:pointer;background:0 0;border-radius:4px;min-height:48px;padding:10px 14px}.actions button:hover:not(:disabled){background:var(--paper-deep)}button.primary{background:var(--ink);color:var(--paper);border-color:var(--ink);font-weight:700}.actions button.primary:hover:not(:disabled){background:var(--rust)}button:disabled{opacity:.55;cursor:default}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--brass);outline-offset:2px}.nav{border-top:1px dashed var(--line);flex-direction:column;gap:6px;margin-top:8px;padding-top:10px;display:flex}.nav button{border-style:dashed;min-height:42px;font-size:.95rem}.tabs{background:var(--paper-deep);border-top:1px solid var(--line);padding:0 env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);display:flex;position:fixed;bottom:0;left:0;right:0}.tabs button{min-height:56px;font-family:var(--f-label);letter-spacing:.04em;color:var(--ink-soft);cursor:pointer;background:0 0;border:0;flex:1;font-size:.8rem;position:relative}.tabs button.on{color:var(--ink);box-shadow:inset 0 3px 0 var(--rust);font-weight:700}.badge{background:var(--rust);min-width:18px;color:var(--paper);border-radius:9px;margin-left:4px;padding:0 5px;font-size:.7rem;display:inline-block}.panel h1{margin:0 0 8px;font-size:1.4rem}.panel h2{font-family:var(--f-label);letter-spacing:.06em;color:var(--ink-soft);margin:20px 0 6px;font-size:.95rem}.muted{color:var(--ink-soft);font-size:.9rem}.map{border:1px solid var(--line);border-radius:4px;overflow-x:auto}.map svg{width:100%;height:auto;display:block}.map .paper{fill:#f3ead6}.map .road{stroke:var(--ink-soft);stroke-width:3px;stroke-dasharray:8 9;opacity:.55}.map .road.walked{stroke:var(--ink);stroke-dasharray:none;opacity:.9}.map .place circle{fill:#f3ead6;stroke:var(--ink-soft);stroke-width:3px}.map .place.visited circle{fill:var(--ink-soft)}.map .place.here circle{fill:var(--rust);stroke:var(--ink)}.map text{font-family:var(--f-text);fill:var(--ink);font-size:26px;font-style:italic}.notes{padding-left:18px;font-style:italic}.entry{border-bottom:1px dashed var(--line);padding:8px 0}.entry p{margin:4px 0;font-style:italic}.day{font-family:var(--f-label);color:var(--rust);font-size:.8rem}.stats{grid-template-columns:repeat(4,1fr);gap:6px;margin:8px 0;display:grid}.stats div{text-align:center;border:1px solid var(--line);border-radius:4px;padding:4px}.stats dt{font-family:var(--f-label);color:var(--ink-soft);font-size:.75rem}.stats dd{font-variant-numeric:tabular-nums;margin:0;font-size:1.3rem;font-weight:700}.items{margin:0;padding:0;list-style:none}.items li{border-bottom:1px dashed var(--line);justify-content:space-between;gap:8px;padding:6px 0;display:flex}.items li.equipped span:first-child{font-weight:700}.letter{border:1px solid var(--line);background:#f5ecd8;border-radius:4px;margin-bottom:12px;padding:8px 12px}.letter h2{margin-top:0}.letter .mine{color:var(--ink-soft);border-left:2px solid var(--line);padding-left:8px;font-style:italic}.danger{flex-direction:column;gap:8px;margin-top:32px;display:flex}.toast{left:16px;right:16px;bottom:calc(72px + env(safe-area-inset-bottom,0px));background:var(--ink);max-width:600px;color:var(--paper);z-index:20;border-radius:4px;margin:0 auto;padding:10px 14px;position:fixed}.modal{z-index:30;padding:max(16px, env(safe-area-inset-top,0px)) 12px 24px;background:#2b211873;position:fixed;inset:0;overflow-y:auto}.sheet{background:var(--paper);border:1px solid var(--ink-soft);border-radius:6px;flex-direction:column;gap:10px;max-width:560px;margin:0 auto;padding:16px;display:flex}.sheet h1{margin:0;font-size:1.4rem}.sheet h2{font-family:var(--f-label);letter-spacing:.06em;margin:10px 0 0;font-size:.95rem}.sheet label{font-family:var(--f-label);color:var(--ink-soft);flex-direction:column;gap:4px;font-size:.85rem;display:flex}.sheet input,.sheet select,.sheet textarea{font-family:var(--f-text);border:1px solid var(--line);background:#f8f1e1;border-radius:4px;width:100%;padding:8px 10px;font-size:1rem}.rel{border:1px dashed var(--line);border-radius:4px;gap:6px;margin:0;padding:8px;display:grid}.statrow{justify-content:space-between;align-items:center;gap:8px;display:flex}.statrow small{color:var(--ink-soft);font-size:.78rem;display:block}.stepper{font-variant-numeric:tabular-nums;align-items:center;gap:10px;display:inline-flex}.stepper button{border:1px solid var(--ink-soft);cursor:pointer;background:0 0;border-radius:4px;width:40px;height:40px;font-size:1.2rem}.link{color:var(--rust);text-align:left;cursor:pointer;background:0 0;border:0;padding:0}.err{color:var(--rust);margin:0}.gift{text-align:left;width:100%;font:inherit;color:inherit;border:1px solid var(--line);background:#f5ecd8;border-radius:4px;margin-bottom:10px;padding:8px 12px;display:block}.gift header{flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.gift header span{font-family:var(--f-label);color:var(--ink-soft);font-size:.85rem}.gift p{margin:6px 0}.gift .from{color:var(--ink-soft);font-style:italic}.gift.rare{border-color:var(--brass);box-shadow:inset 0 0 0 1px var(--brass)}.gift.curio{border:3px double var(--rust);background:linear-gradient(#f8eed6,#efdfba)}.gift.pick{cursor:pointer;min-height:48px}.sheet label.check{flex-direction:row;align-items:center;gap:8px;font-size:.95rem}.sheet label.check input{width:auto}code{letter-spacing:.05em;font-family:ui-monospace,Consolas,monospace}.gift.artifact{border-color:var(--ink-soft)}.gift.artifact.worn{border-left:4px solid var(--rust)}.gift .row,.items .row{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.stats .plus{color:var(--rust);font-size:.8rem}.envoys{flex-wrap:wrap;gap:6px;margin:8px 0 12px;padding:0;list-style:none;display:flex}.envoys li{border:1px solid var(--line);background:#f8f1e1;border-radius:4px;flex-direction:column;max-width:100%;padding:4px 10px;display:flex}.envoys li.me{border-color:var(--brass)}.envoys li span{font-family:var(--f-label);color:var(--ink-soft);font-size:.75rem}.chat{border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow-wrap:anywhere;height:min(50vh,420px);padding:8px 0;overflow-y:auto}.chat p{margin:0 0 8px}.chat .who{font-family:var(--f-label);color:var(--rust);font-size:.8rem;display:block}.chat .mine .who{color:var(--brass)}.chat time{color:var(--ink-soft);font-size:.75rem}.tavern .err{margin-top:8px}.say{gap:8px;margin-top:10px;display:flex}.say input{min-width:0;font-family:var(--f-text);border:1px solid var(--ink-soft);background:#f8f1e1;border-radius:4px;flex:1;padding:8px 10px;font-size:1rem}.say button{border:1px solid var(--ink);cursor:pointer;border-radius:4px;min-height:44px;padding:0 14px}.small{font-size:.8rem}.envoys .envoy-acts{gap:10px;display:flex}.envoys .envoy-acts .link,.chat .report{font-family:var(--f-label);font-size:.75rem}.chat .report{color:var(--ink-soft);margin-left:6px}.tavern .note{margin:8px 0 0;font-style:italic}.trade{border:3px double var(--brass);background:#f8f1e1;border-radius:4px;margin:0 0 12px;padding:8px 12px}.trade h2{margin:0 0 6px;font-size:1.05rem}.trade h3{font-family:var(--f-label);margin:0;font-size:.85rem}.trade-sides{grid-template-columns:1fr 1fr;gap:12px;display:grid}.trade ul{margin:4px 0 8px;padding-left:18px}.trade .trade-bag{padding:0;list-style:none}.trade-bag li{border-bottom:1px dotted var(--line);justify-content:space-between;gap:8px;padding:4px 0;display:flex}.trade-bag .link{text-align:center;min-width:28px;min-height:28px;font-size:1.1rem}.trade-coins input{width:7em;font:inherit;border:1px solid var(--ink-soft);background:#fffaf0;border-radius:4px;padding:4px 6px}.trade button.primary,.trade button.nav,.tavern .leave{border:1px solid var(--ink);cursor:pointer;border-radius:4px;min-height:44px;padding:0 14px}.tavern .leave{width:100%;margin-top:14px}.blocked{margin-top:10px;font-size:.9rem}
