/* Oblici for Elementor
   Ported from the Teen Star Oblici mockup. The :root block below is the
   fallback: the plugin prints the live values from Oblici -> Global style as
   an inline block after this file, which wins.
   Everything here is layout and type. */

:root{
  --ts-bubblegum:#FFB1EE; --ts-apricot:#FE8E68; --ts-butter:#FFDC5B;
  --ts-pistachio:#D4EA64; --ts-grass:#83DC97; --ts-mint:#6EDBC7;
  --ts-aqua:#5CD0EA; --ts-sky:#5D9DFF; --ts-periwinkle:#949DFF;
  --ts-lilac:#D1A6F2; --ts-blush:#FB94A8;
  --ts-ink:#2B2A33;
  --ts-paper:#FBFAF8;
  --ts-card:#FFFFFF;
  --ts-surface:#F2F1EE;
  --ts-rule:#E6E4E0;
  --ts-dim:#6B6875;
  --ts-night:#1F1E26;
  --ts-night-2:#16151C;

  --ts-r1:12px; --ts-r2:16px; --ts-r3:22px; --ts-r4:30px; --ts-pill:999px;

  --ts-display:"hagrid","Bricolage Grotesque","Trebuchet MS",system-ui,sans-serif;
  --ts-text:"hagrid-text","Hanken Grotesk","Helvetica Neue",Arial,sans-serif;

  --ts-shell:min(1280px,100% - 3rem);
  --ts-measure:64ch;

  /* set per page by the rubric body class, below */
  --ts-accent:var(--ts-blush);
}

/* one hook tints a whole page */
.ts-rubric-sve        { --ts-accent:var(--ts-blush); }
.ts-rubric-celebs     { --ts-accent:var(--ts-bubblegum); }
.ts-rubric-muzika     { --ts-accent:var(--ts-sky); }
.ts-rubric-serije     { --ts-accent:var(--ts-grass); }
.ts-rubric-filmovi    { --ts-accent:var(--ts-butter); }
.ts-rubric-kpop       { --ts-accent:var(--ts-lilac); }
.ts-rubric-zivot      { --ts-accent:var(--ts-apricot); }
.ts-rubric-moda       { --ts-accent:var(--ts-periwinkle); }
.ts-rubric-lepota     { --ts-accent:var(--ts-mint); }
.ts-rubric-kvizovi    { --ts-accent:var(--ts-pistachio); }
.ts-rubric-digital    { --ts-accent:var(--ts-aqua); }

.ts-sprite{position:absolute;width:0;height:0;overflow:hidden}

/* The base layer is scoped to .ts-scope, which every Oblici widget puts on its
   own wrapper and the plugin's own templates put on <body>. It must never hang
   off a body class alone: a single widget dropped onto someone else's page
   would otherwise restyle that whole page. */
body.ts-oblici{margin:0;background:var(--ts-paper);color:var(--ts-ink)}
.ts-scope{
  color:var(--ts-ink);
  font-family:var(--ts-text);font-size:var(--ts-base,17px);line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
.ts-scope h1,.ts-scope h2,.ts-scope h3,.ts-scope h4{
  font-family:var(--ts-display);font-weight:800;line-height:1.02;
  letter-spacing:-.035em;text-wrap:balance;margin:0;
}
.ts-scope a{color:inherit;text-decoration:none}
.ts-scope img{max-width:100%;height:auto;display:block}
.ts-scope :focus-visible{outline:3px solid var(--ts-accent);outline-offset:3px;border-radius:4px}
.ts-scope *,.ts-scope *::before,.ts-scope *::after{box-sizing:border-box}

.ts-shell{width:var(--ts-shell);margin-inline:auto}
.ts-eyebrow{
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.16em;text-transform:uppercase;
}

/* ---------------- masthead ---------------- */
.ts-masthead{padding:1.5rem 0 1rem;border-bottom:1px solid var(--ts-rule)}
.ts-masthead .ts-shell{display:flex;align-items:center;justify-content:space-between;gap:1.5rem}
.ts-wordmark{
  font-family:var(--ts-display);font-weight:800;
  font-size:clamp(2.2rem,7vw,5.2rem);letter-spacing:-.06em;line-height:.9;
}
.ts-nav{display:flex;flex-wrap:wrap;gap:.35rem;justify-content:flex-end}
.ts-nav a{
  font-family:var(--ts-display);font-weight:800;font-size:.78rem;
  letter-spacing:.04em;text-transform:uppercase;
  padding:.4rem .75rem;border-radius:var(--ts-pill);
  border:1.5px solid transparent;
}
.ts-nav a:hover{border-color:var(--ts-ink)}

/* ---------------- the character rail ---------------- */
.ts-rail{border-bottom:1px solid var(--ts-rule);padding:1.1rem 0}
.ts-rail-track{display:flex;gap:1.35rem;overflow-x:auto;scrollbar-width:none;padding-bottom:.25rem}
.ts-rail-track::-webkit-scrollbar{display:none}
.ts-rail-item{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:.35rem;width:78px}
.ts-rail-item svg{transition:transform .18s cubic-bezier(.22,1.2,.36,1)}
.ts-rail-item:hover svg{transform:scale(1.12) rotate(-5deg)}
.ts-rail-item span{
  font-family:var(--ts-display);font-weight:800;font-size:.66rem;
  letter-spacing:.06em;text-transform:uppercase;color:var(--ts-dim);
  white-space:nowrap;
}

/* ---------------- badge, object, window ---------------- */
.ts-badge{
  display:inline-flex;align-items:center;gap:.38rem;
  padding:.3rem .72rem .3rem .36rem;border-radius:var(--ts-pill);
  font-family:var(--ts-display);font-weight:800;font-size:.76rem;
  letter-spacing:-.01em;color:var(--ts-ink);
}
.ts-badge-obj{width:19px;height:19px;flex:none}
.ts-obj{display:block}

.ts-window{
  display:block;width:100%;aspect-ratio:1;
  -webkit-mask-image:var(--ts-mask);mask-image:var(--ts-mask);
  -webkit-mask-size:contain;mask-size:contain;
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-position:center;mask-position:center;
}
.ts-window img,.ts-window-flat{width:100%;height:100%;object-fit:cover;display:block}

/* ---------------- the card ---------------- */
.ts-card{
  border-radius:var(--ts-r3);padding:.85rem;
  display:flex;flex-direction:column;gap:.7rem;
  color:var(--ts-ink);background:var(--ts-accent);
  transition:transform .18s cubic-bezier(.22,1.2,.36,1);
}
.ts-card:hover{transform:translateY(-3px)}
.ts-card .ts-frame{
  background:#FFFDFA;border-radius:var(--ts-r1);
  aspect-ratio:4/3;display:block;padding:.55rem;overflow:hidden;
}
.ts-card .ts-frame .ts-window{width:100%;height:100%;aspect-ratio:auto}
.ts-card h3{font-size:1rem;letter-spacing:-.028em;line-height:1.15}
.ts-card p{font-size:.78rem;line-height:1.35;opacity:.84;margin:0}
.ts-card .ts-body{display:flex;flex-direction:column;gap:.3rem;padding:0 .25rem}
.ts-card .ts-pill{
  align-self:flex-start;margin:.15rem .25rem .1rem;
  border:1.5px solid currentColor;border-radius:var(--ts-pill);
  padding:.32rem .8rem;font-family:var(--ts-display);font-weight:800;font-size:.7rem;
}
.ts-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:.9rem}

/* ---------------- homepage hero ---------------- */
.ts-hero{padding:2rem 0 0}
.ts-hero-in{
  display:grid;gap:1.5rem;align-items:end;
  grid-template-columns:1fr;
}
@media(min-width:900px){ .ts-hero-in{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:2.5rem} }
.ts-hero-art{
  border-radius:var(--ts-r4);overflow:hidden;background:var(--ts-surface);
  aspect-ratio:4/3;
}
.ts-hero-art img{width:100%;height:100%;object-fit:cover}
.ts-hero-txt{display:flex;flex-direction:column;gap:.9rem;align-items:flex-start}
.ts-hero-txt h2{font-size:clamp(2.1rem,5.4vw,4rem);letter-spacing:-.045em}
.ts-hero-txt p{color:var(--ts-dim);font-size:1.02rem;max-width:44ch;margin:0}
.ts-byline{
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--ts-dim);
}

/* ---------------- section headers ---------------- */
.ts-sec{padding:clamp(2.5rem,5vw,4rem) 0}
.ts-sec-head{display:flex;align-items:center;gap:1rem;margin-bottom:1.5rem}
.ts-sec-head h2{font-size:clamp(1.7rem,4vw,2.8rem)}
.ts-sec-head .ts-obj{flex:none}
.ts-sec-head .ts-more{
  margin-left:auto;font-family:var(--ts-display);font-weight:800;font-size:.76rem;
  letter-spacing:.06em;text-transform:uppercase;
  border:1.5px solid currentColor;border-radius:var(--ts-pill);padding:.42rem .9rem;
  white-space:nowrap;
}

/* ---------------- quiz strip, the loud one ---------------- */
.ts-quiz{background:color-mix(in oklab,var(--ts-pistachio) 26%,var(--ts-paper))}
.ts-quiz .ts-sec-head h2{color:var(--ts-ink)}
.ts-quiz-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:.9rem}
.ts-quiz-card{
  background:var(--ts-card);border-radius:var(--ts-r3);overflow:hidden;
  display:flex;flex-direction:column;
  box-shadow:0 6px 18px -12px rgb(0 0 0 / .4);
  transition:transform .18s cubic-bezier(.22,1.2,.36,1);
}
.ts-quiz-card:hover{transform:translateY(-3px)}
.ts-quiz-card .ts-qtop{
  background:var(--ts-pistachio);padding:1.1rem;display:grid;place-items:center;
}
.ts-quiz-card .ts-qtop .ts-window{width:100%;height:120px;aspect-ratio:auto}
.ts-quiz-card .ts-qbody{padding:.9rem 1rem 1.1rem;display:flex;flex-direction:column;gap:.45rem}
.ts-quiz-card h3{font-size:1.02rem;letter-spacing:-.028em;line-height:1.15}
.ts-quiz-card .ts-q-meta{font-size:.74rem;color:var(--ts-dim)}
.ts-quiz-card .ts-q-go{
  margin-top:.35rem;align-self:flex-start;background:var(--ts-ink);color:var(--ts-paper);
  border-radius:var(--ts-pill);padding:.4rem .9rem;
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;letter-spacing:.04em;
}

/* ---------------- video band, the dark one ---------------- */
.ts-video{background:var(--ts-night);color:#F2F1F6}
.ts-video .ts-sec-head h2{color:#F2F1F6}
.ts-video .ts-more{color:#F2F1F6}
.ts-video-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:1rem}
.ts-video-card{display:flex;flex-direction:column;gap:.6rem}
.ts-video-thumb{
  position:relative;border-radius:var(--ts-r2);overflow:hidden;
  aspect-ratio:16/9;background:#2A2833;
}
.ts-video-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .35s ease}
.ts-video-card:hover .ts-video-thumb img{transform:scale(1.05)}
.ts-play{
  position:absolute;inset:auto auto 10px 10px;
  width:38px;height:38px;border-radius:var(--ts-pill);
  background:var(--ts-accent);display:grid;place-items:center;
}
.ts-play svg{width:15px;height:15px;fill:var(--ts-ink);margin-left:2px}
.ts-video-card h3{font-size:1.02rem;color:#F2F1F6;letter-spacing:-.03em;line-height:1.2}
.ts-video-card .ts-dur{
  position:absolute;inset:auto 10px 10px auto;
  background:rgb(0 0 0 / .72);color:#fff;border-radius:var(--ts-pill);
  padding:.16rem .5rem;font-family:var(--ts-display);font-weight:800;font-size:.68rem;
}

/* ---------------- latest rail ---------------- */
.ts-latest{display:grid;gap:2rem;grid-template-columns:1fr}
@media(min-width:960px){ .ts-latest{grid-template-columns:minmax(0,1fr) 320px;gap:3rem} }
.ts-list{display:flex;flex-direction:column}
.ts-list a{
  display:grid;grid-template-columns:76px 1fr;gap:.9rem;align-items:start;
  padding:.9rem 0;border-bottom:1px solid var(--ts-rule);
}
.ts-list a:first-child{padding-top:0}
.ts-list .ts-thumb{border-radius:var(--ts-r1);overflow:hidden;aspect-ratio:1;background:var(--ts-surface)}
.ts-list .ts-thumb img{width:100%;height:100%;object-fit:cover}
.ts-list h3{font-size:.94rem;letter-spacing:-.025em;line-height:1.22}
.ts-list .ts-when{font-size:.72rem;color:var(--ts-dim);margin-top:.2rem;display:block}
.ts-rail-head{
  font-family:var(--ts-display);font-weight:800;font-size:1.25rem;
  letter-spacing:-.03em;padding-bottom:.6rem;margin-bottom:.4rem;
  border-bottom:2px solid var(--ts-accent);
}

/* ---------------- article ---------------- */
.ts-progress{
  position:fixed;inset:0 auto auto 0;height:4px;width:0;z-index:99;
  background:var(--ts-accent);transition:width .1s linear;
}
.ts-art-hero{position:relative;border-radius:0 0 var(--ts-r4) var(--ts-r4);overflow:hidden;background:var(--ts-night)}
.ts-art-hero img{width:100%;max-height:62vh;object-fit:cover;opacity:.86}
.ts-art-head{padding:2rem 0 1.5rem}
.ts-art-head .ts-shell{display:flex;flex-direction:column;gap:1rem;align-items:flex-start;max-width:var(--ts-shell)}
.ts-art-head h1{font-size:clamp(2.1rem,5.6vw,4.2rem);letter-spacing:-.048em;max-width:20ch}
.ts-art-deck{font-size:1.1rem;color:var(--ts-dim);max-width:52ch;margin:0}
.ts-art-meta{display:flex;flex-wrap:wrap;gap:.5rem 1.1rem;align-items:center;font-size:.8rem;color:var(--ts-dim)}
.ts-art-meta b{font-family:var(--ts-display);font-weight:800;color:var(--ts-ink)}

.ts-art-body{display:grid;gap:2.5rem;grid-template-columns:1fr;padding:1rem 0 3rem}
@media(min-width:1040px){ .ts-art-body{grid-template-columns:minmax(0,1fr) 300px;gap:3.5rem} }
.ts-prose{max-width:var(--ts-measure);font-size:1.08rem;line-height:1.7}
.ts-prose > * + *{margin-top:1.1rem}
.ts-prose h2{font-size:1.6rem;margin-top:2.2rem;letter-spacing:-.03em}
.ts-prose h3{font-size:1.25rem;margin-top:1.8rem}
.ts-prose a{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px;text-decoration-color:var(--ts-accent)}
.ts-prose blockquote{
  margin:1.8rem 0;padding:1rem 1.25rem;border-left:5px solid var(--ts-accent);
  background:var(--ts-surface);border-radius:0 var(--ts-r2) var(--ts-r2) 0;
  font-family:var(--ts-display);font-weight:800;font-size:1.15rem;letter-spacing:-.02em;line-height:1.3;
}
.ts-prose img{border-radius:var(--ts-r2)}

/* the read-next block that interrupts the body */
.ts-interrupt{
  margin:2.2rem 0;border-radius:var(--ts-r3);overflow:hidden;
  background:var(--ts-accent);display:grid;grid-template-columns:104px 1fr;
  gap:1rem;align-items:center;padding:.85rem 1.1rem .85rem .85rem;
}
.ts-interrupt .ts-frame{background:#FFFDFA;border-radius:var(--ts-r1);padding:.5rem;display:grid;place-items:center}
.ts-interrupt .ts-window{width:100%;height:76px;aspect-ratio:auto}
.ts-interrupt .ts-k{
  font-family:var(--ts-display);font-weight:800;font-size:.66rem;
  letter-spacing:.14em;text-transform:uppercase;opacity:.72;display:block;margin-bottom:.2rem;
}
.ts-interrupt h3{font-size:1.1rem;letter-spacing:-.03em;line-height:1.18}

/* sticky rail that keeps the next story in view */
.ts-side{align-self:start}
@media(min-width:1040px){ .ts-side{position:sticky;top:1.5rem} }
.ts-side .ts-list a{grid-template-columns:60px 1fr;gap:.75rem;padding:.75rem 0}
.ts-side .ts-list h3{font-size:.88rem}

/* end-of-article surfaces */
.ts-after{border-top:1px solid var(--ts-rule);padding:clamp(2.5rem,5vw,4rem) 0}
.ts-after + .ts-after{border-top:0;padding-top:0}
.ts-cta{
  border-radius:var(--ts-r4);padding:clamp(1.5rem,4vw,2.5rem);
  background:var(--ts-pistachio);display:flex;flex-wrap:wrap;gap:1.25rem;align-items:center;
}
.ts-cta .ts-obj{flex:none}
.ts-cta-txt{flex:1 1 260px}
.ts-cta h2{font-size:clamp(1.5rem,3.4vw,2.2rem);margin-bottom:.3rem}
.ts-cta p{margin:0;font-size:.95rem;opacity:.82}
.ts-cta .ts-go{
  background:var(--ts-ink);color:var(--ts-paper);border-radius:var(--ts-pill);
  padding:.65rem 1.3rem;font-family:var(--ts-display);font-weight:800;font-size:.84rem;
  white-space:nowrap;
}

/* ---------------- rubric archive ---------------- */
.ts-arch-head{
  background:var(--ts-band,color-mix(in oklab,var(--ts-accent) 30%,var(--ts-paper)));
  padding:clamp(2rem,5vw,3.5rem) 0 clamp(1.5rem,3vw,2.5rem);
  border-bottom:2px solid var(--ts-accent);
}
.ts-arch-in{display:grid;gap:1.5rem;grid-template-columns:1fr;align-items:center}
@media(min-width:820px){ .ts-arch-in{grid-template-columns:auto minmax(0,1fr);gap:2.5rem} }
.ts-arch-art{
  width:clamp(120px,22vw,208px);aspect-ratio:1;
  background:#FFFDFA;border-radius:var(--ts-r4);display:grid;place-items:center;padding:1.1rem;
}
.ts-arch-art .ts-obj{width:100%;height:auto}
.ts-arch-txt{display:flex;flex-direction:column;gap:.7rem;align-items:flex-start}
.ts-arch-txt h1{font-size:clamp(2.6rem,8vw,5.5rem);letter-spacing:-.055em;line-height:.95}
.ts-arch-txt p{margin:0;font-size:1.08rem;max-width:52ch;opacity:.86}
.ts-arch-count{
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.14em;text-transform:uppercase;opacity:.66;
}
.ts-arch-lead{padding:clamp(2rem,4vw,3rem) 0 0}

/* ---------------- footer ---------------- */
.ts-foot{border-top:1px solid var(--ts-rule);padding:2.5rem 0 3.5rem;margin-top:2rem}
.ts-foot .ts-shell{display:flex;flex-wrap:wrap;gap:1rem 2rem;justify-content:space-between;align-items:center}
.ts-foot small{color:var(--ts-dim);font-size:.8rem}

/* ---------------- motion ---------------- */
@media (prefers-reduced-motion:reduce){
  .ts-oblici *,.ts-oblici *::before,.ts-oblici *::after{
    animation-duration:.001ms !important;transition-duration:.001ms !important;
  }
}

/* ============================================================
   Editorial layer: layering, marks, chips, interaction.
   ============================================================ */

.ts-mark{position:absolute;pointer-events:none;overflow:visible}

/* ---- chips: the rubric reads before the photo does ---- */
.ts-chip{
  display:inline-flex;align-items:center;gap:.32rem;
  padding:.24rem .6rem .24rem .3rem;border-radius:var(--ts-pill);
  font-family:var(--ts-display);font-weight:800;font-size:.68rem;
  letter-spacing:-.005em;color:var(--ts-ink);white-space:nowrap;
}
.ts-chip svg{width:16px;height:16px;flex:none}
.ts-eb{
  font-family:var(--ts-display);font-weight:800;font-size:.7rem;
  letter-spacing:.12em;text-transform:uppercase;display:block;
}

/* ---- masthead: wordmark overlaps the hero, date runs up the margin ---- */
.ts-top{position:relative;padding:1.2rem 0 0}
.ts-top .ts-shell{display:flex;align-items:flex-start;justify-content:space-between;gap:1.5rem}
.ts-datestamp{
  position:absolute;left:-2.2rem;top:5.5rem;transform:rotate(-90deg);transform-origin:left top;
  font-family:var(--ts-mono,var(--ts-text));font-size:.66rem;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ts-dim);white-space:nowrap;
}
@media(max-width:1100px){ .ts-datestamp{display:none} }
.ts-wordmark{position:relative;z-index:3}

/* ---- ticker ---- */
.ts-ticker{
  background:var(--ts-ink);color:var(--ts-paper);
  display:flex;align-items:center;gap:1rem;padding:.5rem 0;
}
.ts-ticker-view{flex:1;overflow:hidden;min-width:0}
.ts-ticker-label{
  flex:none;position:relative;z-index:2;
  margin-left:max(1.25rem,calc((100vw - var(--ts-shell))/2));
  font-family:var(--ts-display);font-weight:800;font-size:.68rem;
  letter-spacing:.14em;text-transform:uppercase;
  background:var(--ts-blush);color:var(--ts-ink);
  padding:.26rem .66rem;border-radius:var(--ts-pill);
}
.ts-ticker-track{display:flex;gap:2.5rem;white-space:nowrap;animation:ts-slide 42s linear infinite}
.ts-ticker:hover .ts-ticker-track{animation-play-state:paused}
.ts-ticker-track a{
  font-family:var(--ts-display);font-weight:800;font-size:.82rem;letter-spacing:-.01em;
  display:inline-flex;align-items:center;gap:.5rem;
}
.ts-ticker-track a::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ts-dot,var(--ts-blush))}
@keyframes ts-slide{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ---- the hero block: three uneven columns ---- */
.ts-front{padding:1.5rem 0 0}
.ts-front-grid{display:grid;gap:2rem;grid-template-columns:1fr}
@media(min-width:1000px){
  .ts-front-grid{grid-template-columns:minmax(0,1.5fr) minmax(0,.78fr) minmax(0,1fr);gap:2.5rem}
}

/* lead: a rotated colour block and a squiggle sit under and over the photo */
.ts-lead{position:relative;display:flex;flex-direction:column;gap:1rem;align-items:flex-start}
.ts-lead-art{position:relative;width:100%;isolation:isolate}
.ts-lead-art::before{
  content:"";position:absolute;inset:26px -26px -26px 26px;border-radius:var(--ts-r2);
  background:var(--ts-accent);transform:rotate(-1.8deg);z-index:0;
}
.ts-lead-art img{
  position:relative;z-index:1;width:100%;border-radius:var(--ts-r2);
  aspect-ratio:4/3;object-fit:cover;
}
.ts-lead-art .ts-mark{z-index:2;width:clamp(120px,17vw,190px);height:auto;aspect-ratio:1;right:-34px;bottom:-54px}
.ts-lead h2{font-size:clamp(1.9rem,4vw,3.1rem);letter-spacing:-.045em}
.ts-lead p{color:var(--ts-dim);margin:0;max-width:46ch}
.ts-lead .ts-by{font-size:.76rem;color:var(--ts-dim)}

/* middle: text only, dates and rules, no pictures at all */
.ts-stack{display:flex;flex-direction:column}
.ts-stack a{padding:.95rem 0;border-top:1px solid var(--ts-rule);display:block}
.ts-stack a:first-child{border-top:0;padding-top:0}
.ts-stack .ts-when{font-size:.7rem;color:var(--ts-dim);display:block;margin-bottom:.3rem}
.ts-stack h3{font-size:1.04rem;letter-spacing:-.028em;line-height:1.2;font-weight:800}
.ts-stack a:hover h3{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px;text-decoration-color:var(--ts-accent)}

/* right: mixed sizes, never two the same */
.ts-mix{display:flex;flex-direction:column;gap:1.25rem}
.ts-mix-duo{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.ts-mini{display:flex;flex-direction:column;gap:.5rem}
.ts-mini img{border-radius:var(--ts-r1);aspect-ratio:4/3;object-fit:cover;width:100%;transition:transform .3s ease}
.ts-mini:hover img{transform:scale(1.03)}
.ts-mini h3{font-size:.92rem;letter-spacing:-.028em;line-height:1.18;font-weight:800}
.ts-wide{display:flex;flex-direction:column;gap:.6rem;padding-top:1.25rem;border-top:1px solid var(--ts-rule)}
.ts-wide h3{font-size:1.3rem;letter-spacing:-.032em;line-height:1.14}
.ts-wide img{border-radius:var(--ts-r1);aspect-ratio:16/10;object-fit:cover;width:100%}

/* ---- rubric filter rail ---- */
.ts-rail-item{position:relative;border-radius:var(--ts-r2);padding:.4rem .2rem;transition:background .18s ease}
.ts-rail-item[aria-pressed="true"]{background:color-mix(in oklab,var(--ts-c,var(--ts-blush)) 30%,transparent)}
.ts-rail-item[aria-pressed="true"] span{color:var(--ts-ink)}
.ts-rail-filter{border:0;background:none;font:inherit;cursor:pointer;color:inherit}
.ts-filter-note[hidden]{display:none}
.ts-filter-note{
  display:flex;align-items:center;gap:.6rem;padding-top:.7rem;
  font-size:.78rem;color:var(--ts-dim);
}
.ts-filter-note button{
  border:1.5px solid currentColor;background:none;border-radius:var(--ts-pill);
  padding:.2rem .6rem;font-family:var(--ts-display);font-weight:800;font-size:.68rem;
  cursor:pointer;color:inherit;
}

/* ---- mosaic: uneven spans, not a uniform grid ---- */
.ts-mosaic{display:grid;gap:1rem;grid-template-columns:repeat(2,1fr)}
@media(min-width:760px){ .ts-mosaic{grid-template-columns:repeat(4,1fr)} }
@media(min-width:1180px){ .ts-mosaic{grid-template-columns:repeat(6,1fr)} }
.ts-mosaic > *{grid-column:span 2}
@media(min-width:1180px){
  .ts-mosaic > .sp3{grid-column:span 3}
  .ts-mosaic > .sp2{grid-column:span 2}
}
.ts-card{position:relative;transition:transform .2s cubic-bezier(.22,1.2,.36,1),box-shadow .2s ease}
.ts-card:hover{transform:translateY(-4px) rotate(-.5deg);box-shadow:0 18px 34px -22px rgb(0 0 0 / .5)}
.ts-card .ts-chip{position:absolute;top:1.35rem;left:1.35rem;z-index:2;background:var(--ts-card)!important}
.ts-card.sp3 h3{font-size:1.28rem}
.ts-card.sp3 .ts-frame{aspect-ratio:16/10}

/* ---- inline quiz: one real question, answerable on the page ---- */
.ts-quiz{position:relative;overflow:hidden}
.ts-quiz .ts-mark{width:150px;height:150px;top:-30px;right:4%;opacity:.5}
.ts-tease{
  background:var(--ts-card);border-radius:var(--ts-r4);padding:1.4rem;
  display:grid;gap:1.1rem;grid-template-columns:1fr;margin-bottom:1rem;
}
@media(min-width:840px){ .ts-tease{grid-template-columns:auto minmax(0,1fr);gap:1.8rem;align-items:center} }
.ts-tease-art{width:clamp(96px,16vw,148px);aspect-ratio:1;display:grid;place-items:center}
.ts-tease h3{font-size:clamp(1.2rem,2.6vw,1.75rem);margin-bottom:.9rem}
.ts-opts{display:grid;gap:.5rem;grid-template-columns:1fr}
@media(min-width:620px){ .ts-opts{grid-template-columns:1fr 1fr} }
.ts-opt{
  border:0;text-align:left;cursor:pointer;font:inherit;
  background:var(--ts-surface);border-radius:var(--ts-pill);
  padding:.72rem 1.1rem;font-family:var(--ts-display);font-weight:800;font-size:.92rem;
  color:var(--ts-ink);transition:transform .15s ease,background .15s ease;
}
.ts-opt:hover{transform:translateX(4px)}
.ts-opt.right{background:var(--ts-grass)}
.ts-opt.wrong{background:var(--ts-blush)}
.ts-opt[disabled]{cursor:default;transform:none}
.ts-verdict{margin-top:.8rem;font-size:.9rem;font-weight:700;min-height:1.4em}

/* ---- video: one big, three small ---- */
.ts-video-lead{display:grid;gap:1.2rem;grid-template-columns:1fr}
@media(min-width:960px){ .ts-video-lead{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:1.6rem} }
.ts-video-lead .ts-video-card:first-child h3{font-size:1.5rem}
.ts-video-side{display:flex;flex-direction:column;gap:1rem}
.ts-video-side .ts-video-card{display:grid;grid-template-columns:132px 1fr;gap:.8rem;align-items:center}
.ts-video-side .ts-video-thumb{aspect-ratio:16/9}
.ts-video-side h3{font-size:.9rem}

/* ---- numbered most-read ---- */
.ts-top10{display:grid;gap:0;grid-template-columns:1fr}
@media(min-width:760px){ .ts-top10{grid-template-columns:1fr 1fr;column-gap:2.5rem} }
.ts-top10 a{
  display:grid;grid-template-columns:auto 1fr;gap:1rem;align-items:baseline;
  padding:.85rem 0;border-bottom:1px solid var(--ts-rule);
}
.ts-top10 .ts-num{
  font-family:var(--ts-display);font-weight:800;font-size:2rem;line-height:1;
  letter-spacing:-.06em;color:var(--ts-num,var(--ts-blush));min-width:1.6ch;
}
.ts-top10 h3{font-size:.98rem;letter-spacing:-.028em;line-height:1.2;font-weight:800}
.ts-top10 a:hover h3{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}

/* ---- section heads get a mark ---- */
.ts-sec{position:relative}
.ts-sec-head{position:relative}

/* ---- scroll reveal ---- */
.ts-rise{opacity:0;transform:translateY(14px)}
.ts-rise.in{opacity:1;transform:none;transition:opacity .5s ease,transform .5s cubic-bezier(.22,1,.36,1)}
@media (prefers-reduced-motion:reduce){ .ts-rise{opacity:1;transform:none} }

/* wide cards go horizontal: a 1:1 silhouette in a 16:10 frame leaves dead
   space either side, so the text moves alongside it instead of underneath */
@media(min-width:1180px){
  .ts-card.sp3{
    display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);
    gap:.2rem 1rem;align-items:center;
  }
  .ts-card.sp3 .ts-frame{aspect-ratio:1;grid-row:span 2}
  .ts-card.sp3 .ts-body{padding-right:.6rem}
  .ts-card.sp3 h3{font-size:1.35rem}
  .ts-card.sp3 p{font-size:.82rem;-webkit-line-clamp:4}
  .ts-card.sp3 .ts-chip{top:1.35rem;left:auto;right:1.35rem}
}

/* the burst sits behind the heading, clear of the button */
.ts-quiz .ts-mark{top:-42px;right:auto;left:31%;opacity:.45}
@media(max-width:900px){ .ts-quiz .ts-mark{display:none} }

/* clamp card copy so rows stay level */
.ts-card p{
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden;
}

/* the offset block extends past the photo, so the eyebrow needs clearance */
.ts-lead-art{margin-bottom:2.4rem}

/* ============================================================
   MODULE: ts-accordion
   Four rubric panels. One open at a time. Horizontal on laptop,
   vertical on mobile. Colour is pulled from the rubric, never set.
   HyperKit: widget with a repeater of 4 category ids + post count.
   ============================================================ */
.ts-acc{
  display:flex;flex-direction:column;gap:.55rem;
  margin:1.25rem 0 0;
}
@media(min-width:900px){ .ts-acc{flex-direction:row;height:var(--ts-acc-h,clamp(380px,44vw,500px))} }

.ts-panel{
  position:relative;overflow:hidden;border:0;padding:0;cursor:pointer;
  border-radius:var(--ts-r4);background:var(--ts-p);color:var(--ts-ink);
  font:inherit;text-align:left;display:flex;
  flex:0 0 72px;                 /* collapsed, mobile */
  transition:flex .45s cubic-bezier(.22,1,.36,1);
}
.ts-panel[aria-expanded="true"]{flex:1 1 auto;min-height:min(62vh,440px)}
@media(min-width:900px){
  .ts-panel{flex:0 0 92px;min-height:0}
  .ts-panel[aria-expanded="true"]{flex:1 1 0;min-height:0}
}

/* collapsed face: character + name, upright on mobile, turned on laptop */
.ts-panel-tab{
  flex:none;display:flex;align-items:center;gap:.8rem;
  padding:1rem 1.15rem;width:100%;
}
@media(min-width:900px){
  .ts-panel-tab{
    width:92px;height:100%;flex-direction:column;justify-content:flex-start;
    padding:1.15rem .5rem;gap:1.1rem;
  }
  .ts-panel-tab .ts-panel-name{
    writing-mode:vertical-rl;transform:rotate(180deg);
  }
}
.ts-panel-name{
  font-family:var(--ts-display);font-weight:800;
  font-size:clamp(.95rem,1.5vw,1.35rem);letter-spacing:-.02em;white-space:nowrap;
}
.ts-panel-tab .ts-obj{flex:none}
.ts-panel-count{
  margin-left:auto;font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  opacity:.6;
}
@media(min-width:900px){ .ts-panel-count{margin:auto 0 0} }

/* the body only exists while the panel is open */
.ts-panel-body{
  flex:1;min-width:0;display:flex;flex-direction:column;gap:.15rem;
  padding:0 1.15rem 1.15rem;opacity:0;transition:opacity .3s ease .12s;
}
@media(min-width:900px){ .ts-panel-body{padding:1.35rem 1.4rem 1.2rem 0} }
.ts-panel[aria-expanded="false"] .ts-panel-body{display:none}
.ts-panel[aria-expanded="true"] .ts-panel-body{opacity:1}

.ts-panel-lead{display:flex;flex-direction:column;gap:.55rem;margin-bottom:.35rem}
.ts-panel-lead img{
  width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--ts-r2);
}
.ts-panel-lead h3{font-size:clamp(1.1rem,2vw,1.55rem);letter-spacing:-.032em;line-height:1.12}
.ts-panel-list{display:flex;flex-direction:column}
.ts-panel-list a{
  padding:.6rem 0;border-top:1.5px solid rgb(0 0 0 / .16);
  font-family:var(--ts-display);font-weight:800;font-size:.86rem;
  letter-spacing:-.02em;line-height:1.24;display:block;
}
.ts-panel-list a:hover{opacity:.62}
.ts-panel-more{
  align-self:flex-start;margin-top:.7rem;border:1.5px solid currentColor;
  border-radius:var(--ts-pill);padding:.36rem .85rem;
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
}

/* ============================================================
   MODULE: ts-rows
   The feed, Elite Daily style: kicker, headline, hairline rules.
   No cards, no colour fills, no cropped photos.
   HyperKit: widget with category filter + count + column count.
   ============================================================ */
.ts-rows{
  display:grid;grid-template-columns:1fr;
  border-top:2px solid var(--ts-ink);
}
@media(min-width:640px){ .ts-rows{grid-template-columns:repeat(2,1fr)} }
@media(min-width:1040px){ .ts-rows{grid-template-columns:repeat(4,1fr)} }
.ts-row{
  padding:1.1rem 1.25rem 1.3rem;
  border-bottom:1px solid var(--ts-rule);
  display:flex;flex-direction:column;gap:.4rem;
}
@media(min-width:640px){ .ts-row{border-left:1px solid var(--ts-rule)} }
@media(min-width:640px){ .ts-row:nth-child(2n+1){border-left:0} }
@media(min-width:1040px){
  .ts-row:nth-child(2n+1){border-left:1px solid var(--ts-rule)}
  .ts-row:nth-child(4n+1){border-left:0}
}
.ts-row .ts-kicker{
  font-family:var(--ts-display);font-weight:800;font-size:.66rem;
  letter-spacing:.11em;text-transform:uppercase;
}
.ts-row h3{
  font-size:1.02rem;letter-spacing:-.028em;line-height:1.2;font-weight:800;
}
.ts-row:hover h3{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
.ts-row img{
  width:100%;aspect-ratio:4/3;object-fit:cover;margin-bottom:.15rem;
  transition:opacity .2s ease;
}
.ts-row:hover img{opacity:.88}
.ts-row .ts-when{font-size:.7rem;color:var(--ts-dim);margin-top:auto;padding-top:.3rem}

/* a wide row every so often, so the grid is not four identical columns */
@media(min-width:1040px){
  .ts-row.wide{grid-column:span 2;flex-direction:row;gap:1rem;align-items:flex-start}
  .ts-row.wide img{width:46%;flex:none;aspect-ratio:4/3;margin:0}
  .ts-row.wide h3{font-size:1.32rem;letter-spacing:-.032em;line-height:1.14}
  .ts-row.wide .ts-rowtxt{display:flex;flex-direction:column;gap:.35rem}
}

/* the repeating section word, Elite Daily's marquee */
.ts-bigword{
  overflow:hidden;border-top:2px solid var(--ts-ink);border-bottom:2px solid var(--ts-ink);
  padding:.15rem 0;margin-bottom:1.5rem;
}
.ts-bigword-track{
  display:flex;gap:1.5rem;white-space:nowrap;
  animation:ts-slide var(--ts-marquee,28s) linear infinite;
  animation-direction:var(--ts-marquee-dir,normal);
}
.ts-bigword span{
  font-family:var(--ts-display);font-weight:800;
  font-size:clamp(2rem,5.5vw,3.6rem);letter-spacing:-.05em;line-height:1.02;
  text-transform:uppercase;
}
.ts-bigword span:nth-child(even){color:var(--ts-accent)}
@media (prefers-reduced-motion:reduce){ .ts-bigword-track{animation:none} }

/* the panel owns its height; the photo flexes into whatever is left over,
   otherwise a 16:9 lead at panel width dictates the whole accordion */
.ts-panel-body{height:100%;overflow:hidden}
.ts-panel[aria-expanded="true"]{max-height:min(72vh,620px)}
@media(min-width:900px){ .ts-panel[aria-expanded="true"]{max-height:none} }
.ts-panel-lead{flex:1 1 auto;min-height:0;overflow:hidden}
.ts-panel-lead img{flex:1 1 32%;min-height:80px;aspect-ratio:auto;height:auto}
.ts-panel-lead h3{flex:none}
.ts-panel-list,.ts-panel-more{flex:none}

/* a flex item defaults to min-width:auto, so the shortcut rail refused to
   shrink and pushed the page sideways on narrow screens */

/* the squiggle overhangs the photo by design, but on a narrow screen that
   overhang is wider than the page gutter */
@media(max-width:560px){
  .ts-lead-art .ts-mark{right:-8px;bottom:-34px;width:110px}
}

/* overflow-x:clip rather than hidden: hidden here would create a scroll
   container and break position:sticky on the article rail. It has to sit on
   the root as well, or the document still scrolls sideways. */
html:has(body.ts-oblici),body.ts-oblici{overflow-x:clip}
.ts-scope{overflow-x:clip}

/* on mobile the panel stacks: the tab is a header strip, the body flows under
   it. Without this the tab's width:100% leaves the body no room at all. */
@media(max-width:899px){
  .ts-panel{flex-direction:column}
  .ts-panel-tab{flex:none;width:100%;height:auto}
  .ts-panel[aria-expanded="true"] .ts-panel-tab{padding-bottom:.6rem}
  .ts-panel-body{padding:0 1.15rem 1.15rem;flex:1 1 auto;min-height:0;display:flex}
  .ts-panel-lead img{min-height:120px}
}

/* ============================================================
   POSTER LAYER
   The references are printed at poster scale: the wordmark fills the
   page, headlines run 70-110px, and almost every section sits on its
   own full-bleed ground. Everything below raises the page to that.
   ============================================================ */
:root{ --ts-shell:min(1560px,100% - 3rem); }

/* ---- full-bleed grounds ---- */
.ts-band{position:relative;padding:clamp(2.2rem,4.5vw,4rem) 0}
.ts-band::before{
  content:"";position:absolute;inset:0;z-index:-1;
  background:var(--ts-ground,transparent);
}
.ts-band > .ts-shell{position:relative}
.ts-band.tight{padding:clamp(1.6rem,3vw,2.6rem) 0}
.ts-band.dark{background:var(--ts-night);color:#F4F2F5}
.ts-band.dark h2,.ts-band.dark h3{color:#F4F2F5}
.ts-band.dark .ts-more{color:#F4F2F5}

/* ---- the wordmark fills the page, Nylon-style ---- */
.ts-top{padding:.9rem 0 0;border-bottom:0}
.ts-top .ts-shell{flex-direction:column;align-items:stretch;gap:.1rem}
.ts-top .ts-nav{order:-1;justify-content:flex-end;padding-bottom:.2rem}
.ts-masthead-word{
  font-family:var(--ts-display);font-weight:800;display:block;
  font-size:clamp(3.4rem,13.2vw,12rem);line-height:.82;letter-spacing:-.062em;
  margin:0 0 -.04em;
}
.ts-top .ts-wordmark{font-size:inherit;letter-spacing:inherit;line-height:inherit}

/* ---- poster headlines ---- */
.ts-lead h2{font-size:clamp(2.4rem,5.6vw,5rem);letter-spacing:-.052em;line-height:.96}
.ts-sec-head h2,.ts-band h2{font-size:clamp(2.2rem,5.2vw,4.4rem);letter-spacing:-.05em}
.ts-stack h3{font-size:clamp(1.05rem,1.35vw,1.3rem);line-height:1.18}
.ts-row h3{font-size:1.06rem;line-height:1.2}
.ts-row.wide h3{font-size:clamp(1.4rem,2.2vw,2rem);line-height:1.06;letter-spacing:-.04em}

/* the section word, set as a slab rather than a caption */
.ts-bigword{border-top-width:3px;border-bottom-width:3px;margin-bottom:1.1rem}
.ts-bigword span{font-size:clamp(2.6rem,7.5vw,6.4rem);letter-spacing:-.062em}

/* ---- hero: the photo breaks out, the headline sits on the colour ---- */
.ts-front{padding:.6rem 0 0}
.ts-front-grid{gap:1.6rem}
@media(min-width:1000px){
  .ts-front-grid{grid-template-columns:minmax(0,1.62fr) minmax(0,.72fr) minmax(0,.92fr);gap:2.2rem}
}
.ts-lead-art::before{inset:32px -34px -32px 32px}
.ts-lead-art img{aspect-ratio:16/10;border-radius:0}
.ts-lead-art{margin-bottom:2.8rem;border-radius:0}

/* squared images read as press photos, not app tiles */
.ts-mini img,.ts-wide img,.ts-row img{border-radius:0}

/* ---- denser feed ---- */
.ts-row{padding:.95rem 1.1rem 1.1rem;gap:.32rem}
.ts-rows{border-top-width:3px}
@media(min-width:1440px){ .ts-rows{grid-template-columns:repeat(5,1fr)}
  .ts-row:nth-child(2n+1),.ts-row:nth-child(4n+1){border-left:1px solid var(--ts-rule)}
  .ts-row:nth-child(5n+1){border-left:0}
  .ts-row.wide{grid-column:span 2}
}

/* ---- most-read: the numeral is the design ---- */
.ts-top10 a{grid-template-columns:auto 1fr;gap:1.1rem;padding:.7rem 0;align-items:center}
.ts-top10 .ts-num{
  font-size:clamp(3rem,5.4vw,5.2rem);letter-spacing:-.07em;line-height:.8;
  min-width:2.2ch;text-align:right;
}
.ts-top10 h3{font-size:clamp(1rem,1.5vw,1.28rem);line-height:1.16;letter-spacing:-.028em}

/* ---- video at scale ---- */
.ts-video-thumb{border-radius:0}
.ts-video-lead .ts-video-card:first-child h3{font-size:clamp(1.5rem,2.8vw,2.4rem);letter-spacing:-.04em;line-height:1.04}
.ts-video-side h3{font-size:1rem;line-height:1.16}
.ts-video-side .ts-video-card{grid-template-columns:168px 1fr}

/* ---- quiz band at scale ---- */
.ts-tease{border-radius:var(--ts-r4);padding:1.6rem}
.ts-tease h3{font-size:clamp(1.4rem,3.2vw,2.4rem);letter-spacing:-.04em;line-height:1.04}
.ts-opt{font-size:1rem;padding:.8rem 1.2rem}
.ts-quiz-card .ts-qtop .ts-window{height:150px}
.ts-quiz-card h3{font-size:1.08rem}

/* ---- accordion on its own ground ---- */
@media(min-width:900px){ .ts-acc{height:var(--ts-acc-h,clamp(400px,46vw,540px))} }
.ts-panel{border-radius:var(--ts-r3)}
.ts-panel-lead h3{font-size:clamp(1.2rem,2.2vw,1.85rem);letter-spacing:-.038em}
.ts-panel-list a{font-size:.92rem}

/* ---- section heads: a rule, not a row of identical widgets ---- */
.ts-sec-head{border-bottom:3px solid currentColor;padding-bottom:.5rem;margin-bottom:1.4rem;align-items:flex-end}
.ts-sec-head .ts-obj{margin-bottom:-.15rem}
.ts-more{align-self:flex-end}

/* ---- kill the dead air ---- */
.ts-sec{padding:clamp(2rem,3.8vw,3.4rem) 0}
.ts-foot{margin-top:0;padding:2rem 0 2.5rem}
.ts-foot .ts-wordmark{font-size:clamp(3rem,12vw,10rem);line-height:.8;letter-spacing:-.062em}
.ts-foot .ts-shell{align-items:flex-end}

.ts-vtxt{display:flex;flex-direction:column;gap:.3rem;min-width:0}
.ts-video-side .ts-video-card{align-items:start}

/* the block peeks out below and slightly left, the way a print block does.
   Offsetting it right pushed it into the next column. */
.ts-lead-art::before{inset:28px 28px -28px -18px;transform:rotate(-1.4deg)}
.ts-lead-art .ts-mark{right:auto;left:-26px;bottom:-46px;width:clamp(96px,11vw,132px)}
.ts-lead-art{margin-bottom:3rem}

/* scope the feature headline to the lead card only; :first-child also matched
   the first card inside the side column */
.ts-video-lead .ts-video-card:first-child h3{font-size:inherit}
.ts-video-lead > .ts-video-card > .ts-vtxt h3{
  font-size:clamp(1.5rem,2.8vw,2.4rem);letter-spacing:-.04em;line-height:1.04;
}
.ts-video-side .ts-vtxt h3{font-size:1rem;line-height:1.18;letter-spacing:-.022em}

/* ============================================================
   accordion: one story per panel
   ============================================================ */
.ts-panel-lead{gap:.7rem}
.ts-panel-txt{display:flex;flex-direction:column;gap:.25rem;min-width:0}
.ts-panel-when{
  font-family:var(--ts-display);font-weight:800;font-size:.66rem;
  letter-spacing:.12em;text-transform:uppercase;opacity:.6;
}
.ts-panel-lead img{flex:1 1 auto;min-height:100px}
.ts-panel-lead h3{font-size:clamp(1.15rem,1.9vw,1.7rem);line-height:1.08}
.ts-panel-more{margin-top:.8rem}

/* ============================================================
   MODULE: ts-menu  —  a character is the hamburger
   ============================================================ */
.ts-burger{
  border:0;background:none;padding:.2rem;cursor:pointer;line-height:0;
  border-radius:var(--ts-pill);flex:none;
}
.ts-burger .ts-obj{transition:transform .32s cubic-bezier(.22,1.4,.36,1)}
.ts-burger:hover .ts-obj{transform:scale(1.1) rotate(-6deg)}
.ts-burger.pop .ts-obj{animation:ts-squash .42s cubic-bezier(.22,1.3,.36,1)}
@keyframes ts-squash{
  0%{transform:none}
  35%{transform:scale(1.28,.76) rotate(-12deg)}
  70%{transform:scale(.88,1.14) rotate(8deg)}
  100%{transform:none}
}

.ts-menu{
  position:fixed;inset:0;z-index:120;background:var(--ts-paper);
  overflow-y:auto;opacity:0;transition:opacity .22s ease;
}
.ts-menu.on{opacity:1}
.ts-menu[hidden]{display:none}
.ts-menu-bar{
  display:flex;align-items:center;justify-content:space-between;gap:1rem;
  width:var(--ts-shell);margin-inline:auto;padding:1.1rem 0 .6rem;
}
.ts-menu-bar .ts-wordmark{font-size:clamp(2rem,6vw,3.4rem);letter-spacing:-.06em;line-height:.9}
.ts-menu-close{
  border:2px solid currentColor;background:none;cursor:pointer;color:var(--ts-ink);
  width:46px;height:46px;border-radius:var(--ts-pill);display:grid;place-items:center;flex:none;
}
.ts-menu-close svg{width:18px;height:18px;fill:none}
.ts-menu-grid{
  width:var(--ts-shell);margin-inline:auto;padding:.5rem 0 3rem;
  display:grid;gap:1.4rem 2rem;grid-template-columns:1fr;
}
@media(min-width:680px){ .ts-menu-grid{grid-template-columns:repeat(2,1fr)} }
@media(min-width:1100px){ .ts-menu-grid{grid-template-columns:repeat(3,1fr)} }
.ts-menu-item{
  border-top:2px solid var(--ts-rule);padding-top:.7rem;
  opacity:0;transform:translateY(12px);
}
.ts-menu.on .ts-menu-item{
  opacity:1;transform:none;
  transition:opacity .34s ease var(--d),transform .34s cubic-bezier(.22,1,.36,1) var(--d);
}
.ts-menu-head{display:flex;align-items:center;gap:.7rem}
.ts-menu-head span{
  font-family:var(--ts-display);font-weight:800;
  font-size:clamp(1.5rem,2.6vw,2.2rem);letter-spacing:-.04em;
}
.ts-menu-head:hover span{color:var(--ts-c)}
.ts-menu-subs{display:flex;flex-wrap:wrap;gap:.35rem;padding:.6rem 0 0 .2rem}
.ts-menu-subs a{
  border:1.5px solid var(--ts-rule);border-radius:var(--ts-pill);
  padding:.26rem .7rem;font-size:.78rem;
}
.ts-menu-subs a:hover{border-color:var(--ts-c);background:var(--ts-c)}

/* ============================================================
   MODULE: ts-loader  —  the rubric colour fills the screen
   ============================================================ */
.ts-loader{
  position:fixed;inset:0;z-index:200;display:grid;place-items:center;
  background:var(--ts-load,var(--ts-blush));
  opacity:0;pointer-events:none;
  clip-path:circle(0% at 50% 50%);
}
.ts-loader.on{
  opacity:1;pointer-events:all;
  animation:ts-wipe .42s cubic-bezier(.4,0,.2,1) forwards;
}
@keyframes ts-wipe{from{clip-path:circle(0% at 50% 50%)}to{clip-path:circle(140% at 50% 50%)}}
.ts-loader-obj{display:block}
.ts-loader.on .ts-loader-obj{animation:ts-load-bob 1s cubic-bezier(.45,0,.55,1) .1s infinite}
@keyframes ts-load-bob{
  0%,100%{transform:translateY(0) scale(1)}
  30%{transform:translateY(-16px) scale(1.06,.94)}
  55%{transform:translateY(0) scale(.94,1.06)}
}
@media (prefers-reduced-motion:reduce){
  .ts-loader.on{animation:none;clip-path:none}
  .ts-loader.on .ts-loader-obj{animation:none}
}

/* inside pages: a compact bar, no nav row, the character is the menu */
.ts-bar{
  position:sticky;top:0;z-index:60;background:var(--ts-paper);
  border-bottom:1px solid var(--ts-rule);
}
.ts-bar .ts-shell{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.6rem 0}
.ts-bar .ts-wordmark{font-size:clamp(1.6rem,3.4vw,2.4rem);letter-spacing:-.055em;line-height:.9}

/* ============================================================
   ARTICLE
   The source images are 900x600. Nothing here upscales one: the figure
   caps at its natural width and keeps 3:2, so it always renders sharp.
   ============================================================ */
.ts-art{padding-top:clamp(1.2rem,2.6vw,2.2rem)}

.ts-art-top{display:grid;gap:1.4rem;grid-template-columns:1fr;align-items:start}
@media(min-width:900px){
  .ts-art-top{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:2.4rem;align-items:center}
}
.ts-art-txt{display:flex;flex-direction:column;gap:.85rem;align-items:flex-start}
.ts-art-txt h1{
  font-size:clamp(2rem,4.4vw,3.8rem);letter-spacing:-.048em;line-height:.98;
  max-width:18ch;margin:0;
}
.ts-art-deck{font-size:clamp(1rem,1.3vw,1.16rem);color:var(--ts-dim);max-width:46ch;margin:0}
.ts-art-meta{
  display:flex;flex-wrap:wrap;gap:.4rem .9rem;align-items:center;
  font-size:.78rem;color:var(--ts-dim);
}
.ts-art-meta b{font-family:var(--ts-display);font-weight:800;color:var(--ts-ink)}
.ts-art-meta span::before{content:"·";margin-right:.9rem;opacity:.5}

/* the figure never exceeds the file's own pixels */
.ts-art-fig{margin:0;position:relative;max-width:900px;justify-self:end;width:100%}
.ts-art-fig::before{
  content:"";position:absolute;inset:20px -20px -20px 20px;
  background:var(--ts-accent);transform:rotate(-1.2deg);z-index:0;
}
.ts-art-fig img{
  position:relative;z-index:1;display:block;width:100%;height:auto;
  aspect-ratio:3/2;object-fit:cover;
}
.ts-art-fig figcaption{
  position:relative;z-index:1;padding-top:.5rem;
  font-size:.72rem;color:var(--ts-dim);
}

.ts-art-body{
  display:grid;gap:2rem;grid-template-columns:1fr;
  padding:clamp(1.6rem,3vw,2.6rem) 0 clamp(2rem,3.5vw,3rem);
}
@media(min-width:1040px){ .ts-art-body{grid-template-columns:minmax(0,1fr) 320px;gap:3rem} }
.ts-prose{max-width:66ch}
.ts-prose > * + *{margin-top:1rem}
.ts-lede{font-size:1.2rem;font-weight:500;line-height:1.5}
.ts-prose h2{font-size:clamp(1.4rem,2.2vw,1.9rem);margin-top:1.9rem;letter-spacing:-.034em}
.ts-prose img{border-radius:0;max-width:900px}

/* the read-next block is a row, not a stack, so it costs one screen inch */
.ts-interrupt{
  display:grid;grid-template-columns:132px 1fr;gap:1rem;align-items:center;
  border-radius:0;padding:.75rem 1.1rem .75rem .75rem;margin:1.8rem 0;
  background:var(--ts-accent);
}
.ts-interrupt img{width:100%;aspect-ratio:3/2;object-fit:cover;border-radius:0;margin:0}
.ts-interrupt h3{font-size:clamp(1rem,1.5vw,1.25rem);line-height:1.14;letter-spacing:-.03em}

.ts-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:1.8rem;padding-top:1.2rem;border-top:1px solid var(--ts-rule)}
.ts-tags a{
  border:1.5px solid var(--ts-rule);border-radius:var(--ts-pill);
  padding:.3rem .8rem;font-family:var(--ts-display);font-weight:800;font-size:.76rem;
}
.ts-tags a:hover{border-color:var(--ts-c);background:var(--ts-c)}

.ts-side-quiz{
  display:flex;align-items:center;gap:.8rem;margin-top:1.4rem;
  background:var(--ts-pistachio);padding:.9rem 1rem;border-radius:var(--ts-r3);
  font-size:.86rem;line-height:1.25;color:var(--ts-ink);
}
.ts-side-quiz b{font-family:var(--ts-display);font-weight:800;font-size:.7rem;letter-spacing:.11em;text-transform:uppercase}

/* related grid: plain photos, kicker, headline */
.ts-relgrid{display:grid;gap:1rem 1.2rem;grid-template-columns:repeat(2,1fr)}
@media(min-width:760px){ .ts-relgrid{grid-template-columns:repeat(3,1fr)} }
@media(min-width:1180px){ .ts-relgrid{grid-template-columns:repeat(6,1fr)} }
.ts-relcard{display:flex;flex-direction:column;gap:.35rem}
.ts-relcard img{width:100%;aspect-ratio:3/2;object-fit:cover}
.ts-relcard .ts-kicker{
  font-family:var(--ts-display);font-weight:800;font-size:.64rem;
  letter-spacing:.11em;text-transform:uppercase;
}
.ts-relcard h3{font-size:.94rem;line-height:1.18;letter-spacing:-.028em}
.ts-relcard:hover h3{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}

/* the source files are 900px wide; an open panel can be wider than that on a
   large screen, so cap the photo rather than blow it up */
.ts-panel-lead img{max-width:900px;align-self:flex-start}
@media(min-width:900px){ .ts-panel-lead img{width:100%;object-fit:cover} }

/* ============================================================
   ARTICLE, second pass
   The gap: the text column was 1fr on a 1560px shell while the prose
   capped at 66ch, so ~700px of the row was empty. The column is now
   sized to the measure and the whole body is centred at 1200px.
   ============================================================ */
.ts-art-body{
  max-width:1200px;margin-inline:auto;
  grid-template-columns:1fr;
}
@media(min-width:1040px){
  .ts-art-body{grid-template-columns:minmax(0,1fr) 290px;gap:3rem}
}
.ts-art-body .ts-prose{max-width:none}

/* the header sits on its own ground and ends on a rule, Elite Daily style */
.ts-art{padding-top:0}
.ts-art-head-band{
  background:var(--ts-band,color-mix(in oklab,var(--ts-accent) 13%,#FBFAF8));
  border-bottom:1px solid var(--ts-rule);
  padding:clamp(1.6rem,3.4vw,3rem) 0 clamp(1.1rem,2vw,1.6rem);
}
.ts-art-top{grid-template-columns:1fr;align-items:start}
@media(min-width:900px){
  .ts-art-top{grid-template-columns:minmax(0,1.04fr) minmax(0,1fr);gap:2.6rem;align-items:start}
}
.ts-art-kicker{
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.14em;text-transform:uppercase;
  /* the design prints this in the rubric's own colour, not in ink */
  color:var(--ts-accent,var(--ts-ink));
}
.ts-art-txt{gap:.9rem}
.ts-art-txt h1{max-width:16ch;font-size:clamp(2.1rem,4.2vw,3.6rem);letter-spacing:-.042em;line-height:1.02}
.ts-byline{
  margin-top:auto;padding-top:1.2rem;display:flex;flex-direction:column;gap:.1rem;
  font-size:.78rem;color:var(--ts-dim);
}
.ts-byline b{
  font-family:var(--ts-display);font-weight:800;font-size:.76rem;
  letter-spacing:.06em;text-transform:uppercase;color:var(--ts-ink);
}
.ts-art-fig{justify-self:stretch;max-width:900px}
.ts-art-fig::before{inset:16px -16px -16px 16px}
.ts-art-fig figcaption{
  text-align:right;font-size:.66rem;letter-spacing:.09em;text-transform:uppercase;
}
.ts-art-deck{
  margin:1rem 0 0;max-width:52ch;font-size:clamp(.98rem,1.2vw,1.1rem);
  color:var(--ts-ink);
}

/* the opening paragraph gets a drop cap */
.ts-lede{font-size:1.1rem;font-weight:400;line-height:1.6}
.ts-lede::first-letter{
  float:left;font-family:var(--ts-display);font-weight:800;
  font-size:3.4em;line-height:.78;padding:.06em .1em 0 0;
}

/* ---- restore the in-article blocks ---- */
.ts-prose blockquote{
  margin:1.9rem 0;padding:1.1rem 1.35rem;border-left:5px solid var(--ts-accent);
  background:var(--ts-surface);border-radius:0 var(--ts-r2) var(--ts-r2) 0;
  font-family:var(--ts-display);font-weight:800;
  font-size:clamp(1.05rem,1.6vw,1.3rem);letter-spacing:-.028em;line-height:1.28;
}
.ts-interrupt{
  border-radius:var(--ts-r3);padding:.85rem 1.2rem .85rem .85rem;
  grid-template-columns:104px 1fr;gap:1.1rem;
}
.ts-interrupt .ts-frame{
  background:#FFFDFA;border-radius:var(--ts-r1);padding:.5rem;
  display:grid;place-items:center;
}
.ts-interrupt .ts-window{width:100%;height:76px;aspect-ratio:auto}
.ts-interrupt .ts-k{
  font-family:var(--ts-display);font-weight:800;font-size:.64rem;
  letter-spacing:.14em;text-transform:uppercase;opacity:.72;
  display:block;margin-bottom:.22rem;
}

/* the credit sits under the block, not on it */
.ts-art-fig::before{inset:16px -16px -10px 16px}
.ts-art-fig figcaption{padding-top:1.1rem}

/* pupils track the cursor; --ex/--ey are set per icon by wireEyes() */
.ts-pupil{
  transform:translate(var(--ex,0px),var(--ey,0px));
  transition:transform .14s cubic-bezier(.3,0,.2,1);
}
@media (prefers-reduced-motion:reduce){ .ts-pupil{transform:none;transition:none} }

/* ============================================================
   ARTICLE HEADER, third pass
   Masthead, headline and photo are one block on one ground. The photo
   runs top to bottom and bleeds off the right edge.
   ============================================================ */
.ts-art-head-band{padding:0;border-bottom:1px solid var(--ts-rule);overflow:hidden}
.ts-art-top{
  display:grid;grid-template-columns:1fr;gap:0;align-items:stretch;
}
@media(min-width:900px){
  .ts-art-top{grid-template-columns:minmax(0,1.02fr) minmax(0,1fr)}
}
.ts-art-left{
  display:flex;flex-direction:column;
  padding:1rem max(1.5rem,3vw) clamp(1.4rem,2.6vw,2.4rem) max(1.5rem,3vw);
}
.ts-art-bar{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:clamp(1.5rem,4vw,3.4rem)}
.ts-art-bar .ts-wordmark{font-size:clamp(1.7rem,3.6vw,2.6rem);letter-spacing:-.055em;line-height:.9}
.ts-art-txt{gap:.9rem;margin-top:auto}
.ts-art-txt h1{max-width:15ch}
.ts-byline{margin-top:1.2rem;padding-top:0}

/* top to bottom, and off the right edge */
.ts-art-fig{
  margin:0;position:relative;max-width:none;width:100%;
  min-height:clamp(260px,34vw,520px);
}
.ts-art-fig::before{display:none}
.ts-art-fig img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center 30%;
  aspect-ratio:auto;max-width:none;
}
@media(max-width:899px){
  .ts-art-fig{min-height:0;position:relative}
  .ts-art-fig img{position:static;height:auto;aspect-ratio:3/2}
  .ts-art-left{order:2;padding-top:1.4rem}
  .ts-art-bar{order:-1;margin-bottom:0}
}

/* ============================================================
   accordion, fixed
   Stacked, the photo capped at its 900px source left a dead strip and
   pushed the button past the panel. Open panels now run side by side.
   ============================================================ */
.ts-panel-body{display:flex;flex-direction:column;gap:.9rem;overflow:hidden}
@media(min-width:900px){
  .ts-panel-body{flex-direction:row;align-items:stretch;gap:1.3rem;padding:1.2rem 1.4rem 1.2rem 0}
}
.ts-panel-photo{
  display:block;overflow:hidden;border-radius:var(--ts-r2);
  flex:1 1 56%;min-width:0;min-height:120px;
}
.ts-panel-photo img{
  width:100%;height:100%;object-fit:cover;display:block;
  max-width:none;aspect-ratio:auto;
}
@media(max-width:899px){
  .ts-panel-photo{flex:1 1 auto}
  .ts-panel-photo img{aspect-ratio:3/2;height:auto}
}
.ts-panel-txt{
  flex:1 1 44%;min-width:0;display:flex;flex-direction:column;
  justify-content:center;gap:.4rem;
}
.ts-panel-txt h3{font-size:clamp(1.15rem,1.8vw,1.75rem);line-height:1.08;letter-spacing:-.038em}
.ts-panel-more{align-self:flex-start;margin-top:.9rem}

/* height:100% plus padding was overflowing the panel by exactly the padding;
   flex stretch already sizes the body, so drop the explicit height */
@media(min-width:900px){ .ts-panel-body{height:auto;min-height:0} }

/* the article menu floats over the photo, top right, with a soft plate so it
   stays legible whatever the picture is doing underneath */
.ts-art-head-band{position:relative}
.ts-art-burger{
  position:absolute;top:.85rem;right:max(1.1rem,2vw);z-index:5;
}
/* no plate: a drop shadow keeps the character legible on a dark photo
   without putting a box around it */
.ts-art-burger .ts-burger{background:none;padding:0}
.ts-art-burger .ts-obj{filter:drop-shadow(0 2px 7px rgb(0 0 0 / .45))}
@media(max-width:899px){
  .ts-art-burger{top:.7rem;right:1rem}
  .ts-art-burger .ts-obj{filter:none}
}

/* The photo column caps at the 900px source so it never upscales on a wide
   screen, while the grid still spans the full width so the photo stays flush
   to the browser edge. The text column absorbs whatever is left over. */
@media(min-width:900px){
  .ts-art-top{grid-template-columns:minmax(0,1fr) minmax(0,900px)}
  .ts-art-left{max-width:820px;margin-left:auto;width:100%}
}

/* ---- mobile: the photo leads, the wordmark reverses out over it ---- */
@media(max-width:899px){
  .ts-art-fig{order:1}
  .ts-art-left{order:2}
  .ts-art-bar{
    position:absolute;inset:0 0 auto 0;z-index:4;
    margin:0;padding:.75rem 1rem;
  }
  .ts-art-bar .ts-wordmark{color:#FFFDFA}
  /* a scrim across the top of the photo so the wordmark reads on any picture */
  .ts-art-fig::after{
    content:"";position:absolute;inset:0 0 auto 0;height:130px;z-index:1;
    background:linear-gradient(180deg,rgb(0 0 0 / .52) 0%,rgb(0 0 0 / .22) 55%,transparent 100%);
    pointer-events:none;
  }
  .ts-art-fig img{position:relative;z-index:0}
  .ts-art-burger{top:.75rem;right:1rem}
  .ts-art-burger .ts-obj{filter:drop-shadow(0 2px 7px rgb(0 0 0 / .5))}
}

/* ============================================================
   MODULE: ts-masthead  —  three bands on one set of edges
   ============================================================ */
.ts-top{padding:.7rem 0 0}
.ts-top .ts-shell{display:block}
.ts-util{
  display:flex;align-items:center;justify-content:space-between;gap:1rem;
  padding-bottom:.55rem;border-bottom:1px solid var(--ts-rule);
}
.ts-util-date{
  font-family:var(--ts-display);font-weight:800;font-size:.68rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ts-dim);
}
.ts-social{display:flex;align-items:center;gap:.15rem}
.ts-social a{
  width:34px;height:34px;display:grid;place-items:center;border-radius:var(--ts-pill);
  color:var(--ts-ink);transition:background .16s ease,transform .16s ease;
}
.ts-social a:hover{background:var(--ts-surface);transform:translateY(-1px)}
.ts-social svg{width:17px;height:17px;fill:currentColor}

/* the wordmark spans the measure exactly, so the bar below can line up */
.ts-masthead-word{margin:.1rem 0 -.02em}

/* the rubric bar spreads edge to edge and reads as a band */
.ts-rail{border-top:1px solid var(--ts-rule);border-bottom:1px solid var(--ts-rule);padding:.85rem 0 .7rem}
.ts-rail-track{justify-content:space-between;gap:.5rem}
.ts-rail-item{flex:0 1 auto;width:auto;min-width:0;padding:.35rem .35rem}
@media(max-width:820px){
  .ts-rail-track{justify-content:flex-start;gap:1.1rem}
  .ts-rail-item{flex:0 0 auto}
  .ts-util-date{display:none}
  .ts-util{justify-content:flex-end}
}

/* the wordmark should reach the same right edge as the rules and the rubric
   bar, otherwise the three bands do not read as one block */
/* Tuned so "teenstar" reaches the same right edge as the rules and the
   rubric bar. The ratio is font-specific: retune the vw and the cap when
   hagrid replaces the substitute face. */
.ts-masthead-word{font-size:clamp(3.4rem,20.6vw,20.8rem)}

/* ============================================================
   masthead, reverted and tightened
   Wordmark and nav on one line, then the rubric bar. The wordmark is
   sized for itself, not stretched to the measure, so swapping the logo
   for a real one does not change the layout.
   ============================================================ */
.ts-top{padding:1.1rem 0 0}
/* flex-direction has to be reset: an earlier poster-layer rule set this
   shell to column and it still wins over a bare display:flex */
.ts-top .ts-shell{
  display:flex;flex-direction:row;align-items:flex-end;justify-content:space-between;
  gap:1.5rem 2.5rem;flex-wrap:wrap;padding-bottom:.75rem;
}
.ts-masthead-word{
  font-size:clamp(2.4rem,6.4vw,5.4rem);line-height:.84;margin:0;flex:none;
}
.ts-top-right{
  display:flex;align-items:center;gap:.4rem 1.4rem;flex-wrap:wrap;
  justify-content:flex-end;padding-bottom:.35rem;
}
.ts-top .ts-nav{gap:.15rem}
.ts-top .ts-nav a{padding:.34rem .6rem;font-size:.76rem}
.ts-social{gap:0}
.ts-social a{width:30px;height:30px}
.ts-social svg{width:16px;height:16px}

@media(max-width:700px){
  .ts-top .ts-shell{gap:.8rem}
  .ts-top-right{width:100%;justify-content:space-between;padding-bottom:0}
  .ts-top .ts-nav{flex:1 1 auto;overflow-x:auto;scrollbar-width:none;flex-wrap:nowrap}
  .ts-top .ts-nav::-webkit-scrollbar{display:none}
}

/* ============================================================
   MOBILE PASS
   Desktop devices that do not survive a 390px screen: the offset
   colour block, poster headlines, full-width 4:3 feed photos, and a
   wrapping nav. Each is replaced rather than shrunk.
   ============================================================ */
@media(max-width:760px){

  /* ---- masthead: one tidy block ---- */
  .ts-top{padding:.9rem 0 0}
  .ts-top .ts-shell{gap:.7rem;padding-bottom:.6rem;align-items:center}
  .ts-masthead-word{font-size:clamp(2rem,11vw,2.9rem);flex:1 1 auto}
  .ts-top-right{width:auto;flex:none;padding:0}
  .ts-top .ts-nav{display:none}          /* the rubric bar below already lists them */
  .ts-social{gap:0}
  .ts-social a{width:32px;height:32px}

  /* the rubric bar scrolls as one row, never wraps, never clips a word */
  .ts-rail{padding:.7rem 0}
  .ts-rail-track{
    justify-content:flex-start;flex-wrap:nowrap;gap:1.15rem;
    overflow-x:auto;padding-bottom:.15rem;
  }
  .ts-rail-item{flex:0 0 auto;width:auto}
  .ts-rail-item span{font-size:.62rem}

  /* ---- hero: no offset block, no squiggle, a readable headline ---- */
  .ts-lead-art{margin-bottom:1rem}
  .ts-lead-art::before{display:none}
  .ts-lead-art .ts-mark{display:none}
  .ts-lead-art img{aspect-ratio:4/3}
  .ts-lead h2{font-size:clamp(1.6rem,7.4vw,2.2rem);letter-spacing:-.035em;line-height:1.04}
  .ts-lead p{font-size:.94rem}
  .ts-front{padding-top:1rem}
  .ts-front-grid{gap:1.6rem}

  /* ---- section headings come down to earth ---- */
  .ts-sec-head h2,.ts-band h2{font-size:clamp(1.5rem,7vw,2.1rem)}
  .ts-sec-head{gap:.6rem;margin-bottom:1rem;padding-bottom:.4rem}
  .ts-sec-head .ts-obj{width:34px;height:34px}
  .ts-more{font-size:.68rem;padding:.32rem .7rem}
  .ts-bigword span{font-size:clamp(1.9rem,11vw,3rem)}
  .ts-band{padding:1.8rem 0}

  /* ---- feed: a compact list, not a column of 4:3 photos ---- */
  .ts-rows{grid-template-columns:1fr;border-top-width:2px}
  .ts-row,.ts-row.wide{
    display:grid;grid-template-columns:92px 1fr;gap:.85rem;align-items:start;
    padding:.8rem 0;border-left:0 !important;
  }
  /* align-self:start, or the grid stretches the thumb to the row height and
     aspect-ratio:1 loses */
  .ts-row img,.ts-row.wide img{
    width:92px;height:92px;aspect-ratio:1;object-fit:cover;margin:0;
    grid-row:span 2;align-self:start;
  }
  .ts-row .ts-rowtxt{display:flex;flex-direction:column;gap:.22rem;min-width:0}
  .ts-row h3,.ts-row.wide h3{font-size:.96rem;line-height:1.22;letter-spacing:-.024em}
  .ts-row .ts-kicker{font-size:.6rem}
  .ts-row .ts-when{padding-top:.1rem}

  /* ---- quiz: a swipe row, not four stacked blocks ---- */
  .ts-tease{padding:1rem;gap:.8rem}
  .ts-tease-art{width:64px}
  .ts-tease-art .ts-obj{width:100%;height:auto}
  .ts-tease h3{font-size:1.15rem;margin-bottom:.7rem}
  .ts-opt{font-size:.88rem;padding:.62rem .9rem}
  .ts-quiz-grid{
    display:flex;gap:.75rem;overflow-x:auto;scroll-snap-type:x proximity;
    scrollbar-width:none;padding-bottom:.25rem;
  }
  .ts-quiz-grid::-webkit-scrollbar{display:none}
  .ts-quiz-card{flex:0 0 74%;scroll-snap-align:center}
  .ts-quiz-card .ts-qtop .ts-window{height:104px}
  .ts-quiz-card h3{font-size:.96rem}

  /* ---- video: thumb beside text ---- */
  .ts-video-lead{gap:1rem}
  .ts-video-side .ts-video-card{grid-template-columns:118px 1fr;gap:.7rem}
  .ts-video-lead > .ts-video-card > .ts-vtxt h3{font-size:1.2rem}
  .ts-video-side .ts-vtxt h3{font-size:.9rem}

  /* ---- most read: the numeral stays the point, at a sane size ---- */
  .ts-top10 a{grid-template-columns:auto 1fr;gap:.8rem;padding:.6rem 0}
  .ts-top10 .ts-num{font-size:2.2rem;min-width:1.8ch}
  .ts-top10 h3{font-size:.94rem}

  /* ---- middle column and mix ---- */
  .ts-stack h3{font-size:1rem}
  .ts-stack a{padding:.75rem 0}
  .ts-mix{gap:1rem}
  .ts-wide h3{font-size:1.1rem}
  .ts-mini h3{font-size:.86rem}

  .ts-foot .ts-wordmark{font-size:clamp(2rem,13vw,3rem)}
}

/* ============================================================
   MODULE: ts-stickybar  -  the masthead that contracts to "ts"
   One bar per template, always on screen, two states. Replaces the
   old .ts-sticky clone, which meant two wordmarks in the DOM and a
   bar that flew in from nowhere.
   ============================================================ */

/* The morph. inline-grid 1fr -> 0fr collapses to exactly zero width,
   so there is no measured max-width to keep in step with the font.
   Nothing is added or removed from the DOM: same link, same text,
   so screen readers are unaffected (the <a> carries aria-label). */
.ts-wm-cut{
  display:inline-grid;grid-template-columns:1fr;
  transition:grid-template-columns .5s cubic-bezier(.66,0,.2,1);
}
.ts-wm-cut > span{overflow:hidden;min-width:0}
.ts-shrinkbar.shrunk .ts-wm-cut{grid-template-columns:0fr}

/* fixed, not sticky. A sticky header is in normal flow, so contracting it
   dragged the whole document up 38px mid-scroll and ran layout on every frame
   of the transition. Fixed, with a spacer holding the expanded height, means
   the contraction is confined to the bar's own layer. */
.ts-shrinkbar{
  position:fixed;inset:0 0 auto 0;z-index:60;background:var(--ts-paper);
  contain:layout paint;
}
.ts-bar-spacer{height:0}
.ts-shrinkbar .ts-wordmark{transition:font-size .42s cubic-bezier(.66,0,.2,1)}

/* ---- the menu character ---- */
/* Collapsed to nothing at rest, then it unrolls: a full turn as it
   arrives, so the shrink reads as one movement rather than a button
   appearing. width and transform run on different curves on purpose -
   the spin should still be going when the slot has finished opening. */
.ts-top-burger,.ts-bar-burger{
  display:inline-flex;align-items:center;overflow:hidden;flex:none;
  transition:width .38s cubic-bezier(.66,0,.2,1),opacity .24s ease;
}
.ts-top-burger{width:0;opacity:0}
.ts-shrinkbar.shrunk .ts-top-burger{width:44px;opacity:1}

/* obj() writes explicit width/height ATTRIBUTES, so a container width will
   not shrink the character - it needs a width of its own. At 46px it towered
   over a 2.2rem "ts"; 38 reads as its pair. */
.ts-top-burger .ts-obj,.ts-bar-burger .ts-obj{
  transition:transform .32s cubic-bezier(.22,1.4,.36,1),
             width .4s cubic-bezier(.66,0,.2,1);
}
.ts-shrinkbar.shrunk .ts-top-burger .ts-obj,
.ts-shrinkbar.shrunk .ts-bar-burger .ts-obj{width:38px;height:auto}
.ts-top-burger .ts-burger,.ts-bar-burger .ts-burger{
  transition:transform .62s cubic-bezier(.18,.88,.24,1);
}
.ts-top-burger .ts-burger{transform:rotate(-360deg) scale(.3)}
.ts-shrinkbar.shrunk .ts-top-burger .ts-burger{transform:none}
/* inside pages already show the character, so it only spins */
.ts-shrinkbar.shrunk .ts-bar-burger .ts-burger{transform:rotate(360deg)}

/* ---- homepage masthead, contracted ---- */
.ts-top{transition:padding .42s cubic-bezier(.66,0,.2,1),box-shadow .3s ease}
.ts-top .ts-shell{position:relative}
.ts-top-right{transition:opacity .22s ease,transform .3s cubic-bezier(.66,0,.2,1)}
.ts-top.shrunk{padding-top:.35rem;box-shadow:0 1px 0 var(--ts-rule)}
/* flex-start, not the space-between the expanded bar uses: contracted, the
   menu character belongs beside the ts, not marooned at the far edge */
.ts-top.shrunk .ts-shell{
  padding-bottom:.35rem;align-items:center;gap:.55rem;justify-content:flex-start;
}
.ts-top.shrunk .ts-masthead-word{font-size:2.2rem}
.ts-top.shrunk .ts-top-right{
  /* out of flow, not display:none: the bar height then follows the
     wordmark alone, and the fade still runs */
  position:absolute;right:0;bottom:0;opacity:0;transform:translateY(-8px);
  pointer-events:none;
}

/* ---- inside-page bar, contracted ---- */
.ts-bar{transition:padding .42s cubic-bezier(.66,0,.2,1)}
.ts-bar.shrunk .ts-shell{padding:.35rem 0;justify-content:flex-start;gap:.55rem}
.ts-bar.shrunk .ts-wordmark{font-size:2rem}

/* ---- the article's bar arrives instead of sticking from the start ---- */
.ts-bar-float{
  position:fixed;inset:0 0 auto 0;
  transform:translateY(-101%);transition:transform .28s ease;
}
.ts-bar-float.on{transform:none}

@media(max-width:760px){
  .ts-shrinkbar.shrunk .ts-top-burger{width:40px}
  .ts-shrinkbar.shrunk .ts-top-burger .ts-obj,
  .ts-shrinkbar.shrunk .ts-bar-burger .ts-obj{width:34px}
  .ts-top.shrunk .ts-masthead-word{font-size:1.9rem}
  .ts-bar.shrunk .ts-wordmark{font-size:1.75rem}
  .ts-top.shrunk .ts-shell{gap:.5rem}
  /* the mobile pass gives the wordmark flex:1 1 auto so it fills the row.
     Contracted it must stop growing, or it pushes the character to the far
     edge and the two never sit together. */
  .ts-top.shrunk .ts-masthead-word{flex:none}
}

@media(prefers-reduced-motion:reduce){
  .ts-wm-cut,.ts-shrinkbar .ts-wordmark,.ts-top,.ts-bar,
  .ts-top-burger,.ts-bar-burger,.ts-top-burger .ts-burger,
  .ts-bar-burger .ts-burger,.ts-top-right,.ts-bar-float{transition:none}
  .ts-top-burger .ts-burger{transform:none}
}

/* ==========================================================================
   Plugin additions
   Everything above is the mockup, ported. Everything below exists because a
   plugin has to live inside someone else's theme and inside the Elementor
   editor, and because the widget set grew past the five mockup pages.
   ========================================================================== */

/* ---- widget wrapper ---- */
.ts-w{position:relative}
.ts-w > .ts-band:first-child{margin-top:0}
.elementor-widget-container > .ts-w{width:100%}

/* Elementor puts every widget in a padded column; the full-bleed bands and
   the fixed masthead have to escape it without touching the theme. */
.elementor-widget-oblici-masthead > .elementor-widget-container,
.elementor-widget-oblici-article-head > .elementor-widget-container,
.elementor-widget-oblici-archive-header > .elementor-widget-container{padding:0}

/* ---- image controls ---- */
.ts-frame{--ts-zoom:1.06}
.ts-window-plain{display:block;width:100%;overflow:hidden;border-radius:inherit}
.ts-window-plain img{width:100%;height:100%;object-fit:cover;display:block}
.ts-frame img,.ts-window img{transition:transform .5s cubic-bezier(.22,1,.36,1)}
a:hover > .ts-frame img,a:hover .ts-frame img,a:hover > .ts-frame .ts-window img{transform:scale(var(--ts-zoom,1.06))}
.ts-no-zoom .ts-frame img{transform:none !important}

/* an aspect ratio control, where the mockup hardcoded one */
.ts-frame[style*="--ts-ratio"]{aspect-ratio:var(--ts-ratio)}

/* ---- rise-in stagger becomes a control ---- */
.ts-no-rise .ts-rise{opacity:1;transform:none}

/* ---- empty state, editor only ---- */
.ts-empty{
  padding:1.1rem 1.25rem;border:2px dashed var(--ts-rule);border-radius:var(--ts-r2);
  color:var(--ts-dim);font-family:var(--ts-text);font-size:.92rem;background:var(--ts-card);
}

/* ---- pagination ---- */
.ts-pagination{margin:2rem 0 0}
.ts-pagination ul{display:flex;flex-wrap:wrap;gap:.4rem;list-style:none;margin:0;padding:0}
.ts-pagination a,.ts-pagination span{
  display:grid;place-items:center;min-width:2.4rem;height:2.4rem;padding:0 .6rem;
  border-radius:var(--ts-pill);border:1px solid var(--ts-rule);
  font-family:var(--ts-display);font-weight:600;font-size:.95rem;background:var(--ts-card);
}
.ts-pagination .current{background:var(--ts-accent);border-color:var(--ts-accent)}

/* ---- archive header: term image ---- */
.ts-arch-art{position:relative;width:var(--ts-art,200px);flex:none}
.ts-arch-art > svg{width:100%;height:auto}
.ts-arch-img{display:block;width:var(--ts-art,200px);height:var(--ts-art,200px);border-radius:var(--ts-r4);overflow:hidden}
.ts-arch-img img{width:100%;height:100%;object-fit:cover;display:block}
.ts-arch-badge{position:absolute;right:-.5rem;bottom:-.5rem}
.ts-arch-desc p{margin:.4rem 0 0}

/* ---- footer additions ---- */
.ts-foot-rubrics{display:flex;flex-wrap:wrap;gap:1rem;margin:1.4rem 0}
.ts-foot-rubrics a{display:flex;align-items:center;gap:.4rem;font-weight:600;font-size:.92rem}
.ts-foot-rubrics a:hover{color:var(--ts-accent)}
.ts-foot-links{display:flex;flex-wrap:wrap;gap:.25rem 1.1rem;margin:.6rem 0}
.ts-foot-links a{font-size:.9rem;color:var(--ts-dim);text-decoration:underline;text-underline-offset:3px}
.ts-foot-links a:hover{color:var(--ts-ink)}

/* ---- sticky side rails ---- */
@media(min-width:1040px){ .ts-side-sticky{position:sticky;top:6rem;align-self:start} }

/* ---- a wrapping rail, for the archive sidebar ---- */
.ts-rail-wrap{flex-wrap:wrap;gap:1rem;padding-top:.75rem}
.ts-rail-head-2{margin-top:2rem}

/* ---- menu trigger standing alone ---- */
.ts-menu-standalone{display:inline-flex}

/* ==========================================================================
   Breaking news ticker
   ========================================================================== */
.ts-ticker{
  position:relative;display:flex;align-items:center;gap:.9rem;overflow:hidden;
  padding:.55rem 1rem;border-radius:var(--ts-pill);background:var(--ts-surface);
}
.ts-ticker[hidden]{display:none}
.ts-ticker-label{
  display:inline-flex;align-items:center;gap:.4rem;flex:none;
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ts-ink);
}
.ts-ticker-label .ts-obj{flex:none}
.ts-ticker-track{display:flex;gap:2.5rem;min-width:0;align-items:center}
.ts-ticker-item{
  font-family:var(--ts-text);font-weight:600;font-size:1rem;line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.ts-ticker-item:hover{color:var(--ts-accent)}
.ts-ticker-rotate .ts-ticker-track{display:block;position:relative;flex:1 1 auto}
.ts-ticker-rotate .ts-ticker-item{display:none}
.ts-ticker-rotate .ts-ticker-item.is-on{display:block;animation:ts-tick-in .4s ease}
.ts-ticker-scroll .ts-ticker-track{animation:ts-slide var(--ts-ticker-speed,30s) linear infinite}
.ts-ticker-close{
  flex:none;width:1.9rem;height:1.9rem;display:grid;place-items:center;
  border:0;background:transparent;color:var(--ts-dim);cursor:pointer;border-radius:50%;
}
.ts-ticker-close:hover{background:var(--ts-card);color:var(--ts-ink)}
.ts-ticker-close svg{width:.85rem;height:.85rem;fill:none}
@keyframes ts-tick-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){
  .ts-ticker-scroll .ts-ticker-track{animation:none}
  .ts-ticker-rotate .ts-ticker-item.is-on{animation:none}
}

/* ==========================================================================
   Live blog
   ========================================================================== */
.ts-live{--ts-line:var(--ts-rule);display:flex;flex-direction:column;gap:1.4rem;margin-top:1.4rem}
.ts-live-entry{
  position:relative;padding:0 0 1.4rem 1.6rem;border-left:2px solid var(--ts-line);
}
.ts-live-entry:last-child{padding-bottom:0}
.ts-live-entry::before{
  content:"";position:absolute;left:-.45rem;top:.35rem;width:.8rem;height:.8rem;
  border-radius:50%;background:var(--ts-accent);
}
.ts-live-entry.is-pinned{background:var(--ts-surface);border-radius:var(--ts-r2);padding:1rem 1.2rem 1rem 1.6rem}
.ts-live-time{
  font-family:var(--ts-display);font-weight:800;font-size:.78rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--ts-dim);
}
.ts-live-entry h3{font-size:clamp(1.1rem,2vw,1.5rem);margin:.25rem 0 .4rem}
.ts-live-entry p{margin:0 0 .6rem;color:var(--ts-dim);max-width:var(--ts-measure)}

/* ==========================================================================
   Carousel
   ========================================================================== */
.ts-carousel-wrap{position:relative;margin-top:1.2rem}
.ts-carousel{
  display:flex;gap:1.2rem;overflow-x:auto;scroll-snap-type:x mandatory;
  scroll-behavior:smooth;padding-bottom:.6rem;scrollbar-width:thin;
}
.ts-carousel > *{scroll-snap-align:start;flex:0 0 320px}
.ts-carousel::-webkit-scrollbar{height:6px}
.ts-carousel::-webkit-scrollbar-thumb{background:var(--ts-rule);border-radius:99px}
.ts-carousel-arrow{
  position:absolute;top:38%;z-index:3;width:2.6rem;height:2.6rem;border:0;cursor:pointer;
  border-radius:50%;background:var(--ts-card);color:var(--ts-ink);
  box-shadow:0 6px 22px rgba(0,0,0,.14);font-size:1.1rem;line-height:1;
}
.ts-carousel-arrow.prev{left:-.8rem}
.ts-carousel-arrow.next{right:-.8rem}
.ts-carousel-arrow[disabled]{opacity:.3;cursor:default}
@media (prefers-reduced-motion:reduce){ .ts-carousel{scroll-behavior:auto} }

/* ==========================================================================
   Author box
   ========================================================================== */
.ts-author{
  display:flex;gap:1.2rem;align-items:flex-start;
  padding:1.4rem;border-radius:var(--ts-r3);background:var(--ts-surface);
}
.ts-author-avatar{flex:none;width:84px;height:84px;border-radius:50%;overflow:hidden;display:block}
.ts-author-avatar img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}
.ts-author-txt{min-width:0;flex:1 1 auto}
.ts-author-name{
  display:block;font-family:var(--ts-display);font-weight:800;
  font-size:clamp(1.15rem,2.2vw,1.5rem);letter-spacing:-.03em;margin:.15rem 0 .4rem;
}
.ts-author-name:hover{color:var(--ts-accent)}
.ts-author-bio{margin:0 0 .5rem;color:var(--ts-dim);max-width:var(--ts-measure)}
.ts-author-link{font-size:.9rem;color:var(--ts-accent);text-decoration:underline;text-underline-offset:3px}
.ts-author .ts-rail-head{margin-top:1.2rem}

/* ==========================================================================
   Newsletter band
   ========================================================================== */
.ts-news{display:grid;grid-template-columns:1fr;gap:1.4rem;align-items:center}
@media(min-width:760px){ .ts-news{grid-template-columns:auto minmax(0,1fr);gap:2rem} }
.ts-news-art{display:grid;place-items:center}
.ts-news h2{font-size:clamp(1.5rem,3.6vw,2.6rem);margin:.2rem 0 .5rem}
.ts-news p{margin:0 0 1rem;color:var(--ts-dim);max-width:var(--ts-measure)}
.ts-news-form{display:flex;flex-wrap:wrap;gap:.6rem}
.ts-news-form input[type=email]{
  flex:1 1 15rem;min-width:0;padding:.75rem 1rem;font:inherit;
  border:2px solid var(--ts-ink);border-radius:var(--ts-pill);background:var(--ts-card);color:var(--ts-ink);
}
.ts-news-form button{
  flex:none;padding:.75rem 1.5rem;border:2px solid var(--ts-ink);cursor:pointer;
  border-radius:var(--ts-pill);background:var(--ts-ink);color:var(--ts-paper);
  font-family:var(--ts-display);font-weight:800;font-size:.95rem;
}
.ts-news-form button:hover{background:var(--ts-accent);color:var(--ts-ink)}
.ts-news-consent{display:block;margin-top:.6rem;color:var(--ts-dim);font-size:.8rem;max-width:48ch}

/* ==========================================================================
   Poll
   ========================================================================== */
.ts-poll{display:grid;grid-template-columns:1fr;gap:1.1rem;align-items:start}
@media(min-width:700px){ .ts-poll{grid-template-columns:auto minmax(0,1fr);gap:1.6rem} }
.ts-poll-art{display:grid;place-items:center}
.ts-poll h3{font-size:clamp(1.2rem,2.6vw,1.9rem);margin:.2rem 0 .9rem}
.ts-poll-opts{display:flex;flex-direction:column;gap:.55rem;max-width:34rem}
.ts-poll-opt{
  --ts-bar:var(--ts-accent);--ts-pct:0%;
  position:relative;overflow:hidden;display:flex;align-items:center;justify-content:space-between;
  gap:1rem;width:100%;padding:.7rem 1rem;cursor:pointer;text-align:left;
  border:2px solid var(--ts-ink);border-radius:var(--ts-pill);background:var(--ts-card);
  color:var(--ts-ink);font:inherit;font-weight:600;
}
.ts-poll-opt::before{
  content:"";position:absolute;inset:0 auto 0 0;width:0;background:var(--ts-bar);
  transition:width .55s cubic-bezier(.22,1,.36,1);opacity:.55;
}
.ts-poll.is-done .ts-poll-opt{cursor:default}
.ts-poll.is-done .ts-poll-opt::before{width:var(--ts-pct)}
.ts-poll-opt.mine{border-width:3px}
.ts-poll-label,.ts-poll-pct{position:relative;z-index:1}
.ts-poll-pct{font-family:var(--ts-display);font-weight:800;font-variant-numeric:tabular-nums}
.ts-poll-note{margin:.8rem 0 0;color:var(--ts-dim);font-size:.9rem;min-height:1.2em}
@media (prefers-reduced-motion:reduce){ .ts-poll-opt::before{transition:none} }

/* ==========================================================================
   Share bar
   ========================================================================== */
.ts-share{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.ts-share-label{
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ts-dim);margin-right:.2rem;
}
.ts-share a,.ts-share button{
  display:inline-grid;place-items:center;grid-auto-flow:column;gap:.45rem;
  width:40px;height:40px;border:0;cursor:pointer;border-radius:50%;
  background:var(--ts-surface);color:var(--ts-ink);font:inherit;
}
.ts-share a:hover,.ts-share button:hover{background:var(--ts-accent)}
.ts-share svg{width:1.05rem;height:1.05rem;fill:currentColor}
.ts-share a:has(span),.ts-share button:has(span){width:auto;padding:0 1rem;border-radius:var(--ts-pill)}
.ts-share span{font-size:.88rem;font-weight:600}
.ts-share button.is-copied{background:var(--ts-accent)}
@media(min-width:1240px){
  .ts-share-sticky{
    position:sticky;top:7rem;float:left;margin-left:-4.5rem;
    flex-direction:column;width:0;
  }
  .ts-share-sticky .ts-share-label{display:none}
}

/* ==========================================================================
   Trending rail
   ========================================================================== */
.ts-trend-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.ts-trend-list li{border-top:1px solid var(--ts-rule)}
.ts-trend-list li:first-child{border-top:0}
.ts-trend-list a{display:flex;gap:.8rem;align-items:flex-start;padding:.8rem 0}
.ts-trend-num{
  flex:none;font-family:var(--ts-display);font-weight:800;font-size:1.6rem;line-height:1;
  letter-spacing:-.05em;color:var(--ts-num,var(--ts-accent));min-width:1.4ch;
}
.ts-trend h3{font-size:1rem;line-height:1.2;margin:0 0 .2rem}
.ts-trend a:hover h3{color:var(--ts-accent)}
.ts-trend .ts-thumb{flex:none;width:54px;height:54px;border-radius:var(--ts-r1);overflow:hidden}
.ts-trend .ts-thumb img{width:100%;height:100%;object-fit:cover;display:block}

/* ==========================================================================
   Table of contents
   ========================================================================== */
.ts-toc{
  padding:1.1rem 1.25rem;border-radius:var(--ts-r2);background:var(--ts-surface);
  border-left:3px solid var(--ts-accent);
}
.ts-toc[hidden]{display:none}
.ts-toc-head{
  display:block;width:100%;text-align:left;border:0;background:transparent;cursor:pointer;
  font-family:var(--ts-display);font-weight:800;font-size:.76rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ts-dim);padding:0 0 .6rem;
}
.ts-toc ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}
.ts-toc li.lvl-h3{padding-left:.9rem}
.ts-toc li.lvl-h4{padding-left:1.8rem}
.ts-toc a{
  display:block;font-size:.93rem;line-height:1.35;color:var(--ts-dim);
  border-left:2px solid transparent;padding-left:.6rem;
}
.ts-toc a:hover{color:var(--ts-ink)}
.ts-toc a.is-current{color:var(--ts-ink);border-color:var(--ts-accent);font-weight:600}
.ts-toc.is-closed ol{display:none}

/* ==========================================================================
   Sponsored slot
   ========================================================================== */
.ts-sponsored{
  display:block;position:relative;border-radius:var(--ts-r3);overflow:hidden;
  background:var(--ts-card);border:2px dashed var(--ts-accent);padding:.85rem;
}
.ts-sponsored-label{
  display:inline-block;margin-bottom:.6rem;padding:.2rem .6rem;border-radius:var(--ts-pill);
  background:var(--ts-accent);color:var(--ts-ink);
  font-family:var(--ts-display);font-weight:800;font-size:.66rem;
  letter-spacing:.14em;text-transform:uppercase;
}
.ts-sponsored-art{display:block;border-radius:var(--ts-r2);overflow:hidden;margin-bottom:.7rem}
.ts-sponsored-art img{width:100%;height:100%;object-fit:cover;display:block}
.ts-sponsored h3{font-size:clamp(1.05rem,2vw,1.35rem);margin:0 0 .4rem}
.ts-sponsored p{margin:0 0 .7rem;color:var(--ts-dim);font-size:.94rem}
.ts-sponsored-cta{
  display:inline-block;padding:.5rem 1.1rem;border-radius:var(--ts-pill);
  background:var(--ts-ink);color:var(--ts-paper);
  font-family:var(--ts-display);font-weight:800;font-size:.88rem;
}
a.ts-sponsored:hover .ts-sponsored-cta{background:var(--ts-accent);color:var(--ts-ink)}

/* ==========================================================================
   Comment teaser
   ========================================================================== */
.ts-comments{display:inline-flex;align-items:center;gap:.6rem}
.ts-comments-badge{
  padding:.35rem .9rem .35rem .45rem;border-radius:var(--ts-pill);
  background:color-mix(in oklab,var(--ts-accent) 32%,var(--ts-paper));
}
.ts-comments-band{
  display:flex;width:100%;justify-content:space-between;flex-wrap:wrap;
  padding:1rem 1.25rem;border-radius:var(--ts-r3);
  background:color-mix(in oklab,var(--ts-accent) 26%,var(--ts-paper));
}
.ts-comments-count{font-family:var(--ts-display);font-weight:800;font-size:1rem;letter-spacing:-.02em}
.ts-comments-cta{
  padding:.45rem 1.1rem;border-radius:var(--ts-pill);background:var(--ts-ink);color:var(--ts-paper);
  font-family:var(--ts-display);font-weight:800;font-size:.85rem;
}
.ts-comments:hover .ts-comments-cta{background:var(--ts-card);color:var(--ts-ink)}

/* ==========================================================================
   Elementor editor
   The editor iframe has no real scroll context for the fixed masthead, so it
   docks instead of floating over the canvas.
   ========================================================================== */
/* The bar is the only thing that genuinely cannot float in the editor: a fixed
   header covers the widget you are trying to edit. Everything else animates
   here exactly as it does on the published page. */
body.elementor-editor-active .ts-shrinkbar{position:relative;top:auto}
body.elementor-editor-active .ts-bar-spacer{display:none}
/* In the editor the floating bar has to be visible to be edited, but fixed
   it covers whatever template is being worked on. Put it in the flow there. */
body.elementor-editor-active .ts-bar-float{position:static;transform:none;opacity:1}
body.elementor-editor-active .ts-menu:not(.on){display:none}

/* A card held at opacity 0 waiting for a scroll that the editor canvas may
   never deliver reads as a broken widget, so in the editor they are simply in. */
body.elementor-editor-active .ts-rise{opacity:1;transform:none}

/* ---- the lede, on the_content() output ----
   The mockup hand-authored <p class="ts-lede">. Real post content has no such
   class, so the lede and its drop cap hang off the wrapper instead. */
.ts-has-lede > p:first-of-type{font-size:1.1rem;font-weight:400;line-height:1.6}
.ts-has-lede.ts-dropcap > p:first-of-type::first-letter{
  float:left;font-family:var(--ts-display);font-weight:800;
  font-size:3.4em;line-height:.78;padding:.06em .1em 0 0;
}
/* A drop cap on a one-line paragraph looks broken, so it needs room. */
@media(max-width:420px){
  .ts-has-lede.ts-dropcap > p:first-of-type::first-letter{font-size:2.8em}
}

/* ---- tag list, as its own widget ---- */
.ts-tags-head{
  display:block;margin:0 0 .6rem;
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ts-dim);
}
.ts-tags-solid a{background:var(--ts-c,var(--ts-accent));border-color:var(--ts-c,var(--ts-accent))}
.ts-tags-chip{display:flex;flex-wrap:wrap;gap:.5rem}
.ts-tags-chip a{
  display:inline-flex;align-items:center;gap:.4rem;padding:.25rem .8rem .25rem .3rem;
  border-radius:var(--ts-pill);background:var(--ts-surface);font-weight:600;font-size:.9rem;
}
.ts-tags-chip a:hover{background:var(--ts-c,var(--ts-accent))}
.ts-tags-plain{color:var(--ts-dim)}
.ts-tags-plain a{text-decoration:underline;text-underline-offset:3px;color:var(--ts-c,var(--ts-accent))}
.ts-tags a b{margin-left:.35rem;font-weight:700;opacity:.55;font-size:.85em}

/* ---- accordion: the excerpt line and a hover that keeps each panel's hue ---- */
.ts-panel-excerpt{
  margin:.4rem 0 0;max-width:46ch;
  font-size:.95rem;line-height:1.5;color:inherit;opacity:.82;
}
.ts-panel{transition:flex .45s cubic-bezier(.22,1,.36,1),background .25s ease}
.ts-panel-count{opacity:.7}

/* ---- accordion: theme defence and text flow ----
   .ts-panel is a <button>, so a theme that styles button:hover (Hello
   Elementor does) repaints it on hover with the theme accent. Pin the hover to
   the panel's own colour; an Elementor hover control is one class more
   specific and still wins over this. */
.ts-panel,
.ts-panel:hover,
.ts-panel:focus,
.ts-panel:active{
  -webkit-appearance:none;appearance:none;
  color:var(--ts-ink);
  box-shadow:none;
}
/* The !important is aimed at a theme's button:hover, which is itself
   !important in Hello Elementor. The colour still comes from a variable, so
   the widget's own controls set the variable and keep full control. */
/* Specificity matters as much as the !important here: a theme rule like
   .elementor-widget-container button:hover is 0,3,0 and would beat a bare
   .ts-panel:hover. Anchoring on the scope and the track puts this at 0,4,0.
   The colour itself is still a variable, so the widget's own controls set the
   variable at any specificity and keep winning. */
.ts-scope .ts-acc .ts-panel{background:var(--ts-p-set,var(--ts-p)) !important}
.ts-scope .ts-acc .ts-panel:hover,
.ts-scope .ts-acc .ts-panel:focus,
.ts-scope .ts-acc .ts-panel:focus-visible,
.ts-scope .ts-acc .ts-panel:active{background:var(--ts-p-hover,var(--ts-p-set,var(--ts-p))) !important}
.ts-scope .ts-acc .ts-panel[aria-expanded="true"]{background:var(--ts-p-open,var(--ts-p-set,var(--ts-p))) !important}
.ts-scope .ts-acc .ts-panel[aria-expanded="true"]:hover{background:var(--ts-p-hover,var(--ts-p-open,var(--ts-p-set,var(--ts-p)))) !important}
/* and the text colour, which a theme's button:hover also repaints */
.ts-scope .ts-acc .ts-panel,
.ts-scope .ts-acc .ts-panel:hover,
.ts-scope .ts-acc .ts-panel:focus{color:var(--ts-p-text,var(--ts-ink)) !important}
.ts-panel:focus-visible{outline:3px solid var(--ts-ink);outline-offset:-4px}

/* The excerpt ran past the panel edge because the two columns are sized
   56% + 44%, which with the row gap and padding adds up to more than the row,
   and a percentage basis will not shrink below its content. Sizing the text
   column from what is left (flex-basis 0) is what actually makes it wrap. */
.ts-panel-body{min-width:0}
.ts-panel-photo{flex:0 1 56%;min-width:0}
.ts-panel-txt{flex:1 1 0;min-width:0;max-width:100%;overflow:hidden}
.ts-panel-txt > *{max-width:100%}
.ts-panel-excerpt{
  max-width:100%;
  white-space:normal;overflow-wrap:anywhere;word-break:break-word;
}
.ts-panel-txt h3{overflow-wrap:anywhere}

/* ---- featured image, as its own widget ---- */
.ts-figure{display:block;margin:0;position:relative;overflow:hidden}
.ts-figure img{display:block;width:100%;height:auto;transition:transform .5s cubic-bezier(.22,1,.36,1)}
.ts-figure-masked{
  -webkit-mask-image:var(--ts-mask);mask-image:var(--ts-mask);
  -webkit-mask-size:contain;mask-size:contain;
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-position:center;mask-position:center;
}
.ts-figure-masked img{height:100%;object-fit:cover}
.ts-figure figcaption{
  margin-top:.5rem;font-size:.85rem;color:var(--ts-dim);line-height:1.4;
}
.ts-kicker-wrap{display:inline-block}
.ts-art-title{margin:0}

/* ==========================================================================
   The atomic widgets that replaced the bundles
   ========================================================================== */

/* ---- post grid ---- */
.ts-card-plain{background:transparent;padding:0}
.ts-card-plain .ts-body{padding:0}
.ts-card{--ts-card-bg:var(--ts-accent);background:var(--ts-card-bg)}
.ts-card:hover{background:var(--ts-card-bg-hover,var(--ts-card-bg))}
.ts-card-title{margin:0}
.ts-card-excerpt{margin:.35rem 0 0;font-size:.95rem;line-height:1.45;opacity:.85}
.ts-card-meta{
  display:block;margin-top:.4rem;
  font-family:var(--ts-display);font-weight:800;font-size:.68rem;
  letter-spacing:.12em;text-transform:uppercase;opacity:.6;
}

/* ---- post list ---- */
.ts-list-w{display:block}
.ts-list-thumb-right .ts-list a{flex-direction:row-reverse}
.ts-list-num{
  flex:none;font-family:var(--ts-display);font-weight:800;font-size:1.5rem;
  line-height:1;letter-spacing:-.05em;min-width:1.4ch;
}
.ts-list-txt{min-width:0;display:flex;flex-direction:column;gap:.15rem}
.ts-list-title{margin:0}
.ts-list-excerpt{margin:.15rem 0 0;font-size:.9rem;line-height:1.4;color:var(--ts-dim)}

/* ---- term rail ---- */
.ts-rail-w{display:block}
.ts-rail-wrap{flex-wrap:wrap}
.ts-rail-scroll{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:thin}
.ts-rail-item b{font-weight:700;opacity:.55;font-size:.85em}

/* ---- archive lead ---- */
.ts-lead-top .ts-hero-in{grid-template-columns:1fr !important}
.ts-lead-right .ts-hero-in{direction:rtl}
.ts-lead-right .ts-hero-in > *{direction:ltr}
.ts-hero-art{display:block;overflow:hidden}
.ts-hero-art img{width:100%;height:100%;object-fit:cover;display:block}
.ts-lead-kicker{
  display:block;font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ts-dim);
}
.ts-lead-title{margin:.3rem 0 .5rem}
.ts-lead-excerpt{margin:0 0 .6rem;color:var(--ts-dim)}
.ts-lead-meta{
  font-family:var(--ts-display);font-weight:800;font-size:.7rem;
  letter-spacing:.12em;text-transform:uppercase;color:var(--ts-dim);
}

/* ---- quiz teaser ---- */
.ts-side-quiz{display:flex;gap:.8rem;align-items:center}
.ts-quiz-txt{display:flex;flex-direction:column;gap:.15rem;min-width:0}
.ts-quiz-kicker{
  font-family:var(--ts-display);font-weight:800;font-size:.68rem;
  letter-spacing:.12em;text-transform:uppercase;opacity:.7;
}
.ts-quiz-title{font-weight:600;line-height:1.3}
.ts-quiz-btn{
  align-self:flex-start;margin-top:.4rem;padding:.3rem .9rem;
  border-radius:var(--ts-pill);background:var(--ts-ink);color:var(--ts-paper);
  font-family:var(--ts-display);font-weight:800;font-size:.78rem;
}

/* ---- inline card ---- */
.ts-interrupt-txt{display:flex;flex-direction:column;gap:.2rem;min-width:0}
.ts-interrupt-title{margin:0}
.ts-interrupt-excerpt{margin:.2rem 0 0;font-size:.9rem;line-height:1.4;opacity:.85}

/* ---- pagination ---- */
.ts-pagination-arrows .page-numbers:not(.prev):not(.next):not(.current){display:none}

/* ---- the reworked widgets keep the mockup's look on the new class names ---- */
.ts-lead-h{letter-spacing:-.04em;line-height:1.03;margin:.3rem 0 .6rem}
.ts-lead-p{margin:0 0 .7rem;color:var(--ts-dim);max-width:52ch}
.ts-top-txt{display:flex;flex-direction:column;gap:.15rem;min-width:0}
.ts-trend-txt{display:flex;flex-direction:column;gap:.1rem;min-width:0}
.ts-relcard .ts-card-title{margin:.3rem 0 0}
.ts-video-card .ts-card-title{margin:.2rem 0 0}
.ts-quiz-card .ts-card-title{margin:0}

/* ==========================================================================
   Hero grid fixes
   ========================================================================== */

/* The category line is emitted as .ts-kicker everywhere now. The mockup styled
   it as .ts-eb, so outside a feed row it was arriving completely unstyled. */
.ts-kicker{
  font-family:var(--ts-display);font-weight:800;font-size:.7rem;
  letter-spacing:.12em;text-transform:uppercase;display:block;
  color:var(--ts-accent);
}

/* .ts-mix-h was setting one size for both the small cards and the wide one,
   which flattened a deliberate difference. Each keeps its own again. */
.ts-mix-h{font-size:inherit;letter-spacing:-.03em;line-height:1.15;margin:.2rem 0 0}
.ts-mini .ts-mix-h{font-size:.92rem;letter-spacing:-.028em;line-height:1.18;font-weight:800}
.ts-wide .ts-mix-h{font-size:1.3rem;letter-spacing:-.032em;line-height:1.14}
.ts-stack-h{font-size:clamp(1rem,1.5vw,1.3rem)}
.ts-lead-h{font-size:clamp(1.9rem,3.6vw,3.2rem)}

/* Turning a column off must close the gap it left, not leave a hole. */
.ts-front-grid.ts-cols-2{grid-template-columns:1fr}
.ts-front-grid.ts-cols-1{grid-template-columns:1fr}
@media(min-width:1000px){
  .ts-front-grid.ts-cols-2{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}
  .ts-front-grid.ts-cols-1{grid-template-columns:minmax(0,1fr)}
}
@media(min-width:1180px){
  .ts-front-grid.ts-cols-2{grid-template-columns:minmax(0,1.62fr) minmax(0,.92fr)}
  .ts-front-grid.ts-cols-1{grid-template-columns:minmax(0,1fr)}
}

/* ---- layout wrappers the new widgets emit ---- */
.ts-sponsored-txt{display:block}
.ts-news-txt,.ts-poll-txt{min-width:0}
.ts-figure-wrap{display:block}

.ts-bigword-bare{border-top:0;border-bottom:0}

/* ---- a sticky rail, put on the COLUMN not on each widget ----
   Two sticky siblings both pin to the same offset and land on top of each
   other, which is what a sidebar of separately-sticky widgets did. Sticking
   the column's widget wrapper keeps the whole rail together and can only
   happen once. */
@media(min-width:1000px){
  .elementor-column.ts-sticky-sidebar > .elementor-widget-wrap,
  .elementor-column.ts-sticky-sidebar > .elementor-element-populated{
    position:sticky;top:6rem;align-self:start;
  }
}

/* ============================================================
   STANDALONE ARTICLE HEAD
   The mockup styled the headline as `.ts-art-txt h1`, which needs a wrapper
   only the plugin's own template prints. Composed from widgets in Elementor
   there is no wrapper, so the headline fell back to the theme's h1 and the
   band had nothing to sit behind. Each part styles itself here.
   ============================================================ */
.ts-art-title{
  font-family:var(--ts-display);font-weight:800;
  font-size:clamp(2.1rem,4.2vw,3.6rem);letter-spacing:-.042em;line-height:1.02;
  max-width:15ch;margin:0;color:var(--ts-ink);text-wrap:balance;
}

/* the head band paints itself from the rubric colour on the document */
.ts-art-head-band{background:var(--ts-band,color-mix(in oklab,var(--ts-accent,#FBFAF8) 13%,#FBFAF8))}

/* article meta: each item is its own element now, so each can be reached */
.ts-byline-items{display:inline}
.ts-meta{white-space:nowrap}
.ts-meta-sep{opacity:.55}

/* the archive header's "see all" button */
.ts-arch-more{
  align-self:start;margin-top:.9rem;font-family:var(--ts-display);font-weight:800;
  font-size:.74rem;letter-spacing:.09em;text-transform:uppercase;
  padding:.62rem 1.05rem;border-radius:999px;text-decoration:none;
  background:var(--ts-ink);color:var(--ts-paper);
}
.ts-arch-more:hover{background:var(--ts-accent);color:var(--ts-ink)}

/* the archive header's title, styled on its own class rather than through a
   wrapper the composed template has no reason to print */
.ts-arch-title{
  font-family:var(--ts-display);font-weight:800;
  font-size:clamp(2.6rem,8vw,5.5rem);letter-spacing:-.055em;line-height:.95;
  margin:0;color:var(--ts-ink);text-wrap:balance;
}

/* A "more" link only had styling as a child of .ts-sec-head. Beside a list
   heading, or anywhere else a widget puts one, it was unstyled body text. */
.ts-more{
  font-family:var(--ts-display);font-weight:800;font-size:.72rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--ts-ink);
  text-decoration:none;white-space:nowrap;
}
.ts-more:hover{color:var(--ts-accent)}
.ts-rail-head + .ts-more{display:inline-block;margin:-.4rem 0 .9rem}

/* ============================================================
   THE ARTICLE HEAD, COMPOSED FROM WIDGETS
   The design is one full-bleed block: text on the left with its own gutter,
   photo filling the right half top to bottom and running off the edge. The
   mockup gets that from .ts-art-top / .ts-art-left / .ts-art-fig, which a
   template built out of separate widgets never prints. These rules give the
   same geometry to the Elementor columns inside the band.
   ============================================================ */
.ts-art-head-band > .elementor-container{align-items:stretch;max-width:none;width:100%}

/* The photo column is the 900px source, not half the screen, so it never
   upscales; the text column takes what is left and its block is capped at
   820px and pushed right, which is where the design's gutter comes from. */
@media(min-width:900px){
  .ts-art-head-band .elementor-column:first-child{width:calc(100% - 900px)}
  .ts-art-head-band .elementor-column:last-child{width:900px;flex:0 0 900px}
  .ts-art-head-band .elementor-column:first-child > .elementor-widget-wrap,
  .ts-art-head-band .elementor-column:first-child > .elementor-element-populated{
    max-width:820px;margin-left:auto;
  }
}

.ts-art-head-band .elementor-column:first-child > .elementor-widget-wrap,
.ts-art-head-band .elementor-column:first-child > .elementor-element-populated{
  display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;
  padding:1rem max(1.5rem,3vw) clamp(1.4rem,2.6vw,2.4rem) max(1.5rem,3vw);
  gap:.9rem;
}
.ts-art-head-band .elementor-column:first-child .elementor-element{width:auto;max-width:100%}
/* Elementor puts 20px under every widget. The design spaces this stack with
   .9rem, set on the wrap above, so the per-widget margin has to go or the
   two add up. */
.ts-art-head-band .elementor-widget:not(:last-child){margin-bottom:0}
.ts-art-head-band .elementor-widget-container{margin:0}
.ts-art-head-band .elementor-column:last-child > .elementor-widget-wrap,
.ts-art-head-band .elementor-column:last-child > .elementor-element-populated{
  padding:0;
}

/* the photo fills its half and bleeds off the right edge */
.ts-art-head-band .elementor-column:last-child .elementor-widget,
.ts-art-head-band .elementor-column:last-child .elementor-widget-container,
.ts-art-head-band .ts-figure-wrap,
.ts-art-head-band .ts-figure{height:100%;margin:0}
.ts-art-head-band .ts-figure{min-height:clamp(260px,34vw,520px)}
.ts-art-head-band .ts-figure img{
  width:100%;height:100%;object-fit:cover;object-position:center 30%;
  aspect-ratio:auto;max-width:none;border-radius:0;
}

/* the byline sits under the text, the way the design has it */
.ts-art-head-band .ts-byline{margin-top:1.2rem;padding-top:0}

@media(max-width:899px){
  .ts-art-head-band > .elementor-container{flex-wrap:wrap}
  .ts-art-head-band .elementor-column:last-child{order:-1}
  .ts-art-head-band .ts-figure{min-height:0}
  .ts-art-head-band .ts-figure img{height:auto;aspect-ratio:3/2}
}

/* ---- the site name inside the article header ----
   The design puts the wordmark and the menu button at the top of the coloured
   band, above the headline. A Theme Builder header cannot reach in there: on a
   single post it is the floating bar, which stays hidden until the reader
   scrolls past the band. So the band carries its own header widget, and these
   rules strip the bar chrome off it: no sticky, no paper background, no rule,
   no gutter of its own. */
.ts-art-head-band .ts-bar,
.ts-art-head-band .ts-shrinkbar{
  position:static;background:none;border:0;z-index:auto;contain:none;
  padding:0;transform:none;
}
.ts-art-head-band .ts-bar-spacer{display:none}
.ts-art-head-band .ts-bar .ts-shell{width:100%;padding:0;margin:0}
.ts-art-head-band .ts-bar .ts-wordmark{
  font-size:clamp(1.7rem,3.6vw,2.6rem);letter-spacing:-.055em;line-height:.9;
}
/* it sits above the headline, with the design's gap under it */
.ts-art-head-band .elementor-column:first-child .elementor-widget:first-child{
  /* the design's gap, less the .9rem the column already puts between widgets */
  margin-bottom:calc(clamp(1.5rem,4vw,3.4rem) - 1.4rem);
}
