/* TV catalog: fixed category rail, poster wall and a channel selection pane.
   Opt-in attribute is applied only to the TV viewport; phone keeps its layout. */html[data-tv-library] body{color:var(--iptv-text-1000);}html[data-tv-library] header{height:88px;flex-basis:88px;padding:0 32px;gap:14px;}html[data-tv-library] header .unified-bar{flex-basis:470px;}html[data-tv-library] main{padding:16px 32px 8px;gap:18px;grid-template-columns:330px minmax(0,1fr);}html[data-tv-library] main>aside{padding:14px 8px;border-radius:10px;background:var(--iptv-surface-851)!important;border:1px solid var(--iptv-border-125)!important;direction:ltr!important;}html[data-tv-library] main>aside>.eyebrow,html[data-tv-library] #account-note{display:none;}html[data-tv-library] #playlist-name{font-size:22px;line-height:1.3;margin:4px 14px 12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;direction:rtl;}html[data-tv-library] #library-special{padding:0 4px 10px;margin-bottom:6px;}html[data-tv-library] #library-special button{border-radius:5px;font-size:20px;min-height:48px;margin:2px 0;padding:10px 12px;direction:rtl;}html[data-tv-library] #categories{padding:4px;scroll-padding:8px;}html[data-tv-library] #categories button{min-height:56px;font-size:20px;line-height:1.45;padding:12px;margin:0;border:0!important;border-bottom:1px solid var(--iptv-border-94)!important;border-radius:3px;direction:rtl;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}html[data-tv-library] #categories button.active,html[data-tv-library] #library-special button.active{background:var(--media-accent,#80cfff)!important;color:var(--iptv-muted-1000)!important;}html[data-tv-library] .heading{height:50px;flex-basis:50px;margin:0 0 5px;padding:0 8px 8px;}html[data-tv-library] .heading .eyebrow{display:none;}html[data-tv-library] .heading h2{font-size:25px;margin:0;}html[data-tv-library] #status{font-size:15px;min-height:20px;margin:0 8px 4px;}html[data-tv-library] body[data-kind] #items,html[data-tv-library] body[data-density=compact] #items{grid-template-columns:repeat(5,minmax(0,1fr));grid-auto-rows:var(--tv-poster-row,400px);gap:14px;grid-gap:14px;padding:7px;direction:ltr;}html[data-tv-library] .items .item .tile,html[data-tv-library] body[data-kind] .items .item .tile{padding:0;border-radius:8px;background:var(--iptv-surface-1000)!important;border:1px solid var(--iptv-border-145)!important;position:relative;overflow:hidden;gap:0;}html[data-tv-library] body[data-kind] .items .item .tile img{object-fit:cover;padding:0!important;border-radius:0;flex:1;width:100%;height:0;min-height:0;}html[data-tv-library] .tile strong{font-size:19px;min-height:0;max-height:58px;padding:8px 10px;line-height:1.3;text-align:start;flex-shrink:0;}html[data-tv-library] .tile .resume-tag{padding:0 10px 7px;font-size:14px;}html[data-tv-library] .tv-rating{position:absolute;left:8px;top:8px;padding:4px 8px;border-radius:5px;background:var(--iptv-surface-1000);color:var(--iptv-text-1000);font-size:16px;box-shadow:0 2px 8px var(--iptv-shadow-600);}html[data-tv-library] .pagination{flex-basis:32px;min-height:32px;margin:0;gap:15px;}html[data-tv-library] .pagination button{font-size:15px;padding:5px 18px;border-radius:7px;}html[data-tv-library] #page-number{font-size:13px;}html[data-tv-library] footer{height:22px;flex-basis:22px;font-size:10px;padding:3px 32px;}html[data-tv-library] button:focus,html[data-tv-library] select:focus,html[data-tv-library] input:focus{outline:3px solid var(--iptv-accent-1000);outline-offset:1px;box-shadow:0 0 0 5px var(--media-accent,#80cfff)!important;transform:none;}html[data-tv-library] #tv-live-preview{display:none;}html[data-tv-library] body[data-kind=live] main>section{display:grid;grid-template-columns:minmax(300px,0.9fr) minmax(360px,1.1fr);grid-template-rows:50px 24px minmax(0,1fr) 32px;column-gap:24px;direction:ltr;}html[data-tv-library] body[data-kind=live] .heading{grid-column:1 / 3;grid-row:1;}html[data-tv-library] body[data-kind=live] #status{grid-column:1 / 3;grid-row:2;}html[data-tv-library] body[data-kind=live] .items{grid-column:1;grid-row:3;display:flex;flex-direction:column;padding:6px;gap:2px;scroll-padding:8px;}html[data-tv-library] body[data-kind=live] .item{flex:0 0 64px;height:64px;}html[data-tv-library] body[data-kind=live] .items .item .tile{flex-direction:row;align-items:center;padding:6px 12px;min-height:64px;border-radius:3px;background:var(--iptv-surface-1000)!important;border:0!important;border-bottom:1px solid var(--iptv-border-133)!important;text-align:start;}html[data-tv-library] body[data-kind=live] .items .item .tile img{width:48px;height:48px;flex:0 0 48px;object-fit:contain;padding:4px!important;background:var(--iptv-surface-1000);border-radius:5px;}html[data-tv-library] body[data-kind=live] .tile .placeholder{flex:0 0 48px;font-size:26px;}html[data-tv-library] body[data-kind=live] .tile strong{flex:1;min-width:0;font-size:20px;padding:8px 12px;line-height:1.4;white-space:nowrap;display:block;text-overflow:ellipsis;max-height:none;}html[data-tv-library] body[data-kind=live] .tile.favorite:after{position:static;font-size:18px;padding:3px;}html[data-tv-library] body[data-kind=live] .tile.tv-selected-channel{background:var(--iptv-surface-1000)!important;}html[data-tv-library] body[data-kind=live] .pagination{grid-column:1;grid-row:4;}html[data-tv-library] body[data-kind=live] #tv-live-preview{display:flex;grid-column:2;grid-row:3 / 5;flex-direction:column;align-items:stretch;background:none!important;border:0!important;border-radius:0;padding:10px;min-width:0;direction:rtl;overflow:auto;}html[data-tv-library] .tv-preview-art{position:relative;aspect-ratio:16 / 9;height:30vh;flex-shrink:0;background:var(--iptv-surface-1000);display:flex;align-items:center;justify-content:center;border:1px solid var(--iptv-border-145);border-radius:8px;margin-bottom:24px;}html[data-tv-library] .tv-preview-art img{max-width:60%;max-height:65%;object-fit:contain;z-index:1;}html[data-tv-library] .tv-preview-art>span{position:absolute;font-size:60px;color:var(--iptv-text-94);}html[data-tv-library] #tv-channel-name{font-size:30px;line-height:1.5;margin:8px 0;}html[data-tv-library] #tv-preview-hint{font-size:18px;line-height:1.6;color:var(--iptv-text-1000);}html[data-tv-library] #tv-live-preview button{font-size:20px;margin:5px 0;padding:13px 20px;border-radius:7px;}html[data-tv-library] #tv-channel-play{background:var(--media-accent,#80cfff);color:var(--iptv-muted-1000);}html[data-tv-library] .details-overlay{padding:24px;background:var(--iptv-surface-961);backdrop-filter:none;}html[data-tv-library] .details-dialog{width:100%!important;height:100%;max-height:none!important;border-radius:12px;padding:30px!important;display:grid!important;grid-template-columns:270px minmax(0,1fr);grid-template-rows:minmax(0,1fr);gap:28px!important;grid-gap:28px!important;direction:ltr;overflow:hidden!important;}html[data-tv-library] .details-dialog>img{width:100%!important;height:100%!important;max-height:75vh!important;object-fit:contain!important;margin:0!important;border-radius:8px;align-self:start;}html[data-tv-library] .detail-copy{max-height:none;padding:0 10px!important;direction:rtl;overflow:auto;}html[data-tv-library] .detail-copy h2{font-size:38px;margin:4px 0 16px;}html[data-tv-library] .detail-copy p{font-size:21px;line-height:1.6;margin:8px 0;}html[data-tv-library] .detail-actions{margin-top:18px;}html[data-tv-library] .detail-actions button{font-size:20px;min-height:50px;padding:12px 20px;border-radius:6px;}/* Compact series header: smaller poster column and tighter copy so the
   episode list keeps most of the dialog height. */html[data-tv-library] .details-dialog.tv-series-detail{grid-template-rows:minmax(0,34%) minmax(0,1fr);grid-template-columns:200px minmax(0,1fr);}html[data-tv-library] .tv-series-detail .detail-copy h2{font-size:32px;margin:2px 0 8px;}html[data-tv-library] .tv-series-detail .detail-copy p{font-size:19px;line-height:1.5;margin:5px 0;}html[data-tv-library] .tv-series-detail .detail-actions{margin-top:10px;}html[data-tv-library] .tv-series-detail .detail-actions button{min-height:48px;}html[data-tv-library] .tv-series-detail>img{height:100%!important;max-height:100%!important;}html[data-tv-library] #tv-series-episodes{grid-row:2;grid-column:1 / 3;min-height:0;display:flex;flex-direction:column;border-top:1px solid var(--iptv-border-188);padding-top:12px;direction:rtl;}html[data-tv-library] .tv-episode-toolbar{display:flex;align-items:center;gap:16px;flex-shrink:0;padding:0 6px;}html[data-tv-library] .tv-episode-toolbar h3{font-size:24px;margin:0 auto 0 0;}html[data-tv-library] .tv-episode-toolbar select{font:20px Tahoma;background:var(--iptv-surface-1000);color:var(--iptv-text-1000);border:1px solid var(--iptv-border-1000);padding:9px 16px;border-radius:5px;min-width:180px;}html[data-tv-library] .tv-episode-toolbar label{font-size:18px;}html[data-tv-library] .tv-episode-toolbar button{font-size:17px;padding:9px 16px;border-radius:5px;}html[data-tv-library] #tv-episodes-status{font-size:14px;margin:4px 10px;color:var(--iptv-text-1000);flex-shrink:0;}html[data-tv-library] #tv-episode-list{overflow:auto;min-height:0;padding:4px 6px;scroll-padding:8px;}html[data-tv-library] .tv-episode{display:flex;align-items:center;gap:16px;width:100%;border:0;border-bottom:1px solid var(--iptv-border-125);border-radius:4px;background:var(--iptv-surface-400);margin:0 0 6px;padding:8px 10px;text-align:start;direction:ltr;}html[data-tv-library] .tv-episode>img{width:190px;height:104px;flex-shrink:0;object-fit:contain;background:var(--iptv-surface-1000);border-radius:5px;margin-right:16px;}html[data-tv-library] .tv-episode>span{min-width:0;flex:1;unicode-bidi:plaintext;}html[data-tv-library] .tv-episode strong{display:block;font-size:21px;margin-bottom:6px;}html[data-tv-library] .tv-episode small{display:block;font-size:16px;color:var(--media-accent,#80cfff);}html[data-tv-library] .tv-episode-plot{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:17px;line-height:1.5;margin-top:7px;color:var(--iptv-text-1000);}@media(max-width:1400px){html[data-tv-library] header{height:74px;flex-basis:74px;padding:0 22px;gap:8px;}html[data-tv-library] main{grid-template-columns:265px minmax(0,1fr);padding:12px 22px 6px;gap:14px;}html[data-tv-library] #categories button{font-size:17px;min-height:48px;padding:10px;}html[data-tv-library] #library-special button{font-size:17px;min-height:42px;}html[data-tv-library] body[data-kind] #items,html[data-tv-library] body[data-density=compact] #items{grid-template-columns:repeat(5,minmax(0,1fr));grid-auto-rows:var(--tv-poster-row,250px);gap:10px;grid-gap:10px;}html[data-tv-library] .tile strong{font-size:15px;padding:6px;max-height:47px;}html[data-tv-library] body[data-kind=live] main>section{grid-template-columns:minmax(240px,1fr) minmax(260px,1fr);column-gap:12px;}html[data-tv-library] body[data-kind=live] .item{flex-basis:53px;height:53px;}html[data-tv-library] body[data-kind=live] .items .item .tile{min-height:53px;padding:3px 8px;}html[data-tv-library] body[data-kind=live] .tile strong{font-size:17px;padding:6px 10px;}html[data-tv-library] body[data-kind=live] .items .item .tile img{width:40px;height:40px;flex-basis:40px;}html[data-tv-library] #tv-channel-name{font-size:23px;}html[data-tv-library] #tv-preview-hint{font-size:16px;}html[data-tv-library] #tv-live-preview button{font-size:17px;padding:10px;}html[data-tv-library] .details-dialog{grid-template-columns:190px minmax(0,1fr);padding:20px!important;gap:20px!important;grid-gap:20px!important;}html[data-tv-library] .details-dialog.tv-series-detail{grid-template-rows:minmax(0,38%) minmax(0,1fr);grid-template-columns:150px minmax(0,1fr);}html[data-tv-library] .detail-copy h2{font-size:28px;margin-bottom:8px;}html[data-tv-library] .detail-copy p{font-size:17px;line-height:1.45;}html[data-tv-library] .detail-actions{margin-top:10px;}html[data-tv-library] .detail-actions button{font-size:16px;min-height:42px;padding:9px 13px;}html[data-tv-library] .tv-episode>img{width:140px;height:80px;}html[data-tv-library] .tv-episode strong{font-size:19px;}}html[data-tv-library] body[data-kind=live] #items{display:flex;grid-auto-rows:auto;}/* A separate remote-focusable favorite control for each live channel. */html[data-tv-library] body[data-kind=live] .items .item{display:flex;gap:6px;align-items:stretch;}html[data-tv-library] body[data-kind=live] .items .item .tile{flex:1;min-width:0;}html[data-tv-library] .tv-live-favorite{flex:0 0 56px;width:56px;padding:0;border:1px solid var(--iptv-border-188);border-radius:6px;background:var(--iptv-surface-1000);color:var(--iptv-text-1000);font-size:30px;}html[data-tv-library] .tv-live-favorite[aria-pressed=true]{color:var(--iptv-accent-1000);background:var(--iptv-surface-1000);}/* One scroll container for favourites, recent/resume and provider categories. */html[data-tv-library] body main>aside{display:block;min-height:0;height:100%;overflow-y:auto;overflow-x:hidden;scroll-padding:14px;}html[data-tv-library] body main>aside #categories{flex:none;min-height:0;max-height:none;overflow:visible;height:auto;}html[data-tv-library] body main>aside #library-special{flex:none;}

/* TV catalog columns must also work on pre-Grid webOS/Tizen engines. */
html[data-tv-library] body main{display:flex!important;flex-direction:row!important;align-items:stretch;gap:0!important;grid-gap:0!important;}
html[data-tv-library] body main[hidden]{display:none!important;}
html[data-tv-library] body main>aside{box-sizing:border-box;flex:0 0 400px;width:400px;max-width:400px;min-width:0;height:auto;align-self:stretch;margin-right:16px;overflow-y:auto;overflow-x:hidden;}
html[data-tv-library] body main>section{flex:1 1 0%;width:0;min-width:0;min-height:0;}
@media(max-width:1400px){html[data-tv-library] body main>aside{flex-basis:290px;width:290px;max-width:290px;margin-right:12px;}}

/* Saved series continuation is independent of the moving remote focus. */
.tv-episode.is-continue-episode{background:var(--ui-control-selected-bg,var(--iptv-selection-bg,rgba(91,146,244,.24)))!important;border:2px solid var(--iptv-accent,var(--media-accent,#638cff))!important;box-shadow:inset 5px 0 0 var(--iptv-accent,var(--media-accent,#638cff))!important}.tv-episode .episode-continue-label{display:inline-block;align-self:flex-start;max-width:100%;padding:3px 10px;margin-bottom:5px;border-radius:7px;background:var(--iptv-accent,var(--media-accent,#638cff));color:var(--iptv-accent-ink,#fff);font-weight:700;font-size:.85em;line-height:1.4}.tv-episode.is-continue-episode:focus{outline:3px solid var(--media-accent,#fff);outline-offset:2px}

.tv-episode-progress{display:block;width:100%;height:6px;margin-top:6px;accent-color:var(--media-accent,#8aaeff)}.tv-episode-position{display:block;opacity:.85;margin-top:4px}
