/* =================================================================
   STAYMETAL.RUSSIA — DS BUNDLE FOR STATIC PAGE MOCKUPS
   Pulled verbatim from the "StayMetal.Russia Design System" Claude
   Design project (a1f517f6…) — tokens/*.css + components/components.css
   + base.css, concatenated. This is the canonical source: if it drifts
   from design-system/*.html in this repo, THIS file wins.
   Loaded after Bootstrap 5 — Bootstrap supplies grid/utilities only,
   every visual component below is DS, not Bootstrap's.
   ================================================================= */

/* ---------- tokens/fonts.css ---------- */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;700&family=Oswald:wght@400;500;600;700&display=swap');

/* ---------- tokens/colors.css ---------- */
:root{
  --ink-black:#0A0A0A;     --ink-panel:#0F0F0E;
  --bone:#F2F0EC;          --gray-muted:#8C8C88;
  --gray-line:#242422;     --gray-line2:#33332F;
  --orange:#FF4D00;        --orange-deep:#B83800;
  --white:#FFFFFF;         --pure-black:#000000;

  --red:#FF2E2E;           --red-deep:#7A1414;     --red-bg:#1C0D0D;
  --green:#4ADE5B;         --green-deep:#16431D;   --green-bg:#0C160D;
  --amber:#FFB020;         --amber-deep:#5E3D00;   --amber-bg:#1A1306;

  --color-bg:var(--ink-black);
  --color-fg:var(--bone);
  --color-muted:var(--gray-muted);
  --color-panel:var(--ink-panel);
  --color-accent:var(--orange);
  --color-accent-ink:var(--ink-black);
  --border-color:var(--gray-line2);
  --border-soft:var(--gray-line);
  --border-strong:var(--bone);

  --color-danger:var(--red);     --color-danger-bg:var(--red-bg);     --color-danger-ink:var(--ink-black);
  --color-success:var(--green);  --color-success-bg:var(--green-bg);  --color-success-ink:var(--ink-black);
  --color-warning:var(--amber);  --color-warning-bg:var(--amber-bg);  --color-warning-ink:var(--ink-black);

  /* prose grey — the DS repeats the literal #cbcbc6 in .ulist/.olist/.acc-body/--news-body/--code-fg;
     naming it once keeps article body copy from drifting into invented greys. */
  --color-prose:#cbcbc6;
}

/* ---------- tokens/typography.css ---------- */
:root{
  --font-display:'Oswald', sans-serif;
  --font-body:'Inter', system-ui, sans-serif;
  --font-mono:'JetBrains Mono', monospace;

  --text-display:clamp(40px,7vw,92px);
  --text-h1:clamp(28px,3.4vw,44px);
  --text-h2:clamp(22px,2.6vw,32px);
  --text-h3:24px;
  --text-body-l:17px;  --text-body:15px; --text-body-s:13.5px;
  --text-meta:11px;    --text-kick:10px; --text-micro:9.5px;

  --lh-tight:.9;
  --lh-body:1.4;
}

/* ---------- tokens/spacing.css ---------- */
:root{
  --space-4:4px;   --space-8:8px;   --space-12:12px;  --space-16:16px;
  --space-24:24px; --space-32:32px; --space-48:48px;
  --space-gap:14px;

  --border-w:2px;
  --border-w-soft:1px;
  --border-w-accent:4px;
  --border-w-feature:5px;
  --radius:0px;
}

/* ---------- tokens/motion.css ---------- */
:root{
  --ease:cubic-bezier(.2,.7,.2,1);
  --ease-snap:cubic-bezier(.2,0,0,1);
  --ease-cine:cubic-bezier(.16,1,.3,1);

  --dur-fast:.18s;
  --dur:.25s;
  --dur-slow:.4s;

  --motion-state:.09s var(--ease-snap);
  --motion-reveal:.8s var(--ease-cine);
  --motion-loop:linear;
}

/* ---------- tokens/components.css (component-layer tokens) ---------- */
:root{
  --cta-bg:var(--color-accent);       --cta-fg:var(--color-accent-ink);
  --cell-bg:var(--color-panel);       --cell-border:var(--border-color);
  --badge-bg:var(--color-accent);     --badge-fg:var(--color-accent-ink);
  --chip-border:var(--border-color);
  --code-bg:#070707;                  --code-fg:var(--color-prose);
  --field-bg:var(--color-panel);      --field-border:var(--border-color);
  --field-border-focus:var(--color-accent);  --field-border-error:var(--color-danger);
  --swatch-gap:10px;

  --news-bg:var(--color-panel);       --news-border:var(--border-color);
  --news-title:var(--color-fg);       --news-body:var(--color-prose);

  --quote-border:var(--color-accent);
  --crumb-sep:var(--color-muted);
  --pag-active-bg:var(--color-accent);

  --side-w:208px;
}

/* ---------- base.css ---------- */
*{box-sizing:border-box;margin:0;padding:0}
/* Bootstrap's Reboot resets these by TAG name (specificity 0,0,1), which beats the universal
   selector above (0,0,0) no matter which stylesheet loads last. Without this line every <p>
   keeps Reboot's 1rem bottom margin and every list keeps its 2rem indent — so .ulist/.olist
   bullets sit 32px off their intended flush-left position and prose gaps double up. */
h1,h2,h3,h4,h5,h6,p,ul,ol,dl,dd,figure,blockquote,pre{margin:0;padding:0}
html{scroll-behavior:smooth;scroll-padding-top:66px}
body{
  background:var(--color-bg);color:var(--color-fg);
  font-family:var(--font-body);
  -webkit-font-smoothing:antialiased;line-height:1.25;overflow-x:hidden;letter-spacing:.1px;
}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer;border:none;background:none;color:inherit}
.mono{font-family:var(--font-mono)}
:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}
svg{display:block}

body::after{
  content:"";position:fixed;inset:0;z-index:200;pointer-events:none;opacity:.035;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

@media (prefers-reduced-motion: reduce){
  *{animation:none!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
}

/* ---------- components/components.css ---------- */
.btn-cta{display:inline-flex;align-items:center;gap:9px;padding:12px 22px;background:var(--cta-bg);color:var(--cta-fg);
   font-weight:900;text-transform:uppercase;font-size:12.5px;letter-spacing:.6px;transition:background var(--dur) var(--ease),gap var(--dur) var(--ease)}
.btn-cta:hover{background:var(--color-fg);gap:13px}
.btn-cta:active{transform:translateY(1px)}
.btn-out{display:inline-flex;align-items:center;gap:9px;padding:10px 18px;border:var(--border-w) solid var(--color-accent);
   color:var(--color-accent);font-weight:900;text-transform:uppercase;font-size:12.5px;transition:.18s var(--ease)}
.btn-out:hover{background:var(--color-accent);color:var(--color-accent-ink)}
.btn-ghost{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid var(--border-color);
   color:var(--color-fg);font-weight:700;text-transform:uppercase;font-size:12px;transition:.18s var(--ease)}
.btn-ghost:hover{border-color:var(--color-fg);background:var(--border-soft)}
.btn-submit{display:inline-flex;align-items:center;gap:9px;padding:12px 22px;background:var(--cta-bg);color:var(--cta-fg);
   border:var(--border-w) solid var(--border-strong);font-weight:900;text-transform:uppercase;font-size:12.5px;
   letter-spacing:.6px;transition:background var(--dur) var(--ease)}
.btn-submit:hover{background:var(--color-fg)}
.btn-submit:active{transform:translateY(1px)}
.btn-cta.is-dis,.btn-out.is-dis,.btn-ghost.is-dis,.btn-submit.is-dis{opacity:.4;pointer-events:none;filter:grayscale(.4)}
.iconbtn{display:inline-flex;align-items:center;padding:10px 14px;border:1px solid var(--border-color);color:var(--color-fg);transition:.18s var(--ease)}
.iconbtn:hover{background:var(--border-soft);border-color:var(--color-fg)}
.iconbtn.is-dis{opacity:.4;pointer-events:none}

.badge{background:var(--badge-bg);color:var(--badge-fg);font-family:var(--font-mono);font-size:10px;font-weight:700;
   padding:4px 8px;letter-spacing:.5px;display:inline-block;border-radius:0}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips a,.chips button{border:1px solid var(--chip-border);padding:6px 11px;font-family:var(--font-mono);font-size:11px;
   text-transform:uppercase;letter-spacing:.5px;transition:.18s var(--ease);background:transparent;color:var(--color-fg)}
.chips a:hover,.chips button:hover{background:var(--color-accent);color:var(--color-accent-ink);border-color:var(--color-accent)}
.chips a.on,.chips button.on{background:var(--color-accent);color:var(--color-accent-ink);border-color:var(--color-accent)}

.kick{font-family:var(--font-mono);font-size:10px;letter-spacing:1.6px;text-transform:uppercase;color:var(--color-accent);
   display:flex;align-items:center;gap:8px}
.kick .meta{color:var(--color-muted)}
.kick.is-muted{color:var(--color-muted)}   /* modifier — was an inline colour override on .kick */
.read{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--color-fg);
   display:inline-flex;align-items:center;gap:7px;opacity:.55;transition:.2s var(--ease)}
.read:hover{opacity:1;gap:11px;color:var(--color-accent)}

.ticker{border:var(--border-w) solid var(--color-fg);background:var(--color-accent);color:var(--color-accent-ink);overflow:hidden}
.ticker .track{display:flex;width:max-content;animation:ticker-run 26s linear infinite}
.ticker .run{display:flex;flex:0 0 auto;padding:7px 0;font-family:var(--font-mono);font-weight:700;font-size:12px;letter-spacing:1px;text-transform:uppercase}
.ticker .run span{padding:0 22px;display:flex;align-items:center;gap:10px;white-space:nowrap}
.ticker .run span::before{content:"";width:7px;height:7px;background:var(--color-accent-ink);flex:0 0 auto}
@keyframes ticker-run{from{transform:translateX(0)}to{transform:translateX(-50%)}}

.pbar{height:8px;background:rgba(10,10,10,.25);position:relative;border:2px solid var(--color-accent-ink);width:240px}
.pbar i{position:absolute;inset:0;right:auto;background:var(--color-accent-ink)}
.bars{display:flex;gap:3px;height:30px;align-items:flex-end}
.bars i{flex:1;width:5px;background:var(--color-accent);opacity:.85;animation:eq 1.05s ease-in-out infinite}
.bars i:nth-child(2n){animation-delay:.16s}.bars i:nth-child(3n){animation-delay:.33s}.bars i:nth-child(4n){animation-delay:.5s}
@keyframes eq{0%,100%{height:16%}50%{height:100%}}
.stat{display:flex;flex-direction:column;justify-content:center}
.stat b{font-family:var(--font-display);font-weight:700;font-size:36px;line-height:.9;color:var(--color-fg)}
.stat b em{font-style:normal;color:var(--color-accent)}
.stat span{font-family:var(--font-mono);font-size:10.5px;text-transform:uppercase;letter-spacing:1.2px;color:var(--color-muted);margin-top:6px}

.glist{list-style:none;display:flex;flex-direction:column;width:100%}
.glist li{display:flex;gap:12px;align-items:baseline;padding:9px 0;border-bottom:1px solid var(--border-color)}
.glist li:last-child{border-bottom:0}
.glist .d{font-family:var(--font-display);font-weight:700;font-size:20px;line-height:1;color:var(--color-accent);flex:0 0 auto;min-width:42px}
.glist .d .dm{font-family:var(--font-mono);font-size:var(--text-micro);font-weight:400;color:var(--color-muted);text-transform:uppercase}
.glist .main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.glist .n{font-weight:700;font-size:13.5px;text-transform:uppercase;overflow-wrap:anywhere;word-break:break-word}
.glist .c{font-family:var(--font-mono);font-size:10px;color:var(--color-muted)}
.glist li:hover .n{color:var(--color-accent)}
.glist .buy{flex:0 0 auto}

.nlist{list-style:none;display:flex;flex-direction:column;width:100%}
.nlist li{border-bottom:1px solid var(--border-color);padding:10px 0;display:flex;gap:13px;align-items:center}
.nlist li:last-child{border-bottom:0}
.nlist .nk{font-family:var(--font-mono);font-size:10px;color:var(--color-muted);letter-spacing:.5px;display:block;margin-bottom:3px}
.nlist .nt{font-weight:700;font-size:14px;line-height:1.2;transition:.15s;overflow-wrap:anywhere;word-break:break-word}
.nlist .thumb{position:relative;flex:0 0 58px;width:58px;height:46px;overflow:hidden;border:1px solid var(--border-color)}
.nlist .thumb img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(1) contrast(1.08) brightness(.82)}
.nlist .thumb::after{content:"";position:absolute;inset:0;background:var(--color-accent);mix-blend-mode:color;opacity:0;transition:opacity var(--dur) var(--ease)}
.nlist li:hover .thumb::after{opacity:.45}
.nlist li:hover .nt{color:var(--color-accent)}

.demo-cell{border:var(--border-w) solid var(--border-color);background:var(--cell-bg);padding:18px;width:230px;min-height:150px;
   display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}
.demo-cell:hover{border-color:var(--color-fg)}
.demo-cell .media{position:absolute;inset:0;z-index:0;overflow:hidden}
.demo-cell .media img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.08) brightness(.55)}
.demo-cell .media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,10,10,.2),rgba(10,10,10,.85) 70%,rgba(10,10,10,.97))}
.demo-cell .media.duo::before{content:"";position:absolute;inset:0;z-index:1;mix-blend-mode:color;opacity:0;background:var(--color-accent);transition:opacity .3s var(--ease)}
.demo-cell:hover .media.duo::before{opacity:.5}
.demo-cell > *{position:relative;z-index:2}
.demo-cell h3,.demo-cell .dtitle{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:26px;line-height:.95;overflow-wrap:anywhere;word-break:break-word;hyphens:auto}
.demo-cell .style{color:var(--color-accent);font-family:var(--font-mono);font-size:11px;letter-spacing:.5px}
.demo-cell.reg::before,.demo-cell.reg::after{content:"";position:absolute;width:13px;height:13px;z-index:4;pointer-events:none;border:2px solid rgba(242,240,236,.5)}
.demo-cell.reg::before{top:10px;right:10px;border-left:0;border-bottom:0}
.demo-cell.reg::after{bottom:10px;left:10px;border-right:0;border-top:0}

.news-card{display:flex;flex-direction:column;width:320px;background:var(--news-bg);
   border:var(--border-w) solid var(--news-border);overflow:hidden;transition:border-color var(--dur) var(--ease)}
.news-card:hover,.news-card.is-hover{border-color:var(--border-strong)}
.news-media{position:relative;display:block;aspect-ratio:16/10;overflow:hidden;
   border-bottom:var(--border-w) solid var(--border-color);background:var(--gray-line)}
.news-media img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(1) contrast(1.08) brightness(.82);transition:transform var(--dur-slow) var(--ease)}
.news-media::after{content:"";position:absolute;inset:0;background:var(--color-accent);mix-blend-mode:color;opacity:0;transition:opacity var(--dur) var(--ease);z-index:1}
.news-card:hover .news-media::after,.news-card.is-hover .news-media::after{opacity:.45}
.news-card:hover .news-media img,.news-card.is-hover .news-media img{transform:scale(1.04)}
.news-badge{position:absolute;top:0;left:0;z-index:2;background:var(--badge-bg);color:var(--badge-fg);
   font-family:var(--font-mono);font-size:var(--text-kick);font-weight:700;letter-spacing:.6px;text-transform:uppercase;padding:4px 8px;line-height:1}
.news-body{display:flex;flex-direction:column;gap:var(--space-8);padding:var(--space-16)}
.news-kick{font-family:var(--font-mono);font-size:var(--text-kick);letter-spacing:1.6px;text-transform:uppercase;color:var(--color-accent)}
.news-title{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:var(--text-h3);line-height:.98;color:var(--news-title);
   transition:color var(--dur) var(--ease);overflow-wrap:anywhere;word-break:break-word;hyphens:auto}
.news-card:hover .news-title,.news-card.is-hover .news-title{color:var(--color-accent)}
.news-text{font-size:var(--text-body-s);line-height:var(--lh-body);color:var(--news-body);overflow-wrap:anywhere;word-break:break-word}
.news-read{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-mono);font-size:var(--text-meta);
   text-transform:uppercase;letter-spacing:1px;color:var(--color-fg);opacity:.55;transition:.2s var(--ease);margin-top:var(--space-4)}
.news-card:hover .news-read,.news-card.is-hover .news-read{opacity:1;color:var(--color-accent);gap:11px}
.news-card.featured{border-top:5px solid var(--color-accent)}
.news-card.is-focus{outline:3px solid var(--color-accent);outline-offset:2px}
.news-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--space-24);width:100%}
.news-grid .news-card{width:auto}

.crumbs{display:flex;flex-wrap:wrap;align-items:center;font-family:var(--font-mono);font-size:11.5px;text-transform:uppercase;letter-spacing:.5px}
.crumbs a,.crumbs span{padding:6px 0}
.crumbs .sep{color:var(--crumb-sep);padding:6px 12px}
.crumbs a{color:var(--color-muted);transition:.18s var(--ease)}
.crumbs a:hover{color:var(--color-fg)}
.crumbs .now{color:var(--color-accent)}
.pagination{display:flex;align-items:stretch;font-family:var(--font-mono);font-weight:700;border:var(--border-w) solid var(--color-fg);width:max-content}
.pagination a,.pagination span{display:flex;align-items:center;justify-content:center;min-width:44px;height:44px;padding:0 10px;
   font-size:12px;border-right:1px solid var(--border-color);transition:.18s var(--ease)}
.pagination>*:last-child{border-right:0}
.pagination a{color:var(--color-fg)}
.pagination a:hover{background:var(--border-soft);color:#fff}
.pagination .cur{background:var(--pag-active-bg);color:var(--color-accent-ink)}
.pagination .gap{color:var(--color-muted);background:var(--color-panel)}
.pagination .nav-btn{color:var(--color-muted)}
.pagination .nav-btn:hover{color:var(--color-accent)}
.sidemenu{width:230px;border:var(--border-w) solid var(--color-fg);background:var(--color-panel)}
.sidemenu .sm-head{padding:12px 14px;border-bottom:var(--border-w) solid var(--color-fg);font-family:var(--font-mono);
   font-size:10px;letter-spacing:1.6px;text-transform:uppercase;color:var(--color-accent)}
.sidemenu .sm-group{padding:8px 0;border-bottom:1px solid var(--border-color)}
.sidemenu .sm-group:last-child{border-bottom:0}
.sidemenu .sm-label{padding:10px 14px 2px;font-family:var(--font-mono);font-size:9px;letter-spacing:1.4px;text-transform:uppercase;color:var(--color-muted)}
.sidemenu a{display:block;padding:8px 14px;font-weight:700;font-size:12.5px;text-transform:uppercase;letter-spacing:.3px;
   color:#b7b7b1;transition:.18s var(--ease);border-left:4px solid transparent}
.sidemenu a:hover{color:#fff;background:var(--border-soft)}
.sidemenu a[aria-current="page"]{color:var(--color-accent);border-left-color:var(--color-accent);background:rgba(255,77,0,.06)}

.link{color:var(--color-fg);border-bottom:1px solid var(--border-color);transition:border-color var(--dur) var(--ease),color var(--dur) var(--ease)}
.link:hover{color:var(--color-accent);border-bottom-color:var(--color-accent)}
.link .ext{font-family:var(--font-mono);font-size:.78em;opacity:.7;margin-left:3px}
.bq{display:block;border-left:4px solid var(--quote-border);padding:6px 0 6px 20px;margin:4px 0;
   font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:clamp(20px,2.6vw,28px);line-height:1.06;color:var(--color-fg)}
.bq cite{display:block;margin-top:14px;font-family:var(--font-mono);font-size:11px;font-style:normal;font-weight:400;color:var(--color-muted);letter-spacing:.4px;text-transform:none}
.bq cite::before{content:"— "}
.ulist{list-style:none;display:flex;flex-direction:column;gap:9px;margin:4px 0}
.ulist li{position:relative;padding-left:22px;color:var(--color-prose);font-size:14px;line-height:1.4;overflow-wrap:anywhere;word-break:break-word}
.ulist li::before{content:"";position:absolute;left:0;top:6px;width:9px;height:9px;background:var(--color-accent)}
/* ordered list — was used by article-detail.html without ever being ported from the DS, so the
   markup fell through to Bootstrap Reboot's plain decimal list. Verbatim from smru-ds-black-brutal.html. */
.olist{list-style:none;counter-reset:ol;display:flex;flex-direction:column;gap:9px;margin:4px 0}
.olist li{counter-increment:ol;position:relative;padding-left:40px;color:var(--color-prose);font-size:14px;line-height:1.4;overflow-wrap:anywhere;word-break:break-word}
.olist li::before{content:counter(ol,decimal-leading-zero);position:absolute;left:0;top:-1px;
   font-family:var(--font-display);font-weight:700;font-size:17px;color:var(--color-accent)}
.hashtags{display:flex;flex-wrap:wrap;gap:8px;min-width:0}
.hashtags a{font-family:var(--font-mono);font-size:11px;text-transform:lowercase;letter-spacing:.3px;
   color:var(--color-accent);border:1px solid var(--border-color);padding:5px 10px;transition:.18s var(--ease);overflow-wrap:anywhere;word-break:break-word}
.hashtags a::before{content:"#";opacity:.55;margin-right:1px}
.hashtags a:hover{background:var(--color-accent);color:var(--color-accent-ink);border-color:var(--color-accent)}

/* figure — image + caption. NOTE: this was referenced by article-detail.html without ever being
   defined here, which is why its images rendered at native pixel width and overflowed the grid. */
.figure{display:flex;flex-direction:column;gap:0;max-width:100%;margin:0}
.figure .fig-img{border:var(--border-w) solid var(--border-color);overflow:hidden}
.figure .fig-img img{width:100%;height:auto;display:block;filter:grayscale(1) contrast(1.08) brightness(.82)}
.figure figcaption{border:var(--border-w) solid var(--border-color);border-top:0;background:var(--color-panel);
   padding:10px 12px;font-family:var(--font-mono);font-size:10.5px;color:var(--color-muted);letter-spacing:.3px;line-height:1.4;overflow-wrap:anywhere}
.figure figcaption b{color:var(--color-fg)}

/* accordion — native <details>/<summary>, zero JS (same technique as the afisha calendar menu) */
.acc{border:var(--border-w) solid var(--border-color)}
.acc-item{border-top:1px solid var(--border-color)}
.acc-item:first-child{border-top:0}
.acc-item>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:16px;
   padding:16px 18px;font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:15px;transition:.15s var(--ease)}
.acc-item>summary::-webkit-details-marker{display:none}
.acc-item>summary:hover{color:var(--color-accent)}
.acc-item>summary::after{content:"+";font-family:var(--font-mono);color:var(--color-accent);font-size:18px;flex:0 0 auto}
.acc-item[open]>summary::after{content:"\2212"}
.acc-item .acc-body{padding:0 18px 18px;font-size:14px;line-height:1.5;color:var(--color-prose);max-width:64ch}

/* gallery — grid of grayscale/duotone-hover photos, same media treatment as news-card/rel-card */
.art-gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-gap)}
.art-gallery a{position:relative;display:block;aspect-ratio:1;overflow:hidden;border:var(--border-w) solid var(--border-color)}
.art-gallery img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(1) contrast(1.08) brightness(.75);transition:transform var(--dur-slow) var(--ease)}
.art-gallery a::after{content:"";position:absolute;inset:0;background:var(--color-accent);mix-blend-mode:color;opacity:0;transition:opacity var(--dur) var(--ease)}
.art-gallery a:hover::after{opacity:.4}
.art-gallery a:hover img{transform:scale(1.05)}
@media(max-width:640px){.art-gallery{grid-template-columns:repeat(2,1fr)}}

.empty{border:var(--border-w) dashed var(--border-color);background:var(--color-panel);padding:34px 24px;
   display:flex;flex-direction:column;align-items:center;text-align:center;gap:11px;max-width:420px}
.empty .e-ic{width:48px;height:48px;border:var(--border-w) solid var(--border-color);display:grid;place-items:center;color:var(--color-muted)}
.empty .e-kick{font-family:var(--font-mono);font-size:10px;letter-spacing:1.6px;text-transform:uppercase;color:var(--color-accent)}
.empty h3{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:24px;line-height:1}
.empty p{font-size:13px;color:var(--color-muted);max-width:34ch;line-height:1.4}
.empty .btn-cta{margin-top:4px}

/* ---------- page-shell (masthead / footer / crumbs wrap) — not in the DS bundle proper, shared across the 9 mockup pages ---------- */
.wrap{max-width:1180px;margin:0 auto;padding:0 24px}
/* border-bottom is --color-fg, matching the DS .masthead — --border-color made the sticky bar
   read as a soft divider instead of the hard bone rule the DS specifies. */
.mast{position:sticky;top:0;z-index:50;background:rgba(10,10,10,.9);backdrop-filter:blur(8px);border-bottom:var(--border-w) solid var(--color-fg)}
.mast .wrap{display:flex;align-items:center;justify-content:space-between;height:64px;gap:24px;flex-wrap:wrap;max-width:1480px}
.logo{display:flex;align-items:center;gap:9px;font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:19px;letter-spacing:.01em;color:var(--color-fg)}
.logo em{font-style:normal;color:var(--color-accent)}
/* brand mark — verbatim from the DS .masthead .mark; the mockups had dropped it and shipped a
   text-only wordmark. */
.mark{width:26px;height:26px;background:var(--color-accent);position:relative;flex:0 0 auto}
.mark::before{content:"";position:absolute;inset:6px 6px auto 6px;height:3px;background:var(--color-accent-ink)}
.mark::after{content:"";position:absolute;left:6px;bottom:6px;width:3px;height:9px;background:var(--color-accent-ink);
   box-shadow:5px 0 var(--color-accent-ink),10px 0 var(--color-accent-ink)}
.mnav{display:flex;gap:26px;flex-wrap:wrap;align-items:center}
.mnav a{font-family:var(--font-mono);font-size:var(--text-meta);text-transform:uppercase;letter-spacing:.08em;color:var(--color-fg);transition:.18s var(--ease)}
.mnav a:hover,.mnav a[aria-current="page"]{color:var(--color-accent)}
.sitefoot{border-top:var(--border-w) solid var(--border-color)}
.sitefoot .wrap{max-width:1480px;padding:20px 24px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;
   font-family:var(--font-mono);font-size:var(--text-micro);color:var(--color-muted);text-transform:uppercase;letter-spacing:.04em}
.sitefoot .fnav{display:flex;gap:20px;flex-wrap:wrap}
.sitefoot .fnav a{color:var(--color-fg);transition:.18s var(--ease)}
.sitefoot .fnav a:hover{color:var(--color-accent)}
.sitefoot em{font-style:normal;color:var(--color-accent)}

/* section header — the DS .sec-head, merged with the bottom rule + spacing the DS puts on its
   .sec wrapper (these pages have no .sec). Replaces four hand-inlined copies on the homepage. */
.sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;
   border-bottom:var(--border-w) solid var(--border-color);padding-bottom:var(--space-16);margin-bottom:var(--space-24)}
.sec-head .ix{font-family:var(--font-mono);font-weight:700;font-size:22px;color:var(--color-accent);letter-spacing:1px;flex:0 0 auto}
.sec-head .sh-main{display:flex;align-items:baseline;gap:16px;min-width:0}
.sec-head h2{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:var(--text-h1);line-height:.9;letter-spacing:-.3px}
.sec-head h2 em{font-style:normal;color:var(--color-accent)}
.sec-head .lede{font-family:var(--font-mono);color:var(--color-muted);font-size:var(--text-body-s);max-width:60ch;margin-top:var(--space-8)}

/* sub-section heading inside a section — was inlined at an off-scale 28px. */
.block-title{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:var(--text-h2);
   line-height:1;margin-bottom:var(--space-12)}
.block-text{color:var(--color-prose);font-size:var(--text-body);line-height:var(--lh-body);margin-bottom:var(--space-16)}

/* page title — the <h1>+lede block repeated on all six index/detail pages as inline styles. */
.page-title{font-family:var(--font-display);font-weight:700;text-transform:uppercase;
   font-size:var(--text-display);line-height:var(--lh-tight);overflow-wrap:anywhere}
.page-title em{font-style:normal;color:var(--color-accent)}
.page-lede{color:var(--color-muted);font-size:var(--text-body-l);margin:var(--space-8) 0 var(--space-32)}
/* article/news headline — one step down from .page-title, since the story title is the h1 but
   sits above body copy rather than a listing. */
.art-title{font-family:var(--font-display);font-weight:700;text-transform:uppercase;
   font-size:var(--text-h1);line-height:1.05;overflow-wrap:anywhere}

/* long-form article body — was duplicated verbatim in article-detail.html and news-detail.html. */
.art-hero{border:var(--border-w) solid var(--border-color);overflow:hidden;margin:var(--space-24) 0 var(--space-32)}
.art-hero img{width:100%;display:block;max-height:520px;object-fit:cover;filter:grayscale(1) contrast(1.08) brightness(.82)}
.art-body{font-size:var(--text-body-l);line-height:var(--lh-body);color:var(--color-prose);max-width:72ch}
.art-body p+p{margin-top:18px}
.art-body h2{font-family:var(--font-display);font-weight:700;text-transform:uppercase;font-size:var(--text-h2);
   margin:36px 0 12px;color:var(--color-fg);scroll-margin-top:90px}
.art-body .bq,.art-body .figure{margin:var(--space-24) 0;max-width:100%}
.art-body .ulist,.art-body .olist,.art-body .acc,.art-body .art-gallery{margin:var(--space-16) 0}
.share{display:flex;gap:10px;align-items:center;flex-wrap:wrap}

/* ---------- afisha row (canonical) — used identically on the afisha index, the homepage
   afisha teaser, and a band's own gig list. This is the ONE afisha layout in the system. ---------- */
.no-photo{background:repeating-linear-gradient(135deg,var(--ink-panel) 0 14px,var(--gray-line2) 14px 28px)}
.day-row{display:grid;grid-template-columns:110px 1fr;border-bottom:var(--border-w) solid var(--border-color)}
.day-row:last-child{border-bottom:0}
.day-row .dcol{padding:20px 16px;border-right:var(--border-w) solid var(--border-color)}
.day-row .dcol b{font-family:var(--font-display);font-weight:700;font-size:38px;line-height:.85;color:var(--color-fg);display:block}
.day-row .dcol .mo{font-family:var(--font-mono);font-size:var(--text-meta);color:var(--color-muted);text-transform:uppercase}
.day-row .dcol .dw{font-family:var(--font-mono);font-size:var(--text-micro);color:var(--color-muted);text-transform:uppercase}
.ev-row{display:grid;grid-template-columns:70px 1fr auto;gap:20px;align-items:center;padding:14px 20px;border-bottom:1px solid var(--border-soft);transition:background var(--dur) var(--ease)}
.ev-row:last-child{border-bottom:0}
.ev-row:hover{background:rgba(255,77,0,.06)}
.ev-row .tm{font-family:var(--font-mono);font-size:var(--text-body-s);color:var(--color-muted)}
.ev-row .nm{font-weight:700;text-transform:uppercase;font-size:15px;line-height:1.2}
.ev-row .vn{font-family:var(--font-mono);font-size:var(--text-meta);color:var(--color-muted);margin-top:3px}
.ev-row.cancelled .nm{text-decoration:line-through;text-decoration-color:var(--color-danger);color:var(--color-muted)}
/* status tag — outlined, not filled (per stage.kaeru.moscow/afisha/ .gstatus) */
.status-tag{display:inline-block;font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
   color:var(--color-danger);border:var(--border-w) solid var(--color-danger);padding:2px 7px;background:transparent}

/* The afisha row had no breakpoint at all: 110px + 70px fixed columns plus a "Билеты · 2 500 ₽"
   button pushed the row up to 136px past a 375px viewport, and body{overflow-x:hidden} silently
   clipped it — so the ticket buttons and "Отмена" tags were unreachable on a phone. Below 640px
   the day column narrows and the third cell (button/status) drops under the event name. */
@media(max-width:640px){
  .day-row{grid-template-columns:72px 1fr}
  .day-row .dcol{padding:14px 10px}
  .day-row .dcol b{font-size:28px}
  .ev-row{grid-template-columns:52px minmax(0,1fr);gap:6px 12px;padding:12px 14px}
  .ev-row>:nth-child(3){grid-column:2;justify-self:start}
}
