.toast-host[data-v-dfa80b80]{position:fixed;top:calc(16px + env(safe-area-inset-top,0px));left:50%;transform:translate(-50%);width:min(88vw,420px);display:flex;flex-direction:column;gap:8px;z-index:80;pointer-events:none}.toast[data-v-dfa80b80]{pointer-events:auto;display:flex;align-items:center;gap:10px;width:100%;padding:12px 16px;border-radius:var(--radius-md);background:#1f2d33f0;color:var(--color-white);font-size:var(--font-sm);font-weight:600;text-align:left;box-shadow:var(--shadow-float);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.toast__dot[data-v-dfa80b80]{width:8px;height:8px;border-radius:50%;background:var(--color-white);flex:none}.toast--success .toast__dot[data-v-dfa80b80]{background:#7fe3a8}.toast--error .toast__dot[data-v-dfa80b80]{background:#ff9a9a}.toast--info .toast__dot[data-v-dfa80b80]{background:#9ec8ff}.toast-enter-active[data-v-dfa80b80],.toast-leave-active[data-v-dfa80b80]{transition:all .2s var(--ease-out)}.toast-enter-from[data-v-dfa80b80],.toast-leave-to[data-v-dfa80b80]{opacity:0;transform:translateY(-8px)}:root{--color-primary: #2fb36b;--color-primary-strong: #239b5b;--color-primary-soft: #e5f7ed;--color-accent: #ff9f43;--color-accent-soft: #fff3e3;--color-info: #4c9aff;--color-info-soft: #eaf3ff;--color-grape: #8b7cf6;--color-grape-soft: #f0edff;--color-bg: #f4f9f6;--color-surface: #ffffff;--color-surface-alt: #fbfdfc;--color-border: #e4ede8;--color-text: #1f2d33;--color-text-secondary: #5d6f77;--color-muted: #93a4ab;--color-white: #ffffff;--color-success: #2fb36b;--color-success-soft: #e5f7ed;--color-danger: #ee5d5d;--color-danger-soft: #fdecec;--color-warning: #f2a71b;--color-warning-soft: #fff6e2;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 32px;--space-8: 40px;--radius-sm: 8px;--radius-md: 14px;--radius-lg: 20px;--radius-xl: 28px;--radius-pill: 999px;--font-xs: 12px;--font-sm: 14px;--font-md: 16px;--font-lg: 20px;--font-xl: 26px;--font-2xl: 34px;--font-3xl: 44px;--shadow-card: 0 8px 24px rgba(31, 45, 51, .08);--shadow-float: 0 12px 32px rgba(31, 45, 51, .14);--shadow-primary: 0 10px 22px rgba(47, 179, 107, .28);--tap-min: 44px;--page-max: 480px;--safe-bottom: env(safe-area-inset-bottom, 0px);--ease-out: cubic-bezier(.22, .61, .36, 1);--duration-fast: .15s;--duration-base: .24s}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{min-height:100vh;background:radial-gradient(1200px 600px at 50% -200px,#e3f6ec 0%,transparent 60%),var(--color-bg);color:var(--color-text);font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,system-ui,-apple-system,sans-serif;font-size:var(--font-md);line-height:1.55;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;border:none;background:none;padding:0}a{color:var(--color-primary-strong);text-decoration:none}h1,h2,h3,h4,p{margin:0}ul,ol{margin:0;padding:0;list-style:none}#app{min-height:100vh}.app-frame{width:100%;max-width:var(--page-max);min-height:100vh;margin:0 auto;background:transparent;position:relative}@media(min-width:560px){body{padding:24px 0}.app-frame{min-height:calc(100vh - 48px);border-radius:var(--radius-xl);background:var(--color-bg);box-shadow:0 24px 60px #1f2d331f;overflow:hidden}}.page{min-height:100vh;display:flex;flex-direction:column;padding-bottom:calc(var(--space-6) + var(--safe-bottom))}.page--with-nav{padding-bottom:calc(84px + var(--safe-bottom))}.page-body{flex:1;padding:var(--space-5);display:flex;flex-direction:column;gap:var(--space-4)}.page-body--flush{padding:var(--space-4) var(--space-4) var(--space-6)}.stack{display:flex;flex-direction:column;gap:var(--space-3)}.stack--lg{gap:var(--space-5)}.row{display:flex;align-items:center;gap:var(--space-3)}.row--between{justify-content:space-between}.row--wrap{flex-wrap:wrap}.grow{flex:1;min-width:0}.h1{font-size:var(--font-2xl);font-weight:800;letter-spacing:-.5px;line-height:1.25}.h2{font-size:var(--font-xl);font-weight:800;line-height:1.3}.h3{font-size:var(--font-lg);font-weight:700}.title-sm{font-size:var(--font-md);font-weight:700}.text-sm{font-size:var(--font-sm)}.text-xs{font-size:var(--font-xs)}.muted{color:var(--color-text-secondary)}.faint{color:var(--color-muted)}.center{text-align:center}.nowrap{white-space:nowrap}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:var(--space-5)}.card--flat{box-shadow:none}.card--soft{background:var(--color-surface-alt);box-shadow:none}.card--primary{background:linear-gradient(135deg,#2fb36b,#43c886 60%,#6ad79c);border-color:transparent;color:var(--color-white)}.card--accent{background:linear-gradient(135deg,#fff3e3,#ffe6c4);border-color:#ffe0b3}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);min-height:50px;padding:0 var(--space-5);border-radius:var(--radius-md);font-size:var(--font-md);font-weight:700;transition:transform var(--duration-fast) var(--ease-out),opacity var(--duration-fast) var(--ease-out),background-color var(--duration-fast) var(--ease-out);-webkit-user-select:none;user-select:none}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--primary{background:var(--color-primary);color:var(--color-white);box-shadow:var(--shadow-primary)}.btn--primary:active:not(:disabled){background:var(--color-primary-strong)}.btn--ghost{background:var(--color-primary-soft);color:var(--color-primary-strong)}.btn--outline{background:var(--color-surface);border:1.5px solid var(--color-border);color:var(--color-text)}.btn--danger{background:var(--color-danger-soft);color:var(--color-danger)}.btn--block{width:100%}.btn--sm{min-height:var(--tap-min);font-size:var(--font-sm);padding:0 var(--space-4);border-radius:var(--radius-sm)}.btn--lg{min-height:56px;font-size:var(--font-lg)}.chip{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);min-height:var(--tap-min);padding:0 var(--space-4);border-radius:var(--radius-pill);background:var(--color-surface);border:1.5px solid var(--color-border);color:var(--color-text-secondary);font-size:var(--font-sm);font-weight:600;transition:all var(--duration-fast) var(--ease-out)}.chip--active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.chip--static{min-height:28px;padding:0 var(--space-3);font-size:var(--font-xs);background:var(--color-primary-soft);border-color:transparent;color:var(--color-primary-strong)}.badge{display:inline-flex;align-items:center;padding:2px var(--space-2);border-radius:var(--radius-pill);font-size:var(--font-xs);font-weight:700;background:var(--color-primary-soft);color:var(--color-primary-strong)}.badge--accent{background:var(--color-accent-soft);color:#b96a13}.badge--muted{background:#eef2f1;color:var(--color-muted)}.field{display:flex;flex-direction:column;gap:var(--space-2)}.field-label{font-size:var(--font-sm);font-weight:600;color:var(--color-text-secondary)}.input{width:100%;min-height:52px;padding:0 var(--space-4);border-radius:var(--radius-md);border:1.5px solid var(--color-border);background:var(--color-surface);font-size:var(--font-lg);outline:none;transition:border-color var(--duration-fast) var(--ease-out)}.input:focus{border-color:var(--color-primary);box-shadow:0 0 0 4px #2fb36b1f}.input--code{letter-spacing:8px;text-align:center;font-weight:700}.progress-track{width:100%;height:10px;border-radius:var(--radius-pill);background:#e8efeb;overflow:hidden}.progress-fill{height:100%;border-radius:var(--radius-pill);background:linear-gradient(90deg,#2fb36b,#64d295);transition:width var(--duration-base) var(--ease-out)}.divider{height:1px;background:var(--color-border);border:none;margin:0}.skeleton{border-radius:var(--radius-md);background:linear-gradient(90deg,#eef3f0 25%,#f7faf8 37%,#eef3f0 63%);background-size:400% 100%;animation:shimmer 1.4s ease infinite}@keyframes shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.fade-slide-enter-active{transition:opacity var(--duration-base) var(--ease-out),transform var(--duration-base) var(--ease-out)}.fade-slide-enter-from{opacity:0;transform:translateY(10px)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
