:root{--bg:#121212;--surface:#181818;--surface-2:#1f1f1f;--card:#252525;--text:#fff;--text-muted:#b3b3b3;--text-soft:#cbcbcb;--accent:#1ed760;--accent-border:#1db954;--border:#4d4d4d;--border-light:#7c7c7c;--negative:#f3727f;--warning:#ffa42b;--info:#539df5;--shadow-card:#0000004d 0px 8px 8px;--shadow-dialog:#00000080 0px 8px 24px;--inset-border:#121212 0px 1px 0px, #7c7c7c 0px 0px 0px 1px inset;--font-ui:"Segoe UI", "Helvetica Neue", Helvetica, Arial, "Hiragino Sans", "Hiragino Kaku Gothic ProN", Meiryo, "MS Gothic", sans-serif;--sidebar-w:240px;--radius-card:8px;--radius-pill:9999px}*,:before,:after{box-sizing:border-box}html,body{background:var(--bg);min-height:100%;color:var(--text);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;margin:0;padding:0;font-size:16px;line-height:1.4}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.app-shell{background:var(--bg);min-height:100vh;display:flex}.sidebar{width:var(--sidebar-w);background:var(--bg);z-index:20;border-right:1px solid #222;flex-direction:column;flex-shrink:0;height:100vh;padding:20px 12px;display:flex;position:sticky;top:0}.sidebar-brand{letter-spacing:.02em;align-items:center;gap:10px;padding:4px 12px 24px;font-size:18px;font-weight:700;display:flex}.sidebar-mark{background:var(--accent);color:#000;border-radius:50%;place-items:center;width:28px;height:28px;font-size:14px;font-weight:700;display:grid}.sidebar-nav{flex-direction:column;flex:1;gap:4px;display:flex;overflow-y:auto}.nav-link{color:var(--text-muted);border-radius:6px;align-items:center;gap:12px;padding:10px 14px;font-size:14px;font-weight:400;transition:background .15s,color .15s;display:flex}.nav-link:hover{color:var(--text);background:var(--surface-2)}.nav-link.active{color:var(--text);background:var(--surface-2);font-weight:700}.nav-link.active:before{content:"";background:var(--accent);border-radius:50%;width:4px;height:4px;margin-right:-4px}.sidebar-foot{border-top:1px solid #222;flex-direction:column;gap:8px;padding:12px;display:flex}.sidebar-user{color:var(--text-muted);font-size:12px}.main{flex:1;min-width:0;padding:24px 28px 48px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;margin-bottom:24px;display:flex}.page-title{margin:0;font-size:24px;font-weight:700;line-height:1.2}.page-sub{color:var(--text-muted);margin:6px 0 0;font-size:14px}.panel{background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:20px}.panel+.panel{margin-top:16px}.panel-title{margin:0 0 16px;font-size:18px;font-weight:600}.stat-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;display:grid}.stat-card{background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:16px 18px}.stat-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;margin:0;font-size:12px;font-weight:700}.stat-value{margin:8px 0 0;font-size:28px;font-weight:700}.stat-card.alert .stat-value{color:var(--warning)}.btn{border-radius:var(--radius-pill);background:var(--surface-2);color:var(--text);text-transform:uppercase;letter-spacing:1.4px;border:none;justify-content:center;align-items:center;gap:8px;padding:8px 16px;font-size:14px;font-weight:700;transition:transform .12s,background .15s,opacity .15s;display:inline-flex}.btn:hover:not(:disabled){background:#2a2a2a}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:#000}.btn-primary:hover:not(:disabled){background:#1fdf64}.btn-danger{color:var(--negative);box-shadow:inset 0 0 0 1px var(--negative);background:0 0}.btn-danger:hover:not(:disabled){background:#f3727f1f}.btn-ghost{box-shadow:inset 0 0 0 1px var(--border-light);background:0 0}.btn-sm{letter-spacing:1px;padding:4px 12px;font-size:12px}.field{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.field label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;font-size:12px;font-weight:700}.field-hint{color:var(--text-muted);font-size:12px}.input,.select,.textarea{background:var(--surface-2);width:100%;color:var(--text);box-shadow:var(--inset-border);border:none;border-radius:500px;padding:12px 16px}.textarea{resize:vertical;border-radius:12px;min-height:96px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px}.input:focus,.select:focus,.textarea:focus{box-shadow:0 0 0 2px var(--accent);outline:1px solid #000}.select{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--text-muted) 50%), linear-gradient(135deg, var(--text-muted) 50%, transparent 50%);background-position:calc(100% - 18px) calc(50% - 3px),calc(100% - 12px) calc(50% - 3px);background-repeat:no-repeat;background-size:6px 6px,6px 6px;padding-right:36px}.form-row{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px 16px;display:grid}.form-actions{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.toolbar{flex-wrap:wrap;align-items:flex-end;gap:10px;margin-bottom:16px;display:flex}.toolbar .field{flex:1;min-width:160px;margin:0}.table-wrap{border-radius:var(--radius-card);overflow-x:auto}table.data{border-collapse:collapse;width:100%;font-size:14px}table.data th,table.data td{text-align:left;vertical-align:middle;border-bottom:1px solid #2a2a2a;padding:12px 14px}table.data th{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;background:var(--surface-2);font-size:12px;font-weight:700}table.data tr:hover td{background:#ffffff05}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px}.badge{text-transform:capitalize;background:var(--surface-2);color:var(--text-soft);border-radius:2px;align-items:center;padding:2px 8px;font-size:10.5px;font-weight:600;display:inline-flex}.badge-green{color:var(--accent);background:#1ed76026}.badge-red{color:var(--negative);background:#f3727f26}.badge-orange{color:var(--warning);background:#ffa42b26}.badge-blue{color:var(--info);background:#539df526}.row-actions{flex-wrap:wrap;gap:6px;display:flex}.alert{background:var(--card);color:var(--text);border-radius:8px;margin-bottom:16px;padding:12px 16px;font-size:14px}.alert-error{color:var(--negative);background:#f3727f1f}.alert-success{color:var(--accent);background:#1ed7601f}.alert-warn{color:var(--warning);background:#ffa42b1f}.empty{text-align:center;color:var(--text-muted);padding:32px 16px;font-size:14px}.pagination{color:var(--text-muted);justify-content:flex-end;align-items:center;gap:12px;margin-top:16px;font-size:14px;display:flex}.modal-backdrop{z-index:50;background:#000000b3;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);width:min(480px,100%);box-shadow:var(--shadow-dialog);border-radius:10px;padding:24px}.modal h2{margin:0 0 12px;font-size:18px;font-weight:700}.modal p{color:var(--text-muted);margin:0 0 16px;font-size:14px}.login-page{background:radial-gradient(ellipse at top, #1a1a1a 0%, #121212 55%), var(--bg);place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{background:var(--surface);width:min(400px,100%);box-shadow:var(--shadow-dialog);border-radius:12px;padding:32px 28px}.login-brand{align-items:center;gap:12px;margin-bottom:8px;display:flex}.login-brand h1{margin:0;font-size:24px;font-weight:700}.login-sub{color:var(--text-muted);margin:0 0 24px;font-size:14px}.code-list{background:var(--surface-2);white-space:pre-wrap;word-break:break-all;border-radius:8px;max-height:280px;padding:12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;overflow:auto}.mobile-bar{display:none}@media (max-width:896px){.sidebar{transition:transform .2s;position:fixed;top:0;left:0;transform:translate(-100%)}.sidebar.open{transform:translate(0)}.mobile-bar{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.main{padding:16px}.backdrop{z-index:15;background:#00000080;position:fixed;inset:0}}
