:root{--paper: #f5f0e3;--paper-2: #efe8d6;--ink: #2b2620;--ink-soft: #6f6350;--line: #d9cdb2;--seal: #a33327;--hp: #b9452f;--neili: #3c6e8f;--xp: #8a7a4a}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);color:var(--ink);font-family:"Noto Serif SC",Songti SC,STSong,SimSun,serif;-webkit-font-smoothing:antialiased}.app{max-width:520px;margin:0 auto;padding:16px 14px 48px}.header{margin-bottom:12px}.title-row{display:flex;align-items:baseline;gap:10px}.title-row h1{margin:0;font-size:28px;letter-spacing:6px;font-weight:700}.seal{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;background:var(--seal);color:var(--paper);border-radius:3px;font-size:15px;align-self:center}.header-info{display:flex;gap:16px;color:var(--ink-soft);font-size:13px;margin-top:4px}.offline-banner{background:var(--paper-2);border:1px dashed var(--line);border-radius:6px;padding:10px 12px;font-size:13px;margin-bottom:12px;cursor:pointer}.card{background:var(--paper-2);border:1px solid var(--line);border-radius:6px;padding:14px;margin-bottom:12px}.card h2{margin:0 0 6px;font-size:17px;letter-spacing:2px}.panel{display:block}.muted{color:var(--ink-soft);font-size:13px;margin:4px 0 10px}.small{font-size:12px}.equip-line{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.skills-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:10px 0 2px}.skill-chip{border:1px solid var(--line);background:var(--paper);border-radius:4px;padding:5px 2px;text-align:center;font-size:12px;display:flex;flex-direction:column;gap:1px}.skill-name{color:var(--ink-soft)}.skill-chip b{font-size:15px}.skill-bar{height:3px;margin-top:3px;background:#2b262014;border-radius:2px;overflow:hidden}.progress-block{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}.progress-label{display:flex;justify-content:space-between;font-size:13px;margin-bottom:4px}.tone-herb{background:#5e7d4c}.activity-strip{margin:8px 0 2px}.strip-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:4px;font-size:12px}.strip-label{color:var(--seal)}.strip-detail{color:var(--ink-soft);text-align:right}.idle-inline{margin-top:6px}.next-unlock{font-size:12px;color:var(--seal);background:#a333270d;border:1px dashed var(--seal);border-radius:4px;padding:6px 10px;margin-bottom:8px}.lock-tag{font-size:12px;color:var(--ink-soft);border:1px solid var(--line);border-radius:3px;padding:1px 8px;white-space:nowrap}.recipe-item.locked{opacity:.55}.bar-row{display:flex;align-items:center;gap:8px;margin:6px 0}.bar-label{width:34px;font-size:13px;color:var(--ink-soft);flex-shrink:0}.bar{flex:1;height:10px;background:#2b262014;border-radius:5px;overflow:hidden}.bar.thin{height:6px}.bar-fill{height:100%;border-radius:5px;transition:width .4s ease}.tone-hp{background:var(--hp)}.tone-neili{background:var(--neili)}.tone-xp{background:var(--xp)}.bar-num{width:70px;text-align:right;font-size:12px;color:var(--ink-soft);flex-shrink:0}.status-meta{display:flex;gap:16px;align-items:center;font-size:13px;color:var(--ink-soft);margin-top:8px}.status-meta b{color:var(--ink);font-size:15px}.injured-tag{background:var(--seal);color:var(--paper);padding:1px 8px;border-radius:3px;font-size:12px}.manuals{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px}.manual-item{margin-bottom:8px}.manual-head{display:flex;align-items:baseline;gap:8px;font-size:13px}.special-note{margin-top:8px;font-size:12px;color:var(--seal)}.tabs{display:flex;gap:8px;margin-bottom:12px}.tab{flex:1;padding:8px 0;border:1px solid var(--line);background:var(--paper);color:var(--ink-soft);border-radius:6px;font-family:inherit;font-size:14px;letter-spacing:4px;cursor:pointer}.tab.active{background:var(--ink);color:var(--paper);border-color:var(--ink)}.btn{padding:8px 16px;border:1px solid var(--ink);background:var(--paper);color:var(--ink);border-radius:4px;font-family:inherit;font-size:14px;cursor:pointer}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.primary{background:var(--seal);border-color:var(--seal);color:var(--paper)}.btn.danger{color:var(--seal);border-color:var(--seal);background:transparent}.activity-toggle{display:flex;flex-direction:column;gap:8px}.elixir-row{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft);margin-top:10px;cursor:pointer}.elixir-row input{accent-color:var(--seal)}.rate-rows{margin:10px 0}.rate-row{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px dashed var(--line);font-size:14px}.rate-row:last-child{border-bottom:none}.injured-card .bar{height:12px}.muted-card{border-style:dashed}.zone-block{border-top:1px dashed var(--line);padding-top:8px;margin-top:8px}.zone-block:first-of-type{border-top:none;margin-top:0;padding-top:0}.zone-name{font-size:13px;color:var(--seal);letter-spacing:2px;margin-bottom:4px}.enemy-tags{display:flex;gap:6px}.weapon-tag{font-size:12px;padding:1px 8px;border-radius:3px;border:1px solid var(--line);color:var(--ink-soft)}.recipe-group{margin-bottom:8px}.recipe-item,.inv-item{border-top:1px dashed var(--line);padding-top:8px;margin-top:8px}.recipe-item .btn,.inv-item .btn{padding:4px 12px;font-size:13px}.mat-ok{color:var(--ink)}.mat-lack{color:var(--seal)}.inv-actions{display:flex;gap:6px}.mats-row{display:flex;gap:10px;flex-wrap:wrap}.mat-chip{border:1px solid var(--line);background:var(--paper);border-radius:4px;padding:6px 10px;font-size:13px}.mat-chip b{color:var(--seal)}.wending-card{border:1px solid var(--seal);box-shadow:inset 0 0 0 1px #a3332726}.wending-card h2{color:var(--seal)}.map-block{border-top:1px dashed var(--line);padding-top:10px;margin-top:10px}.map-block:first-of-type{border-top:none;margin-top:0;padding-top:0}.map-name{font-size:15px;letter-spacing:3px;margin-bottom:4px}.map-lock{margin-left:10px;font-size:12px;color:var(--seal);border:1px solid var(--seal);border-radius:3px;padding:1px 8px;letter-spacing:1px}.sect-current p{margin:4px 0}.preset-list{display:flex;flex-direction:column;gap:8px}.preset-item{text-align:left;border:1px solid var(--line);background:var(--paper);border-radius:6px;padding:10px 12px;font-family:inherit;cursor:pointer;display:flex;flex-direction:column;gap:4px}.preset-item span{font-size:12px;color:var(--ink-soft)}.preset-item.active{border-color:var(--seal);box-shadow:inset 0 0 0 1px var(--seal)}.preset-item.active b{color:var(--seal)}.enemy-item{border-top:1px dashed var(--line);padding-top:10px;margin-top:10px}.enemy-head{display:flex;align-items:center;justify-content:space-between}.difficulty{font-size:12px;padding:1px 8px;border-radius:3px;border:1px solid var(--line);color:var(--ink-soft)}.d-凶险{border-color:var(--seal);color:var(--seal)}.d-九死一生{background:var(--seal);color:var(--paper)}.enemy-item .btn{margin-top:6px}.enemy-actions{display:flex;gap:8px;margin-top:6px}.enemy-actions .btn{margin-top:0;flex:1}.injured-banner{color:var(--seal);font-size:13px}.log-list{list-style:none;margin:0;padding:0;max-height:50vh;overflow-y:auto}.log-list li{display:flex;gap:10px;padding:6px 0;border-bottom:1px dashed var(--line);font-size:13px;line-height:1.6}.log-latest{color:var(--seal)}.log-time{color:var(--ink-soft);flex-shrink:0;font-size:12px;padding-top:2px}.battle-overlay{position:fixed;inset:0;background:#f5f0e3fa;z-index:10;display:flex;padding:16px;overflow:hidden}.battle-box{width:100%;max-width:520px;max-height:100%;margin:auto;display:flex;flex-direction:column;overflow-y:auto;overscroll-behavior:contain}.battle-head{display:flex;align-items:baseline;justify-content:space-between}.battle-head h2{margin:0;font-size:20px;letter-spacing:3px}.round-badge{font-size:13px;color:var(--ink-soft)}.fighters-row{display:flex;align-items:flex-start;gap:10px;margin-top:12px}.fighter{flex:1}.fighter-right{text-align:right}.fighter-name{font-size:14px;margin-bottom:4px}.fighter .bar-fill,.mini-bar .bar-fill{transition:width .3s ease}.mini-bar{height:12px;background:#2b262014;border-radius:6px;overflow:hidden;margin-bottom:4px}.mini-bar.thin{height:6px}.fighter .mini-bar{width:100%}.fighter-right .mini-bar .bar-fill{margin-left:auto}.fighter-nums{font-size:12px;color:var(--ink-soft)}.vs{color:var(--seal);font-size:18px;padding-top:18px}.stances-row{display:flex;justify-content:space-between;font-size:13px;color:var(--ink-soft);margin:8px 0}.prose{background:var(--paper-2);border:1px solid var(--line);border-radius:6px;padding:12px;flex:1 1 140px;min-height:96px;overflow-y:auto;overflow-anchor:none;overscroll-behavior:contain;font-size:14px;line-height:1.9}.prose p{margin:0 0 4px;color:var(--ink-soft)}.prose p:first-child{margin-top:0}.prose-latest{color:var(--ink)!important}.prose p:has(+.prose-latest){color:var(--ink-soft)}.outcome{margin-top:10px;padding:10px 12px;border-radius:6px;font-size:14px;letter-spacing:1px}.outcome.win{border:1px solid var(--xp);color:var(--xp);background:#8a7a4a14}.outcome.lose{border:1px solid var(--seal);color:var(--seal);background:#a333270f}.battle-controls{display:flex;gap:8px;margin-top:12px}.battle-controls .btn{flex:1}.save-actions{display:flex;gap:8px;margin:10px 0 8px}.save-actions .btn{flex:1}.save-textarea{width:100%;min-height:88px;padding:10px;border:1px solid var(--line);border-radius:4px;background:var(--paper);color:var(--ink);font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:16px;line-height:1.5;resize:vertical;box-sizing:border-box}@media(max-width:640px){.app{padding-bottom:calc(72px + env(safe-area-inset-bottom))}.tabs{position:fixed;left:0;right:0;bottom:0;z-index:5;margin:0;padding:8px 10px calc(8px + env(safe-area-inset-bottom));background:var(--paper-2);border-top:1px solid var(--line)}.tab{padding:11px 0;font-size:15px}.btn{min-height:44px}.title-row h1{font-size:24px}.battle-overlay{padding:10px}.skills-grid{grid-template-columns:repeat(5,1fr);gap:4px}.skill-chip{padding:4px 1px}}@media(min-width:641px){.save-textarea{font-size:12px}}.tactics-editor{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}.tactic-row{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-bottom:6px}.tactic-row select,.tactic-row input{font-family:inherit;font-size:12px;padding:5px 2px;border:1px solid var(--line);border-radius:3px;background:var(--paper);color:var(--ink)}.tactic-row input{width:52px}.tactic-arrow{color:var(--ink-soft);font-size:12px}.tactic-ops{display:flex;gap:4px}.tactic-ops button{border:1px solid var(--line);background:var(--paper);border-radius:3px;padding:4px 7px;font-size:12px;cursor:pointer;font-family:inherit}.tactic-ops button:disabled{opacity:.35;cursor:not-allowed}.fame-stats{display:flex;flex-wrap:wrap;gap:12px;font-size:13px;color:var(--ink-soft);margin-top:8px}.fame-stats b{color:var(--ink);font-size:15px}.fame-bonus,.fame-bonus b{color:var(--seal)}.minglu-item{border-top:1px dashed var(--line);padding-top:8px;margin-top:8px}.minglu-item.recorded .enemy-head b{color:var(--ink)}.minglu-item:not(.recorded){opacity:.55}.minglu-tag{font-size:12px;padding:1px 8px;border-radius:3px;border:1px solid var(--line);color:var(--ink-soft)}.minglu-tag.on{border-color:var(--seal);color:var(--seal)}.hex-board{width:100%;display:block;background:var(--paper);border:1px solid var(--line);border-radius:6px;margin:10px 0 2px}.battle-fine{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap}.battle-fine .btn{padding:4px 10px;font-size:12px;min-height:0}.travel-progress{margin-top:4px}.travel-card{border:1px solid #5e7d4c;box-shadow:inset 0 0 0 1px #5e7d4c26}.travel-card h2{color:#5e7d4c}.skill-groups{margin:8px 0 2px}.skill-group-label{font-size:12px;letter-spacing:3px;color:var(--ink-soft);margin:8px 0 4px;display:flex;align-items:center;gap:6px}.skill-group-label:after{content:"";flex:1;height:1px;background:var(--line)}.skill-group-label.combat{color:var(--seal)}.skill-group-label.life{color:#5e7d4c}.skill-chip.combat{border-color:#a3332759}.skill-chip.life{border-color:#5e7d4c66}.skill-chip.idle-skill{opacity:.62}.manual-group{margin-bottom:8px}.manual-group-label{font-size:12px;letter-spacing:2px;color:var(--ink-soft);border-bottom:1px dashed var(--line);padding-bottom:3px;margin-bottom:4px}.manual-line{display:grid;grid-template-columns:92px 26px 56px 30px 64px;gap:6px;align-items:center;font-size:12px;padding:3px 0}.manual-line.compact{opacity:.6}.manual-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.manual-line .manual-kind{color:var(--ink-soft);font-size:11px}.tag-slot{font-size:11px}.manual-stage{color:var(--seal);font-size:11px}.manual-bar{position:relative;width:64px;height:5px;background:#2b26201a;border-radius:3px;overflow:visible}.manual-num{display:none;flex-direction:column;align-items:center;gap:1px;position:absolute;bottom:9px;left:50%;transform:translate(-50%);font-size:10px;color:var(--ink);background:var(--paper-2);border:1px solid var(--seal);border-radius:3px;padding:2px 6px;white-space:nowrap;z-index:2;box-shadow:0 2px 6px #2b262026}.manual-num-effect{color:var(--seal)}.manual-line:hover .manual-num,.manual-line.revealed .manual-num{display:block}.manual-line{cursor:pointer}.manual-next{text-align:right;color:var(--ink-soft);font-size:11px}.live-tag{white-space:nowrap;font-size:12px;padding:1px 8px;border-radius:3px;background:#a3332714;border:1px solid var(--seal);color:var(--seal)}.off-tag{white-space:nowrap;font-size:12px;padding:1px 8px;border-radius:3px;border:1px solid var(--line);color:var(--ink-soft)}.manuals-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;font-size:13px;color:var(--seal);letter-spacing:2px;padding-bottom:4px}.manual-inactive-toggle{font-size:12px;color:var(--ink-soft);cursor:pointer;padding:3px 0}.manual-item.compact{opacity:.55;padding:2px 0;margin:2px 0}.manual-item.compact .manual-head{font-size:12px}.offline-overlay{position:fixed;inset:0;background:#2b262073;z-index:20;display:flex;align-items:center;justify-content:center;padding:16px}.offline-box{width:100%;max-width:420px;background:var(--paper);border:1px solid var(--seal);border-radius:8px;padding:20px 18px;box-shadow:0 8px 32px #2b262040}.offline-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap;border-top:1px dashed var(--line);padding:8px 0;font-size:13px}.offline-row:first-of-type{border-top:none}.offline-row b{color:var(--seal)}.offline-xiuwei{text-align:center;font-size:13px;color:var(--ink-soft);border-top:1px solid var(--line);padding:10px 0 12px;margin-top:4px}.offline-xiuwei b{color:var(--ink);font-size:17px}
