:root{--ink:#1c332e;--muted:#74827e;--green:#126753;--mint:#e7f3ee;--line:#e5ebe7;--bg:#f5f7f4;--yellow:#e7ee9b;--red:#bf5544;--shadow:0 10px 36px #19372d08}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.6 'Segoe UI','Microsoft JhengHei',sans-serif}button,input,select,textarea{font:inherit}button,a,input,select,textarea{outline-offset:4px}button,a{touch-action:manipulation}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}a{color:inherit}h1,h2,h3,p{margin:0}h1{font-size:30px;letter-spacing:-1px;line-height:1.4}h2{font-size:17px}h3{font-size:15px}button{border:0;background:none;color:inherit}.shell{display:flex;min-height:100vh}.sidebar{width:224px;flex-shrink:0;background:#fff;border-right:1px solid var(--line);padding:34px 20px 22px;display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0}.brand{font-weight:800;letter-spacing:-2px;font-size:35px;color:var(--green);line-height:1.15}.brand span{color:#a2bd43}.brand small{display:block;font-weight:400;letter-spacing:2px;font-size:10px;color:var(--muted);margin-top:9px}.navlabel{font-size:10px;letter-spacing:2px;color:#96a39b;margin:40px 12px 13px}.nav{display:flex;flex-direction:column;gap:7px}.nav button{display:flex;align-items:center;gap:13px;text-align:left;padding:12px 15px;border-radius:9px;color:#77857e}.nav button:hover{background:var(--bg)}.nav button.active{background:var(--green);color:#fff}.nav svg,.btn svg,.icon svg{width:19px;height:19px;flex-shrink:0}.nav b{margin-left:auto;font-size:10px;background:#f5e5dc;color:#a0523d;min-width:20px;text-align:center;border-radius:5px}.sidebottom{margin-top:auto;padding-top:50px}.sidehelp{border:1px solid var(--line);border-radius:12px;padding:16px}.sidehelp p{font-size:12px;color:var(--muted);margin:6px 0 13px}.sideuser{display:flex;align-items:center;gap:10px;margin-top:24px;font-size:12px}.avatar{display:grid;place-items:center;width:33px;height:33px;background:var(--mint);color:var(--green);border-radius:50%;font-weight:700}.main{margin-left:224px;flex:1;min-width:0}.topbar{height:77px;background:#ffffffb8;border-bottom:1px solid var(--line);padding:0 38px;display:flex;align-items:center;justify-content:space-between;gap:12px}.crumb{font-size:12px;color:var(--muted)}.crumb span{color:var(--ink);margin-left:14px}.demo{font-size:11px;color:#737c55;background:#f1f4dd;border:1px solid #e1e7c2;padding:5px 10px;border-radius:6px}.topright{display:flex;gap:13px;align-items:center}.content{max-width:1560px;margin:auto;padding:32px 38px 40px}.heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;gap:16px}.eyebrow{font-size:10px;letter-spacing:2px;color:var(--green);font-weight:700;margin-bottom:6px}.subtitle{color:var(--muted);font-size:12px;margin-top:7px}.actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.btn{display:inline-flex;justify-content:center;align-items:center;gap:8px;border:1px solid var(--line);border-radius:7px;padding:9px 15px;background:white;font-size:12px;text-decoration:none;min-height:39px}.btn:hover{border-color:#8caf9e}.btn.primary{background:var(--green);border-color:var(--green);color:white}.btn.small{padding:6px 10px;min-height:31px}.btn.danger{color:var(--red)}.notice{display:flex;align-items:center;gap:13px;background:#f0f3df;border:1px solid #e1e8c6;border-radius:10px;padding:12px 17px;margin-bottom:22px;font-size:12px}.notice strong{color:#626d2e}.notice a{margin-left:auto;white-space:nowrap;color:var(--green);text-decoration:none;font-weight:600}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:17px;margin-bottom:24px}.stat{background:white;border:1px solid var(--line);padding:19px 21px;border-radius:12px;box-shadow:var(--shadow)}.stathead{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--muted)}.stathead .icon{width:29px;height:29px;display:grid;place-items:center;background:var(--bg);border-radius:7px}.statvalue{font-size:33px;font-weight:650;letter-spacing:-1px;margin:7px 0 0}.statvalue small{font-size:13px;color:var(--muted);font-weight:400;margin-left:8px;letter-spacing:0}.statfoot{font-size:11px;color:var(--muted)}.statfoot .green{color:var(--green)}.dashboardgrid{display:grid;grid-template-columns:1.65fr 1fr;gap:20px;margin-bottom:23px}.card{border:1px solid var(--line);background:white;border-radius:12px;box-shadow:var(--shadow);min-width:0}.cardhead{padding:20px 22px 14px;display:flex;align-items:center;justify-content:space-between;gap:12px}.cardhead p{font-size:11px;color:var(--muted);margin-top:2px}.textlink{font-size:12px;color:var(--green);text-decoration:none;cursor:pointer;white-space:nowrap}.weekchart{padding:3px 23px 16px}.chartrow{display:flex;align-items:end;justify-content:space-around;height:125px;gap:18px;border-bottom:1px solid var(--line)}.barcol{height:100%;display:flex;flex-direction:column;justify-content:end;align-items:center;flex:1;max-width:42px}.barlabel{font-size:10px;color:var(--muted);padding-bottom:5px}.bartrack{width:100%;background:#edf2ec;border-radius:5px 5px 0 0;height:85px;display:flex;align-items:end;position:relative;overflow:hidden}.barfill{background:#8dbba7;width:100%;border-radius:5px 5px 0 0}.barcol:last-child .barfill{background:var(--green)}.chartdays{display:flex;justify-content:space-around;font-size:10px;color:var(--muted);padding-top:9px;gap:18px}.chartdays span{flex:1;max-width:42px;text-align:center}.legend{display:flex;gap:15px;align-items:center;font-size:10px;color:var(--muted)}.dot{width:7px;height:7px;display:inline-block;border-radius:50%;margin-right:5px;background:#8dbba7}.dot.pale{background:#edf2ec}.issuepreview{padding:0 21px 6px}.issueitem{display:flex;gap:11px;padding:12px 0;border-bottom:1px solid var(--line);text-align:left;width:100%}.issueitem:last-child{border-bottom:0}.issueicon{background:#f9eee5;color:#bd7750;width:29px;height:29px;display:grid;place-items:center;border-radius:7px;flex-shrink:0}.issueitem p{font-size:12px;font-weight:600}.issueitem small{font-size:10px;color:var(--muted)}.issueitem .badge{margin-left:auto;align-self:start}.filters{display:flex;gap:10px;flex-wrap:wrap;padding:0 21px 17px;align-items:center}.field,input,select,textarea{border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink);padding:9px 11px;min-height:39px}.search{position:relative;flex:1;min-width:170px}.search input{width:100%;padding-left:33px}.search svg{position:absolute;left:11px;top:12px;width:15px;height:15px;color:var(--muted)}select{font-size:12px;max-width:100%}.tablewrap{overflow:auto}table{width:100%;border-collapse:collapse;white-space:nowrap;font-size:12px}th{background:#fafbf9;color:var(--muted);font-size:10px;font-weight:500;letter-spacing:.5px;text-align:left;padding:11px 20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}td{padding:14px 20px;border-bottom:1px solid #f0f3ee}tr:last-child td{border:0}tbody tr:hover{background:#fafcf9}td strong{font-weight:600}td small{display:block;font-size:10px;color:var(--muted)}.storecell{display:flex;align-items:center;gap:10px}.storeicon{background:#eef3ed;color:var(--green);width:31px;height:33px;border-radius:7px;display:grid;place-items:center}.storeicon svg{width:16px}.badge{font-size:10px;padding:3px 8px;border-radius:5px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap;background:#f0f2ef;color:#859087}.badge.done{background:#e9f4ed;color:#42825f}.badge.pending{background:#fcf1db;color:#a47824}.badge.overdue,.badge.error{background:#fbece7;color:#bb6550}.badge.progress{background:#e8f0f8;color:#5d83a4}.tablefoot{padding:13px 21px;display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}.mini-progress{width:70px;height:4px;background:#edf2eb;border-radius:4px;overflow:hidden;margin-top:4px}.mini-progress i{height:100%;display:block;background:#81b394}.muted{color:var(--muted)}.empty{text-align:center;padding:45px 20px;color:var(--muted)}.footer{margin-top:24px;display:flex;justify-content:space-between;color:#9ba59e;font-size:10px}.period{display:flex;gap:8px;align-items:center;font-size:11px;color:var(--muted)}.period input{font-size:11px;min-height:32px;padding:5px 8px}.reportlayout{display:grid;grid-template-columns:minmax(350px,510px) 1fr;gap:45px;max-width:1000px;margin:auto;align-items:start}.phone{background:white;border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:0 15px 50px #2444350c}.phonehead{padding:21px 25px;background:var(--green);color:white;display:flex;justify-content:space-between;align-items:center}.phonehead .brand{font-size:25px;color:white}.phonehead .brand span{color:var(--yellow)}.phonehead p{font-size:11px;color:#d4e8dd}.phonebody{padding:23px}.steps{display:flex;gap:6px;align-items:center;margin-bottom:25px}.step{display:flex;gap:5px;align-items:center;font-size:10px;color:#a2ada4;flex:1}.step b{background:#eef1ec;width:21px;height:21px;display:grid;place-items:center;border-radius:50%;font-size:10px}.step.active{color:var(--green)}.step.active b{background:var(--green);color:white}.formgroup{margin-bottom:17px}.formgroup>label{display:block;font-size:12px;font-weight:600;margin-bottom:7px}.formgroup input,.formgroup select,.formgroup textarea{width:100%;font-size:14px}.formgroup textarea{resize:vertical;min-height:80px}.hint{font-size:11px;color:var(--muted);margin-top:5px}.formtitle{font-size:21px;margin-bottom:5px}.formintro{font-size:12px;color:var(--muted);margin-bottom:22px}.storeinfo{background:var(--bg);padding:13px 15px;border:1px solid var(--line);border-radius:9px;margin:14px 0 19px;font-size:12px}.storeinfo strong{display:block;font-size:15px;margin-bottom:3px}.checkitem{display:flex;align-items:center;gap:11px;padding:13px 11px;border:1px solid var(--line);border-radius:9px;margin-bottom:9px}.checkitem:has(input:checked){border-color:#b5d0bf;background:#f5faf6}.checkitem input{accent-color:var(--green);width:20px;height:20px;min-height:0;flex-shrink:0}.checkitem .taskdesc{flex:1}.checkitem strong{display:block;font-size:13px}.checkitem small{font-size:10px;color:var(--muted)}.checkitem .badge{font-size:9px}.formactions{display:flex;gap:10px;margin-top:22px}.formactions .btn{flex:1;padding:12px;font-size:13px;min-height:47px}.formactions .btn.back{flex:0 0 80px}.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}.camera-note{background:#f2f5e4;border-radius:9px;padding:13px;font-size:11px;color:#737a4c;display:flex;gap:9px;align-items:start}.camera-note svg{width:19px;flex-shrink:0}.reportaside{padding-top:35px}.aside-label{font-size:10px;letter-spacing:2px;color:var(--green);margin-bottom:12px}.reportaside h2{font-size:29px;font-weight:600;line-height:1.6;margin-bottom:15px}.reportaside>p{font-size:13px;line-height:1.9;color:var(--muted);max-width:330px}.asidepoint{display:flex;gap:12px;margin-top:25px;align-items:start}.asidepoint .icon{border:1px solid #dce5d7;background:#ecf2e8;padding:11px;border-radius:11px;color:var(--green);display:flex}.asidepoint h3{font-size:13px;margin-bottom:3px}.asidepoint p{font-size:11px;color:var(--muted)}.draftstate{font-size:10px;color:var(--muted);text-align:center;margin-top:13px}.success{text-align:center;padding:20px 0}.successmark{width:65px;height:65px;border-radius:50%;background:var(--mint);color:var(--green);display:grid;place-items:center;margin:0 auto 17px;font-size:28px}.success h2{font-size:23px}.success p{font-size:12px;color:var(--muted);margin:8px 0 20px}.summarylist{background:var(--bg);padding:15px;text-align:left;border-radius:9px}.summarylist div{display:flex;justify-content:space-between;padding:6px 0;font-size:12px;gap:15px}.summarylist span{color:var(--muted)}.camera-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.camera{aspect-ratio:16/10;background:#e3e9e2;border:1px solid #d2dbd0;border-radius:8px;position:relative;overflow:hidden}.camera svg{width:100%;height:100%;opacity:.75}.cameratitle{position:absolute;top:7px;left:8px;background:#223d32c9;color:white;font-size:9px;padding:2px 5px;border-radius:3px}.watermark{position:absolute;bottom:7px;right:8px;font-size:10px;color:#315745;background:#f8fff0d9;padding:2px 5px;border-radius:3px}.camera.failed{display:flex;align-items:center;justify-content:center;flex-direction:column;background:#f5f3ee;color:#9b8974;font-size:12px}.camera.failed small{font-size:10px;margin-top:5px}.sectiontitle{display:flex;justify-content:space-between;align-items:center;margin:23px 0 12px;font-size:13px;font-weight:600}.sectiontitle small{font-size:10px;font-weight:400;color:var(--muted)}dialog{border:0;border-radius:16px;max-width:760px;width:calc(100% - 30px);padding:0;max-height:90vh;box-shadow:0 30px 100px #12281a40}dialog::backdrop{background:#13291d65;backdrop-filter:blur(3px)}.modalhead{position:sticky;top:0;background:white;z-index:1;padding:20px 25px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.close{font-size:24px;width:34px;height:34px;border-radius:50%;background:var(--bg)}.modalbody{padding:23px 25px}.modalmeta{display:grid;grid-template-columns:repeat(3,1fr);gap:13px;margin-bottom:19px}.modalmeta div{background:var(--bg);border-radius:8px;padding:12px;font-size:12px}.modalmeta small{display:block;color:var(--muted);font-size:10px}.taskline{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--line);font-size:12px}.taskline .check{color:var(--green);margin-right:7px}.historyitem{padding:12px 0;border-bottom:1px solid var(--line);font-size:12px;display:flex;justify-content:space-between}.issuecards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.issuecard{padding:22px}.issuecard h3{margin:13px 0 6px}.issuecard p{font-size:12px;color:var(--muted);margin-bottom:18px}.issuecard .actions{border-top:1px solid var(--line);padding-top:15px;justify-content:space-between}.schedule-note{padding:16px 20px;background:#eef3e6;border-radius:10px;font-size:12px;margin-bottom:20px}.settingrow{display:flex;gap:12px;align-items:center;justify-content:space-between;padding:15px 22px;border-bottom:1px solid var(--line);font-size:12px}.settingrow:last-child{border:0}.settingrow p{font-size:11px;color:var(--muted)}.photo-list{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}.photo-list img{width:70px;height:70px;object-fit:cover;border-radius:5px}.photo-list figure{margin:0;position:relative}.photo-list button{position:absolute;right:1px;top:1px;background:white;border-radius:50%;width:20px;height:20px;font-size:12px}.errorbox{background:#fbece7;color:#ad5746;border-radius:7px;padding:9px 12px;font-size:12px;margin-top:12px}.tiny{font-size:10px}.full{width:100%}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%) translateY(100px);opacity:0;transition:.2s;z-index:100;background:#213d32;color:white;border-radius:9px;padding:12px 22px;font-size:13px;max-width:90%;box-shadow:0 7px 25px #0002;pointer-events:none}#toast.show{transform:translateX(-50%) translateY(0);opacity:1}.trend-note{padding-top:10px;font-size:10px;color:var(--muted)}.chips{display:flex;gap:7px;flex-wrap:wrap}.chip{padding:6px 13px;border:1px solid var(--line);border-radius:20px;font-size:11px;background:white}.chip.active{background:var(--green);color:white;border-color:var(--green)}.reportphotos img{max-width:100%;max-height:250px;border-radius:8px}.reportphotos{display:flex;gap:10px;flex-wrap:wrap}.timeline{display:grid;grid-template-columns:150px repeat(7,1fr);font-size:11px;min-width:600px}.timeline>*{padding:13px 10px;border-bottom:1px solid var(--line);text-align:center}.timeline .name{text-align:left;padding-left:22px}.timeline .head{background:#fafbf9;color:var(--muted)}.cellmark{display:inline-grid;place-items:center;border-radius:5px;width:24px;height:24px;background:#e8f2e9;color:var(--green)}.cellmark.due{background:#f9efd8;color:#ad842e}.cellmark.over{background:#fae7e0;color:var(--red)}.mobile-brand{display:none}
svg{width:20px;height:20px;flex-shrink:0}.camera>svg{width:100%;height:100%}.notice>svg{width:18px;height:18px}.issueicon svg{width:17px;height:17px}
.staff-shell{min-height:100vh}.staff-header{max-width:600px;margin:auto;padding:25px 10px 19px;display:flex;align-items:center;justify-content:space-between}.staff-header .brand{font-size:31px}.staff-header>span{font-size:12px;color:var(--muted)}.staff-main{max-width:600px;margin:auto}.staff-main .phone{border-radius:18px}.staff-intro{background:var(--green);padding:27px 29px;color:white}.staff-intro .eyebrow{color:#d7e99b;font-size:9px}.staff-intro h1{font-size:25px;margin:8px 0}.staff-intro p{font-size:12px;color:#d1e4d9}.staff-main .phonebody{padding:27px 29px}.staff-main .checkitem{padding:15px 13px}.staff-main .formgroup>label{font-size:13px}.staff-footer{text-align:center;font-size:11px;color:var(--muted);padding:27px 15px}.staff-footer small{font-size:10px;color:#96a395}.time-label{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;gap:10px}.time-label label{font-size:13px;font-weight:600}.task-counter{display:flex;align-items:center;gap:8px;background:var(--mint);border-radius:8px;color:var(--green);padding:10px 13px;margin-bottom:17px}.task-counter strong{font-size:18px}.task-counter span{font-size:11px}.staff-main .formtitle{font-size:20px}.staff-main .formintro{margin-bottom:19px}.staff-main .summarylist strong{max-width:65%;text-align:right}.staff-main .steps{gap:9px}.staff-only input[type=datetime-local]{min-width:0;width:100%;max-width:100%;font-size:14px}.staff-only .errorbox{overflow-wrap:anywhere}
@media(max-width:620px){.staff-header{padding:18px 20px}.staff-main{padding:0 10px}.staff-main .phone{border-radius:13px}.staff-main .phonebody{padding:23px 20px}.staff-intro{padding:23px 21px}.staff-intro h1{font-size:24px}.staff-footer{padding-bottom:25px}.staff-main .steps{gap:5px}}
.task-library{display:flex;flex-wrap:wrap;gap:9px;padding:0 22px 22px}.task-library span{padding:8px 13px;border-radius:7px;background:var(--bg);font-size:12px;border:1px solid var(--line)}.store-task-setting{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--line)}.store-task-setting label{font-size:12px;font-weight:600}.store-task-setting select{width:155px;flex-shrink:0}.store-save{position:sticky;bottom:-23px;background:white;padding:13px 0 8px;border-top:1px solid var(--line)}.required-tag{background:#e7f2e8;color:#337a51}.optional-tag{background:#edf0f4;color:#71808f}.task-kind{font-size:10px;color:var(--muted);margin-left:7px}.task-counter{flex-wrap:wrap}.task-counter>small{margin-left:auto;font-size:10px;font-weight:400}.checklist-group>.sectiontitle{margin-top:23px}.checklist-group>.sectiontitle small{max-width:60%;text-align:right}.store-task-settings{padding:0 2px}
@media(min-width:1600px){.content{padding-top:40px}.stats{gap:23px}.stat{padding:24px}.dashboardgrid{gap:24px}.chartrow{height:150px}.bartrack{height:110px}}
@media(max-width:1150px){.sidebar{width:190px;padding:28px 14px}.main{margin-left:190px}.content{padding:26px 24px}.topbar{padding:0 24px}.stats{gap:10px}.stat{padding:16px}.dashboardgrid{grid-template-columns:1.3fr 1fr}.issuecards{grid-template-columns:repeat(2,1fr)}.reportlayout{gap:25px}.reportaside h2{font-size:24px}}
@media(max-width:850px){.sidebar{width:76px;padding:25px 12px}.sidebar .brand{font-size:20px;letter-spacing:-1px}.sidebar .brand small,.navlabel,.nav .navtext,.nav b,.sidehelp,.sideuser{display:none}.nav{margin-top:35px}.nav button{padding:13px;justify-content:center}.main{margin-left:76px}.dashboardgrid{grid-template-columns:1fr}.reportaside{display:none}.reportlayout{display:block;max-width:510px}.heading{align-items:start}.stats{grid-template-columns:repeat(2,1fr)}.issuecards{grid-template-columns:1fr 1fr}.topbar .demo{font-size:10px}.topright>.muted{display:none}}
@media(max-width:580px){h1{font-size:25px}.sidebar{inset:auto 0 0;width:100%;height:65px;padding:5px 8px;border-right:0;border-top:1px solid var(--line);z-index:20;display:block}.sidebar>.brand,.sidebottom{display:none}.nav{flex-direction:row;margin:0;justify-content:space-around;gap:0}.nav button{padding:7px 8px;flex-direction:column;gap:1px;border-radius:6px;font-size:9px;min-width:55px}.nav .navtext{display:block}.nav svg{width:17px;height:17px}.main{margin:0;padding-bottom:68px}.topbar{height:auto;min-height:65px;padding:10px 18px;flex-wrap:wrap;gap:6px}.crumb{display:none}.mobile-brand{display:block;font-size:25px}.topright{margin-left:auto}.topbar .demo{font-size:9px;padding:4px 6px}.topright>.btn{display:none}.content{padding:23px 16px}.heading{flex-direction:column;gap:14px;margin-bottom:18px}.heading .actions{width:100%}.heading .actions .btn{flex:1}.stats{gap:10px;margin-bottom:16px}.stat{padding:14px}.statvalue{font-size:29px}.stathead{font-size:11px}.stathead .icon{width:25px;height:25px}.statfoot{font-size:9px}.notice{font-size:11px;align-items:start;gap:8px;padding:12px}.notice a{font-size:10px}.dashboardgrid{gap:16px;margin-bottom:16px}.cardhead{padding:17px 16px 13px}.filters{padding:0 15px 14px;gap:7px}.filters select{flex:1;min-width:110px}.search{flex-basis:100%}.cardhead h2{font-size:15px}.tablefoot{padding:12px 15px}.phone{border-radius:12px}.phonehead{padding:18px 21px}.phonebody{padding:20px}.report-page .content{padding:15px 10px}.report-page .heading{display:none}.issuecards{grid-template-columns:1fr}.modalbody{padding:18px}.modalhead{padding:17px 18px}.modalmeta{grid-template-columns:1fr 1fr;gap:8px}.modalmeta div{padding:10px}.footer{gap:15px}.period{flex-wrap:wrap}.period input{max-width:135px}.legend{gap:7px}.settingrow{align-items:start;flex-direction:column}.report-page .topbar{min-height:50px}.report-page .mobile-brand{font-size:21px}.report-page .topbar .demo{max-width:230px}.report-page .footer{display:none}}
.camera-password-row { display: flex; align-items: center; gap: 8px; }
.camera-password-row input { min-width: 0; flex: 1; }
.camera-password-row button { flex: none; }
#camera-viewer {
  width: 95vw;
  height: 95dvh;
  max-width: 95vw;
  max-height: 95dvh;
  box-sizing: border-box;
  padding: 12px;
  background: #121b17;
  color: white;
}
#camera-viewer[open] { display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 10px; }
.camera-viewer-toolbar { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 8px; }
#camera-viewer-title { min-width: 96px; text-align: center; }
#camera-viewer-image { width: 100%; height: 100%; object-fit: contain; }
