:root{--halo-canvas: #f9f9f9;--halo-surface: #ffffff;--halo-surface-2: #f3f4f6;--halo-surface-3: #eeeeee;--halo-border: #e5e7eb;--halo-border-strong: #d1d5db;--halo-text: #111827;--halo-text-secondary: #4b5563;--halo-text-muted: #6b7280;--halo-text-faint: #9ca3af;--halo-primary: #5e5e5b;--halo-primary-strong: #464644;--halo-primary-on: #ffffff;--halo-primary-soft: rgba(94, 94, 91, .1);--halo-primary-ring: rgba(94, 94, 91, .2);--halo-primary-gradient: linear-gradient(135deg, #5e5e5b 0%, #464644 100%);--halo-success: #059669;--halo-success-soft: rgba(5, 150, 105, .1);--halo-warning: #b45309;--halo-warning-soft: rgba(180, 83, 9, .1);--halo-error: #ba1a1a;--halo-error-soft: rgba(186, 26, 26, .1);--halo-info: #2563eb;--halo-info-soft: rgba(37, 99, 235, .1);--halo-neutral: #6b7280;--halo-neutral-soft: rgba(107, 114, 128, .12);--halo-radius-sm: 6px;--halo-radius: 8px;--halo-radius-lg: 12px;--halo-radius-pill: 9999px;--halo-shadow-xs: 0 1px 2px rgba(17, 24, 39, .04);--halo-shadow-sm: 0 1px 3px rgba(17, 24, 39, .06);--halo-shadow-modal: 0 10px 15px -3px rgba(0, 0, 0, .08), 0 4px 6px -4px rgba(0, 0, 0, .05);--halo-space-1: 4px;--halo-space-2: 8px;--halo-space-3: 12px;--halo-space-4: 16px;--halo-space-5: 20px;--halo-space-6: 24px;--halo-space-8: 32px;--halo-space-10: 40px;--halo-space-12: 48px;--halo-sidebar-width: 260px;--halo-sidebar-rail: 64px;--halo-topbar-height: 64px;--halo-container-max: 1440px;--halo-card-pad: 24px;--halo-font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--halo-font-mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", "Menlo", monospace}.t-display{font-size:30px;line-height:38px;font-weight:700;letter-spacing:-.02em}.t-headline-lg{font-size:24px;line-height:32px;font-weight:600;letter-spacing:-.01em}.t-headline{font-size:20px;line-height:28px;font-weight:600}.t-title{font-size:16px;line-height:24px;font-weight:600}.t-body{font-size:14px;line-height:20px;font-weight:400}.t-body-sm{font-size:13px;line-height:18px;font-weight:400}.t-caption{font-size:12px;line-height:16px;font-weight:400}.t-label{font-size:12px;line-height:16px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--halo-text-secondary)}.t-mono{font-family:var(--halo-font-mono);font-size:13px;letter-spacing:-.01em;font-variant-numeric:tabular-nums}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;min-height:100%}body{font-family:var(--halo-font-sans);font-size:14px;line-height:1.5;color:var(--halo-text);background-color:var(--halo-canvas);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5{margin:0;font-weight:600;color:var(--halo-text)}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}img{max-width:100%;display:block}.material-symbols-outlined{font-variation-settings:"FILL" 0,"wght" 400,"GRAD" 0,"opsz" 20;-webkit-user-select:none;user-select:none;line-height:1}.material-symbols-outlined.fill{font-variation-settings:"FILL" 1}.halo-page{display:flex;flex-direction:column;gap:var(--halo-space-6)}.halo-page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--halo-space-4);flex-wrap:wrap}.halo-page-head h1{font-size:24px;line-height:32px;font-weight:600;letter-spacing:-.01em}.halo-page-head p{margin:4px 0 0;color:var(--halo-text-secondary);font-size:14px}.card{background:var(--halo-surface);border:1px solid var(--halo-border);border-radius:var(--halo-radius-lg)}.card-pad{padding:var(--halo-card-pad)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--halo-space-2);height:40px;padding:0 16px;border:1px solid transparent;border-radius:var(--halo-radius);font-size:14px;font-weight:600;white-space:nowrap;transition:background-color .15s ease,border-color .15s ease,color .15s ease,opacity .15s ease}.btn .material-symbols-outlined{font-size:18px}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-sm{height:32px;padding:0 12px;font-size:13px}.btn-sm .material-symbols-outlined{font-size:16px}.btn-icon{width:36px;height:36px;padding:0}.btn-primary{background:var(--halo-primary);color:var(--halo-primary-on)}.btn-primary:hover:not(:disabled){background:var(--halo-primary-strong)}.btn-secondary{background:var(--halo-surface);border-color:var(--halo-border-strong);color:var(--halo-text)}.btn-secondary:hover:not(:disabled){background:var(--halo-surface-2)}.btn-ghost{background:transparent;color:var(--halo-text-secondary)}.btn-ghost:hover:not(:disabled){background:var(--halo-surface-2);color:var(--halo-text)}.btn-danger{background:var(--halo-error);color:#fff}.btn-danger:hover:not(:disabled){filter:brightness(.94)}.btn-danger-ghost{background:transparent;color:var(--halo-error)}.btn-danger-ghost:hover:not(:disabled){background:var(--halo-error-soft)}.field{display:flex;flex-direction:column;gap:var(--halo-space-2)}.field-label{font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--halo-text-secondary)}.input,.select,.textarea{width:100%;min-height:40px;padding:8px 12px;border:1px solid var(--halo-border-strong);border-radius:var(--halo-radius);background:var(--halo-surface);color:var(--halo-text);font-family:inherit;font-size:14px;transition:border-color .15s ease,box-shadow .15s ease}.input::placeholder,.select::placeholder,.textarea::placeholder{color:var(--halo-text-faint)}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--halo-primary);box-shadow:0 0 0 2px var(--halo-primary-ring)}.input:disabled,.select:disabled,.textarea:disabled{background:var(--halo-surface-2);color:var(--halo-text-muted)}.input.is-invalid,.select.is-invalid,.textarea.is-invalid{border-color:var(--halo-error)}.textarea{min-height:96px;resize:vertical;line-height:1.5}.field-error{font-size:12px;color:var(--halo-error)}.field-hint{font-size:12px;color:var(--halo-text-muted)}.search{position:relative;display:flex;align-items:center}.search .material-symbols-outlined{position:absolute;left:12px;font-size:20px;color:var(--halo-text-muted);pointer-events:none}.search input{width:100%;height:40px;padding:0 16px 0 40px;border:1px solid var(--halo-border-strong);border-radius:var(--halo-radius-pill);background:var(--halo-surface);font-family:inherit;font-size:14px;color:var(--halo-text)}.search input::placeholder{color:var(--halo-text-faint)}.search input:focus{outline:none;border-color:var(--halo-primary);box-shadow:0 0 0 2px var(--halo-primary-ring)}.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:var(--halo-radius);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;background:var(--halo-neutral-soft);color:var(--halo-neutral)}.badge.is-success{background:var(--halo-success-soft);color:var(--halo-success)}.badge.is-warning{background:var(--halo-warning-soft);color:var(--halo-warning)}.badge.is-error{background:var(--halo-error-soft);color:var(--halo-error)}.badge.is-info{background:var(--halo-info-soft);color:var(--halo-info)}.table-wrap{width:100%;overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:14px}.table thead th{position:sticky;top:0;text-align:left;padding:10px 16px;background:var(--halo-canvas);border-bottom:1px solid var(--halo-border);font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--halo-text-secondary);white-space:nowrap}.table tbody td{padding:12px 16px;border-bottom:1px solid var(--halo-border);color:var(--halo-text);vertical-align:middle}.table tbody tr{transition:background-color .12s ease}.table tbody tr:hover{background:var(--halo-surface-2)}.switch{position:relative;display:inline-flex;width:40px;height:22px;flex:none}.switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}.switch .track{width:100%;height:100%;border-radius:var(--halo-radius-pill);background:var(--halo-border-strong);transition:background-color .15s ease}.switch .thumb-dot{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:var(--halo-shadow-sm);transition:transform .15s ease;pointer-events:none}.switch input:checked+.track{background:var(--halo-primary)}.switch input:checked+.track+.thumb-dot{transform:translate(18px)}.switch input:disabled{cursor:not-allowed}.mono{font-family:var(--halo-font-mono);font-variant-numeric:tabular-nums}.muted{color:var(--halo-text-muted)}.text-secondary{color:var(--halo-text-secondary)}.nowrap{white-space:nowrap}.spin{animation:halo-spin .8s linear infinite}@keyframes halo-spin{to{transform:rotate(360deg)}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
