.app-shell{max-width:480px;margin:0 auto;min-height:100vh;position:relative;background:var(--surface-soft)}.page-enter-active,.page-leave-active{transition:opacity .22s var(--ease-out),transform .22s var(--ease-out)}.page-enter-from{opacity:0;transform:translate(24px)}.page-leave-to{opacity:0;transform:translate(-16px)}:root{--primary: #ff3c60;--primary-2: #ff5c78;--primary-3: #ff8ba0;--primary-active: #e02a4e;--primary-disabled: #ffc9d4;--primary-soft: #ffe9ee;--yellow: #ffde58;--ink: #3e0922;--body: #5d3a4a;--muted: #8a7a80;--muted-soft: #a3949a;--page-bg: #fcede6;--surface-soft: #fcede6;--canvas: #ffffff;--hairline: rgba(62, 9, 34, .1);--stroke: rgba(45, 5, 25, .82);--stroke-soft: rgba(62, 9, 34, .16);--name-bar: #f1f1f1;--tab-active: #ede8e6;--tab-inactive: #fefaf8;--success: #10b981;--metro-gray: #333;--metro-dark: #1a1a2e;--r-full: 9999px;--r-md: 14px;--r-lg: 20px;--r-xl: 24px;--shadow-card: 0 2px 6px rgba(62, 9, 34, .06), 0 10px 24px -12px rgba(62, 9, 34, .22);--shadow-metro: 0 12px 28px -10px rgba(255, 60, 96, .45);--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1)}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{font-family:PingFang SC,HarmonyOS Sans SC,Microsoft YaHei,-apple-system,system-ui,Roboto,Helvetica Neue,sans-serif;color:var(--ink);background:var(--page-bg);font-size:16px;line-height:1.5}body{overflow-x:hidden}button{font-family:inherit;border:none;background:none;cursor:pointer;touch-action:manipulation}img{display:block;max-width:100%}b{font-weight:700}.page-wrap{min-height:100vh;padding-bottom:96px}.psd-card{background:var(--canvas);border:1.5px solid var(--stroke);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}.psd-title{display:inline-flex;align-items:center;gap:10px;color:var(--primary);font-size:20px;font-weight:800}.psd-title:before,.psd-title:after{content:"✦";font-size:.58em;letter-spacing:0;transform:translateY(-4px)}.psd-title:after{transform:translateY(4px)}.page-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;padding:calc(env(safe-area-inset-top,0px) + 12px) 16px 10px;background:var(--canvas);border-bottom:1px solid var(--hairline)}.page-header-title{position:absolute;left:50%;transform:translate(-50%);font-size:17px;font-weight:700;color:var(--ink);letter-spacing:.5px;white-space:nowrap}.page-header .btn-back{display:inline-flex;align-items:center;font-size:24px;line-height:1;color:var(--ink);padding:4px 8px 4px 0;font-weight:400}.page-header .btn-back:before{content:"‹";font-size:30px;margin-top:-4px}.page-header-right{display:flex;align-items:center;gap:8px;min-width:44px;justify-content:flex-end}.btn-primary{width:100%;height:50px;border-radius:var(--r-full);background:var(--primary);color:#fff;font-size:16px;font-weight:700;display:flex;align-items:center;justify-content:center;gap:8px;border:1.5px solid var(--stroke);box-shadow:0 6px 18px -6px #ff3c608c;transition:all .25s var(--ease-out);position:relative}.btn-primary:active{transform:scale(.97);background:var(--primary-active)}.btn-primary:disabled{background:var(--primary-disabled);box-shadow:none;color:#fff}.btn-primary.is-off-range:disabled{background:#c9cacd}.btn-ghost-line{width:100%;height:46px;border-radius:var(--r-full);background:var(--canvas);color:var(--ink);border:1.5px solid var(--stroke);font-size:15px;font-weight:600;margin-top:10px;transition:all .25s var(--ease-out)}.btn-ghost-line:active{transform:scale(.97);background:#faf3f0}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:flex-end;justify-content:center;background:#1e020e80;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}.overlay.center{align-items:center;padding:24px}.sheet{width:100%;max-width:480px;background:var(--canvas);border:1.5px solid var(--stroke);border-bottom:none;border-radius:26px 26px 0 0;padding:10px 22px 30px;animation:sheetSlideUp .4s var(--ease-spring);max-height:88vh;overflow-y:auto;-webkit-overflow-scrolling:touch}.sheet-handle{width:44px;height:5px;border-radius:3px;background:var(--hairline);margin:6px auto 16px}.sheet-head h2{display:inline;font-size:24px;font-weight:800;color:var(--ink)}.line-badge{display:inline-block;vertical-align:middle;margin:0 0 10px 8px;white-space:nowrap;font-size:12px;font-weight:600;color:#fff;background:var(--line-color, var(--primary));padding:5px 12px;border-radius:var(--r-full);box-shadow:0 2px 8px #2d051933}.line-badge:before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:#fff;margin-right:5px;vertical-align:middle;animation:blinkDot 1.5s ease-in-out infinite}.st-img-wrap{margin-top:16px;border-radius:var(--r-lg);overflow:hidden;border:1.5px solid var(--stroke);position:relative}.st-img-wrap:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,transparent 50%,rgba(30,2,14,.18));pointer-events:none}.st-img-wrap img{width:100%;aspect-ratio:4/3;object-fit:cover}.st-img-overlay{position:absolute;bottom:12px;left:12px;right:12px;display:flex;gap:8px;z-index:2}.st-meta-badge{display:inline-flex;align-items:center;gap:5px;padding:6px 10px;background:#fffffff0;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-radius:var(--r-full);font-size:11px;font-weight:600;box-shadow:0 2px 8px #2d05191f}.st-meta-badge .ico{font-size:13px}.st-meta-badge .ico-svg{color:var(--primary);flex-shrink:0}.st-meta-badge em{font-style:normal;color:var(--muted);font-weight:400;font-size:10px}.st-intro{margin-top:16px;font-size:14px;color:var(--body);line-height:1.8}.st-meta{margin-top:16px;display:flex;flex-direction:column;gap:10px}.st-meta-item{display:flex;gap:10px;align-items:flex-start}.st-meta-item .ico{font-size:15px;width:26px;height:26px;background:var(--primary-soft);border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.st-meta-item .ico-svg{width:26px;height:26px;padding:5px;background:var(--primary-soft);border-radius:8px;flex-shrink:0;color:var(--primary)}.st-meta-item p{font-size:13px;color:var(--muted);line-height:1.6}.sheet .btn-primary{margin-top:24px}.pop{width:100%;max-width:360px;background:var(--canvas);border:1.5px solid var(--stroke);border-radius:24px;padding:30px 24px 26px;text-align:center;animation:popIn .5s var(--ease-spring);position:relative;overflow:hidden}.pop-badge{width:72px;height:72px;margin:0 auto 14px;border-radius:50%;background:linear-gradient(135deg,#34d399,#10b981,#059669);color:#fff;font-size:36px;font-weight:700;display:flex;align-items:center;justify-content:center;box-shadow:0 14px 32px -10px #10b98199,0 0 0 8px #10b9811a;animation:badgePop .7s var(--ease-spring)}.pop-title{font-size:24px;font-weight:800;color:var(--ink)}.pop-desc{margin-top:10px;font-size:13px;color:var(--muted);line-height:1.7}.pop .btn-primary{margin-top:22px}.pop .btn-ghost-line{margin-top:10px}.card-mini{margin:18px auto 0;width:170px;border-radius:var(--r-lg);background:linear-gradient(135deg,var(--line-soft, var(--primary-soft)),#fff);border:2px dashed var(--line-color, var(--primary));padding:16px 12px 18px;animation:cardPop .6s .15s var(--ease-spring) both;position:relative}.card-mini-train{font-size:28px;margin-bottom:6px;animation:miniTrainBounce 1s ease-in-out infinite}.card-mini-img{display:block;width:100%;height:110px;object-fit:cover;border-radius:var(--r-md);margin-bottom:10px}.card-mini-line{width:fit-content;margin:0 auto;font-size:11px;font-weight:700;color:#fff;padding:3px 10px;border-radius:999px;background:var(--line-color, var(--primary));position:relative;z-index:1}.card-mini-name{margin-top:10px;font-size:18px;font-weight:700;color:var(--line-color, var(--primary));position:relative;z-index:1}.toast-host{position:fixed;left:50%;top:40px;transform:translate(-50%) translateY(-20px);background:#3e0922eb;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);color:#fff;font-size:13px;padding:10px 20px;border-radius:999px;z-index:100;opacity:0;pointer-events:none;transition:all .35s var(--ease-spring);max-width:82%;text-align:center;box-shadow:0 8px 24px #1e020e4d}.toast-host.show{opacity:1;transform:translate(-50%) translateY(0)}.confetti-canvas{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99;pointer-events:none}.tab-bar{position:fixed;left:50%;transform:translate(-50%);bottom:calc(env(safe-area-inset-bottom,0px) + 12px);width:calc(100% - 24px);max-width:456px;z-index:40;display:flex;background:var(--canvas);border:1.5px solid var(--stroke);border-radius:18px;overflow:hidden;box-shadow:var(--shadow-card)}.tab-item{flex:1;display:flex;align-items:center;justify-content:center;gap:7px;padding:13px 0;font-size:14px;font-weight:700;color:var(--ink);background:var(--tab-inactive);transition:background .2s var(--ease-out);position:relative}.tab-item+.tab-item{border-left:1px solid var(--stroke-soft)}.tab-item.active{background:var(--tab-active)}.tab-item:active{background:#f3ede9}.tab-dot{position:absolute;top:6px;right:14px;min-width:15px;height:15px;padding:0 4px;border-radius:999px;background:var(--primary);color:#fff;font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 2px var(--canvas)}.list-card{background:var(--canvas);border:1.5px solid var(--stroke);border-radius:var(--r-lg);box-shadow:var(--shadow-card);padding:14px 16px;margin-bottom:12px}.empty-state{text-align:center;padding:48px 20px;color:var(--muted-soft)}.empty-state .empty-emoji{font-size:48px;display:block;margin-bottom:12px;animation:floatEmoji 3s ease-in-out infinite}.empty-state p{font-size:13px}.link{color:var(--primary);font-weight:600;cursor:pointer;transition:opacity .2s}.link:active{opacity:.7}@keyframes slideUp{0%{transform:translateY(60px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes sheetSlideUp{0%{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes popIn{0%{transform:scale(.7);opacity:0}60%{transform:scale(1.08)}to{transform:scale(1);opacity:1}}@keyframes cardPop{0%{transform:scale(.4) rotate(-12deg);opacity:0}60%{transform:scale(1.15) rotate(4deg)}to{transform:scale(1) rotate(0);opacity:1}}@keyframes cardSlideIn{0%{opacity:0;transform:translateY(20px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes floatEmoji{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-10px) rotate(4deg)}}@keyframes blinkDot{0%,to{opacity:1;box-shadow:0 0 6px currentColor}50%{opacity:.5;box-shadow:0 0 2px currentColor}}@keyframes badgePop{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}@keyframes miniTrainBounce{0%,to{transform:translate(0)}50%{transform:translate(4px)}}@keyframes tabPop{0%{transform:scale(.6)}to{transform:scale(1)}}@keyframes qrFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-4px)}}@keyframes locPulse{0%{transform:scale(.8);opacity:.8}to{transform:scale(2.5);opacity:0}}@media (max-width: 360px){.tab-item{font-size:13px;gap:5px;padding:12px 0}.sheet{padding:10px 18px 26px}}
