:root{--ds-primary: #4c6ef5;--ds-primary-strong: #3b5bdb;--ds-primary-soft: #edf2ff;--ds-primary-soft-2: #dbe4ff;--ds-on-primary: #ffffff;--ds-accent: #7c5cff;--ds-accent-soft: #f3f0ff;--ds-gradient-brand: linear-gradient(135deg, #5b7cfa 0%, #7c5cff 100%);--ds-gradient-brand-hover: linear-gradient(135deg, #6a8bff 0%, #8b6bff 100%);--ds-gradient-hero: radial-gradient(120% 120% at 0% 0%, #6d8bff 0%, #5b6cff 45%, #6a4dff 100%);--ds-gradient-success: linear-gradient(135deg, #20c997 0%, #12b886 100%);--ds-success: #12b886;--ds-success-soft: #e6fcf5;--ds-warning: #f08c00;--ds-warning-soft: #fff4e6;--ds-danger: #e03131;--ds-danger-soft: #fff5f5;--ds-info: #1c7ed6;--ds-info-soft: #e7f5ff;--ds-bg: #f4f6fb;--ds-bg-deep: #eceff7;--ds-surface: #ffffff;--ds-surface-2: #f8f9fc;--ds-surface-3: #f1f3f9;--ds-line: #e5e9f2;--ds-line-strong: #d5dbe8;--ds-text: #1a2233;--ds-text-2: #5b6478;--ds-text-3: #8a93a6;--ds-text-inverse: #ffffff;--ds-font-family: "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", "Segoe UI", system-ui, -apple-system, sans-serif;--ds-font-family-num: ui-monospace, "SF Mono", "Cascadia Mono", Consolas, monospace;--ds-font-xs: .75rem;--ds-font-sm: .8125rem;--ds-font-base: .9375rem;--ds-font-md: 1rem;--ds-font-lg: 1.125rem;--ds-font-xl: 1.375rem;--ds-font-2xl: 1.75rem;--ds-font-3xl: 2.5rem;--ds-font-4xl: 3.5rem;--ds-weight-regular: 400;--ds-weight-medium: 500;--ds-weight-semibold: 600;--ds-weight-bold: 700;--ds-leading-tight: 1.25;--ds-leading-normal: 1.55;--ds-leading-relaxed: 1.75;--ds-letter-tight: -.01em;--ds-space-0-5: 2px;--ds-space-1: 4px;--ds-space-2: 8px;--ds-space-3: 12px;--ds-space-4: 16px;--ds-space-5: 20px;--ds-space-6: 24px;--ds-space-8: 32px;--ds-space-10: 40px;--ds-space-12: 48px;--ds-space-16: 64px;--ds-content-max: 1120px;--ds-content-pad: 20px;--ds-radius-xs: 6px;--ds-radius-sm: 10px;--ds-radius-md: 14px;--ds-radius-lg: 18px;--ds-radius-xl: 24px;--ds-radius-2xl: 32px;--ds-radius-pill: 999px;--ds-shadow-xs: 0 1px 2px rgba(18, 32, 60, .05);--ds-shadow-sm: 0 1px 3px rgba(18, 32, 60, .06), 0 6px 16px rgba(18, 32, 60, .05);--ds-shadow-md: 0 4px 10px rgba(18, 32, 60, .06), 0 16px 32px rgba(18, 32, 60, .08);--ds-shadow-lg: 0 12px 28px rgba(18, 32, 60, .12), 0 28px 56px rgba(18, 32, 60, .1);--ds-shadow-brand: 0 10px 24px rgba(91, 108, 255, .28);--ds-shadow-brand-lg: 0 18px 40px rgba(91, 108, 255, .32);--ds-dur-fast: .12s;--ds-dur-base: .2s;--ds-dur-slow: .32s;--ds-ease-out: cubic-bezier(.22, 1, .36, 1);--ds-ease-in-out: cubic-bezier(.65, 0, .35, 1);--ds-ease-spring: cubic-bezier(.34, 1.56, .64, 1);--ds-z-header: 30;--ds-z-overlay: 90;--ds-z-toast: 100;--ds-z-modal: 120;--ds-touch-min: 44px;--ds-safe-top: env(safe-area-inset-top, 0px);--ds-safe-right: env(safe-area-inset-right, 0px);--ds-safe-bottom: env(safe-area-inset-bottom, 0px);--ds-safe-left: env(safe-area-inset-left, 0px);--ds-tabbar-height: 56px;--ds-header-height: 56px;--ds-viewport-min: 100svh}.ui-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--ds-space-2);min-height:var(--ds-touch-min);padding:0 var(--ds-space-5);border:1px solid transparent;border-radius:var(--ds-radius-sm);font-family:var(--ds-font-family);font-size:var(--ds-font-base);font-weight:var(--ds-weight-semibold);line-height:1;color:var(--ds-text);background:var(--ds-surface);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;-webkit-tap-highlight-color:transparent;transition:background-color var(--ds-dur-fast) var(--ds-ease-out),border-color var(--ds-dur-fast) var(--ds-ease-out),box-shadow var(--ds-dur-base) var(--ds-ease-out),transform var(--ds-dur-fast) var(--ds-ease-out),filter var(--ds-dur-fast) var(--ds-ease-out)}.ui-btn:focus-visible{outline:2px solid var(--ds-primary);outline-offset:2px}.ui-btn:active:not(:disabled){transform:scale(.98)}.ui-btn:disabled{opacity:.55;cursor:not-allowed}.ui-btn--primary{color:var(--ds-on-primary);background:var(--ds-gradient-brand);box-shadow:var(--ds-shadow-brand)}.ui-btn--primary:hover:not(:disabled){background:var(--ds-gradient-brand-hover)}.ui-btn--secondary{color:var(--ds-primary-strong);background:var(--ds-primary-soft)}.ui-btn--secondary:hover:not(:disabled){background:var(--ds-primary-soft-2)}.ui-btn--ghost{color:var(--ds-text);background:var(--ds-surface);border-color:var(--ds-line-strong)}.ui-btn--ghost:hover:not(:disabled){background:var(--ds-surface-2)}.ui-btn--danger{color:var(--ds-danger);background:var(--ds-danger-soft)}.ui-btn--danger:hover:not(:disabled){background:#ffe3e3}.ui-btn--block{width:100%}.ui-btn--sm{min-height:36px;padding:0 var(--ds-space-3);border-radius:var(--ds-radius-xs);font-size:var(--ds-font-sm)}.ui-btn--lg{min-height:52px;padding:0 var(--ds-space-8);border-radius:var(--ds-radius-md);font-size:var(--ds-font-md)}.ui-btn__spinner{width:16px;height:16px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:ui-spin .7s linear infinite}@keyframes ui-spin{to{transform:rotate(360deg)}}.ui-card{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius-lg);box-shadow:var(--ds-shadow-sm);padding:var(--ds-space-5)}.ui-card--flush{padding:0;overflow:hidden}.ui-card__head{display:flex;align-items:center;justify-content:space-between;gap:var(--ds-space-3);margin-bottom:var(--ds-space-4)}.ui-card__title{margin:0;font-size:var(--ds-font-lg);font-weight:var(--ds-weight-semibold);color:var(--ds-text)}.ui-card__extra{flex:none;font-size:var(--ds-font-sm);color:var(--ds-text-2)}.ui-card__body{color:var(--ds-text-2)}.ui-field{display:flex;flex-direction:column;gap:var(--ds-space-2);margin-bottom:var(--ds-space-4)}.ui-field__label{display:flex;align-items:center;justify-content:space-between;gap:var(--ds-space-2);font-size:var(--ds-font-sm);font-weight:var(--ds-weight-semibold);color:var(--ds-text)}.ui-field__required{color:var(--ds-danger);margin-left:2px}.ui-field__hint{font-size:var(--ds-font-xs);color:var(--ds-text-3)}.ui-field__error{font-size:var(--ds-font-xs);color:var(--ds-danger)}.ui-input-wrap{display:flex;align-items:center;gap:var(--ds-space-2);min-height:48px;padding:0 var(--ds-space-3);background:var(--ds-surface-2);border:1px solid var(--ds-line);border-radius:var(--ds-radius-sm);transition:border-color var(--ds-dur-fast) var(--ds-ease-out),box-shadow var(--ds-dur-fast) var(--ds-ease-out),background-color var(--ds-dur-fast) var(--ds-ease-out)}.ui-input-wrap:focus-within{background:var(--ds-surface);border-color:var(--ds-primary);box-shadow:0 0 0 3px #4c6ef524}.ui-input-wrap--error{border-color:var(--ds-danger)}.ui-input-wrap--error:focus-within{border-color:var(--ds-danger);box-shadow:0 0 0 3px #e031311f}.ui-input{flex:1;min-width:0;height:46px;padding:0;border:0;background:transparent;color:var(--ds-text);font-family:var(--ds-font-family);font-size:16px;outline:none}.ui-input::placeholder{color:var(--ds-text-3)}.ui-input-wrap__suffix{flex:none;display:flex;align-items:center;color:var(--ds-text-3);font-size:var(--ds-font-sm);background:none;border:none;padding:0;min-height:32px;min-width:32px;justify-content:center;border-radius:var(--ds-radius-xs)}.ui-input-wrap__suffix:hover{color:var(--ds-primary)}.ui-banner{display:flex;align-items:flex-start;gap:var(--ds-space-2);padding:var(--ds-space-3) var(--ds-space-4);border-radius:var(--ds-radius-sm);font-size:var(--ds-font-sm);line-height:var(--ds-leading-normal);margin-bottom:var(--ds-space-4)}.ui-banner--error{color:var(--ds-danger);background:var(--ds-danger-soft)}.ui-banner--warn{color:var(--ds-warning);background:var(--ds-warning-soft)}.ui-banner--info{color:var(--ds-info);background:var(--ds-info-soft)}.ui-toast{position:fixed;left:50%;bottom:calc(32px + var(--ds-safe-bottom));transform:translate(-50%);z-index:var(--ds-z-toast);max-width:min(720px,92vw);padding:var(--ds-space-3) var(--ds-space-5);border-radius:var(--ds-radius-md);background:#17233d;color:#fff;font-size:var(--ds-font-sm);line-height:var(--ds-leading-normal);box-shadow:var(--ds-shadow-lg);animation:ui-toast-in var(--ds-dur-base) var(--ds-ease-out)}.ui-toast--ok{background:#0f5132}.ui-toast--err{background:#92271f}@keyframes ui-toast-in{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}@media (max-width: 600px){.ui-toast{left:12px;right:12px;bottom:calc(24px + var(--ds-safe-bottom));transform:none;max-width:none}}.ui-empty{display:flex;flex-direction:column;align-items:center;gap:var(--ds-space-2);padding:var(--ds-space-10) var(--ds-space-5);text-align:center;color:var(--ds-text-2)}.ui-empty__icon{display:grid;place-items:center;width:56px;height:56px;margin-bottom:var(--ds-space-1);border-radius:50%;background:var(--ds-primary-soft);color:var(--ds-primary);font-size:24px}.ui-empty__title{margin:0;font-size:var(--ds-font-md);font-weight:var(--ds-weight-semibold);color:var(--ds-text)}.ui-empty__desc{margin:0;font-size:var(--ds-font-sm);color:var(--ds-text-3);max-width:320px}.ui-empty__action{margin-top:var(--ds-space-3)}.ui-loading{display:flex;flex-direction:column;align-items:center;gap:var(--ds-space-3);padding:var(--ds-space-12) var(--ds-space-4);color:var(--ds-text-3);font-size:var(--ds-font-sm)}.ui-loading__spinner{width:28px;height:28px;border:3px solid var(--ds-primary-soft-2);border-top-color:var(--ds-primary);border-radius:50%;animation:ui-spin .8s linear infinite}.ui-link-btn{background:none;border:none;padding:0;color:var(--ds-primary);font:inherit;font-size:var(--ds-font-sm);cursor:pointer}.ui-link-btn:hover{text-decoration:underline}.ui-kv{display:flex;align-items:baseline;justify-content:space-between;gap:var(--ds-space-3);padding:var(--ds-space-2) 0}.ui-kv+.ui-kv{border-top:1px dashed var(--ds-line)}.ui-kv__k{color:var(--ds-text-2);font-size:var(--ds-font-sm)}.ui-kv__v{color:var(--ds-text);font-size:var(--ds-font-sm);font-weight:var(--ds-weight-semibold);text-align:right}.ui-pill{display:inline-flex;align-items:center;padding:2px var(--ds-space-2);border-radius:var(--ds-radius-pill);background:var(--ds-surface-3);color:var(--ds-text-2);font-size:var(--ds-font-xs);font-weight:var(--ds-weight-medium)}.ui-pill--ok{color:var(--ds-success);background:var(--ds-success-soft)}.ui-pill--warn{color:var(--ds-warning);background:var(--ds-warning-soft)}.topbar-actions{display:flex;align-items:center;gap:var(--ds-space-2);margin-left:auto}.topbar-login{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:0 14px;border-radius:var(--ds-radius-pill);font-size:14px;font-weight:600;color:var(--ds-primary);background:var(--ds-primary-soft)}.topbar-login:hover{background:var(--ds-primary-soft-2);text-decoration:none}.topbar-user{display:inline-flex;align-items:center;gap:8px;min-height:34px;padding:0 10px 0 4px;border-radius:var(--ds-radius-pill);background:var(--ds-surface-2);color:var(--ds-text)}.topbar-user:hover{background:var(--ds-surface-3);text-decoration:none}.topbar-avatar{display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--ds-gradient-brand);color:#fff;font-size:13px;font-weight:700}.topbar-user-name{font-size:13.5px;font-weight:600;max-width:8em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 600px){.topbar-user-name{display:none}}
