:root{--paper: #fbf7f0;--surface: #ffffff;--surface-2: #f4eee3;--ink: #211c17;--ink-2: #4a4339;--line: #e7dfd1;--muted: #968b7b;--vermilion: #c8453b;--vermilion-deep: #a8352e;--teal: #2e6e66;--teal-deep: #23554f;--gold: #b0824a;--gold-soft: #f3e9d8;--danger: #c0392b;--ok: #2e6e66;--radius: 14px;--radius-sm: 10px;--shadow: 0 2px 12px rgba(33, 28, 23, .06);--shadow-lg: 0 8px 28px rgba(33, 28, 23, .1);--font-serif: "Noto Serif SC", "Songti SC", SimSun, serif;--font-sans: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;--topbar-h: 56px;--sidebar-w: 260px}*{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%}body{font-family:var(--font-sans);background:var(--paper);color:var(--ink);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:var(--teal);text-decoration:none}button{font-family:inherit;cursor:pointer}input,textarea,select{font-family:inherit;font-size:14px;color:var(--ink)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#d8cdba;border-radius:4px}::-webkit-scrollbar-track{background:transparent}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface);color:var(--ink-2);font-size:14px;transition:all .15s ease}.btn:hover{border-color:var(--vermilion);color:var(--vermilion)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--vermilion);border-color:var(--vermilion);color:#fff}.btn-primary:hover{background:var(--vermilion-deep);border-color:var(--vermilion-deep);color:#fff}.btn-teal{background:var(--teal);border-color:var(--teal);color:#fff}.btn-teal:hover{background:var(--teal-deep);border-color:var(--teal-deep);color:#fff}.btn-ghost{background:transparent;border-color:transparent;color:var(--muted)}.btn-ghost:hover{color:var(--vermilion);border-color:transparent}.btn-sm{padding:4px 12px;font-size:13px;border-radius:8px}.btn-block{width:100%;justify-content:center}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.field{margin-bottom:16px}.field-label{display:block;font-size:13px;font-weight:500;color:var(--ink-2);margin-bottom:6px}.field-input{width:100%;height:44px;padding:0 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface);outline:none;transition:border-color .15s}.field-input:focus{border-color:var(--vermilion);box-shadow:0 0 0 3px #c8453b1a}textarea.field-input{height:auto;padding:10px 14px;resize:vertical}.select{height:40px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface);outline:none}.tag{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:12px;background:var(--surface-2);color:var(--ink-2)}.tag-vermilion{background:#c8453b1a;color:var(--vermilion)}.tag-teal{background:#2e6e661a;color:var(--teal)}.tag-gold{background:#b0824a1f;color:var(--gold)}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#211c1773;display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.modal{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-lg);width:100%;max-width:460px;max-height:86vh;overflow-y:auto;padding:24px}.modal-title{font-family:var(--font-serif);font-size:18px;font-weight:600;margin-bottom:18px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.spinner{width:28px;height:28px;border:3px solid var(--line);border-top-color:var(--vermilion);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty{text-align:center;padding:60px 20px;color:var(--muted)}.empty-icon{font-size:40px;margin-bottom:12px}.toast-wrap{position:fixed;top:70px;left:50%;transform:translate(-50%);z-index:200;display:flex;flex-direction:column;gap:8px;align-items:center}.toast{padding:10px 20px;border-radius:10px;background:var(--ink);color:#fff;font-size:13px;box-shadow:var(--shadow-lg);animation:toast-in .2s ease}.toast-error{background:var(--danger)}.toast-ok{background:var(--teal)}@keyframes toast-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 1023px){:root{--sidebar-w: 220px}}
