#root{min-height:100%}.appShell{display:grid;grid-template-columns:280px 1fr;min-height:100vh}.appShell *{min-width:0}.sidebar{padding:var(--space-5) var(--space-4);border-right:1px solid var(--border);background:linear-gradient(180deg,#ffffff0a,#ffffff05);position:sticky;top:0;height:100vh;overflow:auto}.brand{display:flex;align-items:center;gap:10px;margin-bottom:var(--space-5)}.brandMark{width:36px;height:36px;border-radius:12px;overflow:hidden;background:transparent;box-shadow:0 10px 30px #4f7cff33}.brandLogoImg{width:100%;height:100%;object-fit:cover;display:block}.brandText{display:flex;flex-direction:column;line-height:1.2}.brandTitle{font-weight:650;letter-spacing:.2px}.brandSub{color:var(--muted);font-size:12px}.nav{display:flex;flex-direction:column;gap:6px;margin-top:var(--space-4)}.navSection{margin-top:var(--space-4);display:flex;flex-direction:column;gap:10px}.navSectionTitle{color:var(--muted);font-size:12px;font-weight:650;letter-spacing:.4px;text-transform:uppercase;margin:var(--space-3) 0 var(--space-2);padding:0 10px}.navGroup{padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.04)}.navGroup:last-child{border-bottom:none;padding-bottom:0}.navGroupToggle{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-radius:12px;border:1px solid transparent;color:var(--muted);background:transparent;width:100%;font-weight:650;letter-spacing:.2px}.navGroupToggle:hover{color:var(--text);background:#ffffff0d;border-color:#ffffff0f}.navGroup[data-active=true] .navGroupToggle{color:var(--text);background:#4f7cff14;border-color:#4f7cff29}.navGroupItems{display:flex;flex-direction:column;gap:6px;margin-top:6px;margin-left:6px;padding-left:12px;border-left:1px solid rgba(255,255,255,.08)}.navGroupItems a{padding-left:10px;font-size:13px;border-radius:10px}.navGroupItems a span:first-child{position:relative;padding-left:10px}.navGroupItems a span:first-child:before{content:"";width:4px;height:4px;border-radius:999px;background:#ffffff59;position:absolute;left:0;top:50%;transform:translateY(-50%)}.nav a{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-radius:12px;border:1px solid transparent;color:var(--muted);background:transparent}.nav a:hover{color:var(--text);background:#ffffff0d;border-color:#ffffff0f}.nav a[data-active=true]{color:var(--text);background:#4f7cff1f;border-color:#4f7cff40}.navGroupItems a[data-active=true]{box-shadow:inset 3px 0 #4f7cffbf}.main{padding:var(--space-6);max-width:1320px;width:100%;margin:0 auto}.topbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-5)}.pageTitle{font-size:18px;font-weight:650}.muted{color:var(--muted)}.panel{background:linear-gradient(180deg,#ffffff0a,#ffffff05);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow);padding:var(--space-5)}.panelHeader{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-4)}.panelTitle{font-size:14px;font-weight:650}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2)}.toolbar input,.toolbar select{flex:0 1 220px}.toolbar textarea{flex:1 1 480px;min-width:0}.toolbar button{flex:0 0 auto}.btnPrimary{background:#4f7cff2e;border-color:#4f7cff4d}.btnPrimary:hover{background:#4f7cff3d;border-color:#4f7cff73}.btnDanger{background:#ff5c7a1f;border-color:#ff5c7a4d}.btnDanger:hover{background:#ff5c7a2e;border-color:#ff5c7a73}a.btnPrimary,a.btnDanger{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:12px;padding:9px 12px;min-height:var(--control-h);cursor:pointer;transition:transform .05s ease,background .15s ease,border-color .15s ease}a.btnPrimary:active,a.btnDanger:active{transform:translateY(1px)}a.btnPrimary:focus-visible,a.btnDanger:focus-visible{border-color:#4f7cff99;box-shadow:var(--focus-ring);outline:none}.userActionsCell{min-width:190px}.userActionsTd{display:grid;grid-template-columns:1fr 1fr;gap:8px}.userActionsTd>button,.userActionsTd>a{padding:7px 10px;min-height:34px;border-radius:10px;font-size:12px;white-space:nowrap}.userActionsFull{grid-column:1 / -1}.userCardActionsRow{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}.userCardActionsFull{width:100%;margin-top:8px}.grid2{display:grid;grid-template-columns:220px 1fr;gap:var(--space-2) var(--space-3);align-items:center}.gridPanels{display:grid;grid-template-columns:1fr;gap:var(--space-3);align-items:start}@media (min-width: 980px){.gridPanels{grid-template-columns:1fr 1fr}.gridPanelsWideLeft{grid-template-columns:1.6fr 1fr}}.previewCard{border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;background:#ffffff08;box-shadow:var(--shadow-sm)}.previewImg{width:100%;display:block;object-fit:contain;aspect-ratio:16 / 9}.previewMainBtnRow{margin-top:var(--space-3)}.previewActions{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-2)}.thumbWrap{margin-top:8px;border:1px dashed var(--border);border-radius:12px;padding:8px;display:inline-block;background:#ffffff05}.thumb{display:block;width:200px;height:auto;border-radius:8px}.help{font-size:12px;color:var(--muted)}.tableWrap{overflow:auto;border-radius:12px;border:1px solid var(--border)}.table{width:100%;border-collapse:collapse;font-size:13px;min-width:780px}.table th,.table td{padding:10px 12px;border-bottom:1px solid rgba(255,255,255,.06);vertical-align:top;text-align:left}.table th{position:sticky;top:0;background:#0c1428eb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:12px;color:var(--muted);z-index:1}.table tr:hover td{background:#ffffff05}.badge{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;border:1px solid var(--border);background:#ffffff0a;font-size:12px;color:var(--muted)}.badgeOk{color:#39d98ae6;border-color:#39d98a33;background:#39d98a14}.badgeOff{color:#ff5c7ae6;border-color:#ff5c7a33;background:#ff5c7a14}.badgeInternal{color:#ffb800eb;border-color:#ffb80038;background:#ffb80014}.badgeUser{color:#9aa4b8f2;border-color:#9aa4b82e;background:#9aa4b80f}.badgeUnknown{color:#6e7d9bf2;border-color:#6e7d9b2e;background:#6e7d9b0f}.pager{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-top:var(--space-4)}.toast{margin-top:var(--space-3);padding:10px 12px;border-radius:12px;border:1px solid var(--border);background:#ffffff09;color:var(--text-1);box-shadow:var(--shadow-sm)}.toastStrong{border-left:3px solid rgba(79,124,255,.6)}.toastDanger{border-left:3px solid rgba(255,92,122,.7)}.toastOk{border-left:3px solid rgba(57,217,138,.7)}.kpiGrid{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--space-3)}.kpiCard{grid-column:span 4;background:#ffffff08;border:1px solid var(--border);border-radius:var(--r-md);padding:var(--space-4);box-shadow:var(--shadow-sm)}.kpiLabel{font-size:12px;color:var(--muted)}.kpiValue{margin-top:6px;font-size:20px;font-weight:700;letter-spacing:.2px}.kpiHint{margin-top:6px;font-size:12px;color:var(--text-2)}.mobileTopbar,.sidebarOverlay{display:none}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:50;display:grid;place-items:center;padding:calc(var(--space-4) + env(safe-area-inset-top)) calc(var(--space-4) + env(safe-area-inset-right)) calc(var(--space-4) + env(safe-area-inset-bottom)) calc(var(--space-4) + env(safe-area-inset-left))}.dialog{width:min(640px,100%);border-radius:var(--r-lg);border:1px solid var(--border);background:#0c1428f0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:var(--shadow-md);padding:var(--space-5);max-height:min(80vh,760px);overflow:visible;display:flex;flex-direction:column}.dialogTitle{font-size:16px;font-weight:700}.dialogBody{margin-top:var(--space-3);color:var(--text-1);overflow:auto;min-height:0;flex:1 1 auto}.dialogBody input,.dialogBody select,.dialogBody textarea{min-width:0;width:100%}.opsNotifyProjectForm{display:grid;gap:10px}.opsNotifyProjectFormRow2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}.opsNotifyProjectFormRow4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}@media (max-width: 720px){.dialog{padding:var(--space-4)}}@media (max-width: 560px){.opsNotifyProjectFormRow2{grid-template-columns:1fr}.opsNotifyProjectFormRow4{grid-template-columns:1fr 1fr}}@media (max-width: 420px){.opsNotifyProjectFormRow4{grid-template-columns:1fr}}.dialogFooter{display:flex;justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-4);flex:0 0 auto}.loginPage{min-height:100vh;display:grid;place-items:center;padding:var(--space-6);position:relative;overflow:hidden}.loginBg{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.loginGlow{position:absolute;top:-20%;right:-20%;bottom:-20%;left:-20%;background:radial-gradient(800px 520px at 30% 20%,rgba(79,124,255,.22),transparent 60%),radial-gradient(760px 540px at 70% 30%,rgba(255,92,122,.18),transparent 62%),radial-gradient(820px 560px at 55% 85%,rgba(255,176,32,.08),transparent 60%);opacity:.95}.loginGrid{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);background-size:52px 52px;-webkit-mask-image:radial-gradient(closest-side at 50% 35%,rgba(0,0,0,.9),transparent 70%);mask-image:radial-gradient(closest-side at 50% 35%,rgba(0,0,0,.9),transparent 70%);opacity:.22;animation:loginGridMove 12s linear infinite}.loginBursts{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;opacity:.95}.loginBurst{position:absolute;left:var(--x, 50%);top:var(--y, 60%);width:220px;height:220px;transform:translate(-50%,-50%) scale(var(--s, 1));border-radius:999px;background:radial-gradient(closest-side,#ffdc8c73,#ffdc8c00 70%);filter:blur(0px);opacity:0;animation:loginBurstPop var(--dur, 5.2s) ease-in-out infinite;animation-delay:var(--delay, 0s)}.loginPackets{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;opacity:.9}.loginPacket{position:absolute;left:var(--x, 50%);top:-18%;width:56px;height:72px;border-radius:14px;transform:translate(-50%) rotate(var(--rot, 0deg)) scale(var(--s, 1));background:linear-gradient(180deg,#ff5c7af2,#d2284aeb);border:1px solid rgba(255,255,255,.12);box-shadow:0 18px 48px #0000006b,0 10px 28px #ff5c7a1f;animation:loginPacketFall var(--dur, 12s) linear infinite;animation-delay:var(--delay, 0s)}.loginSparks{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;opacity:.9}.loginSpark{position:absolute;left:var(--x, 50%);top:-10%;width:6px;height:6px;border-radius:999px;transform:translate(-50%) scale(var(--s, 1));background:radial-gradient(circle at 30% 30%,#fffffff2,#ffdc8cd9 40%,#ffdc8c00 70%);filter:drop-shadow(0 0 10px rgba(255,220,140,.35));opacity:0;animation:loginSparkFall var(--dur, 6.4s) linear infinite;animation-delay:var(--delay, 0s)}.loginSpark:after{content:"";position:absolute;left:50%;top:50%;width:26px;height:2px;transform:translate(-50%,-50%) rotate(18deg);background:linear-gradient(90deg,#ffdc8c00,#ffdc8ccc,#ffdc8c00);opacity:.55}.loginPacket:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:14px;background:radial-gradient(18px 24px at 26% 18%,rgba(255,255,255,.32),transparent 55%),radial-gradient(28px 28px at 70% 30%,rgba(255,255,255,.14),transparent 60%);opacity:.7}.loginPacket:after{content:"";position:absolute;left:10px;right:10px;top:18px;height:10px;border-radius:999px;background:linear-gradient(90deg,#ffdc8c00,#ffdc8cf2,#ffdc8c00);opacity:.85}.loginWrap{position:relative;width:min(460px,100%);z-index:1}.loginCard{border-radius:var(--r-lg);border:1px solid rgba(255,255,255,.12);background:#0c1428c7;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 26px 60px #00000080;padding:var(--space-5);position:relative}.loginCard:before{content:"";position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;border-radius:var(--r-lg);background:linear-gradient(135deg,#4f7cff47,#ff5c7a38,#39d98a2e);filter:blur(12px);opacity:.45;z-index:-1}.loginForm{display:grid;gap:12px}.loginField{display:grid;gap:8px}.loginPwdRow{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}.loginPwdToggle{min-height:var(--control-h);padding:9px 12px;border-radius:12px}.loginHint{margin-top:var(--space-3);text-align:center;font-size:12px;color:var(--text-2)}@keyframes loginGridMove{0%{background-position:0 0,0 0}to{background-position:0 52px,52px 0}}@keyframes loginBurstPop{0%{opacity:0;transform:translate(-50%,-50%) scale(calc(var(--s, 1) * .6));filter:blur(8px)}18%{opacity:0}28%{opacity:.9}40%{opacity:.2;transform:translate(-50%,-50%) scale(calc(var(--s, 1) * 1.25));filter:blur(2px)}60%{opacity:0;transform:translate(-50%,-50%) scale(calc(var(--s, 1) * 1.5))}to{opacity:0}}@keyframes loginPacketFall{0%{transform:translate(-50%) translateY(-10vh) rotate(var(--rot, 0deg)) scale(var(--s, 1));opacity:0;filter:blur(0px)}10%{opacity:.95}62%{box-shadow:0 18px 48px #0000006b,0 10px 28px #ff5c7a1f}70%{box-shadow:0 18px 56px #00000070,0 18px 64px #ffdc8c24;filter:blur(0px)}72%{box-shadow:0 22px 64px #0000007a,0 28px 120px #ffdc8c3d}76%{box-shadow:0 18px 48px #0000006b,0 10px 28px #ff5c7a1f}80%{opacity:.95}to{transform:translate(calc(-50% + 20px)) translateY(120vh) rotate(calc(var(--rot, 0deg) + 14deg)) scale(var(--s, 1));opacity:0;filter:blur(.4px)}}@keyframes loginSparkFall{0%{transform:translate(-50%) translateY(-10vh) scale(var(--s, 1));opacity:0}12%{opacity:.9}30%{opacity:.25}45%{opacity:.95}70%{opacity:.18}to{transform:translate(calc(-50% + var(--dx, 18px))) translateY(120vh) scale(var(--s, 1));opacity:0}}.desktopOnly{display:block}.mobileOnly{display:none}.cardList{display:grid;grid-template-columns:1fr;gap:var(--space-3)}.card{border-radius:var(--r-md);border:1px solid var(--border);background:#ffffff08;box-shadow:var(--shadow-sm);padding:var(--space-4)}.cardHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3)}.cardTitle{font-weight:700}.cardMeta{margin-top:6px;font-size:12px;color:var(--text-2)}.cardBody{margin-top:var(--space-3);display:grid;gap:10px}.cardRow{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3)}.cardKey{font-size:12px;color:var(--muted)}.cardVal{text-align:right;color:var(--text-0)}.cardFooter{margin-top:var(--space-3)}@media (max-width: 900px){.appShell{grid-template-columns:1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:min(320px,86vw);height:100vh;transform:translate(-110%);transition:transform .16s ease-out;z-index:30;overflow:auto;border-right:1px solid var(--border);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.sidebarOverlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;opacity:0;pointer-events:none;transition:opacity .16s ease-out;z-index:20}.appShell[data-nav-open=true] .sidebar{transform:translate(0)}.appShell[data-nav-open=true] .sidebarOverlay{opacity:1;pointer-events:auto}.mobileTopbar{display:flex;justify-content:flex-start;margin-bottom:var(--space-3)}.main{padding:var(--space-4);max-width:none;margin:0}.topbar{flex-direction:column;align-items:flex-start;gap:var(--space-2)}.grid2{grid-template-columns:1fr}.kpiCard{grid-column:span 6}.desktopOnly{display:none}.mobileOnly{display:block}.toolbar input,.toolbar select,.toolbar button{flex:1 1 200px;min-width:0}.panel{padding:var(--space-4)}.dialog{width:min(720px,100%);max-height:86vh;padding:var(--space-4)}.loginPage,.loginCard{padding:var(--space-4)}}@media (max-width: 520px){.toolbar input,.toolbar select,.toolbar button{flex:1 1 160px;min-width:0}.kpiCard{grid-column:span 12}.sidebar{padding:var(--space-4) var(--space-3)}.dialog{padding:var(--space-3)}.loginPwdRow{grid-template-columns:1fr}.loginPwdToggle{width:100%}}@media (max-width: 360px){.main{padding:var(--space-3)}}@media (prefers-reduced-motion: reduce){.loginGrid,.loginPacket,.loginSpark,.loginBurst{animation:none!important}}:root{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,"Apple Color Emoji","Segoe UI Emoji";line-height:1.5;font-weight:400;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg-0: #0a1020;--bg-1: #0b1428;--surface-0: rgba(255, 255, 255, .035);--surface-1: rgba(255, 255, 255, .055);--surface-2: rgba(255, 255, 255, .075);--text-0: rgba(255, 255, 255, .92);--text-1: rgba(255, 255, 255, .76);--text-2: rgba(255, 255, 255, .56);--border-0: rgba(255, 255, 255, .08);--border-1: rgba(255, 255, 255, .12);--primary-0: #4f7cff;--primary-1: #7aa0ff;--danger-0: #ff5c7a;--warn-0: #ffb020;--success-0: #39d98a;--shadow-sm: 0 6px 18px rgba(0, 0, 0, .32);--shadow-md: 0 12px 36px rgba(0, 0, 0, .38);--focus-ring: 0 0 0 3px rgba(79, 124, 255, .18);--control-h: 38px;--r-sm: 10px;--r-md: 14px;--r-lg: 18px;--space-1: 6px;--space-2: 10px;--space-3: 14px;--space-4: 18px;--space-5: 22px;--space-6: 28px;--space-7: 36px;--bg: var(--bg-0);--panel: var(--surface-0);--panel-2: var(--surface-1);--text: var(--text-0);--muted: var(--text-2);--border: var(--border-0);--primary: var(--primary-0);--danger: var(--danger-0);--warn: var(--warn-0);--success: var(--success-0);--shadow: var(--shadow-md)}*{box-sizing:border-box}html,body{height:100%}body{margin:0;min-width:320px;background:radial-gradient(1200px 800px at 14% 8%,rgba(79,124,255,.16),transparent 58%),radial-gradient(1000px 700px at 86% 0%,rgba(57,217,138,.1),transparent 56%),radial-gradient(900px 600px at 60% 90%,rgba(255,176,32,.06),transparent 55%),var(--bg);color:var(--text)}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{border:1px solid var(--border);background:var(--surface-0);border-radius:12px;padding:9px 12px;min-height:var(--control-h);cursor:pointer;transition:transform .05s ease,background .15s ease,border-color .15s ease}button:hover{background:var(--surface-1);border-color:var(--border-1)}button:active{transform:translateY(1px)}button:disabled{opacity:.6;cursor:not-allowed}input,select,textarea{border:1px solid var(--border);background:var(--surface-0);border-radius:12px;padding:9px 12px;min-height:var(--control-h);outline:none}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible{border-color:#4f7cff99;box-shadow:var(--focus-ring)}code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px}
