/* Better Film Guide. One stylesheet, sectioned the same way the markup is. */
:root{
  --bg:#0d0d0f; --bg2:#141418; --bg3:#1c1c22; --line:#2a2a33;
  --fg:#f2f2f5; --dim:#9a9aa8; --dim2:#6e6e7e;
  --acc:#ff3b30; --acc2:#ffd60a; --ok:#30d158;
  --r:10px;
  --ctl:36px;   /* one height for every control in the bar */
}
*{box-sizing:border-box}
/* A class with display: beats the UA [hidden] rule, so state it explicitly. */
[hidden]{display:none !important}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--fg);
  font:15px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}

/* ---------- header ---------- */
header{
  position:sticky; top:0; z-index:50; background:rgba(13,13,15,.94);
  backdrop-filter:saturate(160%) blur(12px); border-bottom:1px solid var(--line);
}
.bar{display:flex;align-items:center;gap:12px;padding:11px 20px}
.brand{display:flex;flex-direction:column;line-height:1.15;flex:0 0 auto}
.brand b{font-size:15.5px;letter-spacing:-.01em;white-space:nowrap}
.brand span{font-size:11px;color:var(--dim2);text-transform:uppercase;letter-spacing:.08em}

.tabs{display:flex;gap:2px;background:var(--bg3);padding:3px;border-radius:8px;
  flex:0 0 auto;height:var(--ctl)}
.tabs button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:7px;
  padding:0 11px;border-radius:6px;font-size:13.5px;color:var(--dim);white-space:nowrap}
.tabs button.on{background:var(--bg);color:var(--fg);box-shadow:0 1px 3px rgba(0,0,0,.5)}
.tabs button svg{width:15px;height:15px;flex:0 0 auto}
/* An empty counter is still a flex item, and its gap pushed the My List icon
   7px off centre against its siblings. */
.tabs em{font-style:normal;opacity:.6}
.tabs em:empty{display:none}

/* Labels drop out once the bar gets tight; icons plus title carry the meaning. */
@media(max-width:1180px){
  .tabs button > span{display:none}
  .tabs button{padding:0 10px}
  /* Counter becomes a badge so it cannot widen the button or shift the icon. */
  .tabs em:not(:empty){
    position:absolute;top:1px;right:1px;opacity:1;
    min-width:14px;height:14px;padding:0 3px;border-radius:7px;
    display:grid;place-items:center;
    background:var(--acc2);color:#000;font-size:9.5px;font-weight:700;line-height:1}
}

.search{flex:1 1 auto;min-width:120px;position:relative}
.search input{
  width:100%;height:var(--ctl);padding:0 12px 0 34px;background:var(--bg3);
  border:1px solid var(--line);border-radius:8px;color:var(--fg);font-size:14px;outline:none
}
.search input:focus{border-color:#3d3d4a}
.search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);opacity:.5}

select,.filterbtn,.iconbtn{
  height:var(--ctl);background:var(--bg3);border:1px solid var(--line);border-radius:8px;
  padding:0 11px;font-size:13.5px;color:var(--fg);outline:none;cursor:pointer;flex:0 0 auto
}
select{appearance:none;padding-right:28px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'><path d='M1 3l4 4 4-4' stroke='%239a9aa8' stroke-width='1.4' fill='none' stroke-linecap='round'/></svg>");
  background-repeat:no-repeat;background-position:right 10px center}
.filterbtn{display:inline-flex;align-items:center;gap:6px;font-weight:500}
.filterbtn[aria-expanded="true"]{background:#26262f;border-color:#3d3d4a}
.filterbtn span:not(:empty){
  display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;
  border-radius:9px;background:var(--acc2);color:#000;font-size:11px;font-weight:700}
.iconbtn{display:inline-flex;align-items:center;justify-content:center;padding:0 10px;color:var(--dim)}
.iconbtn:hover{color:var(--fg);border-color:#3d3d4a}
.iconbtn svg{width:17px;height:17px;display:block}
.count{font-size:13px;color:var(--dim2);white-space:nowrap;font-variant-numeric:tabular-nums;flex:0 0 auto}

/* ---------- account ---------- */
.acctwrap{position:relative;flex:0 0 auto}
.acct{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  height:var(--ctl);padding:0 12px;background:var(--bg3);border:1px solid var(--line);
  border-radius:8px;color:var(--fg);font-size:13.5px;font-weight:500;white-space:nowrap}
.acct:hover{border-color:#3d3d4a;background:#22222a}
.acct svg{width:16px;height:16px;flex:0 0 auto}
/* Signed in the button collapses to the avatar alone, so it reads as an account
   control rather than another filter in the row. */
.acct.on{width:var(--ctl);padding:0;border-radius:50%;color:var(--dim)}
.acct.on:hover{color:var(--fg)}
.acct.on svg{width:19px;height:19px}
.acct[aria-expanded="true"]{border-color:#3d3d4a;color:var(--fg)}

.menu{
  position:fixed;z-index:300;min-width:210px;
  background:var(--bg2);border:1px solid var(--line);border-radius:12px;
  padding:6px;box-shadow:0 18px 40px -14px rgba(0,0,0,.9)}
.menu[hidden]{display:none}
.menu .who{padding:8px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:6px}
.menu .who b{display:block;font-size:13px;font-weight:600}
.menu .who span{display:block;font-size:12px;color:var(--dim2);word-break:break-all}
.menu button{
  display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border-radius:8px;
  font-size:13.5px;color:#c9c9d4;text-align:left}
.menu button:hover{background:var(--bg3);color:var(--fg)}
.menu button svg{width:16px;height:16px;flex:0 0 auto;color:var(--dim2)}
.menu button:hover svg{color:var(--fg)}
.menu em{font-style:normal;margin-left:auto;font-size:11.5px;color:var(--dim2);
  font-variant-numeric:tabular-nums}

/* ---------- sign in sheet ---------- */
.modal.authmodal{max-width:400px;display:block;grid-template-columns:none;padding:26px 24px 24px}
.modal.authmodal h2{margin:0 0 6px;font-size:20px;letter-spacing:-.02em}
.modal.authmodal p.sub{margin:0 0 20px;font-size:13.5px;color:var(--dim);line-height:1.5}
.modal.authmodal .x{position:absolute;top:12px;right:12px;width:30px;height:30px;border-radius:50%;
  display:grid;place-items:center;color:var(--dim);font-size:18px;line-height:1}
.modal.authmodal .x:hover{background:var(--bg3);color:var(--fg)}
.pbtn{
  display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:44px;
  margin-bottom:9px;border-radius:9px;border:1px solid var(--line);background:var(--bg3);
  font-size:14px;font-weight:500;color:var(--fg)}
.pbtn:hover:not(:disabled){border-color:#4a4a58;background:#22222a}
.pbtn:disabled{opacity:.45;cursor:default}
.pbtn svg{width:17px;height:17px;flex:0 0 auto}
.pbtn.mark svg{fill:currentColor;stroke:none}
/* Providers share one row above the divider. A single provider fills it. */
.authrow{display:flex;gap:9px}
.authrow .pbtn{flex:1 1 0;margin-bottom:0;min-width:0}
.authsep{display:flex;align-items:center;gap:10px;margin:16px 0 14px;
  font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim2)}
.authsep:before,.authsep:after{content:"";flex:1;height:1px;background:var(--line)}
/* Every field is named above itself rather than relying on a placeholder that
   disappears the moment somebody starts typing. */
.authfield{display:block;margin-bottom:13px}
.authfield>span{display:block;margin:0 0 6px;font-size:12.5px;font-weight:500;color:var(--dim)}
.modal.authmodal input{
  width:100%;height:42px;padding:0 13px;background:var(--bg3);
  border:1px solid var(--line);border-radius:9px;color:var(--fg);font-size:14px;outline:none}
.modal.authmodal input:focus{border-color:#4a4a58}
.pbtn.go{margin-top:3px;background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}
.pbtn.go:hover:not(:disabled){background:#ff5147;border-color:#ff5147}
.authnote{margin:14px 0 0;font-size:12.5px;line-height:1.5;color:var(--dim)}
.authnote.err{color:#ff8a80}
.authnote.ok{color:var(--ok)}
.authfine{margin:18px 0 0;font-size:11.5px;line-height:1.5;color:var(--dim2)}
.modal.authmodal .alt{width:100%;margin-top:12px;font-size:12.5px;color:var(--dim2);
  text-decoration:underline;text-underline-offset:2px}
.modal.authmodal .alt:hover{color:var(--fg)}

@media(max-width:560px){
  /* Anchored menus are unreachable with a thumb on a phone, so the same markup
     docks to the bottom of the screen instead. */
  .menu{top:auto;bottom:0;left:0;right:0;min-width:0;
    border-radius:14px 14px 0 0;padding:8px 8px calc(8px + env(safe-area-inset-bottom));
    box-shadow:0 0 0 100vmax rgba(0,0,0,.6)}
  .menu button{padding:13px 12px;font-size:15px}
  .menu .who{padding:10px 12px 12px}
}

.chipbtn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  height:44px;padding:0 20px;border-radius:9px;
  background:var(--bg3);border:1px solid var(--line);color:var(--fg);
  font-size:14.5px;font-weight:500;
  transition:background-color .15s ease,border-color .15s ease,color .15s ease}
.chipbtn:hover{background:#22222a;border-color:#4a4a58}
.chipbtn.on{background:var(--acc2);border-color:var(--acc2);color:#000;font-weight:600}
.chipbtn.on:hover{background:#ffe14a;border-color:#ffe14a}
.chipbtn:focus-visible{outline:2px solid var(--acc2);outline-offset:2px}
@media(max-width:560px){ .chipbtn{width:100%} }

/* ---------- applied filter chips ---------- */
.applied{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:0 20px 11px}
.applied .ac{
  display:inline-flex;align-items:center;gap:7px;background:var(--bg3);
  border:1px solid #35353f;border-radius:999px;padding:4px 6px 4px 11px;font-size:12.5px}
.applied .ac b{font-weight:600;color:var(--dim2);font-size:11px;text-transform:uppercase;letter-spacing:.05em}
.applied .ac button{
  width:16px;height:16px;border-radius:50%;display:grid;place-items:center;
  color:var(--dim);font-size:14px;line-height:1}
.applied .ac button:hover{background:#33333d;color:var(--fg)}
.applied .clearall{font-size:12.5px;color:var(--dim2);text-decoration:underline;text-underline-offset:2px}
.applied .clearall:hover{color:var(--fg)}

/* ---------- filter panel ---------- */
.panel{
  border-top:1px solid var(--line);background:var(--bg2);
  padding:16px 20px 18px;
  display:grid;gap:18px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));
  max-height:min(58vh,520px);overflow:auto}
.fg h4{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim2);font-weight:700}
.fg .fsearch{
  width:100%;margin-bottom:7px;padding:6px 9px;background:var(--bg3);
  border:1px solid var(--line);border-radius:6px;color:var(--fg);font-size:12.5px;outline:none}
.fg .opts{display:flex;flex-direction:column;gap:1px;max-height:190px;overflow:auto;padding-right:4px}
.fg .opt{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:5px 8px;border-radius:6px;font-size:13px;color:#c9c9d4;text-align:left;width:100%}
.fg .opt:hover:not(:disabled){background:var(--bg3);color:var(--fg)}
.fg .opt.on{background:var(--acc2);color:#000;font-weight:600}
.fg .opt.on .n{color:rgba(0,0,0,.55)}
.fg .opt:disabled{opacity:.32;cursor:default}
.fg .n{font-size:11.5px;color:var(--dim2);font-variant-numeric:tabular-nums}

@media(max-width:900px){
  /* Three rows instead of four: the wordmark and tabs share the top line, and the
     layout toggle rides alongside search instead of claiming its own slot. */
  .bar{flex-wrap:wrap;gap:8px;padding:10px 14px}
  .brand{order:1;flex:0 1 auto}
  .tabs{order:2;margin-left:auto}
  .acctwrap{order:2}
  .search{order:3;flex:1 1 200px}
  .iconbtn{order:4}
  #sort{order:5;flex:1 1 38%}
  #ttoggle{order:6;flex:1 1 0;justify-content:center}
  #ftoggle{order:7;flex:1 1 0;justify-content:center}
  .count{order:8;flex:0 0 auto;margin-left:auto}
  .applied{padding:0 14px 10px}
  .panel{padding:14px;grid-template-columns:1fr 1fr;max-height:64vh}
}
@media(max-width:520px){ .panel{grid-template-columns:1fr} }

/* ---------- tag cloud ---------- */
.cloudwrap{
  display:grid;grid-template-rows:0fr;opacity:0;
  transition:grid-template-rows .32s cubic-bezier(.2,.6,.2,1), opacity .24s ease;
  border-top:0 solid var(--line)}
.cloudwrap.open{grid-template-rows:1fr;opacity:1;border-top-width:1px}
.cloudwrap > .cloud{overflow:hidden;min-height:0}
.cloud{display:flex;flex-wrap:wrap;gap:6px;padding:0 20px}
.cloudwrap.open > .cloud{padding-top:14px;padding-bottom:16px}
.cloud .tag{
  display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;
  background:var(--bg3);border:1px solid var(--line);color:#c2c2cf;font-size:12.5px;
  line-height:1.2;transition:background-color .14s ease,color .14s ease,border-color .14s ease}
.cloud .tag:hover:not(:disabled){border-color:#4a4a58;color:var(--fg)}
.cloud .tag.on{background:var(--acc2);border-color:var(--acc2);color:#000;font-weight:600}
.cloud .tag.on .n{color:rgba(0,0,0,.55)}
.cloud .tag:disabled{opacity:.28;cursor:default}
.cloud .n{font-size:11px;color:var(--dim2);font-variant-numeric:tabular-nums}
.cloud .cloudhead{
  flex:1 1 100%;display:flex;justify-content:space-between;align-items:center;
  font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim2);font-weight:700}
.cloud .cloudhead button{font-size:11.5px;color:var(--dim2);text-transform:none;letter-spacing:0;
  text-decoration:underline;text-underline-offset:2px;font-weight:500}
.cloud .cloudhead button:hover{color:var(--fg)}
@media(max-width:900px){ .cloud{padding:0 14px} }
@media (prefers-reduced-motion: reduce){ .cloudwrap{transition:none} }

/* Condensed once you scroll: the dates and wordmark size give way to the grid. */
header.small .brand span{display:none}
header.small .brand b{font-size:13.5px}
header.small .bar{padding-top:7px;padding-bottom:7px}

/* ---------- grid ---------- */
main{padding:18px 20px 80px;max-width:1600px;margin:0 auto}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(196px,1fr));gap:20px 16px}
.card{display:flex;flex-direction:column;gap:8px;position:relative}
.body{display:flex;flex-direction:column;gap:6px;min-width:0}

/* list layout: same card markup, laid out as a row */
.list{display:flex;flex-direction:column}
.list .card{flex-direction:row;gap:13px;align-items:flex-start;padding:10px 36px 10px 2px;
  border-bottom:1px solid var(--line)}
.list .card:first-child{border-top:1px solid var(--line)}
.list .poster{flex:0 0 52px;width:52px}
/* at 58px the poster cannot hold a badge and a star, so in list view the star
   moves to the end of the row and the programme label becomes an inline pill.
   The poster drops position:relative so the star anchors to the card, not the thumb. */
.list .poster{position:static}
.list .star{position:absolute;right:2px;top:12px;width:28px;height:28px;
  background:transparent;border:none;backdrop-filter:none}
.list .star svg{width:15px;height:15px}
.list .badge{display:none}
.list .ph{gap:0;padding:6px}
.list .ph svg{width:16px;height:16px}
.list .ph .pht{display:none}
.list .title{font-size:15px}
.list .body{gap:3px}
.list .dir{font-size:13px;color:#b4b4c2}
.list .meta{display:flex;flex-wrap:wrap;column-gap:12px;row-gap:0}
.list .tagrow{margin-top:3px}
.poster{
  position:relative;aspect-ratio:2/3;border-radius:var(--r);overflow:hidden;
  background:var(--bg3);cursor:pointer;border:1px solid var(--line);
  transition:border-color .18s ease, box-shadow .22s ease
}
/* Both poster wrappers, always together. The modal uses .mposter and the card
   uses .poster; when only .poster carried this rule, the modal image laid out at
   its intrinsic pixel size and overflow:hidden cropped it to the top left corner
   of the box. The bigger the source file, the worse it looked. */
.poster img,.mposter img{width:100%;height:100%;object-fit:cover;display:block}
.ph{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:10px;padding:16px;position:relative;text-align:center}

/* Hover: the card box never changes size, so neighbours cannot shift and text
   stays pixel-snapped. The art scales inside its own frame, the frame lifts and
   gains a shadow. Transform and opacity only, so this stays on the compositor. */
.grid .card{transition:transform .22s cubic-bezier(.2,.6,.2,1)}
.grid .card:focus-within{transform:translateY(-6px);z-index:5}
.card:focus-within .star{opacity:1}
.card:focus-within .poster{
  border-color:var(--acc2);
  box-shadow:0 10px 24px -12px rgba(0,0,0,.8)}

/* Rows get a tint instead of a tilt: a 52px thumbnail has no room for depth. */
.list .card{transition:background-color .18s ease;border-radius:8px}
.list .card:focus-within{background:#17171d}


/* Hover only where a real pointer exists. On touch, :hover latches after a tap
   and leaves a card stuck in its hovered state until you tap elsewhere. */
@media (hover:hover) and (pointer:fine){
  .grid .card:hover{transform:translateY(-6px);z-index:5}
  .card:hover .poster{
    border-color:var(--acc2);
    box-shadow:0 10px 24px -12px rgba(0,0,0,.8)}
  .card:hover .title{color:var(--acc2)}
  .card:hover .star{opacity:1}
  .list .card:hover{background:#17171d}
  .list .card:hover .poster{border-color:var(--acc2)}
}

@media (prefers-reduced-motion: reduce){
  .grid .card{transition:none}
  .grid .card:hover,.grid .card:focus-within{transform:none}
  .star{transition:none}
}
.ph svg{opacity:.30}
.ph .pht{
  font-size:9.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(255,255,255,.42)
}

.star{
  position:absolute;top:7px;right:7px;z-index:200;width:30px;height:30px;border-radius:50%;
  display:grid;place-items:center;background:rgba(0,0,0,.55);backdrop-filter:blur(6px);
  border:1px solid rgba(255,255,255,.14);
  opacity:0;transition:opacity .18s ease, transform .12s ease
}
/* Always visible once the film is on the list, so the state is readable at a glance. */
.star.on{opacity:1}
.star:focus-visible{opacity:1;outline:2px solid var(--acc2);outline-offset:2px}
.star:hover{transform:scale(1.12)}

/* Tooltip sits to the left of the star. */
.star::after{
  content:attr(data-tip);position:absolute;right:calc(100% + 8px);top:50%;
  transform:translateY(-50%);background:#22222b;color:var(--fg);
  border:1px solid #34343f;border-radius:6px;padding:4px 8px;
  font-size:11.5px;font-weight:500;line-height:1;white-space:nowrap;
  box-shadow:0 6px 16px -6px rgba(0,0,0,.8);
  opacity:0;pointer-events:none;transition:opacity .14s ease
}
.star:hover::after,.star:focus-visible::after{opacity:1}

/* No hover on touch, so revealing on hover would strand the control. */
@media (hover:none){ .star{opacity:1} }
.star svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:1.8}
.star.on svg{fill:var(--acc2);stroke:var(--acc2)}
.badge{
  position:absolute;left:7px;top:7px;z-index:2;font-size:9.5px;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;padding:3px 6px;border-radius:4px;background:var(--acc);color:#fff
}
.badge.sec{background:var(--acc2);color:#000}
.titlerow{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.lbadge{display:none}
.list .lbadge{display:inline-block;font-size:9px;font-weight:700;letter-spacing:.05em;
  text-transform:uppercase;padding:2px 6px;border-radius:4px;background:var(--acc2);color:#000}
.title{font-size:14px;font-weight:650;line-height:1.25;letter-spacing:-.01em;cursor:pointer}
.title:hover{color:var(--acc2)}
.dir{font-size:12.5px;color:var(--dim);line-height:1.3}
.meta{font-size:11.5px;color:var(--dim2);line-height:1.4}
.meta .l2{color:#7e7e8e}
.meta .sep{opacity:.45;padding:0 5px}
.tagrow{display:flex;flex-wrap:wrap;gap:4px;margin-top:1px}
.tg{font-size:10.5px;padding:2px 6px;border-radius:4px;background:#20202a;border:1px solid var(--line);
  color:#a8a8b8;line-height:1.3}
.tg:hover{background:#2b2b38;color:var(--fg)}
.shows{margin-top:2px;display:flex;flex-direction:column;gap:3px}
.show{
  font-size:11.5px;background:var(--bg3);border:1px solid var(--line);border-radius:5px;
  padding:3px 7px;display:flex;justify-content:space-between;gap:8px
}
.show b{font-weight:600}
.show em{font-style:normal;color:var(--dim2)}
.tba{font-size:11px;color:var(--dim2);font-style:italic;padding-top:2px}

/* ---------- empty / notice ---------- */
.notice{
  background:linear-gradient(90deg,rgba(255,214,10,.09),transparent);
  border:1px solid rgba(255,214,10,.25);border-left:3px solid var(--acc2);
  border-radius:8px;padding:12px 14px;margin-bottom:20px;font-size:13.5px;color:#e8e8ee
}
.notice b{color:var(--acc2)}
.empty{text-align:center;padding:80px 20px;color:var(--dim2)}
.storenote{background:rgba(255,59,48,.08);border:1px solid rgba(255,59,48,.28);
  border-left:3px solid var(--acc);border-radius:8px;padding:10px 13px;margin-bottom:18px;
  font-size:13px;color:#e8e8ee}

/* ---------- schedule view ---------- */
.days{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}
.day{background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:10px 14px;min-width:104px}
.day b{display:block;font-size:13px}
.day span{font-size:11.5px;color:var(--dim2)}

/* ---------- modal ---------- */
.ov{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.72);backdrop-filter:blur(4px);
  display:none;align-items:center;justify-content:center;padding:24px}
.ov.on{display:flex}
.modal{background:var(--bg2);border:1px solid var(--line);border-radius:14px;max-width:720px;width:100%;
  max-height:86vh;overflow:auto;display:grid;grid-template-columns:220px 1fr;gap:24px;padding:24px}
.modal h2{margin:0 0 4px;font-size:22px;letter-spacing:-.02em;line-height:1.15}
.modal .mdir{color:var(--dim);font-size:14px;margin-bottom:14px}
.kv{display:grid;grid-template-columns:96px 1fr;gap:5px 12px;font-size:13.5px;margin-bottom:16px}
.kv dt{color:var(--dim2)}
.kv dd{margin:0}
.close{position:absolute;top:18px;right:22px;font-size:26px;color:var(--dim);line-height:1}
.mposter{border-radius:10px;overflow:hidden;aspect-ratio:2/3;border:1px solid var(--line)}
/* The .filters, .ftoggle and .hrow rules that used to sit here targeted a
   markup structure that no longer exists. Verified against index.html and every
   template literal before deleting. .chipbtn was collateral: its only rule was
   nested under .filters, so the modal's primary button rendered unstyled. */
@media(max-width:640px){
  .modal{grid-template-columns:1fr}
  .mposter{max-width:160px}
  .grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px 12px}
  main{padding:14px 14px 60px}
}
