.map-wrap{position:relative;width:100%;height:100vh;height:100dvh;overflow:hidden}.map-wrap svg.map{display:block;width:100%;height:100vh;height:100dvh}.map-wrap svg.map-hidden{display:none}.map-wrap.compact .route-line{opacity:0}.route-switch{position:absolute;top:12px;left:14px;right:14px;z-index:6;display:grid;grid-template-columns:1fr 1fr;gap:8px}.route-switch button{min-height:48px;border:1px solid rgba(143,58,38,.28);border-radius:8px;background:#fff8ece0;color:#9c7655;padding:6px 10px;box-shadow:0 2px 8px #5a281414;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);font-family:var(--font-body);cursor:pointer;-webkit-tap-highlight-color:transparent}.route-switch button b{display:block;font-family:var(--font-brush);font-size:15px;letter-spacing:2px}.route-switch button span{display:block;margin-top:1px;font-size:10px;letter-spacing:3px}.route-switch button.active{color:#fff7e9;background:var(--chip);border-color:var(--chip);box-shadow:0 3px 10px #5a281438}.route-switch button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.title-card{position:absolute;top:72px;left:14px;max-width:270px;z-index:5;background:#faf0e2d1;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border-radius:14px;padding:12px 16px 10px;box-shadow:0 2px 10px #7f2f1f14}.title-card .eyebrow{display:inline-block;font-size:11px;letter-spacing:2px;color:#fff;background:var(--chip);border-radius:4px;padding:2px 8px;margin-bottom:6px}.title-card h1{font-family:var(--font-brush);font-weight:700;color:var(--ink);font-size:22px;line-height:1.25;letter-spacing:1px}.title-card .route-subtitle{margin-top:2px;color:var(--chip);font-size:12px;font-weight:600}.title-card .hint{margin-top:6px;font-size:11px;color:#a3805e;letter-spacing:1px}.marker{position:absolute;left:0;top:0;transform:translate(-50%,-50%);z-index:4;background:none;border:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:2px;-webkit-tap-highlight-color:transparent}.marker .pin{width:30px;height:30px;filter:drop-shadow(0 2px 2px rgba(90,40,20,.35))}.marker .pin path{fill:var(--brick);stroke:#fff;stroke-width:1.6}.marker .tag{font-size:12px;color:#fff;background:var(--chip);padding:3px 10px;border-radius:6px;white-space:nowrap;letter-spacing:.5px;box-shadow:0 1px 4px #5a28144d}.marker .tag .done{color:#ffd982;font-weight:600}.marker:focus-visible{outline:none}.marker:focus-visible .tag{outline:2px solid var(--ink);outline-offset:2px}@media (prefers-reduced-motion: no-preference){.marker .pin{animation:bob 2.6s ease-in-out infinite}.marker:nth-of-type(2) .pin{animation-delay:.5s}.marker:nth-of-type(3) .pin{animation-delay:1s}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}}.progress{position:fixed;left:50%;transform:translate(-50%);bottom:0;z-index:6;box-sizing:border-box;width:100%;max-width:430px;background:#faf0e2f0;border-top:2px solid rgba(164,71,47,.25);border-radius:18px 18px 0 0;padding:10px 16px calc(12px + env(safe-area-inset-bottom))}.progress .bar-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:8px}.progress .bar-head b{font-family:var(--font-brush);font-size:17px;color:var(--ink);letter-spacing:2px}.progress .bar-head span{font-size:12px;color:#a3805e}.progress .bar-head em{font-style:normal;color:var(--brick);font-weight:700}.progress .slots{display:grid;grid-template-columns:repeat(var(--slot-count),minmax(0,1fr));gap:6px}.slot{min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;background:#fff8ec;border:1.5px dashed #d8bb95;border-radius:10px;padding:6px 3px;font-size:10px;color:#a3805e;transition:all .3s;font-family:inherit;text-align:center;line-height:1.25;cursor:pointer;-webkit-tap-highlight-color:transparent}.slot:active{transform:scale(.97)}.slot:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.slot svg{width:18px;height:18px;flex:none}.slot span{display:-webkit-box;min-height:25px;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.slot svg path{fill:none;stroke:#cbab83;stroke-width:1.8}.slot.done{background:#fdeede;border:1.5px solid var(--brick);color:var(--ink);font-weight:600}.slot.done svg path{fill:var(--brick);stroke:var(--brick)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:flex;align-items:flex-end;justify-content:center;background:#3c1e0f73;opacity:0;pointer-events:none;transition:opacity .25s}.overlay.open{opacity:1;pointer-events:auto}.sheet{width:100%;max-width:430px;max-height:88vh;overflow-y:auto;background:linear-gradient(#fdf3e4,#f8e7d0);border:3px solid #a4472f;border-bottom:none;border-radius:22px 22px 0 0;padding:0 16px calc(16px + env(safe-area-inset-bottom));transform:translateY(100%);transition:transform .3s ease}.overlay.open .sheet{transform:translateY(0)}@media (prefers-reduced-motion: reduce){.overlay,.overlay .sheet{transition:none}}.ribbon-row{display:flex;justify-content:center;margin-bottom:14px}.ribbon{position:relative;background:#a4472f;color:#fdf3e4;font-family:var(--font-brush);font-size:20px;letter-spacing:2px;padding:9px 30px;border-radius:0 0 14px 14px;box-shadow:0 3px 6px #78321940}.sheet .close{position:absolute;top:10px;right:14px;width:32px;height:32px;border:none;border-radius:50%;background:#a4472f1f;color:var(--ink);font-size:18px;line-height:1;cursor:pointer}.sheet .close:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.photo{border:2.5px solid #fff;border-radius:14px;overflow:hidden;box-shadow:0 3px 10px #78321926;margin-bottom:6px}.photo svg{display:block;width:100%;height:auto}.photo-note{text-align:center;font-size:10px;color:#b99c78;margin-bottom:12px}.info{background:#fdf6ea;border:2px solid rgba(164,71,47,.35);border-radius:16px;padding:14px;display:flex;flex-direction:column;gap:12px;margin-bottom:14px}.row{display:flex;gap:10px;align-items:flex-start}.row .k{flex:none;width:72px;text-align:center;font-size:12px;color:#fff;background:var(--chip);border-radius:6px;padding:4px 0;letter-spacing:1px}.row .v{font-size:13px;line-height:1.7;padding-top:2px}.row .v .todo{color:#b39370;font-size:12px}.btns{display:flex;gap:12px}.btn{flex:1;border-radius:12px;padding:12px 0;font-size:16px;font-weight:700;letter-spacing:2px;cursor:pointer;font-family:var(--font-body);border-width:2px;border-style:solid;transition:transform .1s}.btn:active{transform:scale(.97)}.btn:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.btn-cert{background:var(--gold-bg);border-color:var(--gold-bd);color:var(--gold-tx)}.btn-checkin{background:var(--blue-bg);border-color:var(--blue-bd);color:var(--blue-tx)}.btn-checkin.done{background:#e7e0d2;border-color:#bfb39d;color:#8a7c64;cursor:default}.btn:disabled{cursor:default}.btn-cert:disabled{background:#e7e0d2;border-color:#bfb39d;color:#8a7c64}.cert-page{padding:18px 16px calc(24px + env(safe-area-inset-bottom))}.cert-loading{margin-top:160px;text-align:center;font-size:15px;color:#b08a5a;letter-spacing:1px}.cert-img{display:block;width:100%;height:auto;border-radius:20px;box-shadow:0 8px 20px #7832192e}.cert-save-hint{margin-top:12px;text-align:center;font-size:13px;color:var(--brick);letter-spacing:1px}.cert-back-row{margin-top:22px;text-align:center}.cert-back-row .back{display:inline-block;background:var(--gold-bg);border:2px solid var(--gold-bd);color:var(--gold-tx);font-size:16px;font-weight:700;letter-spacing:10px;text-indent:10px;padding:10px 44px;border-radius:12px;cursor:pointer;font-family:var(--font-body)}.cert-back-row .back:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.toast{position:fixed;top:18px;left:50%;transform:translate(-50%,-90px);z-index:30;background:var(--ink);color:#fdf3e4;font-size:13px;letter-spacing:1px;padding:10px 20px;border-radius:999px;box-shadow:0 4px 14px #5a281459;transition:transform .35s ease;white-space:nowrap}.toast.show{transform:translate(-50%)}:root{--paper: #f6ead9;--map-base: #eed9be;--water: #bfe0ea;--water-line: #9fcbdb;--road: #ffffff;--road-minor: #fbf3e6;--green: #cfe0a8;--green-deep: #aecb85;--ink: #7f2f1f;--brick: #b5452c;--chip: #8f3a26;--sand: #c2a278;--text: #5c4632;--gold-bg: #f5d786;--gold-bd: #d9a52e;--gold-tx: #7c5210;--blue-bg: #cfe6f2;--blue-bd: #8fbcd6;--blue-tx: #2c5a75;--font-brush: "Xingkai SC", "Kaiti SC", "STKaiti", "KaiTi", serif;--font-body: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif}*{margin:0;padding:0;box-sizing:border-box}html,body{background:#e8d9c4}body{font-family:var(--font-body);color:var(--text)}.stage{position:relative;width:100%;max-width:430px;margin:0 auto;min-height:100vh;background:var(--paper);overflow:hidden;box-shadow:0 0 40px #5a32142e}.wechat-tip{position:fixed;top:0;left:50%;transform:translate(-50%);width:100%;max-width:430px;z-index:10;background:var(--chip);color:#fdf3e4;font-size:12px;letter-spacing:1px;text-align:center;padding:8px 12px;box-shadow:0 2px 8px #5a281440}
