/* Broadcast OS SCMA module stylesheet: watch. Module-specific rules belong here. Shared shell rules remain in modules/core/shell.css. */

/* v1.7.14 — Meeting room live-screen control discipline.
   Only the basic participant bar is persistent. Chat and gestures are available
   to every user through compact panels. Studio, host tools, and named invites
   are creator-only and never shown to participants. */
.watch-program,.watch-audience-monitor{position:relative;min-height:360px;overflow:hidden}
.watch-program{padding-bottom:62px;box-sizing:border-box}
.bos-meeting-overlay{position:absolute;left:0;right:0;bottom:0;z-index:60;pointer-events:none;display:block}
.bos-meeting-overlay > *{pointer-events:auto}
.bos-meet-strip{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;gap:6px;max-width:calc(100% - 14px);padding:6px;border:1px solid rgba(255,255,255,.12);border-radius:22px;background:rgba(5,9,18,.74);backdrop-filter:blur(14px);box-shadow:0 14px 40px rgba(0,0,0,.34);overflow-x:auto;overscroll-behavior-x:contain}
.bos-icon-btn,.bos-meet-strip select{border:1px solid rgba(255,255,255,.16);border-radius:999px;background:rgba(14,23,40,.94);color:#f5f7fb;min-height:34px;padding:6px 10px;font-size:.74rem;font-weight:800;white-space:nowrap;cursor:pointer;line-height:1}
.bos-icon-btn:hover,.bos-meet-strip select:hover{border-color:rgba(255,255,255,.34)}
.bos-meet-panel{position:absolute;left:10px;right:10px;bottom:58px;display:none;z-index:64;border:1px solid rgba(255,255,255,.13);border-radius:18px;background:rgba(5,9,18,.86);backdrop-filter:blur(14px);color:#f5f7fb;box-shadow:0 18px 55px rgba(0,0,0,.42);max-height:min(42vh,320px);overflow:auto}
.bos-meet-panel.open{display:block}.bos-meet-panel.compact{left:auto;right:10px;width:min(260px,calc(100% - 20px))}.bos-meet-panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border-bottom:1px solid rgba(255,255,255,.08)}.bos-meet-panel-head strong{font-size:.82rem}.bos-meet-panel-head button{border:0;background:transparent;color:#fff;font-size:1.2rem;line-height:1;cursor:pointer}
.bos-meet-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:10px}.bos-meet-row.compact label{display:grid;gap:3px;font-size:.72rem;min-width:120px;flex:1}.bos-meet-row select,.bos-meet-row input,.bos-meet-chat select,.bos-meet-chat input,.bos-meet-invite input{background:#0b1220;color:#f5f7fb;border:1px solid rgba(255,255,255,.16);border-radius:10px;padding:7px 9px;min-height:34px}.bos-meet-chat{display:grid;gap:8px;padding:10px}.bos-meet-name-line{display:grid;grid-template-columns:auto 1fr;gap:8px;align-items:center;font-size:.72rem;color:#dbe7ff}.bos-meet-name-line input{background:#0b1220;color:#f5f7fb;border:1px solid rgba(255,255,255,.16);border-radius:10px;padding:7px 9px;min-height:34px}.bos-meet-chat form{display:grid;grid-template-columns:minmax(92px,130px) 1fr auto;gap:6px}.bos-meet-chat .chat-log{max-height:160px;overflow:auto}.bos-meet-chat .chat-msg.mine strong{color:#9fd6ff}.bos-meet-gesture-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:12px}.bos-meet-gesture-grid .bos-icon-btn{font-size:1.2rem;min-height:42px}.bos-meet-invite{display:grid;grid-template-columns:minmax(120px,1fr) auto minmax(160px,1.6fr);gap:8px;padding:10px}.bos-meet-invite input[readonly]{opacity:.86}.bos-creator-float{position:absolute;right:10px;top:10px;z-index:66;border:1px solid rgba(255,255,255,.18);border-radius:999px;background:rgba(10,16,30,.8);color:#fff;padding:7px 10px;font-size:.72rem;font-weight:900;box-shadow:0 10px 30px rgba(0,0,0,.35);cursor:pointer}.bos-meet-reaction{position:absolute;z-index:70;right:18px;top:18px;padding:10px 14px;border-radius:999px;background:rgba(0,0,0,.72);color:white;font-size:1.25rem;animation:bosMeetFloat 2.6s ease forwards;pointer-events:none}@keyframes bosMeetFloat{0%{opacity:0;transform:translateY(10px) scale(.92)}15%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:0;transform:translateY(-70px) scale(1.1)}}
.bos-meet-annotation-canvas{position:absolute;inset:0;z-index:50;width:100%;height:100%;touch-action:none;cursor:crosshair;background:transparent}.bos-meet-immersive{border-radius:28px;overflow:hidden;background:radial-gradient(circle at 50% 20%,rgba(61,105,255,.24),rgba(10,16,30,.96) 55%,rgba(3,6,13,.98));padding:18px}.bos-meet-immersive .watch-cell,.bos-meet-immersive [data-watch-source]{box-shadow:0 18px 45px rgba(0,0,0,.35);border-radius:22px;overflow:hidden}
@media(max-width:760px){.watch-program,.watch-audience-monitor{min-height:70vh}.watch-program{padding-bottom:56px}.bos-meet-strip{bottom:6px;gap:4px;padding:5px;max-width:calc(100% - 8px)}.bos-icon-btn{min-height:32px;padding:5px 8px;font-size:.68rem}.bos-meet-panel{left:6px;right:6px;bottom:52px;max-height:38vh}.bos-meet-chat form,.bos-meet-invite{grid-template-columns:1fr}.bos-meet-row.compact label{min-width:100%}.bos-creator-float{top:6px;right:6px;font-size:.68rem;padding:6px 8px}}
/* v1.7.15 — compact live-room presence inside Speak drawer. Does not add another live-screen bar. */
.bos-presence-count{font-size:.68rem;font-weight:900;color:#cfe7ff;border:1px solid rgba(255,255,255,.14);border-radius:999px;padding:4px 8px;background:rgba(17,28,49,.72);white-space:nowrap}
.bos-presence-details{border:1px solid rgba(255,255,255,.1);border-radius:12px;background:rgba(8,14,26,.55);overflow:hidden}
.bos-presence-details summary{cursor:pointer;list-style:none;padding:8px 10px;font-size:.76rem;font-weight:900;color:#e9f3ff}
.bos-presence-details summary::-webkit-details-marker{display:none}
.bos-presence-list{display:grid;gap:4px;padding:0 8px 8px;max-height:120px;overflow:auto}
.bos-presence-row{display:flex;align-items:center;justify-content:space-between;gap:10px;border-radius:10px;padding:6px 8px;background:rgba(255,255,255,.05)}
.bos-presence-row strong{font-size:.76rem;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bos-presence-row span{font-size:.66rem;color:#bcd0e8;white-space:nowrap}
@media(max-width:760px){.bos-presence-list{max-height:86px}.bos-presence-row{padding:5px 7px}.bos-presence-count{font-size:.62rem;padding:3px 6px}}

/* v1.7.17 — Creator controls restored inside Meeting Mode. Creator-only float is outside the participant bottom bar and does not appear for guests. */
.bos-creator-float[hidden], .bos-meet-panel[hidden]{display:none !important}
.bos-creator-float{background:rgba(32,88,255,.88);border-color:rgba(180,210,255,.42);letter-spacing:.01em}
#bosMeetHostPanel .btn.primary{background:#2563eb;color:#fff;border-color:#7aa7ff}
@media(max-width:760px){.bos-creator-float{top:7px;right:7px;max-width:92px;overflow:hidden;text-overflow:ellipsis}}

/* v1.7.19 — Preserve creator room options without removing universal gestures/chat. */
.bos-meet-options{display:grid;gap:10px;padding:10px}
.bos-meet-options label{display:grid;gap:5px;font-size:.74rem;font-weight:800;color:#dbe7ff}
.bos-meet-options select{background:#0b1220;color:#f5f7fb;border:1px solid rgba(255,255,255,.16);border-radius:10px;padding:8px 9px;min-height:36px}
#bosMeetHostPanel .btn{min-height:34px}
#bosMeetRoomOptionsOpen{border-color:rgba(125,190,255,.42)}
@media(max-width:760px){.bos-meet-options{gap:8px}.bos-meet-options select{min-height:34px}.bos-creator-float{max-width:none}}

/* v1.7.20 — local Meeting view selector and auto-speaker toggle live inside
   Speak/Viewers so the persistent bottom bar remains Mic/Video/Share/Speak/Gestures only. */
.bos-meet-view-line,.bos-meet-auto-speaker{display:grid;grid-template-columns:auto 1fr;gap:8px;align-items:center;font-size:.72rem;color:#dbe7ff}
.bos-meet-view-line select{background:#0b1220;color:#f5f7fb;border:1px solid rgba(255,255,255,.16);border-radius:10px;padding:7px 9px;min-height:34px}
.bos-meet-auto-speaker{display:flex;justify-content:space-between;border:1px solid rgba(255,255,255,.1);border-radius:12px;background:rgba(8,14,26,.55);padding:8px 10px;font-weight:900}
.bos-meet-auto-speaker input{width:18px;height:18px;accent-color:#60a5fa}


/* v1.7.25 — participant controls are mandatory. Keep Mic/Video/Share/Speak/Gestures above the Meeting overlay on every device. */
.watch-audience-monitor{position:relative}
#bosMeetingTools{display:block !important;visibility:visible !important;opacity:1 !important}
#bosMeetingTools .bos-meet-strip{z-index:90}
#watchProgram.watch-program{min-height:360px}
@media(max-width:760px){#watchProgram.watch-program{min-height:70vh}}

/* v1.7.39 — Contributor Room View iframe: live-only reference monitor.
   This strips the public watch chrome/hero while preserving native chat. */
html.bos-contrib-room-view,
body.bos-contrib-room-view{
  margin:0;
  padding:0;
  width:100%;
  min-height:100%;
  background:#000;
  overflow:hidden;
}
body.bos-contrib-room-view .topbar,
body.bos-contrib-room-view .detail-hero,
body.bos-contrib-room-view #watchBtn,
body.bos-contrib-room-view #postBtn,
body.bos-contrib-room-view #comments,
body.bos-contrib-room-view #commentForm{
  display:none !important;
}
body.bos-contrib-room-view .main{
  min-height:100dvh;
  padding:0 !important;
  margin:0 !important;
}
body.bos-contrib-room-view .watch-grid{
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(210px, 280px);
  gap:0;
  width:100vw;
  height:100dvh;
  padding:0;
  margin:0;
  align-items:stretch;
  justify-content:stretch;
}
body.bos-contrib-room-view .watch-grid > section,
body.bos-contrib-room-view .watch-grid > aside{
  min-width:0;
  min-height:0;
}
body.bos-contrib-room-view #watchMon.monitor,
body.bos-contrib-room-view #watchProgram.watch-program{
  width:100% !important;
  height:100dvh !important;
  min-height:100dvh !important;
  max-height:none !important;
  border:0 !important;
  border-radius:0 !important;
  margin:0 !important;
}
body.bos-contrib-room-view #watchProgram .watch-program-grid,
body.bos-contrib-room-view #watchProgram .watch-cell{
  min-height:100%;
  height:100%;
}
body.bos-contrib-room-view .panel.chat{
  border:0;
  border-left:1px solid rgba(255,255,255,.12);
  border-radius:0;
  margin:0;
  height:100dvh;
  max-height:100dvh;
  background:rgba(7,12,22,.98);
  overflow:hidden;
  display:flex;
  flex-direction:column;
}
body.bos-contrib-room-view .panel.chat h2{
  flex:0 0 auto;
  margin:0;
  padding:9px 10px;
  font-size:.84rem;
  border-bottom:1px solid rgba(255,255,255,.1);
}
body.bos-contrib-room-view .chat-log{
  flex:1 1 auto;
  min-height:0;
  overflow:auto;
  padding:8px;
}
body.bos-contrib-room-view #chatForm{
  flex:0 0 auto;
  display:grid;
  grid-template-columns:1fr auto;
  gap:6px;
  padding:8px;
  border-top:1px solid rgba(255,255,255,.1);
}
body.bos-contrib-room-view #chatForm input{min-width:0;}
@media(max-width:720px){
  body.bos-contrib-room-view .watch-grid{grid-template-columns:1fr; grid-template-rows:1fr auto;}
  body.bos-contrib-room-view #watchMon.monitor,
  body.bos-contrib-room-view #watchProgram.watch-program{height:68dvh !important; min-height:68dvh !important;}
  body.bos-contrib-room-view .panel.chat{height:32dvh; max-height:32dvh; border-left:0; border-top:1px solid rgba(255,255,255,.12);}
}

/* v1.7.41 — true live-view-first program surface and media program rendering */
html.bos-live-entered,body.bos-live-entered{background:#000}
body.bos-live-entered .detail-hero{display:none!important}
body.bos-live-entered .watch-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:12px;min-height:calc(100vh - 88px)}
body.bos-live-entered .watch-grid>section{min-width:0}
body.bos-live-entered .panel:has(#comments){display:none!important}
body.bos-live-entered #watchMon{min-height:calc(100vh - 110px);height:calc(100vh - 110px);background:#000;border-radius:18px;overflow:hidden}
body.bos-live-entered .chat{max-height:calc(100vh - 110px);overflow:auto;background:rgba(4,8,18,.84);backdrop-filter:blur(14px)}
.watch-program-media{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:#000;overflow:hidden}
.watch-program-media img,.watch-program-media video{width:100%;height:100%;object-fit:contain;background:#000}
.watch-program-media audio{width:min(560px,92%)}
.watch-media-card{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;min-width:min(560px,92%);padding:30px;border:1px solid rgba(255,255,255,.16);border-radius:22px;background:linear-gradient(180deg,rgba(255,255,255,.09),rgba(255,255,255,.03));color:#fff;text-align:center}
.watch-media-caption{position:absolute;left:18px;bottom:18px;padding:8px 13px;border-radius:999px;background:rgba(0,0,0,.58);backdrop-filter:blur(10px);color:#fff;font-size:12px;letter-spacing:.06em;text-transform:uppercase}
@media(max-width:860px){body.bos-live-entered .watch-grid{grid-template-columns:1fr}body.bos-live-entered .chat{max-height:38vh}body.bos-live-entered #watchMon{height:62vh;min-height:380px}}

/* v1.7.43 — released movie/show playback asset */
.watch-release-playback{width:100%;height:100%;max-height:72vh;object-fit:contain;background:#000;border-radius:inherit;display:block}

/* v1.7.46 — viewer-side QCam look application for stored source metadata */
video.qcam-profile-feature_cinema{filter:contrast(calc(1 + var(--qcam-intensity, .6) * .14)) saturate(calc(1 - var(--qcam-intensity, .6) * .06)) sepia(calc(var(--qcam-intensity, .6) * .08)) brightness(1.015)}
video.qcam-profile-music_video{filter:contrast(calc(1 + var(--qcam-intensity, .6) * .22)) saturate(calc(1 + var(--qcam-intensity, .6) * .32)) brightness(1.03) hue-rotate(calc(var(--qcam-intensity, .6) * -2deg))}
video.qcam-profile-documentary{filter:contrast(calc(1 + var(--qcam-intensity, .6) * .07)) saturate(calc(1 + var(--qcam-intensity, .6) * .08)) brightness(1.01)}
video.qcam-profile-neutral{filter:none}
.watch-cell:has(video.qcam-profile-feature_cinema),.watch-cell:has(video.qcam-profile-music_video),.watch-cell:has(video.qcam-profile-documentary){position:relative}
.watch-cell:has(video.qcam-profile-feature_cinema)::after,.watch-cell:has(video.qcam-profile-music_video)::after,.watch-cell:has(video.qcam-profile-documentary)::after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 35%, rgba(255,255,255,calc(var(--qcam-diffusion, .2) * .14)), transparent 44%), linear-gradient(transparent, rgba(0,0,0,calc(var(--qcam-intensity, .5) * .10)));mix-blend-mode:screen;opacity:.75}

/* v1.7.49 — safe visual zoom/framing on viewer/program screens; no canvas track replacement required. */
.watch-cell,#watchProgram .watch-cell,.watch-program-grid [data-watch-source]{overflow:hidden;position:relative;background:#000}
.watch-cell video,#watchProgram .watch-cell video,.watch-program-grid [data-watch-source] video{width:100%;height:100%;object-fit:cover;display:block;transition:transform .08s linear;backface-visibility:hidden}


/* v1.7.50 — stable viewer zoom crop: no CSS transform on WebRTC video. */
.watch-cell,#watchProgram .watch-cell,.watch-program-grid [data-watch-source]{overflow:hidden;position:relative;background:#000;}
.watch-cell video,#watchProgram .watch-cell video,.watch-program-grid [data-watch-source] video{transition:none!important;transform:none!important;}
