:root{--font:system-ui,-apple-system,"Segoe UI Variable Text","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-family:var(--font);color:#13284a;background:#f4f7fc;font-synthesis:none;--blue:#2563eb;--blue2:#eaf1ff;--muted:#7184a4;--border:#e2e9f3;--navy:#102447;--green:#12a879;--shadow:0 8px 22px #223c6410}*{box-sizing:border-box}body{margin:0;min-width:340px}button,a{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh;display:flex}.sidebar{position:fixed;inset:0 auto 0 0;width:246px;padding:25px 17px 16px;background:#fff;border-right:1px solid var(--border);display:flex;flex-direction:column;z-index:4}.brand{height:58px;display:flex;align-items:center;gap:12px;color:var(--navy);text-decoration:none;padding:0 4px}.brand-mark{width:47px;height:47px;border:1px solid #d9e3f0;border-radius:14px;display:grid;place-items:center;font:italic 650 20px var(--font);color:#111;letter-spacing:-3px;box-shadow:inset 0 0 0 5px #f7f9fc}.brand b{font:650 15px var(--font);letter-spacing:.15px;display:block}.brand small{font-size:11px;letter-spacing:3px;color:#7990b2;font-weight:700}.workspace-label{margin:40px 5px 13px;color:#8797b2;font-size:12px;letter-spacing:1.5px;font-weight:700}.secure-dot{float:right;color:#187755;letter-spacing:0;font-size:13px}.nav-item{width:100%;height:44px;border:0;background:none;color:#526988;text-align:left;border-radius:10px;padding:0 12px;display:flex;align-items:center;gap:12px;font-size:14px;margin:3px 0}.nav-item>span{width:18px;font-size:18px;color:#7088ac}.nav-item em{margin-left:auto;font-size:13px;font-style:normal;color:#8193ae}.nav-item.active{background:#eaf1ff;color:#1556d8;font-weight:700}.nav-item.active>span{color:#2769ed}.nav-item .alert-count{background:#fff0de;color:#c16a00;border-radius:9px;padding:3px 7px}.sidebar-bottom{margin-top:auto}.plan-card{border:1px solid var(--border);border-radius:12px;padding:13px;display:grid;gap:6px;margin-bottom:15px}.plan-icon{font-size:18px;color:#2867e9}.plan-card b{font-size:14px}.plan-card small{font-size:13px;color:var(--muted)}.tag{font-size:11px;letter-spacing:.9px;font-weight:700;width:max-content;padding:5px 8px;border-radius:6px}.tag.neutral{background:#eef2f8;color:#6b7c97}.user-card{border-top:1px solid var(--border);padding:14px 4px 0;display:flex;gap:9px;align-items:center}.avatar{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:#dce9ff;color:#2159c7;font-weight:700}.user-card b,.user-card small{display:block}.user-card b{font-size:13px}.user-card small{font-size:12px;color:var(--muted);margin-top:3px}.icon-button{border:0;background:transparent;color:#627895;font-size:20px;position:relative;margin-left:auto}.main-area{margin-left:246px;width:calc(100% - 246px);min-height:100vh;display:flex;flex-direction:column}.topbar{height:70px;background:#fff;border-bottom:1px solid var(--border);padding:0 36px;display:flex;align-items:center;justify-content:space-between}.breadcrumb{font-size:14px;color:#8b9ab2}.breadcrumb span{margin:0 10px;color:#c6d0df}.breadcrumb b{color:#2e4363}.top-actions{display:flex;align-items:center;gap:20px}.environment{font-size:13px;color:#7c8ca6}.environment i{display:inline-block;width:6px;height:6px;background:#f1a331;border-radius:50%;margin-right:6px}.notification-dot{position:absolute;right:-1px;top:1px;background:#ef6658;width:5px;height:5px;border-radius:50%}.page-content{width:min(1430px,100%);margin:0 auto;padding:29px 36px 50px;flex:1}.page-heading{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:24px}.eyebrow{font-size:12px;letter-spacing:1.7px;color:#2865e8;font-weight:700;margin-bottom:8px}.page-heading h1{font:650 27px var(--font);letter-spacing:-1.1px;margin:0;color:#122745}.page-heading p{font-size:14px;color:#7285a3;margin:8px 0 0}.primary,.secondary,.quiet,.danger{border-radius:8px;font-size:14px;font-weight:600;padding:10px 14px;border:1px solid transparent;display:inline-flex;align-items:center;gap:8px}.primary{background:#2865e8;color:white;box-shadow:0 4px 10px #2865e825}.primary:hover{background:#174fc8}.secondary{background:#fff;border-color:#dce5f1;color:#2b4569}.quiet{background:transparent;color:#637792;padding:8px}.danger{background:#fff;border-color:#f0d9d6;color:#bd544a}.grid{display:grid;gap:15px}.stats{grid-template-columns:repeat(4,minmax(150px,1fr));margin-bottom:18px}.stat-card,.panel,.device-card,.activity-card{background:white;border:1px solid var(--border);border-radius:13px;box-shadow:var(--shadow)}.stat-card{padding:17px 18px}.stat-top{display:flex;align-items:center;justify-content:space-between;color:#7a8ba5;font-size:12px;letter-spacing:.8px;text-transform:uppercase}.stat-icon{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:#eff4ff;color:#2d6ce8;font-size:16px}.stat-num{font:650 25px var(--font);margin:12px 0 5px}.stat-caption{font-size:13px;color:#8a9ab1}.stat-caption .green{color:#14936d;font-weight:600}.overview-grid{grid-template-columns:minmax(0,1.55fr) minmax(285px,.9fr);align-items:start}.panel{padding:19px 20px}.panel-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:17px}.panel-heading h2{font:600 16px var(--font);margin:0}.panel-heading p{font-size:13px;color:#8797af;margin:6px 0 0}.text-link{border:0;background:none;color:#2764e8;font-size:13px;font-weight:700}.media-thumb{width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,#bce8fb,#e9d8ff);display:grid;place-items:center;color:#305eac;font-size:16px}.state{font-size:12px;border-radius:20px;background:#eaf7f1;color:#19835e;padding:5px 8px}.state.demo{background:#fff5df;color:#a56b07}.device-card{padding:18px;margin-bottom:14px}.device-head{display:flex;justify-content:space-between;align-items:center}.device-id{display:flex;gap:11px;align-items:center}.device-glyph{width:42px;height:42px;border-radius:11px;display:grid;place-items:center;background:#edf3ff;font-size:22px;color:#326ce7}.device-id b,.device-id small{display:block}.device-id b{font-size:14px}.device-id small{font-size:12px;color:#8797ae;margin-top:5px}.device-props{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin:16px 0 14px;padding-top:14px;border-top:1px solid #eff2f6}.device-props span{font-size:12px;color:#8a9ab0}.device-props b{display:block;color:#304866;font-size:13px;margin-top:4px}.device-actions{display:flex;gap:7px}.device-actions button{flex:1;justify-content:center}.callout{padding:11px 13px;background:#f5f8fd;border:1px solid #e7edf6;color:#647996;border-radius:9px;font-size:13px;line-height:1.6}.callout strong{color:#344d70}.callout.warn{background:#fffaf0;border-color:#f4e7c8;color:#866c3b}.bottom-grid{grid-template-columns:1.15fr .85fr;margin-top:15px}.activity{display:flex;gap:11px;padding:10px 0;border-top:1px solid #eff2f6}.activity-icon{width:28px;height:28px;border-radius:8px;background:#eff5ff;color:#2e69e5;display:grid;place-items:center}.activity b{font-size:13px}.activity small{display:block;font-size:12px;color:#8a99af;margin-top:4px}.progress-wrap{margin-top:13px}.progress-label{display:flex;justify-content:space-between;color:#647995;font-size:13px;margin-bottom:7px}.progress{height:6px;background:#edf1f7;border-radius:10px;overflow:hidden}.progress span{display:block;width:68%;height:100%;background:#2867ea;border-radius:10px}.subnav{display:flex;gap:6px;border-bottom:1px solid var(--border);margin:2px 0 18px}.subnav button{border:0;background:none;padding:12px 13px;color:#71839f;font-size:13px;border-bottom:2px solid transparent}.subnav button.active{border-color:var(--blue);color:var(--blue);font-weight:700}.toolbar{display:flex;gap:9px;align-items:center;margin-bottom:14px}.search{height:36px;border:1px solid var(--border);border-radius:8px;background:#fff;padding:0 11px;min-width:220px;color:#334a69;font-size:13px;outline:none}.search:focus,input:focus,select:focus{border-color:#71a0ff;box-shadow:0 0 0 3px #2865e817}.filter{height:36px;border:1px solid var(--border);border-radius:8px;background:#fff;color:#59708f;padding:0 10px;font-size:13px}.toolbar .primary{margin-left:auto}.media-grid{grid-template-columns:repeat(3,minmax(180px,1fr))}.media-card{overflow:hidden;border:1px solid var(--border);border-radius:12px;background:#fff}.media-preview{height:134px;background:linear-gradient(135deg,#daecf7,#dce4ff 55%,#e9dcff);display:grid;place-items:center;color:#567cad;font-size:35px;position:relative}.media-preview.video{background:linear-gradient(140deg,#142e52,#547db4);color:#fff}.media-preview.web{background:linear-gradient(135deg,#def3ed,#eff9f4);color:#3f8067}.media-preview img,.media-preview video{width:100%;height:100%;object-fit:cover}.media-info{padding:12px}.media-meta{display:flex;justify-content:space-between;margin-top:7px;color:#8292a8;font-size:12px}.empty-state{padding:45px 15px;text-align:center;border:1px dashed #d8e2ef;border-radius:12px;color:#788ba7;font-size:14px}.empty-state b{display:block;color:#3c5373;font-size:15px;margin-bottom:8px}.playlist-list{display:grid;gap:10px}.playlist-row{background:white;border:1px solid var(--border);border-radius:11px;padding:14px;display:grid;grid-template-columns:40px 1.3fr 1fr 100px 85px;gap:12px;align-items:center}.playlist-mark{width:39px;height:39px;border-radius:10px;background:#eff4ff;display:grid;place-items:center;color:#2a65e6}.playlist-row b,.playlist-row small{display:block}.playlist-row b{font-size:14px}.playlist-row small{font-size:12px;color:#8796aa;margin-top:4px}.calendar-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:17px}.calendar-week{display:grid;grid-template-columns:repeat(7,1fr);background:#fff;border:1px solid var(--border);border-radius:12px;overflow:hidden}.day-col{min-height:355px;border-right:1px solid #edf1f6}.day-col:last-child{border:0}.day-name{text-align:center;padding:12px 2px;border-bottom:1px solid #edf1f6;font-size:12px;color:#8292aa}.day-name b{display:block;color:#354c6c;font-size:15px;margin-top:6px}.event{margin:8px 5px;border-left:3px solid #2866e8;background:#eef4ff;padding:8px 6px;border-radius:5px;font-size:11px;color:#42638f;line-height:1.5}.event.green-event{border-color:#16a47b;background:#edfaf4}.device-list{display:grid;grid-template-columns:repeat(2,minmax(280px,1fr));gap:13px}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.field label{font-size:12px;color:#7386a1;display:block;margin-bottom:6px}.field input,.field select{width:100%;height:36px;border-radius:7px;border:1px solid var(--border);padding:0 10px;color:#314968;font:inherit;font-size:13px;background:#fff}.settings-row{padding:14px 0;border-top:1px solid #edf1f6;display:flex;justify-content:space-between;align-items:center}.settings-row b{font-size:14px}.settings-row small{display:block;font-size:12px;color:#8293aa;margin-top:4px}.switch{width:31px;height:18px;border-radius:20px;background:#d8e0ed;position:relative}.switch:before{content:'';position:absolute;left:2px;top:2px;width:14px;height:14px;background:white;border-radius:50%;box-shadow:0 1px 4px #253d6022}footer{padding:16px 36px;border-top:1px solid var(--border);font-size:12px;letter-spacing:.4px;color:#8696ad}footer span{margin:0 4px}.footer-right{float:right}.modal{border:0;border-radius:15px;padding:25px;width:min(480px,calc(100% - 30px));box-shadow:0 25px 80px #172f5060;color:#254061}.modal::backdrop{background:#14244355;backdrop-filter:blur(3px)}.modal-close{float:right;border:0;background:#f3f6fb;border-radius:50%;width:27px;height:27px;font-size:20px;color:#667a97}.modal h2{font:600 20px var(--font);margin:0 35px 9px 0}.modal p{font-size:14px;line-height:1.7;color:#7084a0}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}.error-list{padding-left:17px;font-size:14px;color:#9a5245;line-height:1.9}.toast{position:fixed;right:22px;bottom:22px;max-width:360px;background:#162b4a;color:#fff;padding:13px 16px;border-radius:9px;box-shadow:var(--shadow);font-size:14px;z-index:10;animation:fade .2s}@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:1050px){.sidebar{width:214px}.main-area{margin-left:214px;width:calc(100% - 214px)}.page-content{padding:24px 22px}.topbar{padding:0 22px}.stats{grid-template-columns:repeat(2,1fr)}.overview-grid{grid-template-columns:1fr}.bottom-grid{grid-template-columns:1fr}.media-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.sidebar{width:62px;padding:17px 8px}.brand{justify-content:center;padding:0}.brand>span:not(.brand-mark),.workspace-label,.nav-item:not(.active),.nav-item.active{font-size:0}.brand-mark{width:43px;height:43px}.sidebar #navigation{margin-top:29px}.nav-item{justify-content:center;padding:0;height:43px}.nav-item>span{font-size:18px}.nav-item em,.sidebar-bottom{display:none}.main-area{margin-left:62px;width:calc(100% - 62px)}.topbar{height:58px;padding:0 13px}.top-actions{gap:8px}.environment{display:none}.page-content{padding:20px 13px}.page-heading{align-items:flex-start;gap:12px;flex-direction:column}.page-heading h1{font-size:26px}.stats{gap:8px}.stat-card{padding:12px}.stat-num{font-size:24px}.panel{padding:15px}.media-grid,.device-list{grid-template-columns:1fr}.playlist-row{grid-template-columns:36px 1fr auto}.playlist-row .hide-mobile{display:none}.calendar-week{overflow:auto;grid-template-columns:repeat(7,minmax(85px,1fr))}.toolbar{flex-wrap:wrap}.search{min-width:100%;}.toolbar .primary{margin-left:0}.footer-right{float:none;display:block;margin-top:6px}footer{padding:14px}.form-grid{grid-template-columns:1fr}}

.days-picker{display:flex;flex-wrap:wrap;gap:7px}.days-picker label{display:flex;align-items:center;gap:4px;border:1px solid var(--border);border-radius:7px;padding:7px 9px;color:#526987}.days-picker input{width:auto;height:auto}
:root{--blue:#2457a6;--blue2:#eaf1ff;--brand-blue:#2457a6;--brand-green:#36a852;--brand-red:#e72936}
.logo-image{width:52px;height:52px;object-fit:cover;border:1px solid #dde5ef;border-radius:13px;box-shadow:0 2px 8px #1f396111;background:#fff}
.brand{gap:10px}.brand b{font-size:16px;letter-spacing:1.2px;color:#173b70}.brand small{letter-spacing:2px}.brand-bars{display:flex;gap:3px;margin-top:4px}.brand-bars u{display:block;width:13px;height:2px;border-radius:3px;text-decoration:none}.brand-bars u:nth-child(1){background:var(--brand-red)}.brand-bars u:nth-child(2){background:var(--brand-green)}.brand-bars u:nth-child(3){background:var(--brand-blue)}
.primary{background:var(--brand-blue)}.primary:hover{background:#193f79}.nav-item.active{color:var(--brand-blue)}.nav-item.active>span,.text-link,.eyebrow{color:var(--brand-blue)}.progress span{background:var(--brand-blue)}.alert-count,.notification-dot{background:var(--brand-red)}.secure-dot,.green,.state:not(.demo){color:var(--brand-green)}.state:not(.demo){background:#edf8f0}.brightness-panel{margin-top:15px}.brightness-table-wrap{overflow-x:auto;margin-top:14px}.brightness-table{width:100%;border-collapse:collapse;min-width:470px}.brightness-table th{text-align:left;color:#8393aa;font-size:12px;font-weight:600;padding:9px 10px;border-bottom:1px solid var(--border)}.brightness-table td{padding:10px;border-bottom:1px solid #eef2f7}.brightness-table input[type=time],.percent-input input{height:34px;border:1px solid var(--border);border-radius:7px;padding:0 9px;background:#fff;color:#284365;font:inherit;font-size:13px}.brightness-table input[type=time]{min-width:105px}.brightness-table input[type=range]{width:100%;accent-color:var(--brand-blue)}.percent-input{display:flex;align-items:center;gap:5px}.percent-input input{width:65px}.percent-input span{font-size:13px;color:#7588a3}.brightness-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:13px}.api-preview{max-height:240px;overflow:auto;padding:13px;border-radius:8px;background:#142b4c;color:#e8f0ff;font:12.5px/1.6 ui-monospace,monospace;white-space:pre-wrap;word-break:break-word}

/* Local-first typography: no remote font dependency; matches polished SaaS dashboards. */
:root{font-family:var(--font);font-optical-sizing:auto}
button,input,select,textarea{font-family:inherit}
.brand b,.page-heading h1,.panel-heading h2,.stat-num,.modal h2,.calendar-head b,.day-name b,.device-id b{font-family:var(--font)}
.brand b{font-weight:750;letter-spacing:.06em}
.page-heading h1{font-weight:720;letter-spacing:-.035em}
.panel-heading h2,.modal h2{font-weight:680;letter-spacing:-.015em}
.stat-num,.calendar-head b,.day-name b{font-weight:700;letter-spacing:-.025em}
.modal form{max-height:78vh;overflow:auto}.wizard-test{margin-top:17px;padding-top:15px;border-top:1px solid var(--border)}.wizard-test h3{font-size:15px;margin:0 0 6px}.wizard-test>p,.field small{font-size:12px;line-height:1.6;color:var(--muted)}.confirm-warning{display:flex;gap:8px;align-items:flex-start;margin:14px 0;color:#9a5b25;font-size:13px;line-height:1.6}.confirm-warning input{margin-top:2px}.callout.good{background:#f0f9f4;border-color:#cbe8d6;color:#256342}.cloud-schedule-fields{margin-bottom:14px}
.brightness-table select{height:34px;min-width:180px;border:1px solid var(--border);border-radius:7px;padding:0 9px;background:#fff;color:#284365;font:inherit;font-size:13px}.power-table{min-width:390px}.brightness-panel code{padding:2px 4px;border-radius:4px;background:#eaf1ff;color:#2457a6;font-size:.92em}
.credential-fields{margin:13px 0 6px}.credential-note{font-size:12px;line-height:1.6;color:var(--muted);margin:8px 0 12px}
.automation-step{display:flex;align-items:flex-start;gap:10px;cursor:pointer;min-width:0}.automation-step input{margin-top:3px;accent-color:var(--brand-blue)}.automation-step span{display:grid;gap:4px}.automation-step small{font-size:12px;line-height:1.5;color:var(--muted)}
[hidden]{display:none!important}
.program-actions{margin:10px 0}.field-hint{margin:8px 0;color:var(--muted);font-size:12px;line-height:1.5}
.program-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.program-actions>small{flex-basis:100%;font-size:12px;color:var(--muted);line-height:1.5}
.modal:has(.wizard-test){width:min(920px,calc(100% - 30px))}.modal:has(.wizard-test) form{max-height:78vh;overflow:auto}

.overview-grid.home-overview-grid{grid-template-columns:minmax(0,1fr)}

/* ML STUDIO visual refresh: refined surfaces,clearer hierarchy,unchanged controls. */
:root{
  color:#142b4b;
  background:#f3f6fb;
  --blue:#2864cc;
  --blue2:#edf3ff;
  --brand-blue:#2457a6;
  --muted:#71829d;
  --border:#dfe7f2;
  --navy:#142b4b;
  --ink:#142b4b;
  --shadow:0 10px 28px #19365b0b;
}
body{background:#f3f6fb;color:#142b4b;font-size:15px;-webkit-font-smoothing:antialiased}
.sidebar{width:252px;padding:26px 18px 17px;background:rgba(255,255,255,.96);box-shadow:5px 0 24px #1b355b08}
.main-area{margin-left:252px;width:calc(100% - 252px)}
.topbar{height:68px;padding:0 40px;background:rgba(255,255,255,.94)}
.page-content{padding:34px 40px 56px}
.page-heading{margin-bottom:26px}
.page-heading h1{font-size:30px;line-height:1.16}
.page-heading p{font-size:15px;line-height:1.55}
.eyebrow{font-size:12px;letter-spacing:1.9px}
.nav-item{height:45px;border-radius:11px;font-size:14px;transition:background .18s ease,color .18s ease,transform .18s ease}
.nav-item:hover{background:#f3f6fb;color:#244c84}
.nav-item.active{background:linear-gradient(100deg,#eaf1ff,#f1f5ff);box-shadow:inset 2px 0 #2c69d7}
.brand-mark,.logo-image{border-radius:15px;box-shadow:0 3px 12px #17365b12}
.stat-card,.panel,.device-card,.activity-card{border-color:#e0e8f3;border-radius:16px;box-shadow:0 8px 26px #1c3b6508;transition:box-shadow .2s ease,border-color .2s ease}
.stat-card{padding:19px 20px}
.panel{padding:22px 23px}
.panel-heading{margin-bottom:19px}
.panel-heading h2{font-size:16px}
.panel-heading p{font-size:14px;line-height:1.55}
.primary,.secondary,.quiet,.danger{transition:background .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease,transform .16s ease}
.primary,.secondary,.danger{border-radius:9px;min-height:38px}
.primary{background:linear-gradient(135deg,#2c6be0,#2457a6);box-shadow:0 5px 13px #2457a61c}
.primary:hover{background:linear-gradient(135deg,#245fce,#1d4a91);box-shadow:0 7px 16px #2457a62b;transform:translateY(-1px)}
.secondary{border-color:#d9e3f0;background:#fff;color:#294767}
.secondary:hover{border-color:#a9c1e6;background:#f7faff;color:#1f4f96}
.text-link:hover{color:#143f81;text-decoration:underline;text-underline-offset:3px}
.page-content input:not([type=checkbox]):not([type=radio]):not([type=color]),.page-content select,.page-content textarea{transition:border-color .16s ease,box-shadow .16s ease,background .16s ease}
.page-content input:focus-visible,.page-content select:focus-visible,.page-content textarea:focus-visible,button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #3b82f633;outline-offset:2px}
.field label{font-size:13px;color:#607592;font-weight:600;letter-spacing:.01em}
.field input,.field select,.field textarea{min-height:39px;border-color:#dce5f0;border-radius:9px;padding:0 11px;color:#183451;font-size:14px;background:#fff}
.field input:hover,.field select:hover,.field textarea:hover{border-color:#b8c9df}
.field textarea{padding:10px 11px;line-height:1.5;resize:vertical}
.callout{border-radius:11px;line-height:1.65}
.program-actions{gap:9px;margin:14px 0}
.program-actions .primary,.program-actions .secondary{min-height:39px}
.program-actions>small{line-height:1.6;color:#7486a0}

.confirm-warning{padding:12px 14px;border:1px solid #f1dfb9;border-radius:11px;background:#fffaf0;color:#805c25}
.confirm-warning input,.automation-step input{accent-color:#2864cc}

.schedule-window{margin:4px 0;padding:11px 12px;border-color:#e4eaf3;background:#fff}
.schedule-window legend{font-size:13px}
.schedule-window legend::before{display:none}
.days-picker{gap:6px}
.days-picker label{padding:7px 10px;border-color:#e0e8f2;border-radius:8px;background:#fff;font-size:13px;transition:background .15s ease,border-color .15s ease}
.days-picker label:has(input:checked){border-color:#b5c9eb;background:#edf3ff;color:#2457a6}

.toast{border:1px solid #ffffff1a;border-radius:12px;box-shadow:0 14px 36px #1227452e}
@media(max-width:1050px){
  .sidebar{width:214px;padding:23px 14px}
  .main-area{margin-left:214px;width:calc(100% - 214px)}
  .page-content{padding:26px 24px 44px}
  .topbar{padding:0 24px}
}
@media(max-width:700px){
  .sidebar{width:62px;padding:17px 8px}
  .main-area{margin-left:62px;width:calc(100% - 62px)}
  .page-content{padding:20px 13px 36px}
  .topbar{padding:0 13px}

}
@media(max-width:420px){
  .page-heading h1{font-size:24px}

  .program-actions{align-items:stretch}

  .program-actions>button{flex:1}}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}

/* Playlist workspace: layers{display:grid;grid-template-columns:minmax(235px,285px) minmax(0,1fr);gap:16px;align-items:start;margin:18px 0}

.eyebrow{color:#8294ad;font-size:11px;font-weight:800;letter-spacing:.13em}

.text-button{width:max-content;padding:0;border:0;background:transparent;color:var(--blue);font-size:12px;font-weight:700;cursor:pointer}
.text-button:hover{text-decoration:underline}

.compact-button{min-height:31px;padding:6px 10px!important;border-radius:8px!important;font-size:12px!important}

.property-group .field label{font-size:12px}
.property-group input,.property-group select,.property-group textarea{min-height:35px;padding:8px 10px;border-radius:8px;font-size:13px}
.property-group{margin-top:9px;padding:0 10px;border:1px solid #e5ebf4;border-radius:10px;background:#fbfcfe}
.property-group>summary{position:relative;padding:10px 1px;color:#334b69;font-size:12px;font-weight:720;cursor:pointer;list-style:none}
.property-group>summary::-webkit-details-marker{display:none}
.property-group>summary::after{position:absolute;right:2px;content:"＋";color:var(--blue);font-size:14px}
.property-group[open]>summary{margin-bottom:9px;border-bottom:1px solid #e8edf5}
.property-group[open]>summary::after{content:"−"}
.property-group>.form-grid{padding:0 0 10px;gap:10px 12px}
.property-group .field small{font-size:11px}

.property-group .schedule-window{margin:2px 0;padding:10px}

.danger-link{color:#b64848!important;font-size:12px}

.workflow-panel{margin-bottom:18px;padding:18px 20px 16px}
.workflow-panel .panel-heading{margin-bottom:10px}
.workflow-progress{margin:0 0 15px}
.workflow-progress .progress span{transition:width .25s ease}
.workflow-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.workflow-step{min-width:0;padding:14px;border:1px solid var(--border);border-radius:11px;background:linear-gradient(150deg,#fff,#f9fbff);display:flex;flex-direction:column;align-items:flex-start;min-height:176px}
.workflow-step.is-done{border-color:#b8e6d3;background:linear-gradient(150deg,#f5fcf8,#fff)}
.workflow-step.is-ready{border-color:#bfd3ff;background:linear-gradient(150deg,#f5f8ff,#fff)}
.workflow-step-top{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px}
.workflow-index{width:27px;height:27px;flex:none;border-radius:9px;display:grid;place-items:center;background:#edf3ff;color:var(--blue);font-size:14px;font-weight:800}
.workflow-step.is-done .workflow-index{background:#e4f6ed;color:#118158}
.workflow-step h3{font:600 14px var(--font);color:var(--navy);margin:12px 0 5px;line-height:1.4}
.workflow-step p{font-size:12px;line-height:1.55;color:var(--muted);margin:0 0 12px;flex:1}
.workflow-step .compact-button{font-size:12px;padding:8px 10px}

.workflow-bottom{grid-template-columns:1fr}
@media(max-width:760px){.workflow-steps{grid-template-columns:1fr}.workflow-step{min-height:0}.workflow-step p{margin-bottom:10px}.workflow-panel{padding:15px}}

.nav-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;flex-shrink:0}.nav-icon svg{width:20px;height:20px}.nav-item.active .nav-icon{filter:drop-shadow(0 0 5px #397cff44)}.nav-item[hidden]{display:none!important}.brand b{font-size:16px;letter-spacing:.06em}.device-tabs{margin-bottom:18px}

.device-tabs>button{font-size:14px}.device-list.device-list-single{grid-template-columns:minmax(0,1fr)}.dashboard-summary-grid{grid-template-columns:repeat(2,minmax(0,400px));gap:18px;margin-top:18px;align-items:start}.dashboard-summary-grid>.panel{min-width:0;width:100%;box-sizing:border-box}.dashboard-summary-grid .panel-heading{flex-wrap:wrap;gap:10px}@media(max-width:900px){.dashboard-summary-grid{grid-template-columns:minmax(0,400px)}}

/* Keep all sidebar counters centered in the same trailing column. */
.nav-item em{width:24px;min-width:24px;flex:0 0 24px;text-align:center;box-sizing:border-box}
.nav-item .alert-count{padding:3px 0}

.integration-panel{margin-top:24px}.integration-eyebrow{font-size:13px;letter-spacing:.12em;font-weight:700;color:#5c7eb2}.integration-config{border:1px solid #dde7f6;border-radius:12px;padding:16px;margin-bottom:20px}.integration-config summary{cursor:pointer;font-weight:700;margin-bottom:12px}#integrationStatus{margin:14px 0;color:#234e98;font-size:15px}

/* Sidebar brand and navigation: keep the brand inside the menu at every width and centre icons when collapsed. */
.brand{min-width:0}
.brand>span{min-width:0;overflow-wrap:anywhere}
@media(max-width:1050px){
  .logo-image{width:44px;height:44px;flex-shrink:0}
  .brand b{font-size:14px;letter-spacing:.04em}}
.vpn-status{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;margin-bottom:14px;font-size:14px;color:#526988}
.vpn-table td{vertical-align:middle}
.vpn-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}
.section-feedback{font-size:14px;color:#234e98;margin:10px 0;min-height:0}
.section-feedback:empty{display:none}
.section-feedback.good{color:#147a46}
.section-feedback.warn{color:#b45309}
.vpn-cms b,.vpn-cms small,.vpn-table td>small{display:block}
.vpn-cms small,.vpn-table td>small{color:#64748b;font-size:14px;margin-top:3px}
.danger-text{color:#b42318}
.danger-button{background:#b42318;border-color:#b42318}
@media(max-width:700px){
  .brand{justify-content:center;gap:0;padding:0}
  .brand>span{display:none}
  .logo-image{width:42px;height:42px;border-radius:12px}
  .nav-item{justify-content:center;gap:0;padding:0}}
.connecting-label{display:flex;align-items:center;gap:8px;color:#1d4fb8}
.connecting-spinner{width:14px;height:14px;flex:0 0 14px;border:2px solid #c9d8f5;border-top-color:#2c69d7;border-radius:50%;animation:cms-spin .8s linear infinite}
@keyframes cms-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.connecting-spinner{animation-duration:2.4s}}

/* Device overview (Dispositivi › Centraline) */
.device-overview{display:grid;gap:14px}
.device-hero{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:16px 18px;border:1px solid var(--border);border-radius:14px;background:#fff;box-shadow:0 1px 3px #1f39610d}
.device-hero-state{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.device-hero-state small{color:var(--muted);font-size:13px}
.device-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}
.device-tile{min-width:0;padding:14px 16px;border:1px solid var(--border);border-radius:14px;background:#fff;box-shadow:0 1px 3px #1f39610d}
.device-tile header{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:8px}
.device-tile h3{margin:0;font-size:15px}.device-tile header small{display:flex;align-items:center;gap:5px;color:var(--muted);font-size:12px;white-space:nowrap}
.device-tile header .connecting-spinner{width:9px;height:9px;flex-basis:9px;border-width:1.5px}
.metric{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:3px 10px;padding:7px 0;border-top:1px solid #eef2f8}
.metric:first-of-type{border-top:0}.metric>span{color:#526987;font-size:14px}.metric>b{font-size:14px;text-align:right;overflow-wrap:anywhere}
.metric .meter{grid-column:1/-1}.metric-note{grid-column:1/-1;color:#8a6a2a;font-size:12px;line-height:1.45}
.meter{display:block;height:5px;border-radius:5px;background:#edf2f9;overflow:hidden}.meter i{display:block;height:100%;border-radius:5px;background:#2f9e6e;transition:width .4s ease}
.meter.warn i{background:#e2a32b}.meter.danger i{background:#d9443a}
.dot{display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%;background:#a7b4c8;vertical-align:1px}.dot.ok{background:#2f9e6e}
.skeleton{display:inline-block;width:64px;height:10px;border-radius:5px;background:linear-gradient(90deg,#edf2f9,#dfe7f2,#edf2f9);background-size:200% 100%;animation:cms-shimmer 1.2s linear infinite}
@keyframes cms-shimmer{to{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.skeleton{animation:none}.meter i{transition:none}}
.device-list-names{margin:6px 0 0;padding-left:16px;font-size:14px;color:#36507a}
.device-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.device-toolbar label{font-size:14px;font-weight:650;color:#526987}
.device-toolbar select{min-width:min(320px,100%);height:36px;padding:0 10px;border:1px solid var(--border);border-radius:9px;background:#fff;color:#1d3557;font:inherit;font-size:14px}
.device-toolbar select:focus-visible{outline:2px solid var(--brand-blue);outline-offset:1px}
.build-label{display:block;margin-top:8px;padding-left:4px;color:var(--muted);font-size:12px;letter-spacing:.02em}
.device-overview .empty-state .connecting-spinner{margin:0 auto 8px}
.state.danger{background:#fdecea;color:#b3261e}
.device-tile .callout{margin:8px 0 0;font-size:13px}
.control-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.control-slider{display:flex;align-items:center;gap:10px;margin-top:8px}.control-slider input{flex:1;accent-color:var(--brand-blue)}.control-slider output{min-width:42px;text-align:right;font-weight:650;font-size:14px}
.control-confirm{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;border:1px solid #f3c8c3;border-radius:9px;background:#fff6f5}.control-confirm span{flex:1 1 160px;font-size:14px;color:#8a2a22}
.danger-button{background:#c9372c;color:#fff;border:0;border-radius:8px;padding:8px 12px;font-weight:650;cursor:pointer}.danger-button:hover{background:#a92c23}
.control-feedback{margin:9px 0 0;font-size:13px;line-height:1.5}.control-feedback.ok{color:#17784f}.control-feedback.warn{color:#8a6a2a}.control-feedback.error{color:#b3261e}
.control-hint{display:block;margin-top:6px;color:var(--muted);font-size:12px}
.control-actions .connecting-spinner,.control-confirm .connecting-spinner{width:10px;height:10px;flex-basis:10px;border-width:1.5px;display:inline-block;margin-right:5px;vertical-align:-1px}
.device-overview button:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}
.device-diagnosis{margin:-6px 0 0 4px;color:#526987;font-size:13px}
.callout.danger{border-color:#f3c8c3;background:#fff6f5;color:#8a2a22}

/* Login,password change,accounts */
body.is-locked .app-shell{visibility:hidden}
.auth-screen{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:16px;background:linear-gradient(160deg,#eef3fb,#f7f9fd)}
.auth-card{width:min(400px,100%);padding:28px 26px;border:1px solid var(--border);border-radius:16px;background:#fff;box-shadow:0 18px 50px #1f396122}
.auth-brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}.auth-brand b{display:block;font-size:16px;letter-spacing:.06em;color:#173b70}.auth-brand small{font-size:12px;letter-spacing:2px;color:#7990b2}
.auth-card h1{margin:0 0 6px;font-size:22px;letter-spacing:-.02em}.auth-lead{margin:0 0 18px;color:var(--muted);font-size:14px;line-height:1.55}
.auth-card form{display:grid;gap:12px}.auth-card .field input{height:40px;font-size:14px}
.auth-submit{justify-content:center;height:40px}.auth-actions{display:flex;gap:8px}.auth-actions button{flex:1;justify-content:center}
.auth-feedback{margin:0;padding:9px 11px;border-radius:8px;background:#fff6f5;border:1px solid #f3c8c3;color:#8a2a22;font-size:14px}
.auth-owner{margin-top:18px;padding-top:14px;border-top:1px solid var(--border);font-size:14px;color:#526987}.auth-owner summary{cursor:pointer}.auth-owner form{margin-top:12px}
.users-table-wrap{overflow-x:auto}.users-table{width:100%;border-collapse:collapse;font-size:14px}
.users-table th{text-align:left;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:8px 8px;border-bottom:1px solid var(--border)}
.users-table td{padding:10px 8px;border-bottom:1px solid #eef2f8;vertical-align:middle}.users-table td b{display:block;font-size:14px}.users-table td small{color:var(--muted);font-size:13px}
.users-table select{height:32px;border:1px solid var(--border);border-radius:7px;padding:0 8px;background:#fff;font:inherit;font-size:14px}
.users-table tr.is-disabled td{opacity:.55}.users-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.users-inline{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.users-inline input{height:32px;border:1px solid var(--border);border-radius:7px;padding:0 8px;font:inherit;font-size:14px}
.users-create{margin-top:16px}.users-create summary{cursor:pointer;font-weight:650;font-size:14px;color:#2b4569}.users-create form{margin-top:12px}.users-create-submit{display:flex;align-items:end}
.users-panel{margin-bottom:18px}

/* Dispositivi › Funzioni */
.functions-panel{display:grid;gap:14px}.functions-panel .device-toolbar .search{flex:1;min-width:200px;height:36px}
.fn-views{margin:0}.fn-intro{margin:0;color:var(--muted);font-size:13px;line-height:1.55}
/* Funzioni: guided controls by topic, one card each, the control at the bottom. */
.ctl-section h2{margin:6px 0 10px;font-size:15px;font-weight:700;color:#344d70}
.ctl-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.ctl-card{display:flex;flex-direction:column;gap:10px}
.ctl-card header{margin:0}.ctl-refresh{min-width:30px;justify-content:center;font-size:15px!important}
.ctl-text{margin:0;color:#526987;font-size:13.5px;line-height:1.5}
.ctl-error{color:#b3261e;font-size:13px}.ctl-note{margin:0;color:var(--muted);font-size:12.5px;line-height:1.45}.ctl-reason{color:#8a6a2a;font-size:12px;line-height:1.45}
.ctl-level{display:grid;grid-template-columns:56px minmax(0,1fr) auto;align-items:center;gap:10px}.ctl-level output{font-size:20px;font-weight:700;color:#183451}.ctl-level input{accent-color:var(--accent)}
.ctl-switch{display:flex;align-items:center;justify-content:space-between;gap:10px}
.ctl-toggle{position:relative;width:46px;height:26px;border-radius:20px;border:0;background:#cfd9e8;padding:0;transition:background .15s}.ctl-toggle i{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #1f396133;transition:transform .15s}
.ctl-toggle.is-on{background:var(--accent)}.ctl-toggle.is-on i{transform:translateX(20px)}.ctl-toggle:disabled{opacity:.5;cursor:not-allowed}
.ctl-choices{display:flex;flex-wrap:wrap;gap:6px}.ctl-choices button{border:1px solid var(--line);border-radius:9px;background:#fff;padding:7px 11px;font-size:13px;color:#294767}
.ctl-choices button.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:650}.ctl-choices button:disabled{opacity:.55;cursor:not-allowed}
.ctl-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.ctl-actions>span{flex:1}.ctl-actions select{height:34px;max-width:100%;border:1px solid var(--line);border-radius:8px;padding:0 8px;font:inherit;font-size:13px}
.ctl-clock b{display:block;font-size:20px;color:#183451}.ctl-clock small{color:var(--muted);font-size:12.5px}
.ctl-relays,.ctl-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.ctl-relays li{display:flex;justify-content:space-between;align-items:center;gap:10px}.ctl-relays small{display:block;color:var(--muted);font-size:12px}
.ctl-list li{padding:6px 10px;border-radius:8px;background:#f5f8fd;font-size:13px}
.ctl-shot{display:block;width:100%;border-radius:10px;border:1px solid var(--line);background:#000}
.ctl-enable{display:flex;align-items:center;gap:8px;font-size:13.5px;color:#294767}
.sch-rows{list-style:none;margin:0;padding:0;display:grid;gap:8px}.sch-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:#fbfcfe}
.sch-row small{flex-basis:100%;color:var(--muted);font-size:12px}.sch-row.is-custom{color:#526987;font-size:13px;justify-content:space-between}
.sch-row input[type=time],.sch-row select{height:32px;border:1px solid var(--line);border-radius:8px;padding:0 8px;font:inherit;font-size:13px;background:#fff}
.sch-days{display:inline-flex;gap:3px}.sch-days button{width:27px;height:27px;border-radius:50%;border:1px solid var(--line);background:#fff;font-size:12px;font-weight:650;color:#526987;padding:0}
.sch-days button.active{background:var(--accent);border-color:var(--accent);color:#fff}
.ctl-percent{display:inline-flex;align-items:center;gap:4px;font-size:13px}.ctl-percent input{width:64px;height:32px;border:1px solid var(--line);border-radius:8px;padding:0 8px;font:inherit}
.sch-empty{color:var(--muted);font-size:13px}
/* Strumenti avanzati: searchable categories of functions; forms in plain words. */
.fn-check{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#526987}
.fn-category{border:1px solid var(--border);border-radius:12px;background:#fff}.fn-category summary{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;font-size:14.5px}
.fn-category summary small{color:var(--muted);font-size:12px}
.adv-list{list-style:none;margin:0;padding:0 14px 8px}.adv-row-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-top:1px solid #eef2f8}
.adv-row-item b{display:block;font-size:13.5px;font-weight:600}.adv-row-item small{color:var(--muted);font-size:12px}
.fn-variant{font-style:normal;font-size:11px;padding:1px 5px;border-radius:5px;background:#eef2f8;color:#526987}
.adv-form{display:grid;gap:10px;max-height:52vh;overflow:auto;padding-right:4px}.adv-group{display:grid;gap:8px;margin:0;padding:10px 12px;border:1px solid var(--line);border-radius:10px}
.adv-group legend{padding:0 4px;font-size:12.5px;font-weight:650;color:#526987}.adv-rows{display:grid;gap:8px}.adv-rows-title{margin:0;font-size:13px;font-weight:650;color:#344d70}
.adv-field input[aria-invalid=true]{border-color:#b3261e}
.fn-hint{display:block;margin:6px 0;color:var(--muted);font-size:12.5px;line-height:1.5}
.fn-table{width:100%;margin-top:10px;border-collapse:collapse;font-size:13px}.fn-table th,.fn-table td{padding:6px 8px;border-top:1px solid #eef2f8;text-align:left;vertical-align:top;overflow-wrap:anywhere}
.fn-table th{width:45%;color:#526987;font-weight:600}
.fn-dialog{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:16px;background:#14244355}
.fn-card{width:min(640px,100%);max-height:calc(100vh - 32px);overflow:auto;padding:20px 22px;border-radius:14px;background:#fff;box-shadow:0 25px 80px #172f5060}
.fn-card header{display:flex;justify-content:space-between;gap:12px;margin-bottom:12px}.fn-card h3{margin:2px 0 4px;font-size:18px}.fn-card code{font-size:13px;color:#526987;overflow-wrap:anywhere}
.fn-confirm{display:flex;gap:8px;align-items:flex-start;margin:10px 0 0;font-size:14px;color:#8a2a22}
.fn-image{display:block;max-width:100%;margin-top:10px;border:1px solid var(--border);border-radius:8px}
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.vnnox-panel{margin-bottom:18px}.vnnox-panel .control-actions{margin:4px 0 14px}
.device-hold{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}
.media-preview{overflow:hidden}.media-preview.gif{background:linear-gradient(135deg,#fdf1dc,#f7e3ff)}.media-play{position:absolute;inset:auto auto 9px 9px;width:26px;height:26px;border-radius:50%;background:#0c1d36b3;color:#fff;font-size:14px;display:grid;place-items:center}.media-select{position:absolute;top:7px;right:7px;width:26px;height:26px;border-radius:7px;background:#ffffffe6;display:grid;place-items:center;cursor:pointer}.media-select input{width:15px;height:15px;margin:0;cursor:pointer}.media-card.is-selected{border-color:#2865e8;box-shadow:0 0 0 2px #2865e833}.media-card[hidden]{display:none}.media-rename{display:flex;gap:6px;flex-wrap:wrap}.media-rename input{flex:1;min-width:120px;height:31px;border:1px solid var(--border);border-radius:7px;padding:0 8px;font:inherit;font-size:13px}.upload-panel{margin-bottom:15px}.upload-panel ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}.upload-row{display:grid;grid-template-columns:1fr auto;gap:4px 12px;align-items:center;padding:9px 0;border-top:1px solid #eff2f6;font-size:13px}.upload-row b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload-row small{display:block;color:#8292a8;margin-top:3px;line-height:1.5}.upload-row .progress{grid-column:1/-1}.upload-status{font-weight:700;color:#536985}.upload-row.done .upload-status{color:#17784f}.upload-row.refused .upload-status,.upload-row.refused small{color:#b3261e}.upload-row.duplicate .upload-status,.upload-row.warned .upload-status,.upload-row.warned small{color:#8a6a2a}/* Builder dei palinsesti (src/builder-ui.mjs) */
.builder{display:grid;gap:14px}.builder-head{display:flex;flex-wrap:wrap;align-items:center;gap:12px;background:#fff;border:1px solid var(--border);border-radius:13px;padding:12px 14px;box-shadow:var(--shadow);position:sticky;top:0;z-index:3}.builder-title{flex:1;min-width:220px;display:grid;gap:4px}.builder-title input{font:650 18px var(--font);color:#122745;border:1px solid transparent;border-radius:7px;padding:4px 6px;background:transparent}.builder-title input:hover:not(:disabled),.builder-title input:focus{border-color:var(--border);background:#fbfdff;outline:none}.builder-title small{font-size:13px;color:var(--muted);padding-left:7px}.builder-status{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;max-width:520px}.builder-save{color:#7286a3}.builder-save.saved{color:#17784f}.builder-save.error{color:#b3261e}.builder-history{display:flex;gap:6px}.builder-notice{margin:0;padding:9px 12px;border-radius:9px;background:#eef5ff;border:1px solid #d6e5ff;color:#244b8f;font-size:13px}
.builder-timeline{background:#fff;border:1px solid var(--border);border-radius:13px;padding:12px;box-shadow:var(--shadow)}.timeline-strip{display:flex;gap:9px;overflow-x:auto;padding-bottom:6px}.timeline-page{position:relative;flex:0 0 auto;display:grid;gap:7px;padding:8px;border:1px solid var(--border);border-radius:10px;background:#fbfcfe;cursor:pointer;text-align:left;min-width:132px;max-width:320px}.timeline-page:hover{border-color:#bcd0f3}.timeline-page.is-selected{background:#f1f6ff;border-color:#9dbcf5}.timeline-page.is-current{border-color:#2865e8;box-shadow:0 0 0 2px #2865e826}.timeline-page.drop-before{box-shadow:-4px 0 0 #2865e8}.timeline-page.drop-after{box-shadow:4px 0 0 #2865e8}.timeline-page.drop-into{outline:2px dashed #2865e8}.timeline-page:focus-visible,.stage-zone:focus-visible,.sequence-item:focus-visible{outline:2px solid #2865e8;outline-offset:2px}.timeline-thumb{position:relative;display:block;width:100%;background:#0f1d33;border-radius:6px;overflow:hidden}.timeline-thumb i{position:absolute;border:1px solid #9fbdf5;background:#2865e833}.timeline-copy b,.timeline-copy small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.timeline-copy b{font-size:13px;color:#28405f}.timeline-copy small{font-size:12px;color:var(--muted);margin-top:3px}.timeline-add{flex:0 0 auto;min-width:110px;border:1px dashed #b9cbe8;border-radius:10px;background:#fff;color:#2865e8;font-weight:700;font-size:13px}.timeline-add:disabled{opacity:.5}.timeline-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px}.timeline-actions small{margin-right:auto;font-size:12px;color:var(--muted)}.issue-dot{position:absolute;top:6px;right:6px;width:8px;height:8px;border-radius:50%;background:#d6452f;box-shadow:0 0 0 2px #fff}
.builder-main{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(300px,1fr);gap:14px;align-items:start}.builder-stage-panel,.builder-sequence,.builder-props,.builder-issues{background:#fff;border:1px solid var(--border);border-radius:13px;padding:14px;box-shadow:var(--shadow)}.builder-side{display:grid;gap:14px}.stage-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}.stage-toolbar b{font-size:14px;color:#28405f;margin-right:auto}.stage-tools{display:flex;flex-wrap:wrap;gap:6px}.secondary.danger{color:#b3261e;border-color:#f0d0cc}
.stage{position:relative;width:100%;background:repeating-conic-gradient(#14233d 0 25%,#172a48 0 50%) 0 0/24px 24px;border-radius:9px;overflow:hidden;touch-action:none;user-select:none}.stage-zone{position:absolute;border:1px solid #8fb2f3;background:#2865e81f;cursor:move;overflow:hidden;box-sizing:border-box}.stage-zone:hover{border-color:#c4d8ff}.stage-zone.is-selected{border:2px solid #4d8bff;background:#2865e833;overflow:visible}.stage-zone.has-issue{border-color:#f08b7a}.stage-zone.is-dragging{opacity:.85}.stage-zone.drop-into{outline:3px dashed #ffd166;outline-offset:-3px}.stage-zone-fill{position:absolute;inset:0;display:grid;place-items:center;overflow:hidden;pointer-events:none}.stage-zone-fill img{width:100%;height:100%;object-fit:cover;opacity:.92}.stage-zone-label{position:absolute;left:4px;top:4px;max-width:calc(100% - 8px);padding:3px 6px;border-radius:5px;background:#0c1d36cc;color:#fff;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
.zone-handle{position:absolute;width:11px;height:11px;background:#fff;border:2px solid #2865e8;border-radius:3px;z-index:2}.h-nw{left:-6px;top:-6px;cursor:nwse-resize}.h-n{left:calc(50% - 6px);top:-6px;cursor:ns-resize}.h-ne{right:-6px;top:-6px;cursor:nesw-resize}.h-e{right:-6px;top:calc(50% - 6px);cursor:ew-resize}.h-se{right:-6px;bottom:-6px;cursor:nwse-resize}.h-s{left:calc(50% - 6px);bottom:-6px;cursor:ns-resize}.h-sw{left:-6px;bottom:-6px;cursor:nesw-resize}.h-w{left:-6px;top:calc(50% - 6px);cursor:ew-resize}
.stage-guides{position:absolute;inset:0;pointer-events:none;z-index:999}.stage-guides i{position:absolute;background:#ffd166}.guide-x{top:0;bottom:0;width:1px}.guide-y{left:0;right:0;height:1px}.guide-size{position:absolute;display:flex;align-items:flex-end;justify-content:flex-end;padding:3px;font:600 12px var(--font);color:#ffd166;text-shadow:0 1px 2px #000}
.thumb-glyph{display:grid;place-items:center;gap:3px;color:#cfe0ff;text-align:center;padding:4px}.thumb-glyph b{font-size:22px}.thumb-glyph small{font-size:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.thumb-text{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:4px;font-size:14px;overflow:hidden;word-break:break-word}.thumb-empty{color:#8fa6cc;font-size:12px}
.builder-sequence .panel-heading{align-items:flex-start;gap:10px;margin-bottom:10px}.builder-sequence h3{font:600 15px var(--font);margin:4px 0}.builder-sequence .panel-heading p{margin:0}.sequence-list{list-style:none;margin:0;padding:0;display:grid;gap:6px;max-height:340px;overflow:auto}.sequence-item{display:grid;grid-template-columns:auto 46px 1fr auto;gap:9px;align-items:center;padding:6px 8px;border:1px solid var(--border);border-radius:9px;background:#fff;cursor:pointer}.is-readonly .sequence-item{grid-template-columns:46px 1fr auto}.sequence-item:hover{border-color:#c6d6f1}.sequence-item.is-selected{background:#f1f6ff;border-color:#9dbcf5}.sequence-item.is-focus{box-shadow:inset 3px 0 0 #2865e8}.sequence-item.has-issue .sequence-copy small{color:#b3261e}.sequence-item.drop-before{box-shadow:0 -3px 0 #2865e8}.sequence-item.drop-after{box-shadow:0 3px 0 #2865e8}.sequence-thumb{width:46px;height:32px;border-radius:6px;background:#14233d;display:grid;place-items:center;overflow:hidden}.sequence-thumb img{width:100%;height:100%;object-fit:cover}.sequence-thumb .thumb-glyph b{font-size:16px}.sequence-thumb .thumb-text{font-size:11px}.sequence-copy b,.sequence-copy small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sequence-copy b{font-size:13px;color:#28405f}.sequence-copy small{font-size:12px;color:var(--muted);margin-top:3px}.sequence-index{font-size:12px;color:#9aabc4;font-weight:700}.sequence-empty.drop-into{border-color:#2865e8;background:#f1f6ff}
.bulk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:8px;margin-bottom:9px;border-radius:9px;background:#f1f6ff;border:1px solid #d6e5ff;font-size:13px}.bulk-bar b{margin-right:4px;color:#244b8f}.bulk-field{display:flex;align-items:center;gap:5px;color:#536985}.bulk-field select,.bulk-field input{height:31px;border:1px solid var(--border);border-radius:7px;padding:0 7px;font:inherit;font-size:13px;background:#fff}.bulk-field input{width:78px}
.props-tabs{margin:0 0 12px}.props-body .form-grid{gap:10px}.field-wide{grid-column:1/-1}.field textarea{width:100%;border:1px solid var(--border);border-radius:7px;padding:8px 10px;font:inherit;font-size:13px;color:#314968;resize:vertical}.field input[type=color]{padding:3px;height:36px}.props-empty{font-size:13px;color:var(--muted);line-height:1.6;margin:4px 0}.props-file{display:grid;grid-template-columns:72px 1fr;gap:10px;align-items:center;margin-bottom:12px;padding:8px;border:1px solid var(--border);border-radius:9px}.props-file>img,.props-file>video,.props-file>.thumb-glyph{width:72px;height:48px;object-fit:cover;border-radius:6px;background:#14233d}.props-file b,.props-file small{display:block;font-size:13px}.props-file small{color:var(--muted);margin-top:3px}.props-group{margin-top:12px;border-top:1px solid #eff2f6;padding-top:10px}.props-group summary{cursor:pointer;font-size:13px;font-weight:700;color:#344d70}.props-devices{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 12px}.check-row{display:flex;align-items:center;gap:7px;font-size:13px;color:#344d70;grid-column:1/-1}.field-hint{display:block;font-size:12px;color:var(--muted);line-height:1.6;margin-top:6px}
.schedule-editor{border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin:12px 0 0;display:grid;gap:10px}.schedule-editor .form-grid{margin:0}.schedule-window{display:grid;gap:7px;padding:8px;border-radius:8px;background:#f8faff}.schedule-times{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;color:#536985}.schedule-times input{height:31px;border:1px solid var(--border);border-radius:7px;padding:0 6px;font:inherit;font-size:13px}
.builder-issues ul{margin:10px 0 0;padding-left:18px;display:grid;gap:5px;font-size:13px;color:#5b4a3a}.builder-issues summary{cursor:pointer;font-size:14px;font-weight:700;color:#344d70;display:flex;align-items:center;gap:8px}.builder-issues p{margin:0;font-size:14px;color:#344d70;display:flex;align-items:center;gap:8px}.builder-issues .text-link{padding:0;margin-right:4px}
.playlist-row{grid-template-columns:40px 1.3fr 1fr auto auto}.playlist-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
@media(max-width:1050px){.builder-main{grid-template-columns:1fr}}
@media(max-width:700px){.builder-head{position:static}.playlist-row{grid-template-columns:36px 1fr}.playlist-row .state,.playlist-actions{grid-column:2}.playlist-actions{justify-content:flex-start}.sequence-item{grid-template-columns:auto 40px 1fr}.sequence-index{display:none}.builder{grid-template-columns:minmax(0,1fr)}.builder>*{min-width:0}.builder-title input{width:100%;min-width:0}.stage-toolbar,.stage-tools,.subnav{flex-wrap:wrap}}
/* ===== Design system (v0.12): tokens and components. Last in the file, so it defines the final look. ===== */
:root{--bg:#f6f7f9;--surface:#fff;--surface-2:#f8fafc;--line:#e5e7eb;--line-strong:#d1d5db;--text:#0f172a;--text-2:#334155;--text-3:#64748b;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-soft:#eef4ff;--danger:#dc2626;--danger-soft:#fef2f2;--success:#15803d;--success-soft:#ecfdf3;--warn:#b45309;--warn-soft:#fffbeb;--radius:12px;--radius-sm:8px;--ring:0 0 0 3px rgba(37,99,235,.2);--shadow:0 1px 2px rgba(15,23,42,.05);--shadow-md:0 8px 24px rgba(15,23,42,.08);--border:var(--line);--muted:var(--text-3);--navy:var(--text);color:var(--text);background:var(--bg)}
body{background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}
button,input,select,textarea{font-family:var(--font)}
:focus-visible{outline:none;box-shadow:var(--ring)}
::selection{background:#dbe7ff}

/* Shell */
.sidebar{background:var(--surface);border-right:1px solid var(--line);padding:20px 14px 14px}
.brand b{font:650 14px var(--font);letter-spacing:-.01em;color:var(--text)}.brand small{font-size:10.5px;letter-spacing:.18em;color:var(--text-3)}
.workspace-label{font-size:11px;font-weight:600;letter-spacing:.08em;color:var(--text-3);margin:32px 8px 8px}.secure-dot{font-size:11px;color:var(--success)}
.nav-item{height:38px;border-radius:var(--radius-sm);padding:0 10px;font-size:14px;font-weight:500;color:var(--text-2);gap:10px;margin:2px 0;transition:background .12s,color .12s}
.nav-item:hover{background:#f1f5f9;color:var(--text)}.nav-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.nav-item.active>span,.nav-item.active .nav-icon{color:var(--accent)}
.nav-item em{font-size:12px;font-weight:600;color:var(--text-3);background:#f1f5f9;border-radius:999px;padding:1px 8px}.nav-item.active em{background:#dbe7ff;color:var(--accent)}
.user-card{border-top:1px solid var(--line);padding:12px 6px 0}.user-card b{font-size:13.5px;font-weight:600}.user-card small{font-size:12px;color:var(--text-3)}.avatar{background:var(--accent-soft);color:var(--accent);font-weight:600}
.topbar{height:56px;background:rgba(255,255,255,.85);backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--line);padding:0 32px;position:sticky;top:0;z-index:5}
.breadcrumb{font-size:13.5px;color:var(--text-3)}.breadcrumb b{color:var(--text);font-weight:600}
.icon-button{width:32px;height:32px;border-radius:var(--radius-sm);display:inline-grid;place-items:center;color:var(--text-3)}.icon-button:hover{background:#f1f5f9;color:var(--text)}.icon-button svg{width:18px;height:18px}
.page-content{padding:28px 32px 56px;width:min(1440px,100%)}
footer{font-size:12px;color:var(--text-3)}

/* Page heading */
.page-heading{margin-bottom:24px;gap:16px}.eyebrow{font-size:11.5px;font-weight:600;letter-spacing:.08em;color:var(--accent);margin-bottom:6px}
.page-heading h1{font:650 26px/1.2 var(--font);letter-spacing:-.02em;color:var(--text)}.page-heading p{font-size:14.5px;color:var(--text-3);margin-top:6px}

/* Surfaces */
.panel,.stat-card,.device-card,.media-card,.playlist-row,.builder-head,.builder-timeline,.builder-stage-panel,.builder-sequence,.builder-props,.builder-issues{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.panel{padding:20px 22px}.panel-heading{margin-bottom:16px;gap:12px}.panel-heading h2{font:600 16px/1.3 var(--font);color:var(--text)}.panel-heading p{font-size:13.5px;color:var(--text-3);margin-top:4px}
.stat-card{padding:18px 20px}.stat-top{font-size:12px;font-weight:600;letter-spacing:.04em;color:var(--text-3)}.stat-num{font:650 28px/1.1 var(--font);letter-spacing:-.02em;margin:10px 0 4px}.stat-caption{font-size:13px;color:var(--text-3)}.stat-icon{background:var(--accent-soft);color:var(--accent)}
.callout{font-size:13.5px;line-height:1.6;background:var(--surface-2);border:1px solid var(--line);color:var(--text-2);border-radius:10px;padding:12px 14px}.callout strong,.callout b{color:var(--text)}
.callout.warn{background:var(--warn-soft);border-color:#fde68a;color:#78350f}.callout.good{background:var(--success-soft);border-color:#bbf7d0;color:#14532d}
.empty-state{border:1px dashed var(--line-strong);border-radius:var(--radius);color:var(--text-3);font-size:14px;background:var(--surface-2)}.empty-state b{font-size:15px;font-weight:600;color:var(--text)}
.settings-row b{font-size:14px;font-weight:600}.settings-row small{font-size:13px;color:var(--text-3)}

/* Buttons */
.primary,.secondary,.quiet,.danger,.danger-button{height:36px;min-height:36px;padding:0 14px;border-radius:var(--radius-sm);font:500 13.5px var(--font);display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;transition:background .12s,border-color .12s,color .12s,box-shadow .12s;cursor:pointer}
.primary{background:var(--accent);color:#fff;border:1px solid var(--accent);box-shadow:0 1px 2px rgba(37,99,235,.25)}.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
.secondary{background:var(--surface);color:var(--text);border:1px solid var(--line-strong)}.secondary:hover{background:var(--surface-2);border-color:#9ca3af}
.quiet{background:transparent;border:1px solid transparent;color:var(--text-2)}.quiet:hover{background:#f1f5f9;color:var(--text)}
.danger,.secondary.danger{background:var(--surface);border:1px solid #fecaca;color:var(--danger)}.danger:hover,.secondary.danger:hover{background:var(--danger-soft)}
.danger-button{background:var(--danger);border:1px solid var(--danger);color:#fff}.danger-button:hover{background:#b91c1c}
.compact-button{height:30px!important;min-height:30px!important;padding:0 10px!important;font-size:13px!important;border-radius:7px!important}
button:disabled,button[disabled]{opacity:.45;cursor:not-allowed;box-shadow:none}.primary:disabled:hover{background:var(--accent)}.secondary:disabled:hover{background:var(--surface)}
.text-link,.text-button{color:var(--accent);font-size:13.5px;font-weight:500;background:none;border:0;cursor:pointer}.text-link:hover,.text-button:hover{text-decoration:underline}

/* Forms */
.field label{font-size:13px;font-weight:500;color:var(--text-2);margin-bottom:6px}
.field input,.field select,.field textarea,.search,.filter,.bulk-field select,.bulk-field input,.schedule-times input,.media-rename input,.users-inline input{height:36px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font:400 14px var(--font);padding:0 10px;transition:border-color .12s,box-shadow .12s}
.field textarea{height:auto;padding:8px 10px;line-height:1.5}
.field input:focus,.field select:focus,.field textarea:focus,.search:focus,.filter:focus,.bulk-field select:focus,.bulk-field input:focus,.schedule-times input:focus{border-color:var(--accent);box-shadow:var(--ring);outline:none}
.field input:disabled,.field select:disabled,.field textarea:disabled{background:var(--surface-2);color:var(--text-3)}
.field small,.field-hint{font-size:12.5px;color:var(--text-3);line-height:1.55}
.search{min-width:260px}.toolbar{gap:8px;margin-bottom:16px}
.check-row,.confirm-warning{font-size:13.5px}.days-picker label{font-size:13px;border-radius:7px;padding:5px 9px;border-color:var(--line-strong)}
input[type=checkbox],input[type=radio]{accent-color:var(--accent);width:16px;height:16px}

/* Tabs, pills, feedback */
.subnav{border-bottom:1px solid var(--line);gap:4px}.subnav button{font-size:14px;font-weight:500;color:var(--text-3);padding:10px 12px;border-bottom:2px solid transparent;margin-bottom:-1px}.subnav button:hover{color:var(--text)}.subnav button.active{color:var(--accent);border-color:var(--accent);font-weight:600}
.state{font-size:11.5px;font-weight:600;letter-spacing:.02em;border-radius:999px;padding:3px 10px;background:var(--success-soft);color:var(--success);white-space:nowrap}.state.demo{background:var(--warn-soft);color:var(--warn)}
.control-feedback{font-size:13.5px}.control-feedback.ok{color:var(--success)}.control-feedback.error{color:var(--danger)}
.toast{font-size:13.5px;border-radius:10px;background:#0f172a;box-shadow:var(--shadow-md)}
.modal{border-radius:16px;padding:24px;box-shadow:0 24px 64px rgba(15,23,42,.25)}.modal h2{font:600 18px/1.3 var(--font)}.modal p{font-size:14px;color:var(--text-2);line-height:1.6}.modal-close{background:#f1f5f9;color:var(--text-2)}
.api-preview{font:12.5px/1.55 ui-monospace,SFMono-Regular,Consolas,monospace}

/* Library */
.media-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}
.media-card{overflow:hidden;transition:box-shadow .15s,border-color .15s}.media-card:hover{box-shadow:var(--shadow-md);border-color:var(--line-strong)}
.media-preview{height:auto;aspect-ratio:16/10;background:#0f172a;color:#cbd5e1}.media-preview img,.media-preview video{width:100%;height:100%;object-fit:cover;display:block}

.media-info{padding:8px 10px 9px}.media-name{display:flex;align-items:center;gap:4px;min-width:0}.media-name b{flex:1;min-width:0;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.media-rename-open{flex:none;width:24px;height:24px;border:0;border-radius:6px;background:transparent;color:var(--text-3);font-size:13px;display:grid;place-items:center;opacity:0;transition:opacity .12s}.media-card:hover .media-rename-open,.media-rename-open:focus-visible{opacity:1}.media-rename-open:hover{background:var(--surface-2);color:var(--text)}
@media(hover:none){.media-rename-open{opacity:1}}.media-rename span{display:flex;gap:6px}.media-meta{margin-top:4px;font-size:12px;color:var(--text-3);gap:2px 8px;flex-wrap:wrap}.media-meta span{white-space:nowrap}
.upload-row{font-size:13.5px}.upload-row small{font-size:12.5px}

/* Playlist list */
.playlist-row{padding:14px 16px;gap:16px}.playlist-row b{font-size:14.5px;font-weight:600}.playlist-row small{font-size:13px;color:var(--text-3)}.playlist-mark{background:var(--accent-soft);color:var(--accent);border-radius:10px}

/* Builder */
.builder{gap:16px}.builder-head{padding:12px 16px;top:68px}.builder-title input{font:650 20px/1.2 var(--font);letter-spacing:-.015em;color:var(--text);height:36px;padding:0 8px}.builder-title small{font-size:13px;color:var(--text-3);padding-left:9px}
.builder-save{font-size:13px}.builder-history .compact-button{width:32px;padding:0!important;font-size:16px!important}
.builder-notice{font-size:13.5px;border-radius:10px;background:var(--accent-soft);border-color:#c7d7fe;color:#1e3a8a}
.timeline-page{border-radius:10px;border-color:var(--line);background:var(--surface)}.timeline-page.is-selected{background:var(--accent-soft);border-color:#a5c0fb}.timeline-page.is-current{border-color:var(--accent);box-shadow:var(--ring)}
.timeline-copy b{font-size:13px;font-weight:600;color:var(--text)}.timeline-copy small{font-size:12px;color:var(--text-3)}.timeline-add{font-size:13px;border-color:var(--line-strong);color:var(--accent)}.timeline-add:hover{background:var(--accent-soft)}.timeline-actions small{font-size:12.5px;color:var(--text-3)}
.stage-toolbar b{font-size:14px;font-weight:600;color:var(--text)}
.stage{background:#0b1220;background-image:linear-gradient(rgba(255,255,255,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.04) 1px,transparent 1px);background-size:32px 32px;border-radius:10px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.06)}
.stage-zone{background:#1e293b;border:1px solid #475569}.stage-zone.is-selected{background:#1e293b;border:2px solid #60a5fa;box-shadow:0 0 0 4px rgba(96,165,250,.25)}.stage-zone.has-issue{border-color:#f87171}
.stage-zone-label{font-size:11.5px;font-weight:500;background:rgba(15,23,42,.78);border-radius:6px;padding:3px 7px}
.zone-handle{width:10px;height:10px;border:2px solid #60a5fa;border-radius:50%}
.thumb-glyph{color:#cbd5e1}.thumb-glyph small{font-size:12px}.thumb-empty{font-size:12.5px;color:#94a3b8}
.builder-sequence h3{font:600 16px/1.3 var(--font)}.builder-sequence .panel-heading p{font-size:13px;color:var(--text-3)}
.sequence-item{border-color:var(--line);border-radius:10px;padding:8px 10px}.sequence-item:hover{border-color:var(--line-strong);background:var(--surface-2)}.sequence-item.is-selected{background:var(--accent-soft);border-color:#a5c0fb}.sequence-item.is-focus{box-shadow:inset 3px 0 0 var(--accent)}
.sequence-copy b{font-size:13.5px;font-weight:600;color:var(--text)}.sequence-copy small{font-size:12.5px;color:var(--text-3)}.sequence-index{font-size:12px;color:#94a3b8}.sequence-thumb{width:52px;height:36px;border-radius:7px;background:#0f172a}
.bulk-bar{font-size:13px;border-radius:10px;background:var(--accent-soft);border-color:#c7d7fe;gap:8px}.bulk-bar b{color:#1e3a8a;font-weight:600}.bulk-field{font-size:13px;color:var(--text-2)}.bulk-field select,.bulk-field input{height:30px;font-size:13px}
.props-tabs button{font-size:13.5px;padding:8px 10px}.props-empty{font-size:13.5px}.props-file b{font-size:13.5px}.props-file small{font-size:12.5px}.props-group summary{font-size:13.5px;font-weight:600;color:var(--text)}
.schedule-editor{border-color:var(--line);border-radius:10px}.schedule-window{background:var(--surface-2);border:1px solid var(--line)}.schedule-times{font-size:13px}
.builder-issues summary,.builder-issues p{font-size:14px;color:var(--text)}.builder-issues ul{font-size:13.5px;color:var(--text-2)}
.builder-sequence .panel-heading .primary{flex-shrink:0}
/* Anteprima del palinsesto (src/preview-ui.mjs) */
.preview-dialog{border:0;padding:0;width:min(1200px,calc(100% - 32px));max-height:calc(100vh - 32px);border-radius:16px;background:#0b1220;color:#e2e8f0;box-shadow:0 24px 64px rgba(0,0,0,.45)}.preview-dialog::backdrop{background:rgba(2,6,23,.7);backdrop-filter:blur(4px)}
.preview-shell{display:grid;gap:12px;padding:18px 20px}.preview-head{display:flex;align-items:center;gap:14px}.preview-head>div:first-child{flex:1;display:grid;gap:2px}.preview-head b{font:600 16px var(--font);color:#f8fafc}.preview-head small{font-size:12.5px;color:#94a3b8}
.preview-modes{display:flex;gap:6px}.preview-modes .secondary{background:transparent;color:#cbd5e1;border-color:#334155}.preview-modes .secondary.active{background:#1e293b;color:#fff;border-color:#60a5fa}.preview-dialog .modal-close{background:#1e293b;color:#cbd5e1}
.preview-stage-wrap{display:grid;place-items:center;max-height:calc(100vh - 220px);overflow:hidden}.preview-stage{position:relative;width:100%;max-height:calc(100vh - 220px);background:#000;overflow:hidden;border-radius:6px}
.preview-zone{position:absolute;overflow:hidden;background:#000}.preview-zone img,.preview-zone video{width:100%;height:100%;object-fit:fill;display:block}
.preview-text{display:flex;align-items:center;width:100%;height:100%;padding:0 .4em;white-space:nowrap;overflow:hidden;line-height:1.2}.preview-text.scroll-none{white-space:normal}
.preview-text.scroll-left span{display:inline-block;padding-left:100%;animation:preview-left var(--scroll-seconds) linear infinite}.preview-text.scroll-up{white-space:normal}.preview-text.scroll-up span{display:block;animation:preview-up var(--scroll-seconds) linear infinite}
.is-paused .preview-text span{animation-play-state:paused}
@keyframes preview-left{to{transform:translateX(-100%)}}@keyframes preview-up{from{transform:translateY(100%)}to{transform:translateY(-100%)}}
.preview-clock{display:grid;place-items:center;align-content:center;width:100%;height:100%;gap:2px;font-variant-numeric:tabular-nums}.preview-clock b{font-size:clamp(12px,40cqh,64px);font-weight:600}.preview-clock svg{height:70%;max-width:90%}.preview-clock small{font-size:12px;opacity:.85}.preview-zone{container-type:size}
.preview-placeholder{display:grid;place-items:center;align-content:center;gap:4px;width:100%;height:100%;background:repeating-linear-gradient(45deg,#111827 0 10px,#0f172a 10px 20px);color:#cbd5e1;text-align:center;font-size:13px;padding:6px}.preview-placeholder b{font-size:22px}.preview-placeholder small{color:#64748b;font-size:11.5px}
.preview-empty{display:grid;place-items:center;height:100%;min-height:160px;color:#94a3b8;font-size:14px}
.preview-controls{display:flex;align-items:center;gap:10px}.preview-controls .secondary{background:#1e293b;color:#e2e8f0;border-color:#334155}
.preview-progress{position:relative;flex:1;height:8px;border-radius:999px;background:#1e293b;cursor:pointer}.preview-progress [data-bar]{position:absolute;inset:0 auto 0 0;border-radius:999px;background:#3b82f6}.preview-progress i b{position:absolute;top:-2px;width:2px;height:12px;background:#64748b}
.preview-time{font-size:13px;color:#cbd5e1;font-variant-numeric:tabular-nums;min-width:96px;text-align:right}.preview-info{margin:0;font-size:13.5px;color:#e2e8f0}.preview-shell .field-hint{color:#64748b;margin:0}
/* Pubblicazione (src/publish-ui.mjs) e pubblicazioni recenti */
.publish-dialog{width:min(560px,calc(100% - 30px))}.publish-dialog .field{margin:14px 0}.publish-dialog .callout{margin:10px 0}.publish-dialog .error-list{margin:6px 0 0;padding-left:18px}
.publish-summary{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.publish-summary span{border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-size:13px;color:var(--text-2);background:var(--surface-2)}.publish-summary b{color:var(--text)}
.publish-steps{list-style:none;margin:14px 0;padding:0;display:grid;gap:8px}.publish-step{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--text-3)}.publish-step span{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:12px;background:#f1f5f9;color:var(--text-3)}
.publish-step.running{color:var(--text);font-weight:600}.publish-step.running span{background:var(--accent-soft);color:var(--accent);animation:publish-spin 1.2s linear infinite}.publish-step.done{color:var(--text-2)}.publish-step.done span{background:var(--success-soft);color:var(--success)}.publish-step.failed{color:var(--danger)}.publish-step.failed span{background:var(--danger-soft);color:var(--danger)}
@keyframes publish-spin{to{transform:rotate(360deg)}}
.publish-progress{margin:4px 0 12px}.publish-progress span{transition:width .4s}.publish-shot{display:block;width:100%;border-radius:10px;border:1px solid var(--line);background:#000;margin-top:8px}
.publication-list{display:grid;gap:8px}.publication-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line)}.publication-row:first-child{border-top:0}.publication-row b{display:block;font-size:14px;font-weight:600}.publication-row small{display:block;font-size:12.5px;color:var(--text-3)}
/* Progetto .MLP: buttons side by side in the page heading, notice and import progress under it. */
.heading-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.project-notice{margin:0 0 14px}.project-upsell{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;margin-top:8px}#projectStatus:empty{display:none}#projectStatus{margin-bottom:14px}#projectStatus .progress{display:block;margin-top:6px}
@media(max-width:700px){.heading-actions{justify-content:flex-start}}
/* Palinsesti: the three steps from a file to the screen, and what is missing in each playlist. */
.flow-steps{list-style:none;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin:0 0 16px;padding:0}
.flow-steps li{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.flow-steps li>b{flex:0 0 26px;height:26px;border-radius:50%;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);font-size:13px}
.flow-steps li.is-done>b{background:#e8f6ee;color:#1d7a4c}.flow-steps strong{display:block;font-size:14px}.flow-steps small{display:block;margin-top:3px;color:var(--text-3);font-size:12.5px;line-height:1.45}
.flow-steps .text-link{padding:0;margin-top:4px}
.playlist-row{grid-template-columns:40px minmax(0,1.3fr) minmax(0,1fr) minmax(150px,1fr) auto}.playlist-check{display:grid;gap:4px;justify-items:start}.playlist-check small{font-size:12px;line-height:1.4;color:#8a6a2a}
@media(max-width:1050px){.playlist-row{grid-template-columns:40px minmax(0,1fr) minmax(150px,1fr)}.playlist-row .hide-mobile{display:none}.playlist-actions{grid-column:2/-1;justify-content:flex-start}}
@media(max-width:700px){.playlist-row{grid-template-columns:36px 1fr}.playlist-check{grid-column:2}}
/* Builder: numbered sections (pages → zones → contents → properties) and the ready / problems chip. */
.builder-step{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:0 0 10px;font-size:14.5px;font-weight:650}
.builder-step>b{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:12px}
.builder-step small{flex-basis:100%;font-weight:400;color:var(--text-3);font-size:12.5px}h3.builder-step small{flex-basis:auto}
.builder-check{display:inline-flex;align-items:center;gap:4px;border-radius:20px;padding:5px 10px;font-size:12.5px;font-weight:650;border:0}
.builder-check.warn{background:#fff5df;color:#a56b07;cursor:pointer}.builder-check.ok{background:#e8f6ee;color:#1d7a4c}
.version-list{list-style:none;margin:8px 0 0;padding:0}.version-list li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-top:1px solid var(--line)}
.version-list li:first-child{border-top:0}.version-list b{display:block;font-size:13.5px}.version-list small{display:block;margin-top:2px;color:var(--text-3);font-size:12.5px}
/* Builder contents panel: it opens in the side column, in the place of the properties, so nothing else moves. */
.builder-drawer{height:calc(100vh - var(--builder-top) - 16px);min-height:420px;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);overflow:hidden;animation:drawer-in .18s ease-out}
.builder-drawer[hidden],.builder-props[hidden]{display:none}
@keyframes drawer-in{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}
.builder-drawer.is-dropping{outline:2px dashed var(--accent);outline-offset:-8px}
.drawer-head{display:flex;justify-content:space-between;gap:10px;padding:14px 16px 8px}.drawer-head h3{margin:0;font-size:16px}.drawer-head small{display:block;margin-top:3px;color:var(--text-3);font-size:12px;line-height:1.4}.drawer-head small b{color:var(--accent)}
.drawer-tabs{display:flex;gap:4px;margin:0 16px;padding:3px;border-radius:10px;background:#eef2f8}.drawer-tabs button{flex:1;border:0;border-radius:8px;background:none;padding:7px 8px;font-size:13px;color:#526987}.drawer-tabs button.active{background:#fff;color:var(--accent);font-weight:650;box-shadow:0 1px 3px #1f39611a}
.drawer-tools{display:grid;gap:8px;padding:12px 16px 4px}.drawer-tools .search{width:100%;min-width:0}
.drawer-chips{display:flex;flex-wrap:wrap;gap:6px}.drawer-chips button{border:1px solid var(--line);border-radius:20px;background:#fff;padding:4px 10px;font-size:12.5px;color:#526987}.drawer-chips button.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:650}
.drawer-scroll{flex:1;overflow:auto;padding:8px 16px 12px}
.drawer-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.drawer-tile{position:relative;display:grid;gap:5px;cursor:grab;min-width:0}.drawer-meta{min-width:0}.drawer-tile.is-selected .drawer-thumb{outline:2px solid var(--accent);outline-offset:2px}
.drawer-thumb{position:relative;display:block;width:100%;aspect-ratio:16/10;padding:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#eef2f8;cursor:pointer}
.drawer-thumb img,.drawer-thumb video{width:100%;height:100%;object-fit:cover;display:block;background:#0f172a}.drawer-thumb .thumb-glyph{width:100%;height:100%}
.drawer-plus{position:absolute;right:6px;bottom:6px;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:var(--accent);color:#fff;font-size:16px;opacity:0;transform:scale(.8);transition:opacity .15s,transform .15s}
.drawer-thumb:hover .drawer-plus,.drawer-thumb:focus-visible .drawer-plus,.drawer-widgets button:hover .drawer-plus{opacity:1;transform:none}
.drawer-check{position:absolute;top:6px;left:6px;display:grid;place-items:center;width:22px;height:22px;border-radius:6px;background:#ffffffe6;border:1px solid var(--line);cursor:pointer;font-size:11px;font-weight:700;color:#fff}
.drawer-check input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}.drawer-tile.is-selected .drawer-check{background:var(--accent);border-color:var(--accent)}
.drawer-meta b{display:block;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer-meta small{font-size:11.5px;color:var(--text-3)}
.drawer-drop-hint{margin:14px 0 0;text-align:center;font-size:12px;color:var(--text-3)}
.drawer-widgets{list-style:none;margin:0;padding:0;display:grid;gap:8px}.drawer-widgets button{position:relative;width:100%;display:flex;align-items:center;gap:12px;text-align:left;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#fff;cursor:pointer}
.drawer-widgets button:hover{border-color:var(--accent)}.drawer-widgets .thumb-glyph{flex:0 0 42px;height:42px;border-radius:10px}.drawer-widgets b{display:block;font-size:13.5px}.drawer-widgets small{display:block;margin-top:2px;font-size:12px;color:var(--text-3);line-height:1.4}
.drawer-widgets .drawer-plus{position:static;margin-left:auto;flex:0 0 26px}
.drawer-footer{display:flex;align-items:center;gap:8px;padding:10px 16px;border-top:1px solid var(--line);font-size:12.5px;color:var(--text-3)}.drawer-footer>span{flex:1;display:flex;align-items:center;gap:6px}
.drawer-upload{cursor:pointer}
/* Builder layout (user request of 2026-11-03): pages, the contents of the zone as a strip, then the stage with the
   problems under it and the side column (properties or contents panel). The side column stays in view and scrolls
   inside, so choosing or editing a content never moves the panels. --builder-top: below the sticky head. */
.builder{--builder-top:166px;grid-template-columns:minmax(0,1fr)}.builder>*{min-width:0}
.builder-main{grid-template-columns:minmax(0,1.55fr) minmax(320px,1fr)}
.builder-work{display:grid;gap:16px;min-width:0}
.builder-notice{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:40;width:max-content;max-width:min(560px,calc(100vw - 32px));box-shadow:0 12px 32px #172f5033}
.builder-side{position:sticky;top:var(--builder-top);display:block;min-width:0}
.builder-props{max-height:calc(100vh - var(--builder-top) - 16px);overflow:auto}
.timeline-bar{display:flex;flex-wrap:wrap;align-items:flex-start;gap:6px 16px;margin-bottom:8px}
.timeline-bar .builder-step{flex:1 1 320px;margin:0}.timeline-bar .timeline-actions{margin:0}
.timeline-page{width:150px;min-width:0;max-width:none;padding:6px;gap:5px}
.timeline-add{min-width:0;width:96px}
.timeline-thumb i{overflow:hidden}.timeline-thumb i>.thumb-text,.timeline-thumb i>.thumb-glyph{width:100%;height:100%;padding:1px;font-size:7px}.timeline-thumb .thumb-glyph b{font-size:11px}
.stage-zone-fill video{opacity:.92}
.sequence-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:10px}
.sequence-head>div:first-child{flex:1 1 260px;min-width:0}.sequence-head h3{margin:2px 0 0}.sequence-head .bulk-bar{margin:0}
.bulk-bar.is-idle{background:var(--surface-2);border-color:var(--line)}.bulk-bar.is-idle b{color:var(--text-3);font-weight:500}
.sequence-list{display:flex;gap:10px;height:164px;max-height:none;overflow-x:auto;overflow-y:hidden;padding:2px 2px 8px}
.sequence-item{position:relative;flex:0 0 168px;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto;align-content:start;gap:6px;padding:6px}
.is-readonly .sequence-item{grid-template-columns:minmax(0,1fr)}
.sequence-thumb{position:relative;width:100%;height:auto;aspect-ratio:16/9;border-radius:7px}
.sequence-thumb img,.sequence-thumb video{width:100%;height:100%;object-fit:cover;display:block}
.sequence-index{display:grid;place-items:center;position:absolute;left:10px;top:10px;min-width:22px;height:22px;padding:0 6px;border-radius:11px;background:#0f172acc;color:#fff;font-size:12px;font-weight:700}
.sequence-item>[data-select]{position:absolute;right:10px;top:10px;width:18px;height:18px;margin:0;accent-color:var(--accent)}
.sequence-copy{min-width:0}
.sequence-item.drop-before{box-shadow:-4px 0 0 var(--accent)}.sequence-item.drop-after{box-shadow:4px 0 0 var(--accent)}
.sequence-empty{height:164px;display:grid;place-content:center;gap:4px;text-align:center}
.thumb-play{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:26px;height:26px;border-radius:50%;background:#0c1d36b3;color:#fff;font-size:11px;display:grid;place-items:center;pointer-events:none}
.builder-issues{padding:10px 14px}.builder-issues summary{font-size:13px}.builder-issues ul{max-height:132px;overflow:auto;margin-top:8px;font-size:12.5px}
.required-mark{margin-left:4px;padding:1px 7px;border-radius:10px;background:#fdecea;color:#b3261e;font-size:11px;font-weight:600}
.field textarea:required:invalid{border-color:#e5786b;background:#fff8f7}
/* Libreria media (user request of 2026-11-03): the card shows the whole picture; a click on it opens the preview
   window with the file and its facts. */
.media-preview{position:relative}.media-preview img,.media-preview video{object-fit:contain}
.media-open{position:absolute;inset:0;z-index:1;border:0;padding:0;background:transparent;cursor:zoom-in}.media-open:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.media-select{z-index:2}.media-play{pointer-events:none}
.media-viewer{border:0;padding:0;width:min(1100px,calc(100% - 32px));max-height:calc(100vh - 32px);border-radius:16px;background:#0b1220;color:#e2e8f0;box-shadow:0 24px 64px rgba(0,0,0,.45);outline:none}
.media-viewer::backdrop{background:rgba(2,6,23,.7);backdrop-filter:blur(4px)}
.media-viewer-head{display:flex;align-items:center;gap:14px;padding:14px 18px}.media-viewer-head>div{flex:1;min-width:0;display:grid;gap:2px}
.media-viewer-head b{font:600 16px var(--font);color:#f8fafc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.media-viewer-head small{font-size:12.5px;color:#94a3b8}
.media-viewer .modal-close{background:#1e293b;color:#cbd5e1}
.media-viewer-stage{position:relative;display:grid;place-items:center;background:#000;margin:0 18px;border-radius:8px;overflow:hidden}
.media-viewer-stage img,.media-viewer-stage video{display:block;max-width:100%;max-height:calc(100vh - 260px);object-fit:contain}
.media-viewer-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:1;width:40px;height:40px;border:0;border-radius:50%;background:#0f172acc;color:#fff;font-size:24px;line-height:1;cursor:pointer}
.media-viewer-nav.prev{left:10px}.media-viewer-nav.next{right:10px}.media-viewer-nav:hover{background:#1e293b}
.media-viewer-facts{display:flex;flex-wrap:wrap;gap:8px 24px;margin:0;padding:14px 18px}.media-viewer-facts div{display:grid;gap:2px}
.media-viewer-facts dt{font-size:11.5px;color:#94a3b8;text-transform:uppercase;letter-spacing:.04em}.media-viewer-facts dd{margin:0;font-size:13.5px;color:#f1f5f9}
.media-viewer .media-warning{margin:0 18px 16px;font-size:13px;color:#fbbf24}
@media(max-width:1050px){.builder-side{position:static}.builder-props{max-height:none;overflow:visible}
  .builder-drawer{position:fixed;top:82px;right:16px;bottom:16px;width:min(360px,calc(100vw - 32px));height:auto;min-height:0;z-index:30;box-shadow:0 18px 50px #172f5033}}
/* Web page editor: live preview with the controller's geometry, size presets, zoom and framing. */
.web-editor{display:grid;gap:10px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}.web-editor h4{margin:0;font-size:14px}
.web-preview{position:relative;overflow:hidden;border-radius:10px;border:1px solid var(--line);background:#0b1220}
.web-preview-empty{position:absolute;inset:0;display:grid;place-items:center;color:#8fa3c2;font-size:13px;text-align:center;padding:10px}
.web-presets{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px;color:#526987}.web-presets>span{font-weight:650;margin-right:2px}
.web-zoom{display:grid;grid-template-columns:1fr 84px;gap:10px;align-items:center}.web-zoom input[type=range]{accent-color:var(--accent)}
/* Cabinet map (domain/cabinet-map.mjs): boxes numbered along the data cable, one tint per output port. */
.cabinet-figure{margin:4px 0;display:grid;gap:6px}.cabinet-figure figcaption{font-size:12.5px;color:#526987}
.cabinet-map{width:100%;max-height:340px;background:#0b1220;border-radius:10px;border:1px solid var(--line)}
.cabinet-map rect{fill:#1d3557;stroke:#8fb3ff;stroke-width:2}.cabinet-map text{fill:#fff;font-weight:700;text-anchor:middle;dominant-baseline:middle;font-family:var(--font)}
.cabinet-map .cab-small{font-weight:500;fill:#b9c9e6}.cabinet-map .cab-cable{fill:none;stroke:#ffb020;stroke-linejoin:round;opacity:.9}
.cabinet-map .cab-port-1 rect{fill:#24502f;stroke:#7fdc9a}.cabinet-map .cab-port-2 rect{fill:#5a2a2a;stroke:#ff9f9f}.cabinet-map .cab-port-3 rect{fill:#4a3a10;stroke:#f2d36b}
.fn-file{cursor:pointer}
/* Laboratorio › editor of the cabinet map (cabinet-editor-ui.mjs): empty places dashed, other ports dimmed. */
.cab-editor{border:1px solid var(--line);border-radius:12px;padding:14px;background:var(--surface-2);display:grid;gap:10px}
.cab-editor-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.cab-editor-head h2{margin:0 0 4px}
.cab-sizes,.cab-tools,.cab-wiring{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}.cab-wiring{align-items:center;font-size:13.5px}
.cab-field{display:grid;width:150px}.cab-field input{width:100%}
.cab-editor-figure .cabinet-map{max-height:460px}.cabinet-editor-map [data-cab-cell]{cursor:pointer}.cabinet-editor-map [data-cab-cell]:hover rect{stroke-width:5}
.cabinet-map .cab-empty rect{fill:transparent;stroke:#5b6f8f;stroke-dasharray:10 8}.cabinet-map .cab-empty text{fill:#5b6f8f;font-weight:400}
.cabinet-map .cab-dim{opacity:.45}.cabinet-map .cab-unwired rect{stroke:#ffb020;stroke-dasharray:6 6}
.cab-subtitle{margin:4px 0 0;font-size:14px}.cab-checks{margin:0;padding-left:20px;font-size:13.5px;display:grid;gap:4px}
.cab-checks .is-problem{color:#b42318}.cab-checks .is-warning{color:#8a5a00}
.cab-send-change{display:grid;grid-template-columns:max-content 1fr;gap:4px 12px;margin:0;font-size:13.5px}.cab-send-change dt{color:#7184a4}.cab-send-change dd{margin:0;font-weight:600}
@media (max-width:640px){.cab-field{width:calc(50% - 5px)}.cab-editor-head{flex-direction:column}}
.cabinet-editor-map .cab-cable{pointer-events:none}
.fn-file.is-disabled{opacity:.55;cursor:not-allowed}

/* Phone width (375 px): nothing wider than the screen. The sidebar keeps its icons only, so its caption goes too. */
@media (max-width:700px){
  .main-area{min-width:0}
  .workspace-label{display:none}
  .stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .stat-card{min-width:0}
  .stat-num{font-size:20px;white-space:nowrap}
  .stat-top{gap:6px;min-width:0}
  .calendar-head{flex-wrap:wrap;gap:8px}
  .device-tabs{flex-wrap:wrap}
  button{max-width:100%;white-space:normal}
  .panel-heading{flex-wrap:wrap;gap:10px}
}

/* Under 420 px: the breadcrumb keeps only its last crumb (the text node and separators are hidden by font-size 0),
   the calendar scrolls inside its card, the timeline's "add" button wraps instead of leaving the screen, and the
   stat numbers get smaller so that a word kept on one line («Da collegare») fits its card. */
@media (max-width:420px){
  .stat-num{font-size:16px}
  .breadcrumb{font-size:0}
  .breadcrumb b{font-size:13.5px}
  .calendar-week{overflow-x:auto}
  .timeline-strip{flex-wrap:wrap}
}

/* Settings › Account (owner only) and the Area selector in the top bar. */
.accounts-panel{margin-bottom:18px}
.accounts-list{display:grid;gap:12px}
.account-card{border:1px solid var(--line);border-radius:var(--radius-sm);padding:14px 16px;background:var(--surface)}
.account-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.account-head b{display:block;font-size:14px}
.account-head small{display:block;font-size:12px;color:var(--text-3);margin-top:3px}
.account-devices{display:flex;flex-wrap:wrap;gap:10px 18px;margin-top:12px}
.account-device{display:flex;gap:7px;align-items:flex-start;font-size:14px;cursor:pointer}
.account-device small{display:block;font-size:12px;color:var(--text-3)}
.account-device-row{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center}
.account-active{display:flex;gap:6px;align-items:center;font-size:13px;cursor:pointer}
.account-active-line{font-size:12px;color:var(--text-3);margin:10px 0 0}
.account-plan{margin-top:10px;font-size:14px}
.account-plan select{margin-left:6px}
.account-addons{border:1px solid var(--line);border-radius:var(--radius-sm);margin:10px 0 0;padding:8px 12px}
.account-addons legend{font-size:12px;color:var(--text-3);padding:0 4px}
.account-addon{display:flex;gap:8px;align-items:flex-start;font-size:14px;cursor:pointer}
.account-addon span{display:block}
.account-addon small{display:block;font-size:12px;color:var(--text-3)}
.area-switch{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-3);min-width:0}
.area-switch[hidden],.area-note[hidden]{display:none}
.area-switch select{height:32px;max-width:220px;border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);font:inherit;font-size:13px}
.area-switch.is-remote{padding:4px 8px;border-radius:var(--radius-sm);background:#fff4df;border:1px solid #f0d9a8}
.area-note{font-size:12px;font-weight:600;color:#8a5a00;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* On a phone the bar keeps the coloured frame and the area name in the selector; the sentence does not fit. */
@media(max-width:700px){.topbar .breadcrumb{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.top-actions{min-width:0}.area-switch{min-width:0}.area-switch label,.area-note{display:none}.area-switch select{max-width:130px}}

/* Panoramica. These rules come last on purpose: the comment opened on line 113 is never closed, so the rules above it
   (workflow, summary grid, nav icons) are not applied. */
.dashboard-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:18px;align-items:stretch}
.dashboard-summary-grid>.panel{min-width:0;width:100%;box-sizing:border-box}
@media(max-width:900px){.dashboard-summary-grid{grid-template-columns:minmax(0,1fr)}}
.overview-top{display:grid;grid-template-columns:minmax(260px,330px) minmax(0,1fr);gap:18px;align-items:start;margin-bottom:18px}
.overview-top .workflow-panel{margin-bottom:0}
.overview-top .workflow-steps{display:grid;gap:12px}
.overview-top .calendar-week{min-width:0}
@media(max-width:900px){.overview-top{grid-template-columns:minmax(0,1fr)}}
/* Attività: a table on wide screens, one labelled block per operation under 760 px (no sideways scrolling). */
.activity-table{display:grid;gap:8px;min-width:0}
.activity-row{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr) minmax(0,1.6fr) minmax(0,.8fr) minmax(0,1.2fr);gap:12px;align-items:center;padding:12px 14px;border:1px solid var(--border);border-radius:11px;background:#fff;font-size:13px;color:#4d6282;min-width:0}
.activity-row.activity-head{padding:0 14px;border:0;background:none;font-size:12px;font-weight:700;color:#8797b2}
.activity-row>span{min-width:0;overflow-wrap:anywhere}
.activity-row b{font-weight:600;color:#122745}
.activity-row small{display:block;margin-top:5px;line-height:1.5;color:#8a9ab1}
@media(max-width:760px){.activity-row.activity-head{display:none}.activity-row{grid-template-columns:minmax(0,1fr);gap:6px}.activity-row>span::before{content:attr(data-label);display:block;font-size:11px;color:#8797b2}}
