:root{--orange:#f58220;--ink:#18202a;--muted:#657080;--line:#dfe4ea;--bg:#f4f6f8;--panel:#fff;--success:#238636;--danger:#c62828}*{box-sizing:border-box}html,body{min-height:100%}body{margin:0;font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,"Noto Sans",sans-serif;color:var(--ink);background:var(--bg)}button,select,input{font:inherit}.login-body{min-height:100vh;display:grid;place-items:center;padding:24px;position:relative}.login-language{position:fixed;top:22px;right:24px}.login-language select,.language-control select{background:#fff;border:1px solid var(--line);border-radius:9px;padding:8px 10px;color:var(--ink)}.login-card{width:min(430px,100%);background:#fff;border:1px solid var(--line);border-radius:18px;padding:34px;box-shadow:0 20px 55px rgba(20,30,45,.10)}.logo,.brand,.app-brand{font-weight:800;letter-spacing:-1px}.logo{font-size:30px;margin-bottom:28px}.logo span,.brand span,.app-brand span{color:var(--orange)}h1{font-size:24px;margin:0 0 22px}label{display:block;font-size:14px;font-weight:650;margin:14px 0}input{width:100%;margin-top:7px;padding:13px 14px;border:1px solid var(--line);border-radius:10px;font-size:16px}input:focus,select:focus{outline:2px solid rgba(245,130,32,.25);border-color:var(--orange)}button{border:0;border-radius:10px;padding:11px 14px;background:var(--button-bg,var(--ink));color:var(--button-fg,#fff);font-weight:700;cursor:pointer}.login-card button{width:100%;padding:13px;font-size:16px;margin-top:10px}.forgot{display:block;text-align:center;margin-top:20px;color:var(--muted);text-decoration:none}.alert,.success{padding:12px;border-radius:9px;margin:0 0 16px;background:#fff4f1}.success{background:#eef8f0}.app-body{min-width:960px}.app-shell{min-height:100vh}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:22px;min-height:68px;padding:0 22px;background:#fff;border-bottom:1px solid var(--line);box-shadow:0 2px 9px rgba(18,28,45,.04)}.app-brand{font-size:24px;text-decoration:none;color:var(--ink);white-space:nowrap}.main-tabs{display:flex;align-items:stretch;align-self:stretch;gap:2px;overflow-x:auto;flex:1}.tab-link{position:relative;white-space:nowrap;background:transparent;color:var(--muted);border-radius:0;padding:0 12px;font-size:14px}.tab-link:hover{color:var(--ink)}.tab-link.active{color:var(--ink)}.tab-link.active:after{content:"";position:absolute;left:10px;right:10px;bottom:0;height:3px;background:var(--orange);border-radius:3px 3px 0 0}.topbar-actions{display:flex;align-items:center;gap:10px;white-space:nowrap}.logout-button{text-decoration:none;color:#fff;background:var(--ink);border-radius:9px;padding:9px 12px;font-size:14px;font-weight:700}.ws-status{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}.ws-status:before{content:"";width:8px;height:8px;border-radius:50%;background:#9aa3ad}.ws-status[data-state=online]:before{background:var(--success)}.ws-status[data-state=connecting]:before{background:var(--orange)}.ws-status[data-state=error]:before{background:var(--danger)}.page-content{padding:30px;max-width:1600px;margin:0 auto}.page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:22px}.page-header h1{font-size:28px;margin:0 0 6px}.page-header p{margin:0;color:var(--muted)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px;min-height:160px}.panel-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:16px}.panel-heading h2{margin:0;font-size:18px}.counter{font-size:13px;color:var(--muted)}.empty-state{min-height:110px;display:grid;place-items:center;color:var(--muted);text-align:center}.secondary-button{background:#fff;color:var(--ink);border:1px solid var(--line)}.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}.device-card{display:flex;align-items:center;gap:10px;padding:14px;border:1px solid var(--line);border-radius:10px;background:#fafbfc;overflow-wrap:anywhere}.device-dot{width:9px;height:9px;border-radius:50%;background:var(--success);flex:0 0 auto}.hint{margin:18px 0 0;color:var(--muted);font-size:13px}.loading{padding:40px;text-align:center;color:var(--muted)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}[dir=rtl] .login-language{right:auto;left:24px}[dir=rtl] .main-tabs{direction:rtl}@media(max-width:1150px){.ws-status{display:none}.topbar{gap:12px}.tab-link{padding:0 8px}.page-content{padding:22px}}
/* --- Player supervision --------------------------------------------------- */
.target-control select{min-width:190px;max-width:260px;background:#fff;border:1px solid var(--line);border-radius:9px;padding:8px 10px;color:var(--ink)}
.devices-page-header{align-items:center}.devices-header-actions{display:flex;gap:10px;align-items:center}.view-switch{display:flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}.view-button{display:flex;align-items:center;gap:6px;background:#fff;color:var(--muted);border-radius:0;border-right:1px solid var(--line);padding:9px 12px}.view-button:last-child{border-right:0}.view-button.active{background:var(--ink);color:#fff}.compact-panel{min-height:auto;padding:14px 16px}.device-filterbar{display:grid;grid-template-columns:minmax(150px,1fr) minmax(150px,1fr) minmax(150px,1fr) minmax(220px,1.5fr) auto;align-items:end;gap:12px;margin-bottom:14px}.device-filterbar label{margin:0;font-size:12px;color:var(--muted)}.device-filterbar select,.row-select,.compact-select select{width:100%;margin-top:6px;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}.device-filterbar input{margin-top:6px;padding:9px 10px;font-size:14px}.device-filterbar .counter{align-self:center;padding-top:18px}.device-list-panel{padding:0;overflow:hidden}.table-scroll{overflow:auto}.device-table{width:100%;border-collapse:collapse;min-width:1180px}.device-table th,.device-table td{padding:11px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;font-size:13px}.device-table th{position:sticky;top:0;background:#f9fafb;z-index:2;color:var(--muted);font-weight:700}.device-table tbody tr:hover{background:#fafbfc}.sort-button{background:transparent;color:inherit;padding:0;border-radius:0;font-size:12px;text-transform:uppercase;letter-spacing:.035em}.inline-edit{margin:0;padding:8px 9px;border-radius:7px;font-size:13px;min-width:145px;background:#fff}.row-select{margin:0;min-width:120px;font-size:13px;padding:7px 8px}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}.state-badge{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:5px 8px;background:#eef8f0;color:#176a27;font-size:12px;font-weight:700;white-space:nowrap}.state-badge i{width:7px;height:7px;border-radius:50%;background:var(--success)}.row-actions{display:flex;gap:5px;align-items:center;flex-wrap:wrap}.icon-action,.icon-button{display:inline-grid;place-items:center;width:32px;height:32px;padding:0;border-radius:8px;background:#fff;color:var(--ink);border:1px solid var(--line);font-size:17px}.icon-action:hover,.icon-button:hover{border-color:var(--orange);color:var(--orange)}.device-visual-grid{--device-zoom:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(310px * var(--device-zoom)),1fr));gap:16px}.player-card{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 4px 14px rgba(18,28,45,.035)}.player-screen{position:relative;aspect-ratio:16/9;background:#151a20;overflow:hidden}.player-screen img{width:100%;height:100%;object-fit:cover;display:block}.snapshot-placeholder{position:absolute;inset:0;display:grid;place-items:center;text-align:center;padding:20px;color:#98a2ad;background:linear-gradient(135deg,#151a20,#252d36);font-size:13px}.screen-state{position:absolute;top:10px;right:10px;border-radius:999px;padding:5px 8px;background:rgba(15,22,27,.82);color:#fff;font-size:11px;font-weight:700}.screen-state.online:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:#38c55a;margin-right:6px}.player-card-body{padding:14px}.player-card-title{display:flex;align-items:center;gap:10px;justify-content:space-between}.player-card-title .inline-edit{font-weight:750;font-size:15px}.player-card-title .mono{color:var(--muted);white-space:nowrap}.player-card dl{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0}.player-card dl div{background:#f7f8fa;border-radius:8px;padding:8px;min-width:0}.player-card dt{font-size:10px;color:var(--muted);text-transform:uppercase}.player-card dd{margin:3px 0 0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.compact-select{display:grid;grid-template-columns:82px 1fr;align-items:center;gap:8px;margin:8px 0;color:var(--muted);font-size:12px}.compact-select select{margin:0}.card-actions{margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}.player-register-bar{display:grid;grid-template-columns:minmax(260px,1fr) minmax(190px,260px) auto;gap:12px;align-items:center;margin-top:16px}.register-copy{font-size:14px}.player-register-bar input{margin:0;padding:10px 12px;font-size:14px}.player-register-bar button{white-space:nowrap;background:var(--orange)}.device-page-footer{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-top:10px}.device-page-footer .hint{margin:0}.zoom-control{display:flex;align-items:center;gap:8px;margin:0;color:var(--muted);font-size:18px}.zoom-control input{width:115px;margin:0;padding:0;accent-color:var(--orange)}.zoom-control output{font-size:11px;min-width:35px}.drawer-backdrop{position:fixed;inset:0;background:rgba(18,24,32,.32);z-index:49}.device-drawer{position:fixed;top:0;right:0;bottom:0;width:min(480px,92vw);background:#fff;z-index:50;transform:translateX(105%);transition:transform .2s ease;box-shadow:-15px 0 35px rgba(10,20,35,.12);display:flex;flex-direction:column}.device-drawer.open{transform:translateX(0)}.device-drawer header{display:flex;justify-content:space-between;align-items:flex-start;padding:22px;border-bottom:1px solid var(--line)}.device-drawer h2{margin:4px 0 0}.eyebrow{font-size:12px;color:var(--muted);font-weight:800}.brand-two{color:var(--orange)}.device-drawer-content{padding:22px;overflow:auto}.device-drawer-content h3{margin-top:0}.property-list{display:grid;gap:0;border:1px solid var(--line);border-radius:10px;overflow:hidden}.property-list div{display:grid;grid-template-columns:140px 1fr;gap:12px;padding:10px;border-bottom:1px solid var(--line)}.property-list div:last-child{border-bottom:0}.property-list dt{color:var(--muted)}.property-list dd{margin:0}.toast{position:fixed;right:24px;bottom:24px;z-index:80;background:#18202a;color:#fff;padding:12px 16px;border-radius:10px;box-shadow:0 10px 30px rgba(10,20,35,.2);opacity:0;transform:translateY(10px);pointer-events:none;transition:.18s}.toast.show{opacity:1;transform:translateY(0)}
[dir=rtl] .device-table th,[dir=rtl] .device-table td{text-align:right}[dir=rtl] .screen-state{right:auto;left:10px}[dir=rtl] .device-drawer{right:auto;left:0;transform:translateX(-105%)}[dir=rtl] .device-drawer.open{transform:translateX(0)}[dir=rtl] .toast{right:auto;left:24px}
@media(max-width:1250px){.device-filterbar{grid-template-columns:repeat(2,minmax(180px,1fr))}.device-filterbar .counter{padding-top:0}.player-register-bar{grid-template-columns:1fr 220px}.player-register-bar button{grid-column:2}}

/* Device view switch: hidden view must never be rendered. */
#deviceListView[hidden],
#deviceGridView[hidden] {
  display: none !important;
}
.state-badge.offline{background:#f2f4f7;color:#68717d}.state-badge.offline i{background:#98a2ad}.screen-state.offline:before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:#98a2ad;margin-right:6px}
/* Phase players audit + media/playlists */
.snapshot-refresh{position:absolute;right:10px;bottom:10px;width:38px;height:38px;padding:0;border-radius:50%;border:1px solid rgba(255,255,255,.4);background:rgba(0,0,0,.62);color:#fff;cursor:pointer;z-index:3;display:grid;place-items:center}.snapshot-refresh .m2s-camera{font-size:28px;line-height:1}.player-screen{position:relative}.weekday-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:16px 0}.weekday-grid label{display:flex;gap:8px;align-items:center;padding:9px;border:1px solid var(--border,#ddd);border-radius:8px}.time-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}.time-grid label,#playerPropertiesForm label{display:grid;gap:6px;margin:10px 0}.log-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.audit-list{display:grid;gap:8px}.audit-list article{border:1px solid var(--border,#ddd);border-radius:10px;padding:10px;display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:start}.audit-list article pre{grid-column:1/-1;white-space:pre-wrap;word-break:break-word;margin:0;font-size:11px;opacity:.75}.audit-list time{font-size:12px;opacity:.7}.danger-button{background:#8f1f1f!important;color:#fff!important;border-color:#8f1f1f!important}
.media-workspace{height:34vh;min-height:300px;display:grid;grid-template-rows:auto auto 1fr;overflow:hidden}.media-dropzone{border:2px dashed var(--border,#ccc);border-radius:12px;padding:14px;display:flex;align-items:center;gap:12px;justify-content:center;min-height:72px}.media-dropzone.dragover{border-color:#f58220;background:rgba(245,130,32,.08)}.media-dropzone span{opacity:.7}.media-toolbar{display:flex;justify-content:space-between;align-items:center;padding:8px 0}.media-library{--media-zoom:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(150px * var(--media-zoom)),1fr));gap:10px;overflow:auto;align-content:start;padding:4px}.media-card{border:1px solid var(--border,#ddd);border-radius:10px;padding:7px;min-width:0;background:var(--panel,#fff)}.media-thumb{height:calc(90px * var(--media-zoom));background:#111;border-radius:7px;overflow:hidden;position:relative}.media-thumb img{width:100%;height:100%;object-fit:contain}.media-thumb span{position:absolute;left:5px;top:5px;background:rgba(0,0,0,.7);color:#fff;padding:2px 5px;border-radius:4px;font-size:10px}.media-name{font-size:12px;font-weight:600;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;margin-top:6px}.media-meta{font-size:11px;opacity:.65}.media-actions{display:flex;gap:5px;margin-top:5px}.media-actions button{padding:4px 7px}.media-actions button.playing{background:#c82626;color:white}
.playlist-editor{min-height:45vh;display:grid;grid-template-columns:minmax(160px,18%) 1fr minmax(150px,16%);gap:12px;margin-top:12px}.playlist-list-pane{border-right:1px solid var(--border,#ddd);padding-right:10px;min-width:0}.pane-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.playlist-list{display:grid;gap:5px;max-height:42vh;overflow:auto}.playlist-list button{text-align:left}.playlist-list button.active{outline:2px solid #f58220}.playlist-tracks-pane{display:grid;grid-template-rows:auto 1fr 1fr;gap:10px;min-width:0}.playlist-name-row input{width:100%;font-size:18px;font-weight:650}.track{border:1px solid var(--border,#ddd);border-radius:10px;padding:8px;min-height:120px;overflow:hidden}.track header{margin-bottom:7px}.track-items{display:flex;gap:8px;overflow:auto;min-height:86px}.track-item{flex:0 0 180px;border:1px solid var(--border,#ddd);border-radius:8px;padding:6px;display:grid;grid-template-columns:48px 1fr auto;grid-template-rows:auto auto;gap:5px;align-items:center}.track-item img{width:48px;height:48px;object-fit:cover;border-radius:5px;grid-row:1/3}.track-item span{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.track-item label{font-size:10px;display:flex;gap:4px;align-items:center}.track-item input{width:55px}.track-item button{grid-column:3;grid-row:1/3}.playlist-summary{display:flex;flex-direction:column;gap:10px;border-left:1px solid var(--border,#ddd);padding-left:12px}.playlist-summary>div{display:grid;gap:4px}.playlist-summary strong{font-size:26px}.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:1000;display:grid;place-items:center}.modal-backdrop[hidden]{display:none!important}.preview-modal{background:var(--panel,#fff);width:min(1000px,92vw);height:min(760px,88vh);border-radius:14px;padding:14px;display:grid;grid-template-rows:auto 1fr auto auto;gap:10px}.preview-modal header{display:flex;justify-content:space-between;align-items:center}.preview-stage{background:#080808;display:grid;place-items:center;overflow:hidden}.preview-stage img,.preview-stage video{max-width:100%;max-height:100%;object-fit:contain}.audio-preview{font-size:28px;color:#fff}.preview-counters,.preview-controls{display:flex;gap:18px;justify-content:center;align-items:center}.preview-controls input{flex:1}.playlist-editor-template{margin-top:16px}.player-card img{width:100%;height:100%;object-fit:contain}
@media(max-width:900px){.playlist-editor{grid-template-columns:1fr}.playlist-list-pane,.playlist-summary{border:0;padding:0}.media-workspace{height:auto}.weekday-grid{grid-template-columns:1fr}}
.device-visual-grid[hidden],.device-list-panel[hidden]{display:none!important}
.floating-media-player{position:fixed;right:24px;bottom:24px;z-index:1200;width:min(520px,60vw);max-height:45vh;background:#000;border-radius:10px;box-shadow:0 14px 40px rgba(0,0,0,.4)}.quick-media-preview{position:fixed;inset:0;z-index:1200;background:rgba(0,0,0,.8);display:grid;place-items:center}.quick-media-preview img{max-width:90vw;max-height:88vh}.quick-media-preview button{position:absolute;right:24px;top:24px;font-size:24px}.media-actions button.playing{background:#c82626!important;color:#fff!important}

/* Compact layered thumbnails: blurred cover background + proportional foreground. */
.media-card{position:relative;padding:0;overflow:hidden;background:#101318;border-color:rgba(0,0,0,.16);box-shadow:0 3px 12px rgba(16,24,40,.12);transition:transform .15s ease,box-shadow .15s ease}.media-card:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(16,24,40,.18)}
.media-thumb{height:calc(118px * var(--media-zoom));border-radius:9px;background:#111;isolation:isolate}.media-thumb-bg,.media-thumb-main{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.media-thumb-bg{object-fit:cover;transform:scale(2);filter:blur(15px) brightness(.62) saturate(.9);z-index:0}.media-thumb-main{object-fit:contain;z-index:1;filter:drop-shadow(0 2px 5px rgba(0,0,0,.28))}.media-thumb:after{content:"";position:absolute;inset:0;z-index:2;background:linear-gradient(to bottom,rgba(0,0,0,.08) 30%,rgba(0,0,0,.16) 53%,rgba(0,0,0,.82) 100%);pointer-events:none}.media-type-badge{position:absolute!important;left:6px!important;top:6px!important;z-index:4!important;background:rgba(0,0,0,.52)!important;backdrop-filter:blur(5px);box-shadow:0 1px 4px rgba(0,0,0,.28);text-shadow:0 1px 2px #000}
.media-overlay{position:absolute;z-index:5;left:0;right:0;bottom:0;padding:20px 7px 7px;color:#fff;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name meta" "actions actions";gap:3px 8px;align-items:end;text-shadow:0 1px 3px rgba(0,0,0,.98),0 0 7px rgba(0,0,0,.72)}.media-name{grid-area:name;margin:0;font-size:11px;font-weight:700;min-width:0;color:#fff}.media-meta{grid-area:meta;font-size:10px;opacity:.95;color:#fff}.media-actions{grid-area:actions;margin:1px 0 0;gap:4px;justify-content:flex-end}.media-actions button{min-width:27px;height:25px;padding:2px 6px;border:1px solid rgba(255,255,255,.28);border-radius:6px;background:rgba(0,0,0,.46);color:#fff;backdrop-filter:blur(5px);box-shadow:0 1px 4px rgba(0,0,0,.2);text-shadow:0 1px 2px #000}.media-actions button:hover{background:rgba(0,0,0,.72)}.media-actions button.playing{background:#c82626!important;border-color:#e46262!important}

.track-items{min-height:100px}.track-item{position:relative;isolation:isolate;flex:0 0 190px;height:96px;padding:0;display:block;overflow:hidden;background:#111;border-color:rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(16,24,40,.12)}.track-thumb-bg,.track-thumb-main{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.track-thumb-bg{object-fit:cover;transform:scale(2);filter:blur(14px) brightness(.6) saturate(.9);z-index:0}.track-thumb-main{object-fit:contain;z-index:1;filter:drop-shadow(0 2px 4px rgba(0,0,0,.25))}.track-item:after{content:"";position:absolute;inset:0;z-index:2;background:linear-gradient(to bottom,rgba(0,0,0,.05) 22%,rgba(0,0,0,.2) 53%,rgba(0,0,0,.86) 100%);pointer-events:none}.track-overlay{position:absolute;inset:0;z-index:3;color:#fff;padding:7px;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:1fr auto;grid-template-areas:"title remove" "duration duration";align-items:end;gap:4px;text-shadow:0 1px 3px #000,0 0 7px rgba(0,0,0,.75)}.track-title{grid-area:title;align-self:end;font-size:11px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.track-duration{grid-area:duration;font-size:9px;display:flex;align-items:center;justify-content:flex-end;gap:5px;margin:0}.track-duration input{width:54px;height:23px;padding:2px 5px;border:1px solid rgba(255,255,255,.35);border-radius:5px;background:rgba(0,0,0,.46);color:#fff;text-align:right;box-shadow:0 1px 3px rgba(0,0,0,.2)}.track-duration input[readonly]{opacity:.86}.track-remove{grid-area:remove;align-self:start;justify-self:end;width:25px;height:25px;padding:0;border:1px solid rgba(255,255,255,.3);border-radius:50%;background:rgba(0,0,0,.52);color:#fff;font-size:17px;line-height:1;box-shadow:0 1px 4px rgba(0,0,0,.28)}.track-remove:hover{background:rgba(143,31,31,.88)}
\n/* --- v7 compact media / bottom playlist / global footer ------------------ */\n.app-shell{min-height:100vh;display:flex;flex-direction:column}.page-content{flex:1;width:100%}.app-footer{flex:0 0 auto;text-align:center;color:#4c535c;font-size:12px;font-weight:650;line-height:1;padding:7px 16px 9px}.app-footer .brand-two{color:var(--orange);font-weight:850}.media-actions [data-media-action="delete"]{width:23px;height:23px;min-width:23px;padding:0;border-radius:6px;font-size:12px;line-height:1}.track-item{flex-basis:190px;height:108px}.track-thumb-main{inset:0;width:100%;height:100%;object-fit:contain;object-position:center center}.track-overlay{padding:6px;display:block}.track-title{display:none!important}.track-duration{position:absolute;left:50%;bottom:6px;transform:translateX(-50%);margin:0;display:block}.track-duration>span{display:none}.track-duration input{width:76px;height:25px;margin:0;padding:2px 6px;text-align:center;font-size:10px;font-variant-numeric:tabular-nums;border:1px solid rgba(255,255,255,.42);background:rgba(0,0,0,.5);color:#fff;text-shadow:0 1px 3px #000}.track-remove{position:absolute;right:6px;top:6px;width:22px;height:22px;font-size:14px}.playlist-summary strong{font-variant-numeric:tabular-nums}[data-page="playlist"] .page-content,[data-page="templates"] .page-content{min-height:calc(100vh - 68px - 28px);display:flex;flex-direction:column;padding-bottom:10px}[data-page="playlist"] .playlist-editor,[data-page="templates"] .playlist-editor{margin-top:auto;width:100%}[data-page="playlist"] .media-workspace{flex:0 0 auto}\n
/* --- v8 compact tracks, transitions, media filters and streams ---------- */
.page-content{padding-top:18px}.page-header{margin-bottom:14px}
.media-toolbar-left{display:flex;align-items:center;gap:10px;min-width:0}.media-filter-label{display:flex;align-items:center;gap:6px;margin:0;font-size:12px;color:var(--muted)}.media-filter-label select{margin:0;padding:6px 28px 6px 9px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}#addFlowButton{padding:7px 10px;font-size:12px}
.track{display:grid;grid-template-columns:32px minmax(0,1fr);align-items:stretch;gap:6px;padding:6px;min-height:118px}.track-kind-icon{display:grid;place-items:center;width:32px;min-height:100%;border-radius:7px;background:#eef1f4;color:#505966;font-size:18px;font-weight:800;user-select:none}.track-items{min-width:0;min-height:104px;align-items:stretch}.track-item{height:104px;margin:0}.track-item img.track-thumb-bg,.track-item img.track-thumb-main{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;grid-row:auto!important;border-radius:0!important}.track-item img.track-thumb-bg{object-fit:cover!important;object-position:center!important}.track-item img.track-thumb-main{object-fit:contain!important;object-position:50% 50%!important}
.playlist-summary .playlist-setting{margin:1px 0 0;font-size:11px;color:var(--muted)}.playlist-summary .playlist-setting span{display:block;margin-bottom:4px}.playlist-summary .playlist-setting select,.playlist-summary .playlist-setting input{width:100%;margin:0;padding:7px 8px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);font-size:12px}.playlist-summary .playlist-setting input{font-variant-numeric:tabular-nums}
.flow-modal{width:min(520px,92vw);background:#fff;border-radius:14px;padding:16px;box-shadow:0 24px 70px rgba(0,0,0,.28)}.flow-modal header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.flow-modal h2{margin:0;font-size:20px}.flow-modal form{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}.flow-modal label{margin:0;font-size:12px}.flow-modal label:first-child,.flow-modal label:nth-child(3),.flow-modal button[type=submit]{grid-column:1/-1}.flow-modal input,.flow-modal select{width:100%;margin-top:5px;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:#fff}.flow-preview{display:grid;place-items:center;gap:10px;color:#fff}.flow-preview img{width:min(320px,70%);max-height:55vh}.flow-preview strong{text-shadow:0 2px 8px #000}
@media(max-width:1100px){.media-toolbar-left{flex-wrap:wrap}.playlist-editor{grid-template-columns:minmax(150px,18%) 1fr minmax(150px,18%)}}

/* --- v9 exclusive direct playback -------------------------------------- */
.direct-play-button{display:flex;align-items:center;justify-content:center;gap:7px}.direct-play-button.playing{background:#c82626!important;border-color:#b51f1f!important;color:#fff!important}.direct-play-icon{font-size:12px;line-height:1}.media-actions [data-media-action="play"].playing{background:#c82626!important;border-color:#e46262!important;color:#fff!important}

/* --- v11 responsive + touch drag & drop -------------------------------- */
.media-card,.track-item{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.media-card{touch-action:pan-y}.track-item{touch-action:pan-y}
.touch-drag-source{opacity:.42!important;outline:2px solid var(--orange)!important;outline-offset:-2px}
.touch-drag-ghost{position:fixed!important;left:0!important;top:0!important;z-index:2500!important;margin:0!important;pointer-events:none!important;opacity:.9!important;transform-origin:0 0!important;box-shadow:0 18px 42px rgba(0,0,0,.3)!important;outline:2px solid var(--orange)!important;overflow:hidden!important}
.track-items.touch-drop-target,.track-item.touch-drop-target{outline:3px solid var(--orange)!important;outline-offset:-3px;background-color:rgba(245,130,32,.08)!important}
.track-items{scroll-behavior:smooth;overscroll-behavior-x:contain}

@media(max-width:900px){
  .app-body{min-width:0!important;width:100%;overflow-x:hidden}
  .app-shell{width:100%;min-width:0}
  .topbar{position:sticky;min-height:auto;padding:8px 10px;gap:8px;display:grid;grid-template-columns:auto 1fr;grid-template-areas:"brand actions" "tabs tabs"}
  .app-brand{grid-area:brand;font-size:20px}
  .topbar-actions{grid-area:actions;justify-self:end;gap:6px;min-width:0}
  .topbar-actions .target-control select{min-width:0;max-width:42vw;width:42vw;padding:7px 8px;font-size:12px}
  .language-control select{padding:7px 8px;max-width:72px}
  .logout-button{padding:7px 9px;font-size:12px}
  .main-tabs{grid-area:tabs;width:100%;min-height:42px;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}
  .tab-link{min-height:42px;padding:0 11px;font-size:12px;flex:0 0 auto}
  .page-content{width:100%;min-width:0;padding:10px!important;overflow:visible}
  .page-header{margin-bottom:8px;gap:8px}.page-header h1{font-size:21px;margin-bottom:3px}.page-header p{font-size:12px}
  .panel{padding:10px;border-radius:11px;min-width:0}
  .media-workspace{height:auto;min-height:0;max-height:none;display:block;overflow:visible}
  .media-dropzone{min-height:54px;padding:8px;gap:7px;flex-wrap:wrap;font-size:12px}.media-dropzone span{display:none}.media-dropzone button{padding:8px 10px;font-size:12px}
  .media-toolbar{align-items:flex-start;gap:7px;flex-wrap:wrap;padding:6px 0}.media-toolbar-left{width:100%;gap:6px}.media-filter-label{flex:1;min-width:130px}.media-filter-label select{width:100%;padding-top:7px;padding-bottom:7px}#addFlowButton{min-height:34px}
  .media-toolbar .zoom-control{width:100%;justify-content:flex-end}.media-toolbar .zoom-control input{width:min(180px,55vw)}
  .media-library{display:flex;overflow-x:auto;overflow-y:hidden;gap:8px;padding:3px 2px 8px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
  .media-card{flex:0 0 clamp(132px,42vw,180px);scroll-snap-align:start}.media-thumb{height:110px!important}
  [data-page="playlist"] .page-content,[data-page="templates"] .page-content{min-height:auto;display:block;padding-bottom:8px}
  [data-page="playlist"] .playlist-editor,[data-page="templates"] .playlist-editor{margin-top:8px}
  .playlist-editor{display:grid;grid-template-columns:1fr!important;gap:8px;min-height:0;padding:10px}
  .playlist-list-pane{border:0;padding:0;min-width:0}.pane-title{margin-bottom:5px}.playlist-list{display:flex;gap:5px;max-height:none;overflow-x:auto;overflow-y:hidden;padding-bottom:3px}.playlist-list button{flex:0 0 auto;white-space:nowrap;padding:8px 10px;font-size:12px}
  .playlist-tracks-pane{gap:7px;min-width:0}.playlist-name-row input{margin:0;padding:9px 10px;font-size:15px}
  .track{grid-template-columns:28px minmax(0,1fr);gap:4px;min-height:106px;padding:4px}.track-kind-icon{width:28px;font-size:16px}.track-items{min-height:96px;gap:6px;overflow-x:auto;overflow-y:hidden;padding:0 2px 3px;-webkit-overflow-scrolling:touch}.track-item{flex:0 0 clamp(142px,46vw,184px);height:96px}
  .track-remove{width:28px;height:28px;right:5px;top:5px}.track-duration input{height:29px;width:82px;font-size:11px}
  .playlist-summary{border:0;padding:7px 0 0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.playlist-summary>div:first-child{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between}.playlist-summary strong{font-size:21px}.playlist-summary button{min-height:42px;padding:9px 8px;font-size:12px}.playlist-summary .playlist-setting{margin:0}.playlist-summary .playlist-setting select,.playlist-summary .playlist-setting input{min-height:39px}
  .preview-modal{width:96vw;height:88dvh;padding:9px}.preview-counters{gap:7px;flex-wrap:wrap;font-size:11px}.preview-controls{gap:6px}.preview-controls button{padding:9px 10px}.preview-controls input{min-width:80px}
  .flow-modal{width:96vw;max-height:90dvh;overflow:auto}.flow-modal form{grid-template-columns:1fr}
  .flow-modal label:first-child,.flow-modal label:nth-child(3),.flow-modal button[type=submit]{grid-column:auto}
  .app-footer{padding:6px 8px;font-size:11px}
}

@media(max-width:520px){
  .topbar-actions .language-control{display:none}
  .topbar-actions .target-control select{width:50vw;max-width:50vw}
  .media-card{flex-basis:44vw}.media-thumb{height:104px!important}
  .playlist-summary{grid-template-columns:1fr 1fr}
}
.touch-drag-handle{display:none;position:absolute;z-index:8;place-items:center;width:30px;height:30px;border-radius:8px;background:rgba(0,0,0,.56);color:#fff;font-size:19px;line-height:1;text-shadow:0 1px 3px #000;box-shadow:0 1px 4px rgba(0,0,0,.25);touch-action:none;-webkit-user-select:none;user-select:none}
.media-thumb>.touch-drag-handle{right:5px;top:5px}.track-overlay>.touch-drag-handle{left:5px;top:5px}
@media(pointer:coarse){.touch-drag-handle{display:grid}.media-card,.track-item{touch-action:auto}}
/* Template manager / composer */
.template-page-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.page-header-actions{display:flex;gap:8px;flex-wrap:wrap}.template-library-panel{min-height:220px}.template-toolbar{display:flex;align-items:end;justify-content:space-between;gap:12px;margin-bottom:12px}.template-toolbar label{display:grid;gap:4px;min-width:min(360px,100%)}.template-library{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}.template-card{min-width:0;border:1px solid var(--border,#334155);border-radius:12px;overflow:hidden;background:var(--panel,#111827);box-shadow:0 7px 24px rgba(0,0,0,.18)}.template-card-visual{position:relative;aspect-ratio:16/9;background:#05070a;overflow:hidden}.template-card-visual>img{width:100%;height:100%;object-fit:contain;display:block}.template-card-visual:before{content:"";position:absolute;inset:-30%;background:inherit;filter:blur(18px);opacity:.4}.template-code{position:absolute;left:7px;top:7px;padding:3px 6px;border-radius:6px;background:rgba(0,0,0,.6);font-size:11px;color:#fff}.template-card-actions{position:absolute;right:6px;bottom:6px;display:flex;gap:4px}.template-card-actions button{width:30px;height:30px;padding:0;border-radius:8px;background:rgba(0,0,0,.68);color:#fff;border:1px solid rgba(255,255,255,.18);backdrop-filter:blur(5px)}.template-card-meta{display:grid;gap:3px;padding:9px 10px}.template-card-meta strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.template-card-meta span{font-size:11px;opacity:.72}.template-composer{min-height:calc(100vh - 145px)}.composer-topbar{display:flex;gap:9px;align-items:end;flex-wrap:wrap;margin-bottom:8px;padding:9px}.composer-topbar label{display:grid;gap:3px;font-size:11px}.composer-topbar input,.composer-topbar select{min-height:34px}.composer-name{min-width:180px;flex:1}.composer-size-fields{display:flex;align-items:center;gap:4px}.composer-size-fields input{width:82px}.composer-history{display:flex;gap:4px}.composer-workspace{display:grid;grid-template-columns:190px minmax(0,1fr) 260px;gap:8px;min-height:620px}.composer-tools,.composer-properties,.composer-center{margin:0;min-width:0}.composer-tools{display:flex;flex-direction:column;gap:8px;overflow:auto;max-height:calc(100vh - 210px)}.tool-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:5px}.tool-grid button{min-height:58px;padding:5px;display:grid;place-items:center;gap:1px}.tool-grid button span{font-size:20px}.tool-grid button small{font-size:9px;line-height:1.05}.align-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.composer-tools label{display:grid;gap:3px;font-size:11px}.toggle-row{display:flex!important;align-items:center;gap:7px}.composer-center{display:grid;grid-template-rows:minmax(0,1fr) auto;overflow:hidden}.composer-viewport{position:relative;overflow:auto;min-height:560px;background:#070a0f;padding:28px 20px 20px 28px}.composer-viewport.hide-rulers .ruler{display:none}.template-stage-wrap{min-width:max-content;min-height:max-content;padding:15px;display:grid;place-items:center}.template-stage{position:relative;overflow:hidden;box-shadow:0 0 0 1px #475569,0 18px 50px rgba(0,0,0,.45);transform-origin:top left;touch-action:none}.template-stage.show-grid{background-image:linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 1px);background-size:25px 25px}.ruler{position:absolute;z-index:5;background:#1e293b;color:#94a3b8;font-size:8px;pointer-events:none}.ruler-top{left:28px;right:0;top:0;height:22px}.ruler-top span{position:absolute;top:4px;transform:translateX(-50%)}.ruler-left{left:0;top:28px;bottom:0;width:22px}.ruler-left span{position:absolute;left:2px;transform:translateY(-50%) rotate(-90deg)}.composer-zoom{display:flex;gap:6px;align-items:center;justify-content:center;padding:6px}.composer-zoom input{width:min(360px,60%)}.template-object{position:absolute;box-sizing:border-box;cursor:move;user-select:none;touch-action:none;overflow:hidden}.template-object.selected{outline:2px solid #fb923c;outline-offset:1px}.template-object-content{width:100%;height:100%;overflow:hidden}.template-object-content>img,.composer-video,.composer-video>img{width:100%;height:100%;display:block}.template-object-content>img,.composer-video>img{object-fit:contain}.composer-video{position:relative}.composer-video>span{position:absolute;inset:0;display:grid;place-items:center;font-size:36px;text-shadow:0 2px 8px #000}.object-resize-handle{position:absolute;right:-1px;bottom:-1px;width:14px;height:14px;border-radius:50%;background:#fb923c;border:2px solid #fff;cursor:nwse-resize}.composer-marquee{white-space:nowrap;overflow:hidden}.composer-properties{overflow:auto;max-height:calc(100vh - 210px)}.properties-tabs{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-bottom:8px}.properties-tabs button.active{outline:2px solid #fb923c}.properties-panel label{display:grid;gap:3px;font-size:10px;margin-bottom:6px}.properties-panel input,.properties-panel select,.properties-panel textarea{width:100%}.quad-fields{display:grid;grid-template-columns:repeat(2,1fr);gap:5px}.triple-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.rich-actions{display:flex;gap:4px;margin:6px 0}.rich-actions button{min-width:34px}.layer-row{display:grid;grid-template-columns:1fr 30px 30px;gap:3px;margin-bottom:4px}.layer-row>button:first-child{text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layer-row.selected>button:first-child{outline:2px solid #fb923c}.template-media-modal{width:min(950px,94vw);max-height:90vh;overflow:auto}.template-media-modal header{display:flex;justify-content:space-between;align-items:center}.template-media-upload{margin-bottom:10px}.template-media-library{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.template-media-card{padding:0;overflow:hidden;display:grid;text-align:left}.template-media-card img{width:100%;height:100px;object-fit:contain;background:#05070a}.template-media-card span,.template-media-card small{padding:3px 7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.template-media-card small{opacity:.7}.empty-state.compact{padding:20px 8px}.playlist-editor-template[hidden]{display:none!important}
@media(max-width:1050px){.composer-workspace{grid-template-columns:150px minmax(0,1fr) 220px}.composer-tools{padding:8px}.composer-properties{padding:8px}}
@media(max-width:820px){.template-page-header{display:grid}.composer-workspace{grid-template-columns:1fr}.composer-tools,.composer-properties{max-height:none}.composer-tools{order:2}.composer-center{order:1}.composer-properties{order:3}.composer-viewport{min-height:420px}.tool-grid{grid-template-columns:repeat(5,minmax(72px,1fr));overflow-x:auto}.composer-topbar{align-items:stretch}.composer-topbar label{min-width:120px}.template-library{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}}
@media(max-width:520px){.template-library{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.template-card-actions button{width:34px;height:34px}.template-card-actions{gap:2px}.composer-viewport{min-height:340px;padding:24px 8px 8px 24px}.composer-workspace{min-height:0}.tool-grid{grid-template-columns:repeat(5,76px)}.composer-size-fields input{width:70px}.template-media-library{grid-template-columns:repeat(2,1fr)}}

/* v149: active direct playback indicator beside the copyright */
.app-footer{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:10px;text-align:initial}
.app-footer-brand{grid-column:2;text-align:center}
.app-footer-balance{grid-column:3}
.direct-playback-indicator{grid-column:1;justify-self:start;display:flex;align-items:center;gap:7px;max-width:min(48vw,560px);min-height:26px;padding:4px 10px;border:1px solid rgba(200,38,38,.35);border-radius:999px;background:rgba(200,38,38,.08);color:#a61717;font:inherit;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.direct-playback-indicator[hidden]{display:none}
.direct-playback-indicator::before{content:"";flex:0 0 8px;width:8px;height:8px;border-radius:50%;background:#d62424;box-shadow:0 0 0 3px rgba(214,36,36,.15)}
.direct-playback-indicator:hover{background:rgba(200,38,38,.16);border-color:rgba(200,38,38,.62)}
@media(max-width:820px){.app-footer{grid-template-columns:minmax(0,1fr) auto}.app-footer-balance{display:none}.direct-playback-indicator{max-width:52vw;padding:4px 7px}}

/* v150: rulers share the exact origin and dimensions of the template stage. */
#templateComposerView .ruler-top{right:auto;overflow:visible}
#templateComposerView .ruler-left{bottom:auto;overflow:visible}
#templateComposerView .ruler-top span::after{content:"";position:absolute;left:50%;top:13px;width:1px;height:7px;background:#64748b}
#templateComposerView .ruler-left span::after{content:"";position:absolute;left:13px;top:50%;width:7px;height:1px;background:#64748b}

/* v151: graphical media and playlist bands in statistics. */
.statistics-resource-cell{display:grid;gap:7px;min-width:230px}.statistics-resource-cell>span{font-weight:650}
.statistics-resource-strip{display:flex;width:min(360px,34vw);height:54px;overflow:hidden;border-radius:8px;background:#080b10;border:1px solid var(--line);box-shadow:0 3px 10px rgba(15,23,42,.12)}
.statistics-preview-thumb.audio::after,.statistics-preview-thumb.audio.missing::after{content:'♫';position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-size:22px;background:linear-gradient(135deg,#263246,#101722)}
@media(max-width:760px){.statistics-resource-strip{width:260px}.statistics-resource-cell{min-width:230px}}
.template-card-actions button.playing{background:#c82626!important;border-color:#e46262!important;color:#fff!important}
.template-preview-frame{width:100%;height:100%;border:0;background:#000}
/* v13: use the available workspace and collection browser */
.page-content{max-width:none;width:100%;padding:14px 16px 18px}.page-header{margin-bottom:10px}.panel{padding:14px}.template-library-panel{min-height:calc(100dvh - 360px)}.template-library{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:9px}.template-composer{min-height:calc(100dvh - 100px)}.composer-workspace{grid-template-columns:170px minmax(0,1fr) 240px;min-height:calc(100dvh - 190px)}.composer-tools,.composer-properties{max-height:calc(100dvh - 190px)}.composer-viewport{min-height:calc(100dvh - 240px);padding:24px 12px 12px 24px}.composer-topbar{margin-bottom:5px}.template-collection-modal{width:min(1500px,98vw);height:min(900px,94dvh);background:#fff;border-radius:14px;padding:12px;box-shadow:0 24px 70px rgba(0,0,0,.28);display:grid;grid-template-rows:auto minmax(0,1fr)}.template-collection-modal>header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:2px 4px 10px}.template-collection-modal h2{margin:0}.template-collection-modal header p{margin:3px 0 0;color:var(--muted);font-size:12px}.collection-layout{display:grid;grid-template-columns:190px minmax(0,1fr) 330px;gap:8px;min-height:0}.collection-categories,.collection-browser,.collection-properties{border:1px solid var(--line);border-radius:10px;min-height:0;overflow:auto;background:#fafbfc}.collection-categories{padding:6px}.collection-category{width:100%;text-align:left;margin-bottom:4px;background:#fff;color:var(--ink);border:1px solid var(--line);padding:10px}.collection-category.active{background:var(--ink);color:#fff;border-color:var(--ink)}.collection-browser{padding:8px}.collection-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(165px,1fr));gap:8px}.collection-card{display:grid;padding:0;background:#111827;border:1px solid #263244;overflow:hidden;min-height:130px}.collection-card img{width:100%;aspect-ratio:16/9;object-fit:contain;background:#05070a}.collection-card span{padding:7px 8px;text-align:left;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collection-properties{padding:10px}.collection-preview{aspect-ratio:16/9;background:#000;border-radius:8px;overflow:hidden;margin-bottom:8px}.collection-preview iframe{width:100%;height:100%;border:0;background:#000}.collection-properties h3{margin:5px 0 9px}.collection-properties label{display:grid;gap:4px;margin:7px 0;font-size:11px}.collection-properties input,.collection-properties textarea{width:100%;margin:0}.collection-properties #templateCollectionUse{width:100%;margin-top:8px}.template-stage{background-color:#111827}
@media(max-width:1050px){.collection-layout{grid-template-columns:150px minmax(0,1fr) 280px}.composer-workspace{grid-template-columns:145px minmax(0,1fr) 210px}}
@media(max-width:820px){.page-content{padding:8px}.collection-layout{grid-template-columns:1fr;overflow:auto}.collection-categories{overflow-x:auto}.collection-categories>div{display:flex;gap:5px}.collection-category{width:auto;white-space:nowrap;margin:0}.collection-browser{min-height:280px}.collection-properties{min-height:320px}.template-collection-modal{width:98vw;height:96dvh}.composer-viewport{min-height:55dvh}}

/* Planning v14 */
.planning-page-header{margin-bottom:6px}.planning-shell{display:grid;gap:8px;min-height:calc(100vh - 150px)}.planning-top{display:grid;grid-template-columns:minmax(190px,20vh) minmax(0,1fr);gap:8px;min-height:20vh}.planning-mini-calendar{aspect-ratio:1/1;padding:8px;min-height:190px;align-self:start}.mini-calendar-head{display:grid;grid-template-columns:30px 1fr 30px;align-items:center;text-align:center;gap:4px}.mini-calendar-head button{padding:3px}.mini-calendar-week,.mini-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.mini-calendar-week{font-size:9px;opacity:.65;text-align:center;margin:5px 0}.mini-calendar-grid button{aspect-ratio:1/1;padding:0;min-height:0;font-size:10px;border:0;background:transparent;border-radius:6px}.mini-calendar-grid button:hover{background:rgba(148,163,184,.14)}.mini-calendar-grid button.other{opacity:.3}.mini-calendar-grid button.today{box-shadow:inset 0 0 0 1px #f58220}.mini-calendar-grid button.selected{background:#f58220;color:#fff}.planning-main{padding:8px;min-width:0;overflow:hidden}.planning-toolbar{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}.planning-nav,.planning-views{display:flex;align-items:center;gap:5px}.planning-nav button,.planning-views button{padding:5px 9px}.planning-views button.active{background:#f58220;color:#fff}.planning-timeline{display:grid;grid-template-columns:repeat(var(--planning-days,7),minmax(0,1fr));gap:5px;min-height:calc(20vh - 45px);overflow:auto}.planning-day{border:1px solid var(--border,#334155);border-radius:8px;min-width:115px;overflow:hidden;background:rgba(15,23,42,.16)}.planning-day>header{display:flex;justify-content:space-between;padding:5px 7px;font-size:11px;background:rgba(148,163,184,.08)}.planning-day-cards{display:grid;gap:5px;padding:5px;align-content:start}.planning-day-empty{display:grid;place-items:center;min-height:75px;opacity:.35}.planning-schedule-card{width:100%;padding:5px;text-align:left;border:1px solid var(--border,#334155);border-radius:7px;background:var(--panel,#111827);overflow:hidden}.planning-schedule-card.selected{outline:2px solid #f58220}.planning-card-head{display:flex;justify-content:space-between;gap:5px;align-items:center;font-size:9px;margin-bottom:4px}.planning-card-head strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.planning-card-head span{white-space:nowrap;opacity:.7}.planning-card-strip{display:flex;height:46px;background:#05070a;border-radius:5px;overflow:hidden}.planning-card-strip img{min-width:0;flex:1 1 0;height:100%;object-fit:cover}.planning-no-thumb{display:grid;place-items:center;width:100%;font-size:22px}.planning-target-empty{display:grid;place-items:center;height:100%;min-height:120px;text-align:center;opacity:.7}.planning-template-band{padding:7px 8px;min-width:0}.planning-section-title{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:5px;font-size:11px}.planning-section-title span{opacity:.6}.planning-template-list{display:flex;gap:6px;overflow-x:auto;max-width:100%;padding-bottom:2px}.planning-template-card{flex:0 0 150px;height:78px;position:relative;border:1px solid var(--border,#334155);border-radius:7px;overflow:hidden;background:#05070a}.planning-template-card img{width:100%;height:100%;object-fit:cover;opacity:.82}.planning-template-card>div{position:absolute;inset:auto 0 0 0;padding:12px 5px 4px;background:linear-gradient(transparent,rgba(0,0,0,.88));color:#fff;text-shadow:0 1px 3px #000;display:grid}.planning-template-card strong{font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.planning-template-card small{font-size:8px;opacity:.8}.planning-editor{padding:8px}.planning-editor-grid{display:grid;grid-template-columns:minmax(180px,1.2fr) auto repeat(2,minmax(180px,1fr));gap:7px;align-items:end}.planning-editor-grid label{display:grid;gap:3px;font-size:10px}.planning-editor-grid input,.planning-editor-grid select{width:100%}.planning-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-top:7px}.planning-weekdays label{display:flex;align-items:center;gap:4px;border:1px solid var(--border,#334155);border-radius:6px;padding:5px;font-size:9px;min-width:0}.planning-weekdays span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.planning-actions{display:flex;align-items:center;gap:7px;margin-top:7px}.planning-actions #planningStatus{font-size:11px;opacity:.8}.planning-actions #planningStatus:not(:empty){padding-left:5px}.planning-template-band+.planning-editor{margin-top:0}
@media(max-width:800px){.planning-top{grid-template-columns:1fr}.planning-mini-calendar{width:min(100%,300px);min-height:0}.planning-timeline{grid-template-columns:repeat(var(--planning-days,7),minmax(145px,1fr))}.planning-editor-grid{grid-template-columns:1fr 1fr}.planning-editor-grid label:first-child{grid-column:1/-1}.planning-weekdays{grid-template-columns:repeat(2,1fr)}.planning-section-title{align-items:flex-start;flex-direction:column}.planning-template-card{flex-basis:130px}.planning-shell{min-height:0}}
@media(max-width:480px){.planning-editor-grid{grid-template-columns:1fr}.planning-weekdays{grid-template-columns:1fr 1fr}.planning-actions{flex-wrap:wrap}}

/* Template composer UX fixes v15 */
.composer-workspace{grid-template-columns:180px minmax(0,1fr) clamp(320px,25vw,460px)}
.composer-properties{min-width:320px}
.composer-viewport{overflow:hidden;overscroll-behavior:none;touch-action:none;padding:30px 14px 14px 30px}
.template-stage-wrap{width:100%;height:100%;min-width:0;min-height:0;display:flex;align-items:center;justify-content:center;padding:8px;overflow:hidden}
.template-stage{flex:0 0 auto}
.ruler-top{left:30px;right:14px;top:4px;height:22px;border-bottom:1px solid #475569;overflow:visible}
.ruler-left{left:4px;top:30px;bottom:14px;width:22px;border-right:1px solid #475569;overflow:visible}
.ruler span{white-space:nowrap}.ruler-top span:first-child{transform:none}.ruler-top span:last-child{transform:translateX(-100%)}
.ruler-left span:first-child{transform:rotate(-90deg) translateX(-100%);transform-origin:left top}.ruler-left span:last-child{transform:translateY(-100%) rotate(-90deg)}
.ruler-guide-x,.ruler-guide-y{position:absolute;z-index:7;pointer-events:none;background:#fb923c;opacity:.85}.ruler-guide-x{top:28px;bottom:0;width:1px}.ruler-guide-y{left:28px;right:0;height:1px}
.rtf-editor-wrap{display:grid;gap:6px;margin-bottom:8px}.rtf-toolbar{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.rtf-toolbar button{min-width:30px;height:30px;padding:3px 7px}.rtf-toolbar select{width:auto;min-width:72px;height:30px}.rtf-toolbar input[type=color]{width:34px;height:30px;padding:2px}
.rtf-editor{min-height:150px;max-height:32vh;overflow:auto;border:1px solid var(--line);border-radius:7px;background:#fff;color:#111;padding:9px;line-height:1.25;user-select:text;touch-action:auto}
.property-section-hidden{display:none!important}
@media(max-width:1100px){.composer-workspace{grid-template-columns:150px minmax(0,1fr) clamp(290px,31vw,380px)}}
@media(max-width:820px){.composer-workspace{grid-template-columns:1fr}.composer-properties{min-width:0}.composer-viewport{min-height:52dvh}.rtf-editor{max-height:240px}}

/* v16 planning / montage timeline */
.planning-page-header{margin-bottom:3px}
.planning-shell{gap:6px;min-height:calc(100vh - 132px)}
.planning-top{grid-template-columns:minmax(180px,20vh) minmax(0,1fr);gap:6px;align-items:start}
.planning-mini-calendar{aspect-ratio:1/1;padding:7px;background:#fff;color:#111}
.mini-calendar-head button{color:#111;background:transparent;border-color:#d1d5db}
.mini-calendar-week{color:#4b5563;opacity:1}
.mini-calendar-grid button{color:#111!important;background:transparent!important;font-weight:600}
.mini-calendar-grid button.other{color:#9ca3af!important;opacity:.55}
.mini-calendar-grid button.planned{color:#7c3aed!important;font-weight:800}
.mini-calendar-grid button.selected{box-shadow:inset 0 0 0 2px #7c3aed}
.mini-calendar-grid button.today{background:#f58220!important;color:#fff!important;box-shadow:none}
.mini-calendar-grid button.today.selected{box-shadow:inset 0 0 0 2px #111}
.planning-main{padding:7px;overflow:hidden}
.planning-view-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.planning-zoom{display:flex;align-items:center;gap:6px;font-size:10px;white-space:nowrap}
.planning-zoom input{width:120px}.planning-zoom output{min-width:24px;text-align:right;font-variant-numeric:tabular-nums}
.planning-timeline-editor{height:min(58vh,720px);min-height:360px;overflow:auto;border:1px solid var(--border,#334155);border-radius:8px;background:rgba(2,6,23,.34)}
.planning-timeline-grid{display:grid;grid-template-columns:54px repeat(var(--planning-days),minmax(150px,1fr));grid-template-rows:38px auto;min-width:calc(54px + var(--planning-days) * 150px);position:relative}
.planning-time-header{grid-column:1;grid-row:1;position:sticky;top:0;left:0;z-index:12;background:var(--panel,#111827);border-right:1px solid var(--border,#334155);border-bottom:1px solid var(--border,#334155)}
.planning-day-header{position:sticky;top:0;z-index:11;background:var(--panel,#111827);border-right:1px solid var(--border,#334155);border-bottom:1px solid var(--border,#334155);display:flex;align-items:center;justify-content:space-between;padding:0 8px;font-size:11px}
.planning-time-axis{grid-column:1;grid-row:2;position:sticky;left:0;z-index:10;background:var(--panel,#111827);border-right:1px solid var(--border,#334155)}
.planning-hour-label{position:absolute;right:7px;transform:translateY(-50%);font-size:9px;color:#cbd5e1;font-variant-numeric:tabular-nums;white-space:nowrap}
.planning-hour-label:first-child{transform:none}.planning-hour-label:last-child{transform:translateY(-100%)}
.planning-day-track{grid-row:2;position:relative;border-right:1px solid var(--border,#334155);background:rgba(15,23,42,.18);overflow:hidden}
.planning-hour-line,.planning-half-line{position:absolute;left:0;right:0;height:1px;pointer-events:none}.planning-hour-line{background:rgba(148,163,184,.28)}.planning-half-line{background:rgba(148,163,184,.10)}
.planning-film-band{position:absolute;left:4px;right:4px;min-height:18px;padding:0;border:0;border-radius:3px;overflow:hidden;background:#111;z-index:3;box-shadow:0 2px 7px rgba(0,0,0,.45);text-align:left}
.planning-film-band:hover{z-index:5;outline:2px solid rgba(245,130,32,.75)}.planning-film-band.selected{z-index:6;outline:3px solid #f58220}
.film-edge{position:absolute;top:0;bottom:0;width:14px;background-color:#050505;z-index:4;background-image:radial-gradient(circle at center,#cbd5e1 0 2px,transparent 2.5px);background-size:10px 14px;background-position:center 3px}
.film-edge-left{left:0}.film-edge-right{right:0}
.film-content{position:absolute;inset:0 14px;background:#1f2937;overflow:hidden}
.film-frames{position:absolute;inset:0 0 0 34px;display:grid;grid-auto-rows:54px;align-content:start;overflow:hidden;background:#020617}
.film-frames img{width:100%;height:54px;object-fit:cover;display:block;border-bottom:1px solid #111}.film-frames>span{height:54px;display:grid;place-items:center;color:#fff}
.film-names{position:absolute;left:0;top:0;bottom:0;width:34px;z-index:2;background:rgba(0,0,0,.78);display:flex;flex-direction:column;overflow:hidden;align-items:center}
.film-names span{writing-mode:vertical-rl;transform:rotate(180deg);min-height:120px;max-height:120px;padding:6px 0;color:#fff;font-size:8px;font-weight:700;text-shadow:0 1px 2px #000;overflow:hidden}
.film-times{position:absolute;inset:0;z-index:6;pointer-events:none;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end;padding:2px 3px;color:#fff;font-size:8px;text-shadow:0 1px 3px #000}.film-times b{background:rgba(0,0,0,.62);padding:1px 3px;border-radius:3px}
.planning-target-empty{grid-column:1/-1;min-height:340px}
.planning-playlist-browser{padding:7px;display:grid;grid-template-columns:minmax(280px,38%) minmax(0,1fr);gap:8px;min-height:185px;max-height:300px;overflow:hidden}
.planning-playlist-library-wrap{min-width:0;display:flex;flex-direction:column;overflow:hidden}.planning-section-title{margin-bottom:4px}
.planning-playlist-library{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:5px;overflow:auto;align-content:start;padding-right:2px}
.planning-playlist-tile{min-width:0;padding:4px;background:var(--panel,#111827);border:1px solid var(--border,#334155);border-radius:7px;text-align:left;color:inherit;overflow:hidden}.planning-playlist-tile.selected{outline:2px solid #f58220}
.planning-playlist-tile-strip{height:48px;display:flex;overflow:hidden;border-radius:4px;background:#05070a;margin-bottom:3px}.planning-playlist-tile-strip img{flex:1 1 0;min-width:0;height:100%;object-fit:cover}.planning-playlist-tile-strip span{display:grid;place-items:center;width:100%}
.planning-playlist-tile strong,.planning-playlist-tile small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.planning-playlist-tile strong{font-size:10px}.planning-playlist-tile small{font-size:8px;opacity:.7}
.planning-playlist-inspector{min-width:0;border:1px solid var(--border,#334155);border-radius:8px;padding:7px;display:flex;flex-direction:column;overflow:hidden}.planning-playlist-inspector>header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.planning-playlist-inspector>header div{display:grid;min-width:0}.planning-playlist-inspector>header strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.planning-playlist-inspector>header small{opacity:.7;font-size:9px}
.planning-playlist-inspector-strip{flex:1;min-height:90px;display:flex;gap:3px;overflow:auto;background:#05070a;border-radius:6px;padding:4px}.planning-playlist-inspector-strip img{height:100%;min-width:90px;max-width:160px;object-fit:cover;border-radius:4px}.planning-playlist-inspector-strip .planning-no-thumb{width:100%}
.planning-editor{padding:7px}.planning-selected-row{display:flex;align-items:center;gap:8px;margin-bottom:6px}.planning-selected-row>span{font-size:10px;opacity:.7}.planning-selected-row>strong{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.planning-editor-grid{grid-template-columns:repeat(2,minmax(220px,1fr))}
@media(max-width:900px){.planning-top{grid-template-columns:1fr}.planning-mini-calendar{width:min(100%,280px)}.planning-playlist-browser{grid-template-columns:1fr;max-height:none}.planning-playlist-library{max-height:220px}.planning-playlist-inspector{min-height:170px}.planning-timeline-editor{height:55vh}}
@media(max-width:600px){.planning-view-controls{width:100%;justify-content:space-between}.planning-zoom input{width:90px}.planning-editor-grid{grid-template-columns:1fr}.planning-playlist-library{grid-template-columns:repeat(2,minmax(0,1fr))}.planning-timeline-grid{grid-template-columns:48px repeat(var(--planning-days),minmax(145px,1fr))}.planning-weekdays{grid-template-columns:repeat(2,1fr)}}

/* v17 compact planning editor + persistent target status */
.target-control{display:flex;align-items:center;gap:6px}.target-player-led{width:11px;height:11px;min-width:11px;padding:0;border-radius:50%;border:1px solid rgba(255,255,255,.45);box-shadow:0 0 0 2px rgba(255,255,255,.06);background:#64748b;cursor:pointer}.target-player-led[data-state="online"]{background:#22c55e;box-shadow:0 0 8px rgba(34,197,94,.75)}.target-player-led[data-state="offline"]{background:#ef4444;box-shadow:0 0 5px rgba(239,68,68,.5)}
.planning-edit-line{display:grid;grid-template-columns:minmax(220px,280px) minmax(220px,280px) minmax(410px,1fr);gap:8px;align-items:end}.planning-date-field{display:grid;gap:3px;font-size:10px}.planning-weekdays{display:flex!important;grid-template-columns:none!important;gap:4px!important;margin:0!important;align-items:center;flex-wrap:nowrap;min-width:0}.planning-weekdays label{display:inline-flex!important;align-items:center;gap:3px!important;border:0!important;padding:3px 4px!important;font-size:10px!important;white-space:nowrap;min-width:auto!important}.planning-weekdays input{margin:0}.planning-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:7px}.planning-actions #planningStatus{flex:1;min-width:0}.planning-action-buttons{display:flex;gap:7px;margin-left:auto}.planning-action-buttons button{min-width:92px}
@media(max-width:1100px){.planning-edit-line{grid-template-columns:1fr 1fr}.planning-weekdays{grid-column:1/-1;justify-content:flex-start;overflow-x:auto;padding-bottom:2px}}@media(max-width:650px){.planning-edit-line{grid-template-columns:1fr}.planning-weekdays{grid-column:auto}.planning-actions{align-items:flex-end}.planning-action-buttons{width:auto}.planning-action-buttons button{min-width:78px}}

/* v17 contextual template properties */
.composer-properties .property-section{display:grid;gap:7px;padding:8px 0;border-bottom:1px solid rgba(148,163,184,.14)}.composer-properties .property-section:last-child{border-bottom:0}.composer-properties .property-section-title{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;opacity:.65;margin-bottom:1px}.composer-properties .property-section[hidden]{display:none!important}.composer-properties .property-row[hidden]{display:none!important}
.composer-properties [hidden]{display:none!important}
.player-focus-row{outline:2px solid #f58220;outline-offset:-2px;animation:m2sFocusPulse 1.1s ease-in-out 2}@keyframes m2sFocusPulse{50%{box-shadow:inset 0 0 0 999px rgba(245,130,32,.08)}}

/* v18 — users/accounts management */
.user-admin-header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.row-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.row-actions button{padding:7px 9px;white-space:nowrap}.protected-badge{font-size:12px;vertical-align:middle}.user-edit-modal{width:min(720px,94vw);max-height:88dvh;overflow:auto;background:#fff;color:var(--ink);border-radius:14px;padding:14px;box-shadow:0 24px 70px rgba(0,0,0,.3)}.user-edit-modal>header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.user-edit-modal h2{margin:0}.user-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}.user-form-grid label{display:grid;gap:5px}.user-form-grid input,.user-form-grid select{width:100%;min-height:40px}.user-form-grid .span-2{grid-column:1/-1}.user-form-grid small{color:var(--muted);font-size:11px}.user-role-fieldset{grid-column:1/-1;border:1px solid var(--line);border-radius:10px;padding:10px}.role-choice-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:6px}.role-choice-list label{display:flex;align-items:center;gap:7px;padding:7px;border:1px solid var(--line);border-radius:8px}.role-choice-list input{width:auto;min-height:auto}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}.device-table button:disabled{opacity:.4;cursor:not-allowed}.account-create-modal{width:min(780px,96vw)}
@media(max-width:700px){.user-admin-header{align-items:stretch;flex-direction:column}.user-admin-header .page-header-actions button{width:100%}.user-form-grid{grid-template-columns:1fr}.user-form-grid .span-2,.user-role-fieldset{grid-column:auto}.row-actions{min-width:220px}}

/* v19 planning polish: stable targets, calendar containment, lighter timeline, film resize */
.planning-mini-calendar{overflow:hidden}
.mini-calendar-grid{min-height:0;overflow:hidden;grid-auto-rows:minmax(0,1fr)}
.mini-calendar-grid .mini-calendar-empty{display:block;min-width:0;min-height:0;aspect-ratio:1/1}
.planning-timeline-editor{background:#e8edf3;border-color:#c5ced8}
.planning-time-header,.planning-day-header{background:#dce3eb;color:#1f2937;border-color:#b8c2ce}
.planning-time-axis{background:#e1e7ee;border-color:#b8c2ce}
.planning-day-track{background:#f4f6f8;border-color:#c5ced8}
.planning-hour-label{color:#334155;font-weight:700;font-size:9px;text-shadow:0 1px 0 rgba(255,255,255,.8)}
.planning-hour-line{background:rgba(71,85,105,.34)}
.planning-half-line{background:rgba(100,116,139,.16)}
.film-edge{width:22px;background-image:radial-gradient(circle at center,#d7dee7 0 4px,transparent 4.5px);background-size:18px 24px;background-position:center 5px}
.film-content{inset:0 22px;background:#303a47}
.planning-resize-handle{position:absolute;left:22px;right:22px;height:10px;z-index:12;cursor:ns-resize;touch-action:none;background:transparent}
.planning-resize-handle:after{content:"";position:absolute;left:50%;top:50%;width:36px;height:3px;border-radius:2px;background:rgba(255,255,255,.88);box-shadow:0 1px 2px rgba(0,0,0,.65);transform:translate(-50%,-50%);opacity:.55}
.planning-resize-handle:hover:after,.planning-film-band.resizing .planning-resize-handle:after{opacity:1;background:#f58220}
.planning-resize-start{top:0}.planning-resize-end{bottom:0}
.planning-film-band.resizing{z-index:20;outline:2px solid #f58220;cursor:ns-resize}
@media(pointer:coarse){.planning-resize-handle{height:18px}.planning-resize-handle:after{height:4px;width:44px;opacity:.82}}

.zone-select-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.zone-manager{margin:8px 0 14px;padding:10px;border:1px solid var(--line);border-radius:10px;background:rgba(0,0,0,.025)}.zone-manager-list{display:grid;gap:7px}.zone-row,.zone-add-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:7px;align-items:center}.zone-add-row{grid-template-columns:minmax(0,1fr) auto;margin-top:9px}.zone-id{font-size:11px;color:var(--muted);min-width:34px}.zone-row input,.zone-add-row input{min-width:0;width:100%}@media(max-width:620px){.zone-select-row{grid-template-columns:1fr}.zone-row{grid-template-columns:auto minmax(0,1fr)}.zone-row button{grid-column:1/-1}.zone-add-row{grid-template-columns:1fr}}
/* V21 zone alert states */
.alerts-panel{min-height:0}.alerts-table{width:100%;border-collapse:separate;border-spacing:0}.alerts-table th,.alerts-table td{padding:12px 14px;border-bottom:1px solid var(--line);text-align:center}.alerts-table th:first-child,.alerts-table td:first-child{text-align:left;width:40%}.alerts-table td:first-child small{display:block;color:var(--muted);margin-top:3px}.alert-state-choice{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:142px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--muted);cursor:pointer;font-weight:700}.alert-state-choice input{width:auto;margin:0}.alert-state-choice.selected.normal{border-color:#2b7a46;background:#eef8f1;color:#1d6235}.alert-state-choice.selected.evacuation{border-color:#d97706;background:#fff6e8;color:#9a4c00}.alert-state-choice.selected.confinement{border-color:#6d28d9;background:#f4efff;color:#5420aa}.alert-state-choice:has(input:focus-visible){outline:2px solid rgba(245,130,32,.3);outline-offset:2px}@media(max-width:760px){.alerts-table th,.alerts-table td{padding:8px}.alert-state-choice{min-width:112px;padding:9px 8px}.alerts-table th:first-child,.alerts-table td:first-child{min-width:160px}}

/* V22 user access editor */
.user-access-modal{width:min(960px,96vw);max-width:none}.user-editor-tabs{display:flex!important;gap:4px;padding:0 18px;border-bottom:1px solid var(--line);overflow-x:auto}.user-editor-tabs button{border:0;background:transparent;padding:12px 14px;border-bottom:3px solid transparent;white-space:nowrap;cursor:pointer}.user-editor-tabs button.active{border-bottom-color:var(--accent);font-weight:700}.user-editor-tabs button.disabled{opacity:.45}.user-tab-panel{display:none;padding:18px;min-height:320px}.user-tab-panel.active{display:block}.user-access-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}.user-access-toolbar strong{margin-right:auto}.user-check-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.user-check-grid label,.user-rights-grid label{display:flex;gap:10px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--panel)}.user-check-grid small{display:block;color:var(--muted);font-size:11px}.user-rights-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}.user-backoffice-rights{margin-top:20px}.user-level-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.user-level-cards label{display:flex;gap:12px;border:1px solid var(--line);border-radius:12px;padding:18px;cursor:pointer}.user-level-cards small{display:block;color:var(--muted);margin-top:5px}.backoffice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.backoffice-card{display:flex;justify-content:space-between;align-items:center;padding:22px;border:1px solid var(--line);border-radius:12px;text-decoration:none;color:inherit;background:var(--panel)}
@media(max-width:680px){.user-level-cards{grid-template-columns:1fr}.user-tab-panel{padding:12px}.user-access-modal{width:98vw}}

/* V23 user preferences and scoped administrators */
.admin-scope-section{padding:14px 18px;border-top:1px solid var(--line);max-height:44vh;overflow:auto}.admin-scope-section h3{margin:12px 0 8px}.preferences-button{font-size:18px}.theme-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:10px;padding:18px}.theme-choice{border:1px solid var(--line);border-radius:12px;padding:16px;cursor:pointer;display:flex;gap:9px;align-items:center;background:var(--panel)}.theme-choice:has(input:checked){outline:2px solid var(--accent)}
:root[data-theme=dark]{--bg:#17191c;--panel:#24272b;--ink:#f2f3f5;--muted:#a8adb4;--line:#3a3e44;--orange:#f28c28;--button-bg:#4a5058;--button-fg:#fff}
:root[data-theme=light]{--bg:#f5f6f8;--panel:#fff;--ink:#25272a;--muted:#72777f;--line:#dfe2e6;--orange:#f28c28}
:root[data-theme=gray]{--bg:#e4e6e8;--panel:#f5f5f5;--ink:#303234;--muted:#696d72;--line:#c9cdd1;--orange:#666d75}
:root[data-theme=warm]{--bg:#f8efe5;--panel:#fff8f0;--ink:#4a3325;--muted:#8c6851;--line:#e5c8ad;--orange:#d66b2c}
:root[data-theme=cool]{--bg:#edf4f5;--panel:#f8fcfc;--ink:#233b40;--muted:#628087;--line:#c5dadd;--orange:#318b99}
:root[data-theme=blue]{--bg:#eaf1f9;--panel:#f8fbff;--ink:#20364f;--muted:#607895;--line:#c4d5e9;--orange:#3478bd}
:root[data-theme=green]{--bg:#edf5ed;--panel:#f9fcf8;--ink:#29432d;--muted:#66806a;--line:#c9ddc9;--orange:#438b50}
:root[data-theme=red]{--bg:#f8eeee;--panel:#fffafa;--ink:#4f2929;--muted:#8b6262;--line:#e5c8c8;--orange:#b84444}

html[data-theme] body,html[data-theme] .app-body{color:var(--ink);background:var(--bg)}html[data-theme] .topbar,html[data-theme] .panel,html[data-theme] .user-edit-modal,html[data-theme] .device-drawer,html[data-theme] .secondary-button,html[data-theme] .backoffice-card,html[data-theme] .user-check-grid label,html[data-theme] .user-rights-grid label,html[data-theme] .user-level-cards label{background:var(--panel);color:var(--ink);border-color:var(--line)}html[data-theme] select,html[data-theme] input{background:var(--panel);color:var(--ink);border-color:var(--line)}html[data-theme] .tab-link,html[data-theme] .app-brand{color:var(--ink)}html[data-theme] .tab-link.active:after{background:var(--orange)}

/* V27 - explicit user editor navigation and zone manager */
.user-editor-intro{margin:0 18px 10px;padding:10px 12px;border-radius:9px;background:color-mix(in srgb,var(--orange) 9%,var(--panel));border:1px solid color-mix(in srgb,var(--orange) 28%,var(--line));font-size:13px;color:var(--ink)}
.user-editor-tabs{position:sticky;top:-14px;z-index:5;background:var(--panel);border-top:1px solid var(--line);box-shadow:0 5px 12px rgba(0,0,0,.04)}
.user-editor-tabs button{display:inline-flex;align-items:center;gap:7px;color:var(--ink)!important;min-height:48px;font-size:13px}
.user-editor-tabs .tab-step{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--line);font-size:11px;font-weight:800}
.user-editor-tabs button.active{color:var(--orange)!important;background:color-mix(in srgb,var(--orange) 7%,transparent)}
.user-editor-tabs button.active .tab-step{background:var(--orange);color:white}
.user-tab-panel{background:var(--panel)}
.zone-manager{display:block;margin-top:10px}.zone-manager[hidden]{display:none!important}.zone-manager-list:empty:before{content:'—';color:var(--muted)}
.zone-row,.zone-add-row{background:var(--panel);border-radius:8px;padding:6px}.zone-add-row{border-top:1px solid var(--line);padding-top:10px}
/* V32 statistics */
.statistics-panel{display:grid;gap:16px}.statistics-filters{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr)) auto;gap:12px;align-items:end}.statistics-filters label{display:grid;gap:6px}.statistics-filter-actions{display:flex;gap:8px;align-items:end;flex-wrap:wrap}.statistics-summary{display:flex;gap:16px;align-items:center;color:var(--muted);font-size:13px}.statistics-table th[data-sort]{cursor:pointer;user-select:none;white-space:nowrap}.statistics-table th[data-sort]::after{content:'↕';opacity:.32;margin-left:6px}.statistics-table th[data-dir="asc"]::after{content:'↑';opacity:1}.statistics-table th[data-dir="desc"]::after{content:'↓';opacity:1}.statistics-table td.numeric{text-align:right;font-variant-numeric:tabular-nums}.statistics-table td{max-width:380px;white-space:normal;overflow-wrap:anywhere}@media(max-width:1100px){.statistics-filters{grid-template-columns:repeat(2,minmax(160px,1fr))}.statistics-filter-actions{grid-column:1/-1}}@media(max-width:650px){.statistics-filters{grid-template-columns:1fr}.statistics-filter-actions{grid-column:auto}}
.statistics-playlist-cell{display:grid;gap:7px;min-width:230px}.statistics-playlist-cell>span{font-weight:650}.statistics-playlist-strip{display:flex;width:min(360px,34vw);height:54px;overflow:hidden;border-radius:8px;background:#080b10;border:1px solid var(--line);box-shadow:0 3px 10px rgba(15,23,42,.12)}.statistics-preview-thumb{position:relative;flex:1 1 0;min-width:38px;height:100%;overflow:hidden;border-right:1px solid rgba(255,255,255,.18);background:linear-gradient(135deg,#202834,#0b1118)}.statistics-preview-thumb:last-child{border-right:0}.statistics-preview-thumb img{width:100%;height:100%;display:block;object-fit:cover}.statistics-preview-thumb.video::after{content:'▶';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#0009;color:#fff;font-size:10px}.statistics-preview-thumb.template::after{content:'T';position:absolute;right:4px;bottom:4px;padding:2px 4px;border-radius:4px;background:#f58220;color:#fff;font:700 9px/1 sans-serif}.statistics-preview-thumb.missing::after{content:'•';position:absolute;inset:0;display:grid;place-items:center;color:#94a3b8;font-size:22px}@media(max-width:760px){.statistics-playlist-strip{width:260px}}

/* V33 local player registration */
.player-register-ip{display:grid;gap:5px;min-width:220px}.player-register-ip>span{font-size:.78rem;font-weight:700;opacity:.72}.player-register-ip input{width:100%;box-sizing:border-box}

.player-background-section{margin-top:18px;padding-top:16px;border-top:1px solid var(--border)}
.player-background-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.player-background-actions{display:flex;gap:8px;flex-wrap:wrap}
.player-background-picker{margin-top:12px}
.player-background-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;max-height:320px;overflow:auto}
.player-background-item{display:flex;flex-direction:column;gap:6px;align-items:stretch;padding:6px;border:1px solid var(--border);border-radius:10px;background:var(--panel);cursor:pointer;text-align:left}
.player-background-item img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:6px;background:#111}
.player-background-item span{font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.player-background-item:hover{border-color:var(--accent)}

/* V40 dark-theme contrast */
:root[data-theme=dark] .secondary-button,
:root[data-theme=dark] .icon-action,
:root[data-theme=dark] .icon-button,
:root[data-theme=dark] .view-button,
:root[data-theme=dark] .playlist-list button,
:root[data-theme=dark] .collection-category,
:root[data-theme=dark] .theme-choice{
  background:#30343a;
  color:#f7f8fa;
  border-color:#555b64;
}
:root[data-theme=dark] .secondary-button:hover,
:root[data-theme=dark] .icon-action:hover,
:root[data-theme=dark] .icon-button:hover{
  background:#3b4047;
  color:#fff;
}
:root[data-theme=dark] .playlist-list button.active,
:root[data-theme=dark] .view-button.active,
:root[data-theme=dark] .collection-category.active{
  background:var(--orange);
  color:#16181b;
  border-color:var(--orange);
}

/* V49 WebSocket network supervision */
.network-panel{display:grid;gap:14px}.network-filters{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:10px}.network-filters label,.network-email-panel form>label{display:grid;gap:6px}.network-table td,.network-table th{white-space:nowrap}.network-table td:nth-child(3){max-width:270px;overflow:hidden;text-overflow:ellipsis}.network-row.unknown{background:color-mix(in srgb,#d97706 8%,var(--panel))}.network-row.blocked{background:color-mix(in srgb,#b91c1c 10%,var(--panel))}.network-actions{display:flex;gap:6px}.status-badge{display:inline-flex;padding:5px 8px;border-radius:999px;font-size:12px;font-weight:800;background:var(--line)}.status-badge.approved{background:#eaf7ee;color:#196637}.status-badge.unapproved{background:#fff4df;color:#875100}.status-badge.unknown{background:#fff0d9;color:#9a4c00}.status-badge.blocked{background:#fde8e8;color:#9b1c1c}.network-email-panel{margin-top:16px}.network-email-panel form{display:grid;gap:12px;max-width:850px}.network-email-panel textarea{width:100%;box-sizing:border-box;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:9px}.network-email-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:8px}.network-email-options label,.switch-row{display:flex!important;align-items:center;gap:8px}@media(max-width:850px){.network-filters{grid-template-columns:repeat(2,1fr)}}@media(max-width:520px){.network-filters{grid-template-columns:1fr}}

/* V51 live WebSocket audit */
.network-audit-overlay{position:fixed;inset:0;z-index:1200;background:rgba(0,0,0,.56);display:grid;place-items:center;padding:22px}.network-audit-overlay[hidden]{display:none!important}.network-audit-window{width:min(1180px,96vw);height:min(820px,92vh);background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:14px;box-shadow:0 24px 80px rgba(0,0,0,.35);display:grid;grid-template-rows:auto auto 1fr;overflow:hidden}.network-audit-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;padding:16px 18px;border-bottom:1px solid var(--line)}.network-audit-head h2{margin:0 0 5px}.network-audit-head p{margin:0}.network-audit-tools{display:flex;gap:8px}.network-audit-summary{display:flex;gap:20px;align-items:center;padding:10px 18px;border-bottom:1px solid var(--line);font-size:13px}.network-audit-frames{overflow:auto;padding:12px;background:color-mix(in srgb,var(--bg) 80%,#000 20%);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.network-audit-frame{margin:0 0 10px;border:1px solid var(--line);border-radius:9px;overflow:hidden;background:var(--panel)}.network-audit-frame.in{border-left:4px solid #2878c8}.network-audit-frame.out{border-left:4px solid #cf7a19}.network-audit-frame-head{padding:6px 9px;font-size:11px;font-weight:800;background:color-mix(in srgb,var(--line) 42%,transparent)}.network-audit-frame pre{margin:0;padding:10px;white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px;line-height:1.45;max-height:430px;overflow:auto}.network-actions{flex-wrap:wrap}@media(max-width:720px){.network-audit-overlay{padding:0}.network-audit-window{width:100vw;height:100vh;border-radius:0}.network-audit-head{flex-direction:column}.network-audit-summary{flex-wrap:wrap}}

/* v53 copy helpers + prominent live audit */
.copy-field{display:inline-flex;align-items:center;gap:6px;max-width:100%}.copy-value{overflow:hidden;text-overflow:ellipsis}.copy-button{display:inline-grid;place-items:center;flex:0 0 auto;width:25px;height:25px;padding:0;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--muted);font-size:14px;line-height:1;cursor:pointer}.copy-button:hover{border-color:var(--orange);color:var(--orange)}.property-list .copy-field{justify-content:space-between;width:100%}.audit-live-button{font-weight:800;white-space:nowrap;border-color:color-mix(in srgb,var(--orange) 55%,var(--line));color:var(--orange)}.audit-live-button:hover{background:color-mix(in srgb,var(--orange) 10%,var(--panel))}

/* --- v64 media library: fixed cards + vertical scroll + upload progress --- */
.media-workspace{height:420px;min-height:360px;max-height:52vh;grid-template-rows:auto auto minmax(0,1fr)}
.media-library{overflow-y:auto!important;overflow-x:hidden!important;align-content:start;grid-auto-rows:176px;padding:5px 7px 10px 4px;scrollbar-gutter:stable}
.media-card{height:176px;min-height:176px;max-height:176px}
.media-thumb{height:174px!important;min-height:174px!important;max-height:174px!important}
.media-thumb-main{padding:4px 4px 46px}
.media-overlay{min-height:54px;padding:18px 8px 7px}
.media-actions button{height:27px;min-width:29px}
.media-upload-backdrop{position:fixed;inset:0;z-index:1800;background:rgba(10,14,20,.55);display:grid;place-items:center;padding:20px}.media-upload-backdrop[hidden]{display:none!important}.media-upload-progress{width:min(540px,92vw);max-height:min(620px,86vh);display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:14px;padding:18px;background:var(--panel,#fff);color:var(--ink);border:1px solid var(--line);border-radius:16px;box-shadow:0 24px 80px rgba(0,0,0,.3)}.media-upload-progress header h2{margin:0 0 4px;font-size:19px}.media-upload-progress header p{margin:0;color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.media-upload-overall-head,.media-upload-file-head,.media-upload-footer{display:flex;align-items:center;justify-content:space-between;gap:10px}.media-upload-overall-head{font-size:12px;margin-bottom:6px}.media-progress-track{height:9px;background:#e6e9ed;border-radius:999px;overflow:hidden}.media-progress-track>span{display:block;width:0;height:100%;background:var(--orange);border-radius:inherit;transition:width .12s linear}.media-upload-files{overflow-y:auto;display:grid;gap:8px;padding-right:4px}.media-upload-file{border:1px solid var(--line);border-radius:10px;padding:9px;background:rgba(128,128,128,.04)}.media-upload-file.active{border-color:rgba(245,130,32,.6)}.media-upload-file.done{border-color:rgba(35,134,54,.38)}.media-upload-file.failed{border-color:rgba(198,40,40,.5)}.media-upload-file-head span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:700}.media-upload-file-head strong{font-size:11px}.media-upload-file .media-progress-track{height:6px;margin-top:6px}.media-upload-file small{display:block;margin-top:5px;color:var(--muted)}.media-upload-file.done .media-progress-track>span{background:var(--success)}.media-upload-file.failed .media-progress-track>span{background:var(--danger)}.media-upload-footer{font-size:12px;color:var(--muted)}.media-upload-footer button{flex:0 0 auto}.media-upload-footer button:disabled{opacity:.45;cursor:not-allowed}
@media(max-width:900px){.media-workspace{height:420px;min-height:360px;max-height:none}.media-library{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(150px * var(--media-zoom)),1fr));overflow-y:auto!important;overflow-x:hidden!important;scroll-snap-type:none}.media-card{flex:none;height:176px}.media-thumb{height:174px!important}}
/* --- v65 stream URL control ------------------------------------------- */
.flow-url-control{grid-column:1/-1;margin-top:6px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--panel-soft,#f7f8fa);color:var(--text,#1f2937)}
.flow-url-control>strong{display:block;margin-bottom:8px}
.flow-url-control dl{display:grid;grid-template-columns:1fr 1fr;gap:5px 12px;margin:0 0 10px}
.flow-url-control dl div{display:grid;grid-template-columns:110px minmax(0,1fr);gap:6px;font-size:12px}
.flow-url-control dt{font-weight:700;color:var(--muted,#6b7280)}
.flow-url-control dd{margin:0;overflow-wrap:anywhere}
.flow-url-result{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center;padding-top:9px;border-top:1px solid var(--line)}
.flow-url-result span{font-size:12px;font-weight:700}
.flow-url-result code{display:block;padding:8px 10px;border-radius:7px;background:rgba(0,0,0,.07);overflow-wrap:anywhere;white-space:normal}
@media(max-width:720px){.flow-url-control dl{grid-template-columns:1fr}.flow-url-result{grid-template-columns:1fr}.flow-url-result .secondary-button{justify-self:start}}

/* --- v66 media rotation and icon filters ------------------------------- */
.media-filter-buttons{display:flex;align-items:center;gap:5px}.media-filter-button{display:inline-grid;place-items:center;width:34px;height:32px;padding:0;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--muted);font-size:16px;font-weight:800;line-height:1;transition:background .15s,border-color .15s,color .15s,box-shadow .15s}.media-filter-button:hover{border-color:var(--orange);color:var(--orange)}.media-filter-button.active,.media-filter-button[aria-pressed="true"]{background:var(--orange);border-color:var(--orange);color:#fff;box-shadow:0 2px 8px rgba(245,130,32,.24)}.media-filter-button[data-media-filter="all"] span{font-size:20px;line-height:1}
.media-filter-button:not(.active):not([aria-pressed="true"]) > span{transform:translateY(2px)}
.media-filter-button:not(.active):not([aria-pressed="true"])[data-media-filter="flow"] > span{transform:translateY(3px)}
.media-filter-button.active > span,.media-filter-button[aria-pressed="true"] > span{transform:translateY(0)}
.media-rotate-wrap{position:relative;display:inline-flex}.media-rotation-menu{position:absolute;z-index:20;right:0;bottom:31px;display:grid;grid-template-columns:repeat(2,42px);gap:4px;padding:5px;border:1px solid rgba(255,255,255,.3);border-radius:8px;background:rgba(16,20,26,.95);box-shadow:0 8px 22px rgba(0,0,0,.35);backdrop-filter:blur(8px)}.media-rotation-menu[hidden]{display:none!important}.media-rotation-menu button{width:42px;height:29px;min-width:42px;padding:2px 4px;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.18);font-size:11px}.media-rotation-menu button:hover,.media-rotation-menu button.selected{background:var(--orange);border-color:var(--orange);color:#fff}.media-actions [data-media-action="info"]{font-size:16px;font-weight:700}.media-actions [data-media-action="rotate"]{font-size:14px}


/* v67 — media tools modal, compact template editor, desktop planning workspace */
.media-tools-modal{width:min(540px,94vw);max-height:86dvh;overflow:auto;background:#fff;color:var(--ink);border-radius:14px;padding:14px;box-shadow:0 24px 70px rgba(0,0,0,.32)}
.media-tools-modal>header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.media-tools-modal h2{margin:0;font-size:17px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.media-tools-info{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:#fafbfc}.media-tools-info dl{margin:0;display:grid;gap:0}.media-tools-info dl>div{display:grid;grid-template-columns:minmax(120px,38%) 1fr;gap:8px;padding:7px 0;border-bottom:1px solid var(--line)}.media-tools-info dl>div:last-child{border-bottom:0}.media-tools-info dt{font-size:11px;color:var(--muted)}.media-tools-info dd{margin:0;font-size:12px;overflow-wrap:anywhere}
.media-tools-rotation{margin-top:10px;border:1px solid var(--line);border-radius:10px;padding:10px}.media-tools-rotation-buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:8px}.media-tools-rotation-buttons button{min-height:42px}.media-tools-rotation-buttons button.selected{background:#f58220;color:#fff;border-color:#f58220}
.media-actions{align-items:center}.media-actions button{min-width:29px}
.template-page-header[hidden]{display:none!important}.template-composer{min-height:0}.composer-topbar{display:grid;grid-template-columns:auto minmax(220px,1.7fr) minmax(120px,.7fr) minmax(105px,.55fr) minmax(190px,.9fr) minmax(105px,.55fr) auto auto;gap:6px 8px;align-items:end;margin:0 0 5px;padding:6px 8px}.composer-topbar label{min-width:0}.composer-topbar input,.composer-topbar select{min-height:30px;height:30px}.composer-name{min-width:0}.composer-history{align-self:end}.composer-history button,.composer-topbar>button{min-height:30px;padding-top:5px;padding-bottom:5px}.composer-workspace{min-height:calc(100dvh - 112px)}.composer-tools,.composer-properties{max-height:calc(100dvh - 112px)}.composer-viewport{min-height:calc(100dvh - 158px);padding-top:22px}.template-stage-wrap{padding:6px}
.planning-lower-workspace{display:grid;grid-template-columns:250px minmax(0,1fr);gap:8px;align-items:stretch}.planning-playlist-browser{display:block;min-height:300px;max-height:520px;padding:7px;overflow:hidden}.planning-playlist-library-wrap{height:100%}.planning-playlist-library{display:flex;flex-direction:column;gap:5px;overflow-y:auto;overflow-x:hidden;padding-right:4px}.planning-playlist-tile{flex:0 0 auto;width:100%;display:grid;grid-template-columns:74px minmax(0,1fr);grid-template-rows:auto auto;column-gap:7px;align-items:center}.planning-playlist-tile-strip{grid-row:1/3;width:74px;height:44px;margin:0}.planning-playlist-tile strong{font-size:11px}.planning-playlist-tile small{font-size:9px}.planning-edit-column{display:grid;grid-template-rows:minmax(120px,1fr) auto;gap:8px;min-width:0}.planning-playlist-inspector{min-height:145px;max-height:300px;margin:0}.planning-editor{margin:0}
@media(max-width:1100px){.composer-topbar{grid-template-columns:auto minmax(180px,1fr) repeat(3,minmax(105px,.55fr));}.composer-size-fields{grid-column:auto}.composer-history{grid-column:auto}.planning-lower-workspace{grid-template-columns:220px minmax(0,1fr)}}
@media(max-width:900px){.planning-lower-workspace{display:block}.planning-playlist-browser{max-height:none;min-height:0;margin-bottom:8px}.planning-playlist-library{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));max-height:220px}.planning-playlist-tile{display:block}.planning-playlist-tile-strip{width:auto;height:48px;margin-bottom:3px}.planning-edit-column{display:block}.planning-playlist-inspector{min-height:170px;max-height:none;margin-bottom:8px}.composer-topbar{display:flex;align-items:stretch;flex-wrap:wrap}.composer-workspace{min-height:0}.composer-tools,.composer-properties{max-height:none}.composer-viewport{min-height:52dvh}}

/* --- v69 m2s icon font integration ------------------------------------- */
.media-filter-button .m2s{font-size:18px;line-height:1;display:block}
.list-edit-button{display:inline-grid!important;place-items:center;min-width:34px!important;width:34px;height:32px;padding:0!important}
.list-edit-button .m2s{font-size:17px;line-height:1}
.template-card-actions .list-edit-button{display:grid!important;width:30px!important;min-width:30px!important;height:30px}
/* v71 - legacy template collection manifests */
.collection-api-details{margin-top:12px;padding:10px 12px;border:1px solid var(--border,#d1d5db);border-radius:8px;background:rgba(15,23,42,.025)}
.collection-api-details summary{cursor:pointer;font-weight:600}
.collection-api-details code{display:block;margin-top:8px;white-space:normal;overflow-wrap:anywhere;font-size:11px;line-height:1.55}
.collection-api-details.warning{border-color:#f59e0b;background:rgba(245,158,11,.08)}

/* v73 - template composer: compact top edge + native collection settings */
.composer-viewport{padding-top:0!important}
.template-stage-wrap{padding-top:0!important;align-content:start;place-items:start center}
.template-object-content{box-sizing:border-box;line-height:1.08}
.template-object-content>*:first-child{margin-top:0}
.template-object-content>*:last-child{margin-bottom:0}
.properties-tabs{grid-template-columns:repeat(3,1fr)}
.properties-tabs button[hidden]{display:none!important}
.template-settings-panel label{display:grid;gap:3px;font-size:10px;margin-bottom:7px}
.template-settings-panel input,.template-settings-panel select,.template-settings-panel textarea{width:100%}
.template-collection-stage-frame{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000;z-index:0;pointer-events:none}
.template-stage>.template-object{z-index:2}
/* v76 — collection templates use their native design viewport; CENTRAL owns editor scaling. */
.template-collection-stage-frame{position:absolute!important;left:0!important;top:0!important;right:auto!important;bottom:auto!important;max-width:none!important;max-height:none!important;border:0;background:#000;z-index:0;pointer-events:none}

/* v87 — player scenarization */
.player-properties-scenario-row{display:flex;justify-content:flex-end;margin:10px 0 0}
.player-scenarios-header{align-items:flex-end}
.player-scenarios-header>div{display:grid;gap:5px}
.player-scenarios-back{justify-self:start;margin-bottom:4px}
.player-scenarios-panel{min-height:0}
.scenario-table{width:100%;border-collapse:collapse}
.scenario-table th,.scenario-table td{padding:10px 12px;border-bottom:1px solid var(--border,#d7dde5);text-align:left;vertical-align:middle}
.scenario-table thead th{white-space:nowrap}
.scenario-active-col{width:120px;text-align:center!important}
.scenario-none-radio{display:inline-flex;align-items:center;gap:7px;cursor:pointer}
.scenario-active-radio,.scenario-none-radio input{width:18px;height:18px;accent-color:var(--accent,#f28c28);cursor:pointer}
.scenario-actions{display:flex;gap:7px;justify-content:flex-end;white-space:nowrap}
.scenario-editor-placeholder{max-width:720px}
.scenario-editor-coming-soon{margin:18px 0;padding:22px;border:1px dashed var(--border,#cbd5e1);border-radius:12px;background:var(--panel-soft,#f8fafc)}
.scenario-editor-coming-soon strong{display:block;margin-bottom:6px}
@media(max-width:760px){.player-scenarios-header{align-items:stretch}.player-scenarios-header #playerScenarioAdd{width:100%}.scenario-actions{flex-direction:column}.scenario-table th,.scenario-table td{padding:8px}}
/* v89 — BOSB scenario configurator */
.scenario-reference{display:inline-block;margin-left:8px;color:var(--muted,#64748b);font-weight:500}
.scenario-setup-modal{width:min(1040px,calc(100vw - 32px));max-height:calc(100vh - 32px);overflow:auto;background:var(--panel,#fff);border:1px solid var(--border,#d8dee8);border-radius:16px;box-shadow:0 24px 70px rgba(15,23,42,.28)}
.scenario-setup-header,.scenario-bosb-modal>header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 22px;border-bottom:1px solid var(--border,#d8dee8)}
.scenario-setup-header h2{margin:2px 0 0}.scenario-stepper{display:flex;align-items:center;justify-content:center;gap:10px;padding:16px}.scenario-stepper span{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--border,#cbd5e1);background:var(--panel-soft,#f8fafc);font-weight:700}.scenario-stepper span.active{background:var(--accent,#f28c28);border-color:var(--accent,#f28c28);color:#fff}.scenario-stepper i{width:80px;height:2px;background:var(--border,#cbd5e1)}
.scenario-setup-page{padding:0 22px 18px}.scenario-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.scenario-form-grid .full{grid-column:1/-1}.scenario-form-grid label,.scenario-two-cols label,.scenario-readers label{display:grid;gap:6px}.scenario-form-grid fieldset,.scenario-two-cols fieldset,.scenario-readers{border:1px solid var(--border,#d8dee8);border-radius:12px;padding:14px}.scenario-form-grid legend,.scenario-two-cols legend,.scenario-readers legend{padding:0 7px;font-weight:700}.scenario-form-grid input[type=text],.scenario-form-grid input[type=url],.scenario-form-grid select,.scenario-two-cols input[type=text],.scenario-two-cols input[type=password]{width:100%;min-height:40px}.scenario-form-grid .inline,.scenario-two-cols .inline,.scenario-readers .inline{display:inline-flex;align-items:center;gap:7px;margin:3px 14px 3px 0}.scenario-form-grid .inline input,.scenario-two-cols .inline input,.scenario-readers .inline input{width:auto}.input-with-button{display:flex;gap:8px}.input-with-button input{flex:1}.scenario-two-cols{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}.scenario-language-list{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px}.scenario-language-row{display:grid;grid-template-columns:24px 1fr;align-items:center}.scenario-language-row label{display:flex;align-items:center;gap:6px}.scenario-help{color:var(--muted,#64748b);font-size:12px;margin-top:0}.scenario-upload-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.scenario-file-card{min-height:160px;border:1px dashed var(--border,#cbd5e1);border-radius:14px;padding:18px;display:flex;flex-direction:column;gap:10px;justify-content:center;background:var(--panel-soft,#f8fafc)}.scenario-file-card strong{font-size:16px}.scenario-readers{margin-top:18px}.scenario-setup-actions{display:grid;grid-template-columns:auto 1fr auto auto auto;gap:8px;padding:16px 22px;border-top:1px solid var(--border,#d8dee8);position:sticky;bottom:0;background:var(--panel,#fff);z-index:3}
.scenario-bosb-backdrop{z-index:12000!important}.scenario-bosb-modal{width:calc(100vw - 20px);height:calc(100vh - 20px);display:flex;flex-direction:column;background:#fff;border-radius:14px;overflow:hidden}.scenario-bosb-modal>header{height:58px;flex:none}.scenario-bosb-modal iframe{width:100%;height:100%;border:0;flex:1;background:#111}.scenario-editor-open{overflow:hidden}
@media(max-width:780px){.scenario-form-grid,.scenario-two-cols,.scenario-upload-grid{grid-template-columns:1fr}.scenario-form-grid .full{grid-column:auto}.scenario-language-list{grid-template-columns:1fr}.scenario-setup-actions{grid-template-columns:auto 1fr auto}.scenario-setup-actions span{display:none}}

.scenario-header-actions{display:flex;gap:10px;align-items:center}.scenario-import-modal{width:min(680px,calc(100vw - 32px));max-height:calc(100vh - 32px);overflow:auto;background:var(--panel,#fff);border-radius:16px;box-shadow:0 24px 70px rgba(0,0,0,.25)}.scenario-import-body{display:grid;gap:16px;padding:22px}.scenario-import-body label{display:grid;gap:7px}.scenario-import-body input[type=text],.scenario-import-body input[type=file]{width:100%;min-height:42px}

/* v109 - Respect the hidden state of the snapshot placeholder.
   .snapshot-placeholder declares display:grid, which otherwise overrides
   the browser's [hidden] rule and keeps the overlay above a loaded image. */
.snapshot-placeholder[hidden]{display:none!important}

/* v117 - Player runtime audio / startup IP settings */
.player-runtime-settings{display:grid;gap:14px;margin:16px 0;padding:14px;border:1px solid var(--border,#d7dde5);border-radius:10px}
.player-volume-setting{display:grid;gap:8px}.player-volume-setting input[type="range"]{width:100%}
.player-ip-start-setting{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:6px 10px}.player-ip-start-setting small{grid-column:2;color:var(--muted,#6b7280)}

/* v131 — player IP geolocation maps */
.player-map-overlay{position:fixed;inset:0;z-index:14000;display:grid;place-items:center;padding:18px;background:rgba(8,15,28,.72);backdrop-filter:blur(3px)}
.player-map-overlay[hidden]{display:none!important}
.player-map-window{width:min(960px,calc(100vw - 36px));max-height:calc(100vh - 36px);display:grid;grid-template-rows:auto minmax(360px,1fr) auto;overflow:hidden;border:1px solid var(--border,#d8dee8);border-radius:16px;background:var(--panel,#fff);box-shadow:0 28px 80px rgba(0,0,0,.35)}
.player-map-window-wide{width:min(1240px,calc(100vw - 36px))}
.player-map-window>header{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 18px;border-bottom:1px solid var(--border,#d8dee8)}
.player-map-window>header h2{margin:0}.player-map-window>header p{margin:4px 0 0}
.player-map-window>footer{padding:8px 18px;color:var(--muted,#64748b);font-size:12px;border-top:1px solid var(--border,#d8dee8)}
.player-map-canvas{height:min(68vh,680px);min-height:360px;background:#dce7ef}
.m2s-map{position:relative;width:100%;height:100%;overflow:hidden;background:linear-gradient(145deg,#dce7ef,#cbd9e4)}
.m2s-map-viewport,.m2s-map-tiles,.m2s-map-markers{position:absolute;inset:0;overflow:hidden}
.m2s-map-tiles img{position:absolute;width:256px;height:256px;max-width:none;user-select:none}
.m2s-map-markers{overflow:visible;pointer-events:none}
.m2s-map-marker{position:absolute;z-index:3;width:34px;height:34px;display:grid;place-items:center;transform:translate(-50%,-100%);border:2px solid #fff;border-radius:50% 50% 50% 0;background:#f47b20;color:#fff;box-shadow:0 3px 10px rgba(0,0,0,.4);rotate:-45deg;cursor:pointer;pointer-events:auto}
.m2s-map-marker>span{font-size:11px;font-weight:800;rotate:45deg}
.m2s-map-popup{position:absolute;left:23px;bottom:23px;width:240px;display:none;gap:5px;padding:12px;rotate:45deg;text-align:left;color:#172033;background:#fff;border:1px solid #d8dee8;border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.25);cursor:default}
.m2s-map-marker.open{z-index:8}.m2s-map-marker.open .m2s-map-popup{display:grid}.m2s-map-popup small{line-height:1.35;color:#64748b}.m2s-map-popup code{font-size:11px;color:#334155}
.m2s-map-controls{position:absolute;left:12px;top:12px;z-index:10;display:grid;border:1px solid #aab8c5;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.2)}
.m2s-map-controls button{width:38px;height:36px;padding:0;border:0;border-radius:0;background:#fff;color:#172033;font-size:22px}.m2s-map-controls button+button{border-top:1px solid #d2dae2}
.m2s-map-attribution{position:absolute;right:4px;bottom:3px;z-index:10;padding:2px 5px;background:rgba(255,255,255,.88);color:#334155;font-size:10px;text-decoration:none}
.m2s-map-empty{height:100%;display:grid;place-items:center;padding:30px;text-align:center;color:#526171;font-weight:600}
.network-map-button{white-space:nowrap}
@media(max-width:700px){.player-map-overlay{padding:6px}.player-map-window,.player-map-window-wide{width:calc(100vw - 12px);max-height:calc(100vh - 12px)}.player-map-canvas{height:65vh}.m2s-map-popup{width:190px;left:-74px;bottom:46px}}

/* Keep selection controls outside the rounded shape. */
.template-object.selected{overflow:visible}
.template-object.selected>.template-object-content{border-radius:inherit}
.object-resize-handle{z-index:20;touch-action:none}
body[data-page="templates"] .page-content{padding-top:0}
.template-page-header{align-items:center;margin-top:0;padding-top:0;flex-wrap:nowrap}
.template-page-header>div:first-child{display:flex;align-items:center;gap:12px;min-width:0}
.template-page-header h1,.template-page-header p{margin:0;white-space:nowrap}
.template-page-header p{overflow:hidden;text-overflow:ellipsis}
.template-page-header .page-header-actions{flex-wrap:nowrap;flex-shrink:0}
.composer-topbar{display:flex;flex-wrap:nowrap;align-items:center;overflow-x:auto;margin-top:0;padding:4px 6px}
.composer-topbar label{display:flex;align-items:center;gap:5px;flex-shrink:0;min-width:0;white-space:nowrap;margin:0}
.composer-topbar .composer-name{flex:1;min-width:180px}
.composer-topbar .composer-name input{width:100%;min-width:80px}
.composer-topbar #templateDuration{width:82px}
.composer-topbar .composer-history{align-self:center}
.composer-topbar>button,.composer-history{flex-shrink:0}

.map-player-list{position:absolute;right:8px;top:8px;z-index:11;max-height:140px;overflow:auto;width:220px;background:#ffffffdd}.map-player-list button{display:block;width:100%;text-align:left;font-size:11px;background:white;color:#172033;border:1px solid #ddd;padding:5px}

.media-audioguide-badge{position:absolute;right:7px;left:auto;top:7px;z-index:4;font-size:18px;line-height:1;filter:saturate(1.6);color:#d71920;text-shadow:0 1px 2px rgba(255,255,255,.8)}
.media-tools-audioguide{margin-top:10px;border:1px solid var(--line);border-radius:10px;padding:10px}.audioguide-status{font-size:12px;color:var(--muted);margin:7px 0}.audioguide-picker,.audioguide-actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-top:8px}.audioguide-picker select{flex:1;min-width:180px}.media-tools-audioguide audio{width:100%;margin-top:9px}
.media-audioguide-badge svg{display:block;width:20px;height:20px;fill:#d71920}


/* v132: override generic .panel minimum height and constrain editor to viewport. */
#templateLibraryView[hidden],#templateComposerView[hidden]{display:none!important}
body[data-page="templates"] #pageContent{padding-top:0!important}
#templateComposerView:not([hidden]){display:flex;flex-direction:column;height:calc(100dvh - 100px);min-height:0}
#templateComposerView .composer-topbar{min-height:0;height:auto;flex:0 0 auto;padding:4px 6px;align-items:center}
#templateComposerView .composer-topbar input{margin-top:0}
#templateComposerView .composer-workspace{flex:1;min-height:0;overflow:hidden}
#templateComposerView .composer-tools,#templateComposerView .composer-properties{min-height:0;max-height:100%;overflow:auto}
#templateComposerView .composer-center{min-height:0;height:100%;padding:0}
#templateComposerView .composer-viewport{min-height:0;padding-top:0}
#templateComposerView .template-stage-wrap{padding-top:0;align-content:start}

/* v133: badge independent of generic thumbnail span positioning. */
.media-card .media-thumb .media-audioguide-badge{left:auto!important;right:7px!important;top:34px!important;bottom:auto!important;transform:none!important;width:28px;height:28px;padding:4px;pointer-events:none}
.m2s-map-viewport{cursor:grab;user-select:none}.m2s-map-viewport.is-dragging{cursor:grabbing}
.m2s-map-tiles img{pointer-events:none;-webkit-user-drag:none}
.map-player-list summary{cursor:pointer;padding:8px;font-size:13px;color:#172033}
.map-player-list{max-height:180px}.map-player-list:not([open]){width:auto}

/* v134: a single library height and playlist start line for both tabs. */
body[data-page="playlist"],body[data-page="templates"]{--shared-library-height:clamp(360px,52vh,420px);--shared-library-header-height:44px;--shared-library-padding:14px}
body[data-page="playlist"] #pageContent,body[data-page="templates"] #pageContent:has(#templateComposerView[hidden]){padding-top:var(--shared-library-padding)!important}
body[data-page="playlist"] #pageContent>.page-header,body[data-page="templates"] #pageContent>.template-page-header:not([hidden]){height:var(--shared-library-header-height);min-height:var(--shared-library-header-height);max-height:var(--shared-library-header-height);flex:0 0 var(--shared-library-header-height);margin:0 0 10px;padding:0;align-items:center;overflow:hidden}
body[data-page="playlist"] .media-workspace,body[data-page="templates"] #templateLibraryView:not([hidden]){height:var(--shared-library-height);min-height:var(--shared-library-height);max-height:var(--shared-library-height);flex:0 0 var(--shared-library-height);margin:0;display:grid;overflow:hidden}
body[data-page="playlist"] .media-workspace{grid-template-rows:auto auto minmax(0,1fr)}
body[data-page="playlist"] .media-library{min-height:0}
body[data-page="templates"] #templateLibraryView:not([hidden]){grid-template-rows:auto minmax(0,1fr);gap:0}
#templateLibraryView .template-toolbar{margin:0 0 12px;min-height:0}
#templateLibraryView .template-toolbar label{margin:0}
#templateLibrary{min-height:0;overflow:auto;align-content:start;scrollbar-gutter:stable}
#templateLibraryView:has(#templateLibrary:empty){grid-template-rows:auto 0 minmax(0,1fr)}
body[data-page="playlist"] #sharedPlaylistEditor,body[data-page="templates"] #sharedPlaylistEditor{margin-top:12px;flex-shrink:0}
@media(max-width:900px){body[data-page="playlist"],body[data-page="templates"]{--shared-library-height:420px;--shared-library-padding:10px}}

.qr-config{border-top:1px solid var(--line);margin-top:6px;padding-top:7px}.qr-config [data-qr-group]{display:grid;gap:2px}.composer-qr-svg{display:block;width:100%;height:100%}.qr-fallback{width:100%;height:100%;display:grid;place-items:center;background:#fff;color:#000;font-weight:700}.qr-live-preview{display:grid;grid-template-columns:112px minmax(0,1fr);gap:9px;align-items:center;margin:0 0 8px;padding:7px;border:1px solid var(--line);border-radius:8px;background:#f7f9fb}.qr-live-image{width:112px;height:112px;background:#fff;border:1px solid #d5dbe3;border-radius:5px;padding:4px}.qr-live-image svg{width:100%;height:100%;display:block}.qr-live-data{min-width:0;display:grid;gap:5px}.qr-live-data small{font-size:9px;line-height:1.25;word-break:break-all;max-height:72px;overflow:auto;color:var(--muted)}

.player-catalog-select{display:flex;align-items:center;gap:5px}.player-catalog-select select{min-width:0;flex:1}.player-catalog-select button{flex:none;padding:7px}

/* v142: insertion explicite dans la playlist, utilisable sans glisser-déposer. */
.media-actions [data-media-action="add"],.template-card-actions [data-tpl-add]{background:var(--orange,#f47b20)!important;color:#fff!important;border-color:var(--orange,#f47b20)!important;font-size:20px!important;font-weight:800;line-height:1}
.media-actions [data-media-action="add"]:hover,.template-card-actions [data-tpl-add]:hover{filter:brightness(1.08);transform:translateY(-1px)}
@media (pointer:coarse),(max-width:700px){.media-actions [data-media-action="add"],.template-card-actions [data-tpl-add]{width:42px!important;height:42px!important;min-width:42px!important;min-height:42px!important;padding:0!important}.media-actions,.template-card-actions{gap:6px}}
.player-catalog-dialog{width:min(760px,92vw);max-height:85vh;overflow:auto;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:12px}.player-catalog-dialog::backdrop{background:#0009}.player-catalog-dialog header{display:flex;align-items:center;justify-content:space-between}.player-catalog-dialog h2{font-size:20px}.player-catalog-row{display:flex;gap:8px;align-items:center;margin:8px 0}.player-catalog-row input{flex:1;min-width:0;margin:0}.player-catalog-row button{flex:none}.player-message-panel{border-top:1px solid var(--line);margin-top:20px;padding-top:10px}.player-message-panel textarea{width:100%;font:inherit}.player-message-actions{display:flex;gap:10px}.player-message-panel p{font-size:12px}
.snapshot-refresh .m2s-camera{transform:translateY(4px)}

/* v148 — catégories de templates et origine des règles */
.template-toolbar{align-items:end}.template-toolbar-filters{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.template-toolbar-filters>label{min-width:min(300px,100%)}.template-category-filter-row,.template-category-property-row{display:flex;align-items:stretch;gap:5px}.template-category-filter-row select,.template-category-property-row select{min-width:190px;flex:1}.template-category-filter-row button,.template-category-property-row button{flex:0 0 38px;padding:0}.template-category-badge{display:inline-flex;align-items:center;width:max-content;max-width:100%;padding:2px 6px;border-radius:999px;background:rgba(249,115,22,.14);color:#ea6c12;font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.template-properties-modal,.template-categories-modal{width:min(560px,92vw);max-height:84vh;overflow:auto;background:var(--panel,#fff);color:var(--ink,#172033);border:1px solid var(--line,#d9dee7);border-radius:12px;padding:14px}.template-properties-modal>header,.template-categories-modal>header{display:flex;align-items:center;justify-content:space-between;gap:10px}.template-properties-modal h2,.template-categories-modal h2{margin:0;font-size:20px}.template-properties-modal>label{display:grid;gap:6px;margin:16px 0}.template-category-add,.template-category-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px;align-items:center}.template-category-add{margin:14px 0}.template-category-rows{display:grid;gap:7px}.template-category-row{grid-template-columns:minmax(0,1fr) auto auto;padding:7px;border:1px solid var(--line,#d9dee7);border-radius:9px}.template-category-row input{min-width:0;width:100%;margin:0}.template-category-row small{grid-column:1/-1;color:var(--muted,#64748b)}
#templateComposerView .composer-topbar #templateDuration{width:108px;min-width:108px}
#templateComposerView .composer-viewport{padding-top:30px!important}
#templateComposerView .template-stage-wrap{padding-top:0!important;align-items:flex-start!important;justify-content:center}
@media(max-width:700px){.template-toolbar-filters{display:grid;width:100%}.template-toolbar-filters>label{min-width:0}.template-toolbar{align-items:stretch;flex-direction:column}.template-category-row{grid-template-columns:minmax(0,1fr) auto}.template-category-row .danger-button{grid-column:2}.template-category-row small{grid-column:1/-1}}
@media(max-width:700px){
  #templateLibraryView .template-library{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px;align-items:start;overflow:visible}
  #templateLibraryView .template-card{position:relative;display:block;aspect-ratio:1/1;min-width:0;min-height:0;overflow:hidden;border-radius:10px;background:#080b10}
  #templateLibraryView .template-card-visual{position:absolute;inset:0;aspect-ratio:auto}
  #templateLibraryView .template-card-visual>img{width:100%;height:100%;object-fit:contain}
  #templateLibraryView .template-card-actions{top:34px;right:5px;bottom:auto;display:grid;grid-template-columns:repeat(3,32px);gap:3px;z-index:5}
  #templateLibraryView .template-card-actions button{width:32px;height:32px;min-width:32px;min-height:32px;padding:0}
  #templateLibraryView .template-card-meta{position:absolute;z-index:4;left:0;right:0;bottom:0;display:grid;gap:2px;padding:24px 7px 7px;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.92));text-shadow:0 1px 3px #000;pointer-events:none}
  #templateLibraryView .template-card-meta strong{font-size:12px}
  #templateLibraryView .template-card-meta>span:last-child{font-size:9px;opacity:.9}
  #templateLibraryView .template-category-badge{font-size:9px;color:#fff;background:rgba(249,115,22,.82)}
}

/* v164 — mode test, bibliothèques visuelles et alignement des options. */
.composer-zoom{justify-content:flex-start}.template-mode-toggle{margin-left:auto;min-width:96px}.template-mode-toggle.active{background:var(--orange);color:#fff}.template-test-room{display:flex;align-items:center;gap:6px;margin-left:auto}.template-test-room label{font-size:11px;opacity:.78}.template-test-room select{max-width:250px}.template-test-room[hidden]{display:none!important}.template-test-room:not([hidden])+.template-mode-toggle{margin-left:0}
.template-business-object .template-collection-stage-frame{position:static!important;inset:auto!important;width:100%!important;height:100%!important;border:0;display:block;transform:none!important}.template-business-object{background:#000}.template-test-mode .template-object{cursor:default;pointer-events:none}.template-test-mode .template-object.selected{outline:0}.template-test-mode .object-resize-handle{display:none}.template-test-mode .template-business-object,.template-test-mode .template-business-object iframe{pointer-events:auto}
#templateComposerView .toggle-row,.template-collection-modal .toggle-row{display:grid!important;grid-template-columns:40px minmax(0,1fr);align-items:center;gap:0;text-align:left}#templateComposerView .toggle-row>input[type="checkbox"],.template-collection-modal .toggle-row>input[type="checkbox"]{width:18px!important;height:18px;justify-self:start;margin:0}#templateComposerView .toggle-row>span,.template-collection-modal .toggle-row>span{text-align:left;justify-self:start}.property-library-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.property-library-row input{min-width:0}
.template-font-modal,.template-room-binding-modal{width:min(860px,94vw);max-height:90vh;overflow:auto}.template-font-modal header,.template-room-binding-modal header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.template-font-library{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.template-font-library button{display:grid;gap:4px;text-align:left;padding:14px}.template-font-library button strong{font-size:20px}.template-room-binding-rows{display:grid;gap:8px}.template-room-binding-rows label{display:grid;grid-template-columns:minmax(180px,1fr) minmax(260px,1.4fr);gap:12px;align-items:center;padding:10px;border:1px solid var(--border);border-radius:10px}.template-room-binding-rows label>span{display:grid;gap:2px}.template-room-binding-rows small{opacity:.68}
@media(max-width:800px){.composer-zoom{flex-wrap:wrap}.template-test-room{order:2;width:100%;margin-left:0;flex-wrap:wrap}.template-mode-toggle{margin-left:auto}.template-room-binding-rows label{grid-template-columns:1fr}}

/* v165 — bibliothèque claire et commandes de test toujours visibles. */
.template-media-modal{background:#e5e7eb!important;color:#1f2937!important}.template-media-modal header{background:#f3f4f6;border-radius:10px;padding:10px}.template-media-modal .template-media-card{background:#fff;color:#1f2937;border-color:#cbd5e1}.template-media-modal .template-media-card img{background:#d1d5db}.template-media-modal .template-media-upload{padding:8px 0}
.composer-zoom{flex-wrap:wrap}.template-test-room{order:2;flex:1 1 100%;width:100%;margin-left:0;justify-content:flex-end;padding-top:4px;border-top:1px solid var(--border)}.template-test-room select{max-width:360px;min-width:220px}.template-mode-toggle{order:1;margin-left:auto}.template-business-object .template-collection-stage-frame{pointer-events:auto!important}.template-pointer-dragging .template-collection-stage-frame{pointer-events:none!important}.template-pointer-dragging,.template-pointer-dragging *{user-select:none!important}.template-pointer-resize,.template-pointer-resize *{cursor:nwse-resize!important}.template-pointer-move,.template-pointer-move *{cursor:move!important}
.meeting-user-note{margin-bottom:10px;padding:9px 10px;border-radius:8px;background:#e8f3ff;color:#173a5e;font-size:11px;line-height:1.4}

/* v166 — commandes recentrées et fenêtre d'association lisible. */
.composer-zoom{display:grid;grid-template-columns:minmax(96px,1fr) auto minmax(96px,1fr);align-items:center;gap:6px;padding:6px}
.composer-zoom-controls{grid-column:2;display:flex;align-items:center;justify-content:center;gap:6px}
.composer-zoom-controls input{width:min(360px,42vw);margin:0}
.template-mode-toggle{grid-column:3;justify-self:end;order:initial;margin-left:0}
.template-test-room{grid-column:1/-1;order:initial;justify-self:stretch;display:flex;align-items:center;justify-content:flex-end}
.template-room-binding-modal{padding:18px;background:#fff!important;color:#18202a!important;border:1px solid #d5dbe2;border-radius:16px;box-shadow:0 26px 80px rgba(0,0,0,.38)}
.template-room-binding-modal header{padding-bottom:12px;border-bottom:1px solid #dfe4ea}.template-room-binding-modal header h2{margin:0}.template-room-binding-modal header p{margin:5px 0 0;color:#657080}
.template-room-binding-rows{margin:14px 0}.template-room-binding-rows label{background:#f7f8fa;border-color:#dfe4ea}.template-room-binding-modal .modal-actions{padding-top:12px;border-top:1px solid #dfe4ea}
@media(max-width:800px){.composer-zoom{grid-template-columns:1fr auto}.composer-zoom-controls{grid-column:1/-1;flex-wrap:wrap}.template-mode-toggle{grid-column:2}.template-test-room{grid-column:1/-1}.composer-zoom-controls input{width:min(280px,55vw)}}

/* v152 — règle accolée au template et déplacement à la main. */
#templateComposerView .composer-viewport{overflow:auto!important;overscroll-behavior:contain;scrollbar-gutter:stable}
#templateComposerView .template-stage-wrap{box-sizing:border-box;width:max-content!important;height:max-content!important;min-width:100%!important;min-height:100%!important;padding:30px!important;display:flex!important;align-items:flex-start!important;justify-content:center!important}
#templateComposerView .ruler-top{right:auto!important}
#templateComposerView .ruler-left{left:auto;bottom:auto!important}
#composerPan{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
#composerPan.active{background:var(--orange);color:#fff;box-shadow:0 0 0 2px color-mix(in srgb,var(--orange) 28%,transparent)}
#composerViewport.pan-mode{cursor:grab;user-select:none}
#composerViewport.pan-mode .template-stage,#composerViewport.pan-mode .template-object{cursor:grab!important}
#composerViewport.pan-mode.panning,#composerViewport.pan-mode.panning .template-stage,#composerViewport.pan-mode.panning .template-object{cursor:grabbing!important}
#composerViewport.pan-mode .template-stage{pointer-events:none}

/* v153 — départ vertical commun des filtres de templates. */
#templateLibraryView .template-toolbar-filters{align-items:start}
#templateLibraryView .template-toolbar-filters>.template-search-filter,#templateLibraryView .template-toolbar-filters>.template-category-filter{grid-template-rows:16px 40px;align-items:stretch;gap:5px;margin:0}
#templateLibraryView #templateSearch,#templateLibraryView .template-category-filter-row{box-sizing:border-box;height:40px;min-height:40px;margin:0}
#templateLibraryView .template-category-filter-row select,#templateLibraryView .template-category-filter-row button{box-sizing:border-box;height:40px;min-height:40px;margin:0}

/* v239 — barre des filtres de templates sur une seule ligne. */
#templateLibraryView .template-toolbar{align-items:center;flex-wrap:wrap}
#templateLibraryView .template-toolbar-filters{display:flex;align-items:center;flex:1 1 auto;gap:14px;min-width:0}
#templateLibraryView .template-toolbar-filters>.template-search-filter{display:grid;grid-template-columns:max-content minmax(180px,320px);align-items:center;gap:8px;flex:0 1 auto;width:auto;min-width:0}
#templateLibraryView .template-toolbar-filters>.template-category-filter{display:grid;grid-template-columns:max-content minmax(210px,1fr);align-items:center;gap:8px;flex:1 1 330px;width:auto;min-width:0}
#templateLibraryView .template-category-filter-row{min-width:0}
#templateLibraryView .template-category-filter-row select{min-width:0}
@media(max-width:700px){
  #templateLibraryView .template-toolbar{align-items:stretch;flex-direction:column}
  #templateLibraryView .template-toolbar-filters{display:grid;align-items:stretch;width:100%}
  #templateLibraryView .template-toolbar-filters>.template-search-filter,#templateLibraryView .template-toolbar-filters>.template-category-filter{grid-template-columns:1fr;gap:5px;width:100%}
}

/* v157 — cartes Templates alignées sur les cartes Médias et entête non tronquée. */
body[data-page="playlist"],body[data-page="templates"]{--shared-library-header-height:60px}
body[data-page="playlist"] #pageContent>.page-header>div:first-child{min-height:52px;display:flex;flex-direction:column;justify-content:center}
body[data-page="playlist"] #pageContent>.page-header p{line-height:1.35;padding-bottom:2px;overflow:visible}

#templateLibraryView .template-library{grid-auto-rows:176px}
#templateLibraryView .template-card{box-sizing:border-box;height:176px;min-height:176px;max-height:176px;display:grid;grid-template-rows:minmax(0,1fr) auto}
#templateLibraryView .template-card-visual{aspect-ratio:auto;min-height:0}

@media(max-width:700px){
  #templateLibraryView .template-library{overflow-y:auto!important;overflow-x:hidden!important;align-content:start;grid-auto-rows:176px;padding-bottom:8px}
  #templateLibraryView .template-card{aspect-ratio:auto;height:176px;min-height:176px;max-height:176px}
  #templateLibraryView .template-card-actions{top:6px;right:5px;bottom:auto;grid-template-columns:repeat(3,42px);grid-auto-rows:42px;gap:3px}
  #templateLibraryView .template-card-actions button{box-sizing:border-box;width:42px!important;height:42px!important;min-width:42px!important;min-height:42px!important}
}
/* v178: only interactive runtime objects receive pointer events in Test. */
.template-test-mode .template-object[data-type="plan"],
.template-test-mode .template-object[data-type="plan"] .template-object-content,
.template-test-mode .template-object[data-type="plan"] iframe{pointer-events:auto!important;touch-action:auto}
.template-object[data-type="plan"] iframe{width:100%;height:100%;border:0;display:block}
.template-composer:not(.template-test-mode) .template-object[data-type="plan"] iframe{pointer-events:none!important}
.template-test-scroll-viewport{position:relative;overflow:hidden!important;direction:ltr}
.template-test-scroll{display:block;position:relative;will-change:transform;margin:0!important}
/* v188 — préférences de niveau d’interface. */
.interface-mode-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:10px 0 20px}.interface-mode-grid label{display:grid;grid-template-columns:auto 1fr;gap:4px 10px;align-items:center;padding:14px;border:1px solid var(--line);border-radius:12px}.interface-mode-grid input{grid-row:1/3;width:auto;margin:0}.interface-mode-grid small{color:var(--muted)}html[data-interface-mode="simple"] .tab-link[data-page="templates"],html[data-interface-mode="simple"] .tab-link[data-page="statistics"],html[data-interface-mode="simple"] .tab-link[data-page="alerts"],html[data-interface-mode="simple"] .tab-link[data-page="network"],html[data-interface-mode="simple"] .tab-link[data-page="accounts"],html[data-interface-mode="simple"] .tab-link[data-page="users"]{display:none}
.player-plan-location{margin:16px 0;padding:14px;border:1px solid var(--line,#d8dee8);border-radius:12px;background:var(--panel-soft,#f6f8fb)}
.player-location-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.player-location-selects{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.player-location-selects label{display:grid;gap:6px}
.player-location-manager{margin-top:12px;padding-top:12px;border-top:1px solid var(--line,#d8dee8)}
.player-location-add{display:grid;grid-template-columns:minmax(110px,.8fr) minmax(120px,1fr) auto;gap:8px;align-items:center;margin-top:8px}
#playerFloorAdd{grid-template-columns:minmax(110px,.8fr) minmax(100px,1fr) 76px minmax(120px,1fr) auto}
.player-plan-location.location-unavailable .player-location-selects select,.player-plan-location.location-unavailable .player-location-manager button{opacity:.6;pointer-events:none}
.player-plan-location .location-error{display:block;margin-top:10px;padding:9px 10px;border-radius:8px;background:#8f1d25;color:#fff;font-weight:700}
@media(max-width:760px){.player-location-selects,.player-location-add,#playerFloorAdd{grid-template-columns:1fr}}

/* v195 — entêtes mobiles utilisables et filtres indépendants de la police d'icônes. */
.media-filter-icon{display:block;width:20px;height:20px;line-height:0}
.media-filter-icon svg{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.media-filter-button:not(.active):not([aria-pressed="true"])>.media-filter-icon,
.media-filter-button:not(.active):not([aria-pressed="true"])[data-media-filter="flow"]>.media-filter-icon{transform:none}

@media(max-width:900px){
  body[data-page="templates"]{--shared-library-header-height:auto}
  body[data-page="templates"] #pageContent>.template-page-header:not([hidden]){
    box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;width:100%;
    height:auto;min-height:112px;max-height:none;flex:0 0 auto;padding:10px 0;overflow:visible
  }
  body[data-page="templates"] .template-page-header>div:first-child{display:block;min-height:48px;width:100%}
  body[data-page="templates"] .template-page-header h1,
  body[data-page="templates"] .template-page-header p{white-space:normal;overflow:visible;text-overflow:clip}
  body[data-page="templates"] .template-page-header .page-header-actions{display:grid;grid-template-columns:1fr 1fr;width:100%;gap:8px}
  body[data-page="templates"] .template-page-header .page-header-actions button{width:100%;min-height:42px;margin:0}

  body[data-page="devices"] #pageContent>.devices-page-header{
    box-sizing:border-box;display:flex;flex-direction:column;align-items:stretch;width:100%;
    height:auto;min-height:132px;padding:10px 0;margin-bottom:10px;overflow:visible
  }
  body[data-page="devices"] .devices-page-header>div:first-child{width:100%;min-height:48px}
  body[data-page="devices"] .devices-header-actions{display:grid;grid-template-columns:minmax(0,1fr) auto auto;width:100%;gap:8px}
  body[data-page="devices"] .devices-header-actions .view-switch{min-width:0;width:100%}
  body[data-page="devices"] .devices-header-actions .view-button{justify-content:center;min-width:0;flex:1}

  #templateCollectionBackdrop{padding:8px}
  #templateCollectionBackdrop .template-collection-modal{
    box-sizing:border-box;width:100%;height:calc(100dvh - 16px);max-height:calc(100dvh - 16px);
    grid-template-rows:minmax(84px,auto) minmax(0,1fr);padding:10px
  }
  #templateCollectionBackdrop .template-collection-modal>header{
    box-sizing:border-box;min-height:84px;align-items:flex-start;padding:4px 2px 10px;overflow:visible
  }
  #templateCollectionBackdrop .template-collection-modal>header>div{min-width:0;padding-right:4px}
  #templateCollectionBackdrop .template-collection-modal>header p{white-space:normal;line-height:1.35}
  #templateCollectionBackdrop .collection-layout{min-height:0;height:100%;overscroll-behavior:contain}
  #templateCollectionBackdrop .collection-categories{position:sticky;top:0;z-index:2;min-height:54px;background:#fafbfc}
}

@media(max-width:520px){
  body[data-page="devices"] .devices-header-actions{grid-template-columns:1fr 1fr}
  body[data-page="devices"] .devices-header-actions .view-switch{grid-column:1/-1}
  body[data-page="devices"] #pageContent>.devices-page-header{min-height:174px}
}
.collection-card-id{display:block;padding:0 8px 7px;color:#cbd5e1;text-align:left;font-size:10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collection-detail-id{display:block;margin-top:3px;color:var(--muted);font-size:11px;font-weight:500;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}

.template-gradient-stops{display:grid;gap:6px}.template-gradient-stops .gradient-stop>span:last-child{display:grid;grid-template-columns:48px 1fr;gap:6px}.template-gradient-stops input{width:100%;margin:0!important}.template-gradient-stops [data-gradient-add]{width:100%;margin:0}.collection-categories>#templateCollectionImport{width:100%;margin-top:8px}

/* Planning: music list and voice-over markers. */
.planning-media-thumb{position:relative;display:block;flex:0 0 130px;min-width:0;height:100%}
.planning-playlist-tile-strip .planning-media-thumb{flex:1 1 0;width:auto;min-width:0;display:block}
.planning-media-thumb img{width:100%;height:100%;object-fit:cover}
.planning-voice-badge{position:absolute;right:3px;bottom:3px;background:#172033;color:#fff;border-radius:5px;padding:2px 4px;font-size:12px}
.planning-audio-list{flex:0 1 auto;min-height:0;max-height:100px;overflow:auto;margin-top:6px}
.planning-audio-item{display:flex;align-items:center;gap:8px;padding:4px 6px;font-size:12px;border-bottom:1px solid var(--line)}
.planning-audio-item img{width:24px;height:24px;flex:none}.planning-audio-item span{flex:1;min-width:0;overflow-wrap:anywhere}.planning-audio-item time{white-space:nowrap}

/* v229: hidden empty states must not occupy a grid row. */
[hidden]{display:none!important}
#templateEmpty[hidden]{display:none!important}

/* v230: voice-over indicator on playlist media, below the remove action. */
.track-audioguide-badge{position:absolute;z-index:4;right:7px;top:34px;width:25px;height:25px;padding:4px;border-radius:6px;background:rgba(15,23,42,.88);color:#fff;pointer-events:none}
.track-audioguide-badge svg{display:block;width:100%;height:100%}

/* Voice-over markers in scheduled playlist film strips. */
.planning-film-thumb{position:relative;display:block;width:100%}.planning-film-thumb img{display:block;width:100%}.planning-film-thumb .planning-voice-badge{z-index:2}

/* v232: usable mobile canvas and collection cards. */
@media(max-width:820px){
 body[data-page="templates"] #templateComposerView:not([hidden]){height:auto;min-height:0;overflow:visible}
 #templateComposerView .composer-topbar{flex-shrink:0}
 #templateComposerView .composer-workspace{display:flex;flex-direction:column;flex:none;min-height:0;overflow:visible}
 #templateComposerView .composer-center{order:0;flex:none;width:100%;height:auto;min-height:870px;display:grid;grid-template-rows:minmax(800px,1fr) auto}
 #templateComposerView .composer-viewport{height:800px;min-height:800px;max-height:none}
 #templateComposerView .composer-tools{order:1;max-height:none;overflow:visible}
 #templateComposerView .composer-properties{order:2;max-height:none;overflow:visible}
 #templateComposerView .composer-zoom{position:static;flex-wrap:wrap;min-height:70px}
 #templateCollectionBackdrop .collection-layout{display:flex;flex-direction:column;overflow:auto;height:100%;gap:12px}
 #templateCollectionBackdrop .collection-categories{position:static;flex:none;min-height:54px}
 #templateCollectionBackdrop .collection-browser{flex:none;min-height:0;overflow:visible}
 #templateCollectionBackdrop .collection-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;grid-auto-rows:minmax(260px,auto);gap:10px}
 #templateCollectionBackdrop .collection-card{height:100%;min-height:260px;grid-template-rows:minmax(190px,1fr) auto auto;align-content:stretch}
 #templateCollectionBackdrop .collection-card img{height:100%;min-height:190px;aspect-ratio:auto;object-fit:contain}
 #templateCollectionBackdrop .collection-card span{white-space:normal;line-height:1.3;padding:8px}
 #templateCollectionBackdrop .collection-card-id{white-space:normal;overflow-wrap:anywhere}
 #templateCollectionBackdrop .collection-properties{flex:none;min-height:320px;overflow:visible}
 #templateCollectionBackdrop .collection-preview{min-height:220px}
 #templateCollectionBackdrop .collection-properties button{position:static;min-height:44px;margin-top:8px}
}

/* v249 — mobile template canvas fits both viewport axes and business previews fill the canvas. */
.template-collection-stage-frame{display:block;width:100%;height:100%;border:0;background:#000}
@media(max-width:820px){
 body.app-body[data-page="templates"]{min-width:0;width:100%;overflow-x:hidden}
 #templateComposerView:not([hidden]){display:flex;flex-direction:column;gap:8px}
 #templateComposerView .composer-topbar{flex:0 0 auto}
 #templateComposerView .composer-workspace{display:flex;flex:0 0 auto;flex-direction:column;min-height:0;overflow:visible}
 #templateComposerView .composer-center{order:0;display:grid;flex:none;width:100%;height:auto;min-height:0;grid-template-rows:minmax(280px,55dvh) auto;overflow:visible}
 #templateComposerView .composer-viewport{width:100%;height:55dvh;min-height:280px;max-height:520px;overflow:auto;padding:24px 8px 8px 24px}
 #templateComposerView .template-stage-wrap{width:100%;min-width:0;min-height:100%;place-items:center}
 #templateComposerView .composer-tools{order:1;max-height:none;overflow:visible}
 #templateComposerView .composer-properties{order:2;max-height:none;overflow:visible}
}

/* v241 — compteur de templates et contrôles d’enregistrement des boîtiers. */
#templateLibraryView .template-category-filter-row #templateCount{flex:0 0 auto;white-space:nowrap;margin-left:6px;font-size:12px;opacity:.78}
.player-register-bar{grid-template-columns:minmax(0,1fr) auto;gap:10px 14px}
.player-register-bar .register-copy{grid-column:1/-1}
.player-register-bar .player-register-ip{display:grid;grid-template-columns:max-content minmax(120px,1fr);align-items:center;gap:8px;min-width:0;margin:0}
.player-register-bar .player-register-ip>span{white-space:nowrap}
.player-register-bar #newPlayerIp{min-width:0}
.player-register-bar #registerPlayerButton{grid-column:auto;align-self:center}
@media(max-width:600px){
  .player-register-bar{grid-template-columns:minmax(0,1fr) auto}
  .player-register-bar .player-register-ip{grid-template-columns:1fr;gap:3px}
  .player-register-bar .player-register-ip>span{font-size:11px}
  .player-register-bar #registerPlayerButton{padding:9px 10px;font-size:12px}
}

/* v242 — visual artwork selection in the associated art templates. */
.artwork-selector-field{display:grid;gap:10px;margin:14px 0}.artwork-selector{display:grid;gap:8px;min-width:0}.artwork-selector>input[type=hidden]{display:none}.artwork-selector>p{margin:0}.artwork-selector-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:8px;max-height:320px;overflow:auto;padding:2px}.artwork-selector-card{position:relative;display:grid;grid-template-rows:94px auto;gap:5px;min-width:0;padding:6px;border:1px solid var(--line);border-radius:9px;background:#fff;cursor:pointer}.artwork-selector-card:has(input:checked){border-color:var(--orange);box-shadow:0 0 0 2px rgba(249,115,22,.22)}.artwork-selector-card>input{position:absolute;z-index:1;top:9px;left:9px;width:20px!important;height:20px;accent-color:var(--orange)}.artwork-selector-thumb{display:grid;place-items:center;overflow:hidden;background:#f2efec;border-radius:6px;color:var(--muted);font-size:12px}.artwork-selector-thumb img{display:block;width:100%;height:100%;object-fit:cover}.artwork-selector-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
#newPlayerDeviceIdWrap[hidden]{display:none!important}

.account-licenses-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.account-licenses-header h2{margin:0 0 5px}.account-licenses-header p{margin:0;color:var(--muted)}.account-licenses-table{min-width:900px}.account-license-limit{display:flex;align-items:center;gap:12px;min-width:210px}.account-license-limit>input{width:105px;margin:0}.account-license-limit label{display:flex;align-items:center;gap:6px;margin:0;white-space:nowrap}.account-license-limit label input{margin:0}

/* Template composer: keep controls visible and properties compact on desktop widths below 1920px. */
.business-style-field{display:grid;grid-template-columns:minmax(112px,40%) minmax(0,1fr);align-items:center;gap:5px;margin:5px 0;font-size:10px}
.business-style-field>span{min-width:0;line-height:1.2}
.business-style-field input,.business-style-field select{width:100%;min-width:0;margin:0}
@media (min-width:801px) and (max-width:1919px){
  #templateComposerView .composer-zoom{display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap}
  #templateComposerView .composer-zoom-controls{justify-content:flex-start;flex-wrap:wrap;width:100%}
  #templateComposerView .template-mode-toggle{margin-left:0;align-self:flex-start}
  #templateComposerView .template-test-room{margin-left:0;justify-content:flex-start;flex:1 1 100%}
  #templateComposerView .properties-panel label:not(.toggle-row){grid-template-columns:minmax(90px,40%) minmax(0,1fr);align-items:center;gap:5px}
  #templateComposerView .properties-panel .triple-fields label{grid-template-columns:minmax(0,1fr)}
  #templateComposerView .properties-panel input:not([type=checkbox]),#templateComposerView .properties-panel select,#templateComposerView .properties-panel textarea{min-width:0}
}
.business-gradient-field{display:grid;gap:4px;min-width:0}
.business-gradient-field>select{width:100%;min-width:0}
.business-gradient-values{display:grid;grid-template-columns:minmax(54px,72px) repeat(2,minmax(38px,1fr));align-items:center;gap:4px;min-width:0}
.business-gradient-values[hidden]{display:none!important}
.business-gradient-values input{width:100%;min-width:0;margin:0}


/* v277 — correctif structurel bibliothèque Templates.
   Ne pas fixer grid-auto-rows à 176px : la carte peut être plus haute selon ses actions/métadonnées. */
#templateLibraryView #templateLibrary.template-library,
#templateLibraryView #templateLibrary {
  display:grid !important;
  grid-auto-rows:auto !important;
  align-items:start !important;
  align-content:start !important;
  column-gap:9px !important;
  row-gap:16px !important;
}
#templateLibraryView #templateLibrary .template-card {
  position:relative !important;
  box-sizing:border-box !important;
  display:grid !important;
  grid-template-rows:minmax(0,1fr) auto !important;
  height:176px !important;
  min-height:176px !important;
  max-height:none !important;
  margin:0 !important;
  align-self:start !important;
  overflow:hidden !important;
}
#templateLibraryView #templateLibrary .template-card-visual {
  position:relative !important;
  inset:auto !important;
  min-height:0 !important;
  height:auto !important;
  aspect-ratio:auto !important;
}
#templateLibraryView #templateLibrary .template-card-actions {
  position:absolute !important;
  top:6px !important;
  right:6px !important;
  bottom:auto !important;
  z-index:10 !important;
}
#templateLibraryView #templateLibrary .template-card-meta {
  position:relative !important;
  left:auto !important;
  right:auto !important;
  bottom:auto !important;
  z-index:4 !important;
  min-height:48px !important;
}
@media(max-width:700px){
 #templateLibraryView #templateLibrary.template-library,
 #templateLibraryView #templateLibrary {
   grid-template-columns:repeat(2,minmax(0,1fr)) !important;
   grid-auto-rows:auto !important;
   row-gap:14px !important;
 }
 #templateLibraryView #templateLibrary .template-card {
   aspect-ratio:auto !important;
   height:176px !important;
   min-height:176px !important;
   max-height:none !important;
 }
}


/* v278 — bibliothèque Templates : carte plus large et bouton + contenu.
   +24px environ par carte, sans déborder du conteneur. */
#templateLibraryView #templateLibrary.template-library,
#templateLibraryView #templateLibrary {
  grid-template-columns:repeat(auto-fill,minmax(214px,1fr)) !important;
  box-sizing:border-box !important;
  padding-left:4px !important;
  padding-right:4px !important;
}
#templateLibraryView #templateLibrary .template-card {
  min-width:0 !important;
  width:100% !important;
  overflow:hidden !important;
}
#templateLibraryView #templateLibrary .template-card-actions {
  left:auto !important;
  right:6px !important;
  transform:none !important;
  margin-left:0 !important;
  max-width:calc(100% - 12px) !important;
}
#templateLibraryView #templateLibrary .template-card-actions button,
#templateLibraryView #templateLibrary .template-card-actions .btn {
  box-sizing:border-box !important;
}
@media(max-width:700px){
 #templateLibraryView #templateLibrary.template-library,
 #templateLibraryView #templateLibrary {
   grid-template-columns:repeat(2,minmax(0,1fr)) !important;
   padding-left:2px !important;
   padding-right:2px !important;
 }
}

/* v369: device action icons and their hit areas, scaled by 1.6. */
:is(#deviceListView,#deviceGridView) .icon-action:is([data-action="restart"],[data-action="schedule"],[data-action="properties"]){width:51.2px;height:51.2px;flex:0 0 51.2px;font-size:27.2px;line-height:1}
#deviceGridView .snapshot-refresh{width:60.8px;height:60.8px}
#deviceGridView .snapshot-refresh .m2s-camera{font-size:44.8px;transform:none}

/* v290 compact model parameters */
:is(#templateSettingsFields,#templateCollectionFields)>label:not(:has(textarea)){display:flex;align-items:center;justify-content:space-between;gap:10px}:is(#templateSettingsFields,#templateCollectionFields)>label:not(:has(textarea))>span{flex:1;min-width:0}:is(#templateSettingsFields,#templateCollectionFields)>label:not(:has(textarea))>input:not([type=checkbox]),:is(#templateSettingsFields,#templateCollectionFields)>label>select{flex:1;min-width:0;max-width:60%}:is(#templateSettingsFields,#templateCollectionFields) .toggle-row{flex-direction:row-reverse;justify-content:flex-end}:is(#templateSettingsFields,#templateCollectionFields) .toggle-row input{flex:0}

/* v393: background playlist selection and ordered media thumbnails */
:is(#templateSettingsFields,#templateCollectionFields)>.background-playlist-picker{grid-column:1/-1;display:block;min-width:0;width:100%}
.background-playlist-picker>label{display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%}
.background-playlist-picker>label>select{display:block;width:100%;min-width:0;max-width:100%;box-sizing:border-box}
.background-playlist-preview{min-width:0;margin-top:12px}
.background-playlist-summary{font-size:12px;color:var(--muted,#64748b);margin:0 0 8px}
.background-playlist-media-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(120px,100%),1fr));gap:10px;padding:0;margin:0;list-style:none;max-height:400px;overflow:auto}
.background-playlist-media-list>li{display:flex;flex-direction:column;min-width:0;padding:7px;margin:0;border:1px solid var(--border,#dce2ea);border-radius:8px;gap:5px}
.background-playlist-thumb{position:relative;aspect-ratio:16/9;display:grid;place-items:center;overflow:hidden;background:var(--surface-alt,#e9eef5);border-radius:5px}
.background-playlist-thumb>span{font-size:30px;color:var(--muted,#64748b)}
.background-playlist-thumb>img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:var(--surface-alt,#e9eef5)}
.background-playlist-thumb>b{position:absolute;left:4px;top:4px;min-width:20px;padding:1px 4px;text-align:center;border-radius:4px;background:#142d45;color:#fff;font-size:11px}
.background-playlist-media-name{font-size:12px;line-height:1.35;overflow-wrap:anywhere}
.background-playlist-media-list small{font-size:11px;color:var(--muted,#64748b)}

.player-soundborn{border:1px solid var(--border,#d6dfeb);border-radius:10px;margin:14px 0;padding:12px}.player-soundborn .toggle-row{display:flex;align-items:center;gap:8px}.player-soundborn input[type=checkbox]{width:auto}

/* V407 — independent background audio, name only below the visual preview. */
.preview-audio-track{padding:8px 12px;border-top:1px solid var(--border,#64748b);font-size:14px;min-width:0;flex-shrink:0}.preview-audio-track[hidden]{display:none}.preview-audio-track span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-audio-track audio{display:none}
.preview-modal{grid-template-rows:auto minmax(0,1fr) auto auto auto}.preview-stage{min-height:0}
