:root{--brand-navy:#16305c;--brand-navy-2:#1e3e70;--brand-teal:#1e5aa8;--brand-teal-2:#2e72c4;--brand-teal-soft:#8fc0ec;--bg:#f4f6fb;--surface:#fff;--text:#1c2333;--text-muted:#6b7385;--border:#e4e8f0;--danger:#d64545;--success:#1f9d6b;--radius:12px;--shadow:0 10px 30px #21183d14;font-family:Segoe UI,system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text)}a{color:var(--brand-teal);text-decoration:none}.login-wrap{grid-template-columns:1.1fr .9fr;min-height:100vh;display:grid}.login-hero{color:#fff;background:radial-gradient(1200px 500px at -10% -10%, #2e72c48c, transparent 60%), radial-gradient(900px 600px at 120% 120%, #8fc0ec33, transparent 55%), linear-gradient(160deg, #0f2246 0%, var(--brand-navy) 55%, #122a52 100%);flex-direction:column;justify-content:space-between;padding:56px 60px;display:flex;position:relative;overflow:hidden}.login-hero:after{content:"";opacity:.5;pointer-events:none;background-image:radial-gradient(#ffffff0d 1px,#0000 1px);background-size:22px 22px;position:absolute;inset:0}.hero-body{z-index:1;max-width:460px;margin-top:8vh;position:relative}.hero-title{letter-spacing:-1px;margin:28px 0 14px;font-size:44px;font-weight:800;line-height:1.05}.hero-title span{color:var(--brand-teal-soft)}.hero-sub{color:#ffffffb8;margin-bottom:30px;font-size:16px;line-height:1.6}.hero-features{gap:14px;margin:0;padding:0;list-style:none;display:grid}.hero-features li{color:#ffffffe6;align-items:center;gap:12px;font-size:15px;display:flex}.hero-features .dot{width:26px;height:26px;color:var(--brand-teal-soft);background:#1e5aa847;border-radius:8px;flex:none;place-items:center;display:grid}.hero-foot{z-index:1;color:#ffffff80;font-size:12.5px;position:relative}.login-panel{background:var(--surface);justify-content:center;align-items:center;padding:40px;display:flex}.login-card{width:100%;max-width:380px}.login-eyebrow{letter-spacing:3px;text-transform:uppercase;color:var(--brand-teal);font-size:12px;font-weight:700}.login-card h2{margin:8px 0 6px;font-size:30px}.login-card .muted{color:var(--text-muted);margin-bottom:26px;font-size:14.5px}.field{margin-bottom:18px}.field label{letter-spacing:1px;text-transform:uppercase;color:var(--text-muted);margin-bottom:8px;font-size:12px;font-weight:700;display:block}.field input{width:100%;color:var(--text);border:1.5px solid var(--border);background:#fbfcfe;border-radius:10px;outline:none;padding:13px 14px;font-size:15px;transition:border-color .15s,box-shadow .15s}.field input:focus{border-color:var(--brand-teal);box-shadow:0 0 0 4px #1e5aa81f}.btn{cursor:pointer;color:#fff;background:linear-gradient(135deg, var(--brand-teal-2), var(--brand-teal));border:none;border-radius:10px;justify-content:center;align-items:center;gap:8px;width:100%;padding:13px 16px;font-size:15px;font-weight:700;transition:transform 50ms,filter .15s;display:inline-flex}.btn:hover{filter:brightness(1.05)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-ghost{color:var(--brand-teal);cursor:pointer;background:0 0;border:none;width:auto;padding:6px;font-weight:600}.form-link{text-align:center;margin-top:16px}.ip-help{text-align:center;color:var(--text-muted);margin-top:18px;font-size:12.5px}.link-mini{color:var(--brand-teal);cursor:pointer;background:0 0;border:none;font-size:12.5px;text-decoration:underline}.alert{border-radius:10px;margin-bottom:18px;padding:11px 14px;font-size:14px}.alert-error{color:var(--danger);background:#fdecec;border:1px solid #f6cfcf}.alert-ok{color:var(--success);background:#e8f7f0;border:1px solid #c7ecdb}.app-shell{grid-template-columns:264px 1fr;min-height:100vh;display:grid}.sidebar{background:linear-gradient(180deg, var(--brand-navy), #0f2246);color:#fff;flex-direction:column;padding:22px 16px;display:flex}.sidebar-brand{border-bottom:1px solid #ffffff14;margin-bottom:14px;padding:6px 10px 22px}.nav{flex-direction:column;flex:1;gap:4px;display:flex}.nav a{color:#ffffffbf;border-radius:10px;align-items:center;gap:12px;padding:12px 14px;font-size:14.5px;font-weight:600;transition:background .15s,color .15s;display:flex}.nav a:hover{color:#fff;background:#ffffff0f}.nav a.active{color:#fff;box-shadow:inset 3px 0 0 var(--brand-teal-soft);background:#1e5aa838}.sidebar-user{border-top:1px solid #ffffff14;align-items:center;gap:10px;padding-top:14px;display:flex}.avatar{background:var(--brand-teal);color:#fff;border-radius:50%;flex:none;place-items:center;width:38px;height:38px;font-weight:700;display:grid}.sidebar-user .info{overflow:hidden}.sidebar-user .info b{white-space:nowrap;text-overflow:ellipsis;font-size:13.5px;display:block;overflow:hidden}.sidebar-user .info small{color:#ffffff80;font-size:12px}.logout-btn{color:#fffc;cursor:pointer;background:#ffffff0f;border:none;border-radius:9px;justify-content:center;align-items:center;gap:8px;margin-top:12px;padding:9px;font-size:13px;display:flex}.logout-btn:hover{color:#fff;background:#d6454533}.main{padding:0}.topbar{background:var(--surface);border-bottom:1px solid var(--border);align-items:center;height:64px;padding:0 28px;font-size:16px;font-weight:700;display:flex}.content{padding:28px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:28px}.placeholder{text-align:center;min-height:55vh;color:var(--text-muted);place-items:center;display:grid}.placeholder .icon{width:72px;height:72px;color:var(--brand-teal);background:#1e5aa81a;border-radius:18px;place-items:center;margin:0 auto 18px;display:grid}.placeholder h3{color:var(--text);margin:0 0 6px;font-size:20px}.center-screen{min-height:100vh;color:var(--text-muted);place-items:center;display:grid}.blocked-screen{background:radial-gradient(900px 500px at 50% -5%,#eef2fb,#0000 70%),#f6f8fc;flex-direction:column;align-items:center;min-height:100vh;padding:30px 20px;display:flex}.blocked-top{align-self:flex-start}.blocked-top .info-b,.blocked-screen svg text{color:#16305c}.blocked-card{text-align:center;background:#fff;border:1px solid #e6eaf2;border-radius:20px;width:100%;max-width:480px;margin:auto;padding:44px 40px;box-shadow:0 24px 60px #16305c1a}.blocked-icon{color:#fff;background:linear-gradient(140deg,#2e72c4,#16305c 55%,#3a2c6b);border-radius:26px;place-items:center;width:92px;height:92px;margin:0 auto 22px;display:grid;box-shadow:0 12px 26px #2e72c44d}.blocked-card h1{background:linear-gradient(90deg,#14213d,#1e5aa8 55%,#4b2f7a);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:12px;font-size:26px}.blocked-msg{color:#2b3342;margin-bottom:22px;font-size:15px;line-height:1.55}.blocked-ip{background:#f2f6fc;border:1px solid #dce6f5;border-radius:12px;margin-bottom:20px;padding:14px 16px}.blocked-ip .ip-label{text-transform:uppercase;letter-spacing:1.5px;color:#6b7385;justify-content:center;align-items:center;gap:6px;margin-bottom:6px;font-size:11px;display:flex}.blocked-ip .ip-value{color:#16305c;justify-content:center;align-items:center;gap:10px;font-family:Consolas,monospace;font-size:22px;font-weight:700;display:flex}.ip-copy{cursor:pointer;color:#1e5aa8;background:0 0;border:none;border-radius:6px;padding:4px;display:inline-flex}.ip-copy:hover{background:#e2ebf8}.blocked-note{color:#5a6274;margin-bottom:24px;font-size:13px;line-height:1.6}.blocked-note b{color:#1e5aa8}.blocked-foot{color:#98a1b3;padding-top:20px;font-size:12px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:18px;display:flex}.muted-sm{color:var(--text-muted);align-items:center;gap:6px;font-size:13px;display:flex}.btn-inline{width:auto;padding:11px 18px}.table-card{padding:0;overflow:hidden}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table th{text-align:left;color:var(--text-muted);text-transform:uppercase;letter-spacing:.6px;border-bottom:1px solid var(--border);background:#f7f9fc;padding:14px 18px;font-size:11.5px}.data-table td{border-bottom:1px solid var(--border);padding:13px 18px}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:#fafbfe}.muted-cell{color:var(--text-muted);font-size:13px}.badge{border-radius:20px;align-items:center;gap:4px;padding:3px 9px;font-size:12px;font-weight:600;display:inline-flex}.badge-admin{color:var(--brand-teal);background:#1e5aa81f}.badge-ok{color:var(--success);background:#e8f7f0}.badge-off{color:var(--text-muted);background:#f0f1f4}.icon-btn{border:1px solid var(--border);cursor:pointer;color:var(--text-muted);background:0 0;border-radius:8px;padding:7px;display:inline-flex}.icon-btn:hover{border-color:var(--brand-teal);color:var(--brand-teal)}.modal-overlay{z-index:50;background:#16305c73;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:14px;flex-direction:column;width:100%;max-width:620px;max-height:92vh;display:flex;overflow:hidden;box-shadow:0 20px 60px #00000040}.modal-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:18px 24px;display:flex}.modal-head h3{color:var(--brand-navy);font-size:18px}.modal-body{padding:22px 24px;overflow-y:auto}.form-grid{grid-template-columns:1fr 1fr;gap:14px;display:grid}.hint{text-transform:none;letter-spacing:0;color:var(--text-muted);font-size:11px;font-weight:400}.field textarea{border:1.5px solid var(--border);resize:vertical;background:#fbfcfe;border-radius:10px;width:100%;padding:10px 12px;font-family:inherit;font-size:14px}.field textarea:focus{border-color:var(--brand-teal);outline:none}.chk-group{flex-wrap:wrap;gap:10px 20px;padding:4px 0;display:flex}.chk{cursor:pointer;color:var(--text);align-items:center;gap:8px;font-size:14px;display:flex}.chk input{width:16px;height:16px;accent-color:var(--brand-teal)}.chk-day{background:#f4f6fb;border-radius:8px;padding:6px 12px}.checks-inline{flex-direction:column;justify-content:center;gap:10px;display:flex}.modal-foot{justify-content:flex-end;gap:10px;margin-top:20px;display:flex}.btn-secondary{color:var(--text);background:#eef1f6;width:auto;padding:12px 20px}.btn-secondary:hover{filter:none;background:#e4e8f0}.btn.btn-inline,.modal-foot .btn{width:auto}.mono-inline{background:#fff9;border-radius:4px;padding:1px 6px;font-family:Consolas,monospace}@media (width<=900px){.login-wrap{grid-template-columns:1fr}.login-hero{display:none}.app-shell{grid-template-columns:1fr}.sidebar{flex-direction:row;align-items:center}}
