:root{color-scheme:dark;--bg:#101313;--panel:#171b1b;--line:#2b3130;--text:#eef1ec;--muted:#929b96;--accent:#c5e5a4;--tile:#1a201e;--shadow:#0004}*{box-sizing:border-box}body{margin:0;font:14px 'DM Sans',system-ui,sans-serif;background:var(--bg);color:var(--text)}body.light{color-scheme:light;--bg:#f5f6f2;--panel:#fff;--line:#dde1d8;--text:#222b25;--muted:#70796f;--accent:#c5e5a4;--tile:#e8ede4;--shadow:#0001}button,select,input{font:inherit}button,select{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:8px;padding:9px 13px;cursor:pointer}button:hover{border-color:var(--muted)}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}aside{position:fixed;width:230px;height:100dvh;padding:34px 23px;border-right:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:9px;font-size:31px;font-weight:700;color:var(--text);text-decoration:none;letter-spacing:-1.8px;margin-bottom:62px}.brand-dot{color:var(--accent)}.overline{color:var(--muted);font-size:10px;letter-spacing:1.8px;font-weight:600}.nav{margin-top:14px;text-align:left}.active{background:#c5e5a414;color:var(--accent);border-color:transparent}.light .active{color:#416333;background:#edf4e7}.aside-heading{display:flex;justify-content:space-between;align-items:center;margin-top:36px;color:var(--muted);font-size:10px;letter-spacing:1px}.aside-heading button{border:0;background:transparent;font-size:22px;padding:4px}nav button{display:block;width:100%;text-align:left;margin:5px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:0;background:transparent}.aside-bottom{margin-top:auto;font-size:11px;color:var(--muted);line-height:2}small{padding-left:13px;font-size:10px}.status-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--accent);margin-right:5px}main{margin-left:230px;padding:0 40px}header{height:86px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.breadcrumb{font-size:12px;color:var(--muted)}.breadcrumb span{margin:0 14px;color:var(--line)}.tools{display:flex;align-items:center;gap:10px}#clock{font-size:12px;color:var(--muted);margin-right:16px;font-variant-numeric:tabular-nums}.heading{display:flex;align-items:center;justify-content:space-between;padding:44px 0 34px}h1{font-size:36px;letter-spacing:-1.4px;margin:10px 0}p{color:var(--muted);line-height:1.7;margin:0}.primary{background:var(--accent);border-color:var(--accent);color:#1d3020;font-weight:600;padding:11px 17px}.viewbar{display:flex;justify-content:space-between;align-items:center;padding:17px 0 22px}.count{display:inline-block;margin-left:13px;padding:4px 8px;border:1px solid var(--line);border-radius:20px;font-size:10px;color:var(--muted)}.viewtools{display:flex;align-items:center;gap:8px}.viewtools label{font-size:11px;color:var(--muted);margin-right:4px}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.grid.nine{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.single{grid-template-columns:1fr}.grid.focus{grid-template-columns:2fr 1fr}.grid.focus .camera:first-child{grid-row:span 2}.grid.focus .camera:first-child .viewport{height:calc(100% - 51px);min-height:310px;aspect-ratio:auto}.camera{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:var(--panel)}.viewport{aspect-ratio:16/9;background:#090d0c;position:relative;display:grid;place-items:center}.viewport iframe{width:100%;height:100%;position:absolute;border:0}.camera-bar{display:flex;align-items:center;justify-content:space-between;height:51px;padding:0 15px}.camera-name{font-weight:500;font-size:12px}.camera-bar button{padding:4px 7px;font-size:12px;border:0;background:transparent;color:var(--muted)}.camera-bar .danger:hover,.danger{color:#df8c83}.empty{grid-column:1/-1;min-height:390px;border:1px dashed var(--line);border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(ellipse at center,#c5e5a408,transparent 65%);text-align:center;padding:30px}.empty .symbol{font-size:38px;color:var(--accent);background:#c5e5a410;border:1px solid #c5e5a425;border-radius:18px;padding:15px 20px;margin-bottom:15px}.empty h2{font-size:22px;font-weight:500;margin:10px}.empty p{max-width:380px;font-size:13px;margin-bottom:24px}footer{display:flex;justify-content:space-between;color:var(--muted);font-size:10px;padding:25px 0}footer span:last-child{letter-spacing:1.6px;font-size:9px}dialog{width:min(510px,calc(100% - 30px));background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:16px;padding:28px;box-shadow:0 24px 90px var(--shadow)}dialog::backdrop{background:#0009;backdrop-filter:blur(4px)}.dialog-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.dialog-head h2{font-size:24px;letter-spacing:-.6px;margin:8px 0}.dialog-head button{border:0;font-size:23px}label{display:block;font-size:12px}input:not([type=checkbox]){display:block;width:100%;padding:12px;background:var(--bg);border:1px solid var(--line);border-radius:7px;color:var(--text);margin:8px 0 18px}.hint{font-size:12px}.actions{display:flex;justify-content:flex-end;gap:8px;margin-top:26px}.actions .danger{margin-right:auto}#cameraChoices{max-height:230px;overflow:auto}#cameraChoices label{padding:10px 0}#cameraChoices input{accent-color:#95bb72;margin-right:10px}.notice{background:#dfac4d12;border:1px solid #dfac4d44;color:#cda95e;padding:14px;border-radius:8px;margin-bottom:18px;font-size:12px}#toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);background:var(--text);color:var(--bg);padding:13px 20px;border-radius:10px;z-index:10;display:none;max-width:90vw}.camera:fullscreen{background:#000;display:flex;flex-direction:column}.camera:fullscreen .viewport{flex:1;aspect-ratio:auto}.camera:fullscreen .camera-bar{background:var(--panel)}@media(min-width:1700px){main{max-width:1800px;margin:auto;padding-left:270px}}@media(max-width:1000px){aside{width:185px;padding:30px 16px}main{margin-left:185px;padding:0 24px}.viewbar{gap:12px;flex-wrap:wrap}.grid.nine{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:700px){aside{position:static;height:auto;width:auto;padding:18px;border-right:0;border-bottom:1px solid var(--line)}.brand{font-size:26px;margin:0 0 14px}aside>.overline,.nav,.aside-heading,.aside-bottom{display:none}nav{display:flex;overflow:auto;gap:7px}nav button{width:auto;flex-shrink:0;margin:0}main{margin:0;padding:0 18px}header{height:65px}.breadcrumb,#clock{display:none}.tools{margin-left:auto}.heading{padding:28px 0;align-items:start;gap:12px}h1{font-size:27px}.heading p{font-size:12px}.heading .primary{font-size:12px;white-space:nowrap}.grid,.grid.nine,.grid.focus{grid-template-columns:1fr}.grid.focus .camera:first-child{grid-row:auto}.grid.focus .camera:first-child .viewport{height:auto;min-height:0;aspect-ratio:16/9}.viewtools{width:100%}footer span:last-child{display:none}}
/* Fullscreen is a camera wall; the saved dashboard layout returns on exit. */
aside,header,.heading,.viewbar,footer,.notice,.camera-bar{transition:opacity .5s ease}
#exitFullscreen{position:fixed;right:18px;top:18px;z-index:30;background:#171b1bcc;color:#fff;border-color:#ffffff40;opacity:0;pointer-events:none;transition:opacity .4s}
body.cinema{overflow:hidden;background:#000;cursor:none}
body.cinema aside,body.cinema header,body.cinema .heading,body.cinema .viewbar,body.cinema footer,body.cinema .notice,body.cinema .camera-bar,body.cinema #toast{opacity:0;pointer-events:none}
body.camera-wall main{margin:0;padding:0;max-width:none}
body.camera-wall #grid{position:fixed;inset:0;z-index:20;gap:6px;grid-template-columns:repeat(var(--fullscreen-columns,1),minmax(0,1fr));grid-template-rows:repeat(var(--fullscreen-rows,1),minmax(0,1fr));background:#000}
body.camera-wall #grid .camera{min-width:0;min-height:0;border:0;border-radius:0;grid-row:auto;background:#000;position:relative}
body.camera-wall #grid .camera .viewport,body.cinema .camera:fullscreen .viewport{position:absolute;inset:0;height:100%;min-height:0;aspect-ratio:auto}
body.cinema .camera-bar{position:absolute;bottom:0;left:0;right:0}
body.camera-wall #grid .empty{min-height:0;border:0;border-radius:0;grid-column:1/-1;grid-row:1/-1;background:#000}
body.camera-wall #grid .empty>*{visibility:hidden}
body.cinema.fullscreen-controls{cursor:auto}
body.cinema.fullscreen-controls #exitFullscreen,body.cinema #exitFullscreen:focus-visible{opacity:1;pointer-events:auto}
body.cinema .camera:fullscreen{border:0;border-radius:0;position:relative}
body.cinema .camera:fullscreen::after{content:'Press Esc to exit fullscreen';position:absolute;right:18px;top:18px;color:white;background:#171b1bcc;padding:10px 14px;border-radius:8px;opacity:0;transition:opacity .4s;pointer-events:none}
body.cinema.fullscreen-controls .camera:fullscreen::after{opacity:1}
@media(prefers-reduced-motion:reduce){aside,header,.heading,.viewbar,footer,.notice,.camera-bar,#exitFullscreen{transition:none}}
.layout-row{display:flex;align-items:center;gap:2px;min-width:0}
nav .layout-select{flex:1;min-width:0;width:auto}
nav .layout-action{flex:0 0 27px;width:27px;padding:7px 3px;text-align:center;color:var(--muted)}
nav .layout-action.danger{color:#df8c83}
button:disabled{opacity:.4;cursor:not-allowed}
#layoutForm select{display:block;width:100%;margin:8px 0 18px;padding:12px}
@media(max-width:1100px){.viewtools{flex-wrap:wrap}}
@media(max-width:700px){nav .layout-row{flex:0 0 auto}nav .layout-select{max-width:170px}.viewtools{gap:6px}.viewtools button{font-size:12px}}
/* Fill the display with narrow seams and let users choose uncropped viewing. */
body.camera-wall #grid{gap:2px}
#fullscreenFit{position:fixed;left:18px;top:18px;z-index:30;background:#171b1bcc;color:#fff;border-color:#ffffff40;opacity:0;pointer-events:none;transition:opacity .4s}
body.cinema.fullscreen-controls #fullscreenFit,body.cinema #fullscreenFit:focus-visible{opacity:1;pointer-events:auto}
#cameraChoices{max-height:min(360px,40dvh);margin-top:14px}
.camera-choice{display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line);padding:7px 0}
.camera-order{flex:0 0 18px;color:var(--muted);font-size:11px;text-align:center;font-variant-numeric:tabular-nums}
#cameraChoices .camera-choice label{flex:1;min-width:0;padding:8px 0;overflow-wrap:anywhere}
.camera-order-actions{display:flex;gap:5px;flex-shrink:0}
.camera-order-actions button{min-width:36px;min-height:36px;padding:5px 9px;font-size:18px}
#layoutOrderStatus:empty{display:none}
#layoutOrderStatus{margin-top:12px}
.login-page{min-height:100dvh;display:grid;place-items:center;padding:24px;background:radial-gradient(ellipse at top,#c5e5a40c,transparent 65%),var(--bg)}
.login-card{width:min(420px,100%);padding:36px;border:1px solid var(--line);border-radius:18px;background:var(--panel)}
.login-card .brand{margin-bottom:35px}.login-card h1{font-size:30px;margin-top:12px}.login-card form{margin-top:28px}.login-card .primary{width:100%}
#loginError,#accountError{font-size:12px;color:#df8c83;margin-bottom:14px}#loginError:empty,#accountError:empty{display:none}
@media(max-width:700px){.tools{gap:5px}.tools button{font-size:11px;padding:9px}.login-card{padding:26px}}
.two-factor-settings{margin:22px 0;padding-top:18px;border-top:1px solid var(--line);display:grid;gap:12px;font-size:12px}
#totpSetup{margin-top:14px}#totpAppLink{color:var(--accent);display:inline-block;margin-bottom:18px}#totpSecret,#recoveryCodes{font-family:ui-monospace,monospace;font-size:13px}
#recoveryCodes{width:100%;padding:12px;margin:14px 0;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:8px;resize:vertical}
#totpError{font-size:12px;color:#df8c83}#totpError:empty{display:none}
[hidden]{display:none!important}

.app-version{margin-top:22px;text-align:center;font-size:11px;color:var(--muted)}
