:root{--primary:#1a73e8;--primary-dark:#1557b0;--primary-light:#e8f0fe;--primary-bg:#f0f4ff;--bg:#f5f7fa;--card-bg:#fff;--text:#1f2937;--text-secondary:#6b7280;--border:#e5e7eb;--success:#10b981;--danger:#ef4444;--warning:#f59e0b;--radius:10px;--shadow:0 1px 3px #00000014, 0 1px 2px #0000000f;--shadow-md:0 4px 6px #00000012, 0 2px 4px #0000000f}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Microsoft YaHei,sans-serif;line-height:1.6}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.btn{border-radius:var(--radius);cursor:pointer;border:none;outline:none;justify-content:center;align-items:center;gap:6px;padding:10px 22px;font-size:14px;font-weight:500;transition:all .2s;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-dark);box-shadow:0 2px 8px #1a73e859}.btn-outline{color:var(--primary);border:1.5px solid var(--primary);background:0 0}.btn-outline:hover:not(:disabled){background:var(--primary-light)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#dc2626}.btn-sm{padding:5px 14px;font-size:13px}.btn-lg{padding:13px 30px;font-size:16px}.input{border:1.5px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);background:var(--card-bg);outline:none;padding:10px 14px;font-size:14px;transition:border-color .2s,box-shadow .2s}.input:focus{border-color:var(--primary);box-shadow:0 0 0 3px #1a73e81f}.input::placeholder{color:#9ca3af}textarea.input{resize:vertical;min-height:100px}.card{background:var(--card-bg);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid var(--border);padding:24px}.form-group{margin-bottom:18px}.form-label{color:var(--text);margin-bottom:6px;font-size:14px;font-weight:500;display:block}.form-hint{color:var(--text-secondary);margin-top:4px;font-size:12px}.page-container{max-width:1100px;margin:0 auto;padding:24px 20px}.page-title{color:var(--text);margin-bottom:20px;font-size:22px;font-weight:600}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-sm{gap:8px}.gap-md{gap:16px}.gap-lg{gap:24px}.navbar{background:var(--card-bg);border-bottom:1px solid var(--border);height:56px;box-shadow:var(--shadow);z-index:100;justify-content:space-between;align-items:center;padding:0 24px;display:flex;position:sticky;top:0}.navbar-brand{color:var(--primary);align-items:center;gap:8px;font-size:18px;font-weight:700;display:flex}.navbar-nav{align-items:center;gap:6px;list-style:none;display:flex}.navbar-nav a{color:var(--text-secondary);border-radius:8px;padding:8px 14px;font-size:14px;transition:all .2s}.navbar-nav a:hover,.navbar-nav a.router-link-exact-active{color:var(--primary);background:var(--primary-light);text-decoration:none}.navbar-actions{align-items:center;gap:12px;display:flex}.points-badge{background:var(--primary-light);color:var(--primary);border-radius:20px;align-items:center;gap:5px;padding:4px 12px;font-size:13px;font-weight:600;display:inline-flex}.synthesize-grid{grid-template-columns:340px 1fr;gap:24px;display:grid}@media (width<=768px){.synthesize-grid{grid-template-columns:1fr}}.voice-card{border:2px solid var(--border);border-radius:var(--radius);cursor:pointer;background:var(--card-bg);padding:16px;transition:all .2s}.voice-card:hover{border-color:var(--primary)}.voice-card.active{border-color:var(--primary);background:var(--primary-light)}.voice-card .voice-name{font-size:15px;font-weight:600}.voice-card .voice-desc{color:var(--text-secondary);margin-top:4px;font-size:12px}.voice-card .voice-tag{background:#e5e7eb;border-radius:4px;margin-top:6px;margin-right:4px;padding:1px 8px;font-size:11px;display:inline-block}.voice-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;max-height:450px;padding-right:4px;display:grid;overflow-y:auto}.table{border-collapse:collapse;width:100%}.table th,.table td{text-align:left;border-bottom:1px solid var(--border);padding:12px 16px;font-size:14px}.table th{color:var(--text-secondary);background:#f9fafb;font-weight:600}.table tr:hover td{background:#f9fafb}.toast{z-index:1000;border-radius:var(--radius);color:#fff;box-shadow:var(--shadow-md);padding:12px 20px;font-size:14px;animation:.3s slideIn;position:fixed;top:80px;right:24px}.toast-success{background:var(--success)}.toast-error{background:var(--danger)}.toast-info{background:var(--primary)}@keyframes slideIn{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}.loading-spinner{border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;width:20px;height:20px;animation:.6s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;color:var(--text-secondary);padding:48px 24px}.empty-state svg{opacity:.3;width:64px;height:64px;margin-bottom:16px}.tabs{border-bottom:2px solid var(--border);margin-bottom:16px;display:flex}.tab-item{color:var(--text-secondary);cursor:pointer;border-bottom:2px solid #0000;margin-bottom:-2px;padding:10px 20px;font-size:14px;font-weight:500;transition:all .2s}.tab-item:hover{color:var(--primary)}.tab-item.active{color:var(--primary);border-bottom-color:var(--primary)}.pagination{justify-content:center;align-items:center;gap:6px;margin-top:20px;display:flex}.pagination button{border:1px solid var(--border);background:var(--card-bg);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 12px;font-size:13px;transition:all .2s}.pagination button:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.pagination button.active{background:var(--primary);border-color:var(--primary);color:#fff}.pagination button:disabled{opacity:.4;cursor:not-allowed}.recorder-wrap{text-align:center;border:2px dashed var(--border);border-radius:var(--radius);background:#fafbfc;padding:24px}.recorder-wrap.recording{border-color:var(--danger);background:#fef2f2;animation:1.5s infinite pulse}@keyframes pulse{0%,to{box-shadow:0 0 #ef44444d}50%{box-shadow:0 0 0 10px #ef444400}}.result-card{background:var(--primary-bg);border-radius:var(--radius);border:1px solid var(--primary);margin-top:24px;padding:20px}.result-card audio{width:100%;margin:12px 0}
