:root{--bg: #f0f2f5;--surface: #ffffff;--surface-2: #f8f9fa;--ink: #344767;--ink-strong: #344767;--muted: #7b809a;--faint: #a8b8d8;--hair: #e9ecef;--hair-strong: #d2d6da;--purple: #7b1fa2;--accent: #1A73E8;--accent-wash: #e3f0fd;--grad-dark: linear-gradient(195deg, #42424a, #191919);--grad-info: linear-gradient(195deg, #49a3f1, #1A73E8);--grad-success: linear-gradient(195deg, #66BB6A, #43A047);--grad-warning: linear-gradient(195deg, #FFA726, #FB8C00);--grad-error: linear-gradient(195deg, #EF5350, #E53935);--grad-purple: linear-gradient(195deg, #AB47BC, #8E24AA);--sh-card: 0 2px 6px -1px rgba(0,0,0,.1), 0 8px 24px -4px rgba(0,0,0,.06);--sh-dark: 0 4px 20px 0 rgba(0,0,0,.14), 0 7px 10px -5px rgba(64,64,74,.4);--sh-info: 0 4px 20px 0 rgba(0,0,0,.14), 0 7px 10px -5px rgba(26,115,232,.4);--sh-success: 0 4px 20px 0 rgba(0,0,0,.14), 0 7px 10px -5px rgba(76,175,80,.4);--sh-warning: 0 4px 20px 0 rgba(0,0,0,.14), 0 7px 10px -5px rgba(251,140,0,.4);--sh-error: 0 4px 20px 0 rgba(0,0,0,.14), 0 7px 10px -5px rgba(229,57,53,.4);--radius: .75rem;--radius-sm: .5rem;--sidebar-w: 250px;--sans: "Roboto", "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, "Roboto Mono", Menlo, Consolas, monospace}@media (prefers-color-scheme: dark){:root{--bg: #1a2035;--surface: #202940;--surface-2: #1a2035;--ink: #ffffff;--ink-strong: #ffffff;--muted: #a1a7c4;--faint: #6b7299;--hair: #344767;--hair-strong: #3b4a6b;--purple: #ce93d8;--accent: #5b9dff;--accent-wash: #1c2b4a;--sh-card: 0 2px 6px -1px rgba(0,0,0,.3), 0 8px 24px -4px rgba(0,0,0,.25)}}:root[data-theme=dark]{--bg: #1a2035;--surface: #202940;--surface-2: #1a2035;--ink: #ffffff;--ink-strong: #ffffff;--muted: #a1a7c4;--faint: #6b7299;--hair: #344767;--hair-strong: #3b4a6b;--purple: #ce93d8;--accent: #5b9dff;--accent-wash: #1c2b4a;--sh-card: 0 2px 6px -1px rgba(0,0,0,.3), 0 8px 24px -4px rgba(0,0,0,.25)}:root[data-theme=light]{--bg: #f0f2f5;--surface: #ffffff;--surface-2: #f8f9fa;--ink: #344767;--ink-strong: #344767;--muted: #7b809a;--faint: #a8b8d8;--hair: #e9ecef;--hair-strong: #d2d6da;--purple: #7b1fa2;--accent: #1A73E8;--accent-wash: #e3f0fd;--sh-card: 0 2px 6px -1px rgba(0,0,0,.1), 0 8px 24px -4px rgba(0,0,0,.06)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--sans);background:var(--bg);color:var(--ink);line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}h1,h2,h3,h4{color:var(--ink-strong);margin:0;font-weight:700;letter-spacing:-.01em}::selection{background:var(--accent-wash)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;direction:ltr;-webkit-font-feature-settings:"liga"}.center-screen{min-height:100vh;display:grid;place-items:center}.row{display:flex;align-items:center;gap:10px}.row.wrap{flex-wrap:wrap}.spread{justify-content:space-between}.gap-sm{gap:6px}.grow{flex:1}.muted{color:var(--muted)}.faint{color:var(--faint)}.mono{font-family:var(--mono)}.tnum{font-variant-numeric:tabular-nums}.stack{display:flex;flex-direction:column;gap:24px}.sub{color:var(--muted);font-size:14px}.spinner{width:30px;height:30px;border-radius:50%;border:3px solid var(--hair-strong);border-top-color:var(--accent);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spinner{animation-duration:2s}*{transition:none!important}}.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh}@media (max-width: 900px){.app{grid-template-columns:1fr}.sidebar{display:none}}.sidebar{margin:16px;border-radius:var(--radius);background:var(--surface);box-shadow:var(--sh-card);display:flex;flex-direction:column;position:sticky;top:16px;height:calc(100vh - 32px);overflow:hidden}.sidebar:after{content:"";position:absolute;left:0;right:0;bottom:0;height:180px;background:linear-gradient(180deg,transparent,color-mix(in srgb,var(--accent) 8%,transparent));pointer-events:none}.brand{display:flex;align-items:center;gap:12px;padding:20px 20px 16px}.brand .logo{width:40px;height:40px;border-radius:12px;background:var(--grad-info);box-shadow:var(--sh-info);display:grid;place-items:center;color:#fff;flex:none}.brand .logo .material-icons{font-size:24px}.brand .name{font-weight:700;color:var(--ink-strong);font-size:15px}.brand .name small{display:block;font-weight:400;font-size:11px;color:var(--muted);letter-spacing:.02em}.brand-sep{height:1px;background:var(--hair);margin:0 16px 8px}.nav{display:flex;flex-direction:column;gap:4px;padding:6px 12px;position:relative;z-index:1}.nav a{display:flex;align-items:center;gap:12px;padding:11px 14px;border-radius:var(--radius-sm);color:var(--muted);font-size:14px;font-weight:400;transition:background .15s,color .15s,box-shadow .15s}.nav a .material-icons{font-size:20px}.nav a:hover{background:var(--surface-2);color:var(--ink)}.nav a.active{background:var(--grad-dark);color:#fff;font-weight:500;box-shadow:var(--sh-dark)}.sidebar .foot{margin-top:auto;padding:16px;font-size:11.5px;color:var(--faint);position:relative;z-index:1}.main{display:flex;flex-direction:column;min-width:0}.topbar{position:sticky;top:0;z-index:20;padding:16px clamp(16px,3vw,28px) 6px;display:flex;align-items:center;gap:14px;background:transparent}.topbar .crumb{font-size:12px;color:var(--muted)}.topbar h1{font-size:20px;font-weight:700}.icon-btn2{width:40px;height:40px;display:inline-grid;place-items:center;border:none;background:transparent;color:var(--muted);border-radius:50%;cursor:pointer}.icon-btn2:hover{background:var(--surface-2);color:var(--ink)}.content{padding:10px clamp(16px,3vw,28px) 32px;max-width:1320px;width:100%}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--sh-card)}.card-pad{padding:20px 22px}.card-head{padding:18px 22px;border-bottom:1px solid var(--hair);display:flex;align-items:center;justify-content:space-between;gap:12px}.card-head h3{font-size:16px}.card-head p{margin:3px 0 0;font-size:13px;color:var(--muted)}h4{font-size:15px;color:var(--ink-strong)}.ghead{border-radius:var(--radius);padding:16px 20px;color:#fff;margin:-34px 16px 8px;position:relative;box-shadow:var(--sh-dark);background:var(--grad-dark)}.ghead.info{background:var(--grad-info);box-shadow:var(--sh-info)}.ghead.success{background:var(--grad-success);box-shadow:var(--sh-success)}.ghead h3{color:#fff;font-size:17px}.ghead p{margin:3px 0 0;font-size:13px;color:#ffffffd9}.card.has-ghead{margin-top:34px}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:24px}.stat{background:var(--surface);border-radius:var(--radius);box-shadow:var(--sh-card);padding:8px 16px 16px;display:flex;flex-direction:column}.stat .top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.stat .icon-box{width:60px;height:60px;border-radius:12px;margin-top:-22px;display:grid;place-items:center;color:#fff;flex:none}.stat .icon-box .material-icons{font-size:28px}.icon-dark{background:var(--grad-dark);box-shadow:var(--sh-dark)}.icon-info{background:var(--grad-info);box-shadow:var(--sh-info)}.icon-success{background:var(--grad-success);box-shadow:var(--sh-success)}.icon-warning{background:var(--grad-warning);box-shadow:var(--sh-warning)}.icon-error{background:var(--grad-error);box-shadow:var(--sh-error)}.icon-purple{background:var(--grad-purple);box-shadow:var(--sh-dark)}.stat .lbl{font-size:14px;color:var(--muted);font-weight:400;text-align:right}.stat .val{font-size:28px;font-weight:700;color:var(--ink-strong);text-align:right;line-height:1.1}.stat .val small{font-size:15px;font-weight:500;color:var(--muted)}.stat .divider{height:1px;background:var(--hair);margin:14px -16px 0}.stat .foot{padding-top:10px;font-size:13px;color:var(--muted)}.stat .foot b{color:var(--ink-strong);font-weight:700}.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:var(--radius-sm);border:none;background:var(--surface-2);color:var(--ink);font-family:inherit;font-size:12.5px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;cursor:pointer;transition:box-shadow .15s,opacity .15s,transform .05s;white-space:nowrap;box-shadow:0 3px 3px #0000001a}.btn:hover{box-shadow:0 4px 8px #00000029}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}.btn .material-icons{font-size:18px}.btn-primary{background:var(--grad-info);color:#fff;box-shadow:var(--sh-info)}.btn-success{background:var(--grad-success);color:#fff;box-shadow:var(--sh-success)}.btn-danger{background:transparent;color:#e53935;box-shadow:none;border:1px solid color-mix(in srgb,#E53935 40%,var(--hair))}.btn-danger:hover{background:color-mix(in srgb,#E53935 8%,transparent);box-shadow:none}.btn-ghost{background:transparent;box-shadow:none;color:var(--muted)}.btn-ghost:hover{background:var(--surface-2);box-shadow:none;color:var(--ink)}.btn-sm{padding:7px 12px;font-size:11px}.icon-btn{width:36px;height:36px;padding:0;justify-content:center;background:transparent;box-shadow:none;color:var(--muted)}.icon-btn:hover{background:var(--surface-2);box-shadow:none}.badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:6px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.02em;color:#fff;white-space:nowrap}.badge .d{display:none}.badge-ok{background:var(--grad-success)}.badge-warn{background:var(--grad-warning)}.badge-bad{background:var(--grad-error)}.badge-blue{background:var(--grad-info)}.badge-muted{background:color-mix(in srgb,var(--muted) 18%,transparent);color:var(--muted)}.table-wrap{overflow-x:auto}table.tbl{border-collapse:collapse;width:100%;font-size:13.5px;min-width:760px}table.tbl th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--purple);font-weight:700;padding:12px 16px;border-bottom:1px solid var(--hair)}table.tbl td{padding:13px 16px;border-bottom:1px solid var(--hair);vertical-align:middle;color:var(--muted)}table.tbl tbody tr:last-child td{border-bottom:none}table.tbl tbody tr:hover{background:var(--surface-2)}.cell-strong{font-weight:600;color:var(--ink-strong)}.feat-yes{color:#43a047}.feat-no{color:var(--faint);opacity:.6}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:12.5px;font-weight:500;color:var(--ink)}.field label .req{color:#e53935}.input,.select,textarea.input{width:100%;padding:10px 13px;border:1px solid var(--hair-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);font-family:inherit;font-size:14px;transition:border-color .15s,box-shadow .15s}.input:focus,.select:focus,textarea.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-wash)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media (max-width: 560px){.form-grid{grid-template-columns:1fr}}.form-grid .col-span{grid-column:1 / -1}.segmented{display:flex;gap:8px}.segmented button{flex:1;padding:10px;border:1px solid var(--hair-strong);background:var(--surface);border-radius:var(--radius-sm);font:inherit;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer}.segmented button.on{background:var(--grad-info);border-color:transparent;color:#fff;box-shadow:var(--sh-info)}.toggle{display:inline-flex;align-items:center;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none}.toggle .track{width:40px;height:22px;border-radius:100px;background:var(--hair-strong);position:relative;transition:background .15s;flex:none}.toggle .track .knob{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:transform .15s;box-shadow:0 1px 3px #0006}.toggle.on .track{background:var(--grad-success)}.toggle.on .track .knob{transform:translate(18px)}.toggle .lbl{font-size:13.5px;color:var(--ink)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#141e3280;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:grid;place-items:center;padding:20px;z-index:50}.modal{background:var(--surface);border-radius:var(--radius);width:100%;max-width:560px;max-height:90vh;overflow:auto;box-shadow:0 24px 60px #00000059}.modal-head{padding:18px 22px;border-bottom:1px solid var(--hair);display:flex;align-items:center;justify-content:space-between}.modal-head h2{font-size:18px}.modal-body{padding:22px}.modal-foot{padding:16px 22px;border-top:1px solid var(--hair);display:flex;justify-content:flex-end;gap:12px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:18px}.search{position:relative;flex:1;min-width:200px;max-width:340px}.search .input{padding-left:38px}.search .ic,.search .material-icons{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--faint);font-size:20px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.page-head h2{font-size:20px}.page-head p{margin:2px 0 0;font-size:13.5px;color:var(--muted)}.empty{text-align:center;padding:48px 20px;color:var(--muted)}.error-box{padding:12px 16px;border-radius:var(--radius-sm);background:color-mix(in srgb,#E53935 10%,var(--surface));color:#e53935;font-size:13.5px;border:1px solid color-mix(in srgb,#E53935 30%,transparent)}.note{background:var(--surface-2);border-radius:var(--radius-sm);padding:13px 16px;font-size:13.5px;color:var(--muted)}.note b{color:var(--ink-strong)}:not(pre)>code{background:var(--surface-2);padding:.08em .4em;border-radius:4px;color:var(--purple);font-family:var(--mono);font-size:.88em}html{scroll-behavior:smooth}
