/*
 * Signum.page — public site (landing, auth, contact, legal, account deletion).
 *
 * Ported 1:1 from the design export in docs/ui/redesign/ (index/login/signup/
 * contact/terms.html + styles.css): the numbers here are the mockup's numbers.
 *
 * Every rule is scoped under `.pub` / `body.pub`, which templates/public/_base.html.twig
 * puts on <body>. The author cabinet and the back-office keep the Tailwind design and
 * must not be affected by anything in this file. `body.pub` (0,1,1) also outranks the
 * Tailwind utilities on <body> and the `body {}` rule in app.css, so load order is
 * irrelevant.
 *
 * The form controls (input/select/textarea/checkbox/file) are deliberately NOT restyled:
 * they keep the shared theme from templates/form/tailwind_layout.html.twig. Only submit
 * buttons become pills, via templates/form/public_layout.html.twig.
 */

.pub {
    --pub-bg: #f7f3e9;
    --pub-ink: #14120e;
    --pub-card: #fdfbf5;
    --pub-tint: #f0ead9;

    --pub-gold: #b08a2e;
    --pub-gold-strong: #d9a93b;
    --pub-gold-text: #8a6a14;
    --pub-gold-deep: #6a5010;
    --pub-gold-wash: rgba(176, 138, 46, 0.12);
    --pub-gold-wash-soft: rgba(176, 138, 46, 0.1);
    --pub-gold-wash-strong: rgba(176, 138, 46, 0.18);

    --pub-line: rgba(20, 18, 14, 0.1);
    --pub-line-soft: rgba(20, 18, 14, 0.08);
    --pub-line-mid: rgba(20, 18, 14, 0.14);
    --pub-line-strong: rgba(20, 18, 14, 0.18);

    --pub-text: rgba(20, 18, 14, 0.72);
    --pub-text-soft: rgba(20, 18, 14, 0.66);
    --pub-text-faint: rgba(20, 18, 14, 0.55);

    --pub-on-dark: #f7f3e9;
    --pub-on-dark-soft: rgba(247, 243, 233, 0.72);
    --pub-on-dark-faint: rgba(247, 243, 233, 0.5);

    --pub-shadow-card: 0 26px 50px -26px rgba(20, 18, 14, 0.28), 0 1px 3px rgba(20, 18, 14, 0.05);
    --pub-shadow-hero: 0 34px 70px -24px rgba(20, 18, 14, 0.32), 0 2px 6px rgba(20, 18, 14, 0.06);
    --pub-shadow-float: 0 16px 32px rgba(20, 18, 14, 0.16), 0 1px 3px rgba(20, 18, 14, 0.08);
    --pub-shadow-btn: 0 14px 30px rgba(20, 18, 14, 0.24);
    --pub-shadow-side: 0 20px 44px -28px rgba(20, 18, 14, 0.24), 0 1px 3px rgba(20, 18, 14, 0.05);
}

/* ── base ───────────────────────────────────────────────────────────────── */

body.pub {
    background: var(--pub-bg);
    background-attachment: initial;
    color: var(--pub-ink);
    font-family: 'Schibsted Grotesk', 'Inter', system-ui, sans-serif;
    text-wrap: pretty;
}

.pub ::selection { background: var(--pub-gold); color: var(--pub-ink); }
.pub :focus-visible { outline: 2px solid var(--pub-gold); outline-offset: 3px; }

/* `:where()` keeps this at .pub's own specificity, so the component classes below
   (.pub-btn, .pub-brand, .pub-nav__link …) win on source order instead of having to
   out-specify a bare element selector. */
.pub :where(a) { color: var(--pub-gold-text); text-decoration: none; }
.pub :where(a):hover { color: var(--pub-ink); }

.pub-page { min-height: 100%; overflow-x: clip; }
.pub-page--gradient {
    background: linear-gradient(180deg, #f9f6ef 0%, #f6efda 44%, #f8f4ea 72%, #f7f3e9 100%);
}

/* ── layout ─────────────────────────────────────────────────────────────── */

.pub-shell {
    max-width: 1240px;
    margin: 0 auto;
    padding: 0 clamp(20px, 4vw, 56px);
}

.pub-section {
    padding: 0 0 clamp(64px, 8vw, 110px);
    scroll-margin-top: 110px;
}

/* Auto-fit column grid; callers tune the breakpoint with `--min` and gap with `--gap`. */
.pub-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(var(--min, 300px), 100%), 1fr));
    gap: var(--gap, 24px);
}

/* Content + sticky sidebar (contact, legal). Collapses to one column on narrow screens. */
.pub-split {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(240px, var(--aside, 300px));
    gap: clamp(32px, 5vw, 72px);
    align-items: start;
    padding: clamp(36px, 4vw, 56px) 0 clamp(64px, 8vw, 110px);
}

@media (max-width: 900px) {
    .pub-split { grid-template-columns: minmax(0, 1fr); }
}

/* ── typography ─────────────────────────────────────────────────────────── */

.pub-eyebrow {
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--pub-gold-text);
    margin: 0 0 18px;
}

.pub-h1 {
    font-size: clamp(36px, 4.4vw, 58px);
    line-height: 1.05;
    letter-spacing: -0.03em;
    font-weight: 800;
    margin: 0 0 26px;
}

.pub-h2 {
    font-size: clamp(27px, 2.9vw, 40px);
    line-height: 1.08;
    letter-spacing: -0.03em;
    font-weight: 800;
    margin: 0 0 44px;
}

.pub-h3 {
    font-size: 25px;
    line-height: 1.15;
    letter-spacing: -0.02em;
    font-weight: 800;
    margin: 0 0 12px;
}

.pub-h4 {
    font-size: 18px;
    font-weight: 700;
    letter-spacing: -0.015em;
    margin: 0 0 8px;
}

.pub-lead {
    font-size: 17.5px;
    line-height: 1.65;
    color: var(--pub-text);
    margin: 0 0 24px;
}

.pub-text {
    font-size: 15.5px;
    line-height: 1.6;
    color: rgba(20, 18, 14, 0.7);
    margin: 0 0 24px;
}

.pub-note {
    font-size: 13px;
    line-height: 1.55;
    color: rgba(20, 18, 14, 0.62);
    margin: 0;
}

.pub-accent { color: var(--pub-gold-text); }
.pub-tight { margin-bottom: 0; }

/* ── buttons ────────────────────────────────────────────────────────────── */

.pub-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 11px 18px;
    border: 0;
    border-radius: 999px;
    font-size: 14.5px;
    font-weight: 700;
    line-height: 1.2;
    white-space: nowrap;
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.pub-btn--primary { background: var(--pub-ink); color: var(--pub-bg); }
.pub-btn--primary:hover { background: #3a3120; color: var(--pub-bg); }

.pub-btn--ghost {
    background: transparent;
    color: var(--pub-ink);
    border: 1px solid rgba(20, 18, 14, 0.2);
    padding: 10px 16px;
}
.pub-btn--ghost:hover { border-color: var(--pub-ink); color: var(--pub-ink); }

.pub-btn--light { background: var(--pub-bg); color: var(--pub-ink); }
.pub-btn--light:hover { background: var(--pub-gold-strong); color: var(--pub-ink); }

.pub-btn--lg {
    font-size: 16.5px;
    padding: 16px 26px;
}
.pub-btn--lg.pub-btn--primary { box-shadow: var(--pub-shadow-btn); }

.pub-btn--md { font-size: 16px; padding: 15px 20px; }
.pub-btn--block { display: flex; width: 100%; }

.pub-btn--danger { background: #b4472e; color: var(--pub-bg); }
.pub-btn--danger:hover { background: #93381f; color: var(--pub-bg); }

.pub-btn--link {
    padding: 8px 0;
    background: transparent;
    color: var(--pub-gold-text);
    font-size: 14px;
    font-weight: 700;
    border-radius: 0;
}
.pub-btn--link:hover { color: var(--pub-ink); }

/* ── development banner ─────────────────────────────────────────────────── */

.pub-banner {
    position: relative;
    z-index: 30;
    padding: 10px 20px;
    background: var(--pub-gold-wash-strong);
    border-bottom: 1px solid rgba(176, 138, 46, 0.35);
    text-align: center;
    font-size: 13.5px;
    font-weight: 500;
    color: var(--pub-gold-deep);
}

/* ── header ─────────────────────────────────────────────────────────────── */

.pub-header {
    position: sticky;
    top: 0;
    z-index: 20;
    background: rgba(247, 243, 233, 0.92);
    backdrop-filter: blur(8px);
    border-bottom: 1px solid var(--pub-line);
}

.pub-header__inner {
    max-width: 1240px;
    margin: 0 auto;
    padding: 16px clamp(20px, 4vw, 56px);
    display: flex;
    align-items: center;
    gap: 14px 18px;
    flex-wrap: wrap;
}

.pub-brand {
    font-size: 18px;
    font-weight: 800;
    letter-spacing: -0.02em;
    display: flex;
    align-items: center;
    gap: 9px;
    white-space: nowrap;
    color: var(--pub-ink);
    flex: none;
    width: max-content;
    max-width: 100%;
}
.pub-brand:hover { color: var(--pub-ink); }

/* Optical alignment in the header row: the brand is 18px against the nav's 14.5px, and
   centre-aligning the flex row leaves its baseline ~1.5px below the links'. Lift it back
   onto them without touching the layout. */
.pub-header .pub-brand { position: relative; top: -1.5px; }

.pub-brand__mark {
    width: 24px;
    height: 24px;
    flex: none;
    background: var(--pub-ink);
    border-radius: 6px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--pub-gold-strong);
    font-size: 13px;
    font-weight: 800;
}

.pub-brand--lg { font-size: 18px; gap: 10px; }
.pub-brand--lg .pub-brand__mark { width: 26px; height: 26px; border-radius: 7px; font-size: 14px; }

.pub-nav {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    min-width: 0;
    flex: 1 1 auto;
}

.pub-nav__link {
    font-size: 14.5px;
    font-weight: 500;
    color: var(--pub-ink);
    white-space: nowrap;
}
.pub-nav__link:hover { color: var(--pub-gold-text); }

.pub-header__actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: none;
    margin-left: auto;
}

/* ── burger menu (narrow screens) ───────────────────────────────────────── */

/* Below 900px the section links and the auth buttons give way to the burger and move
   into `.pub-menu`, which the mobile-nav Stimulus controller toggles via `hidden`. The
   language switcher is the exception: it stays in the header bar at every width. */

.pub-burger {
    display: none;
    width: 42px;
    height: 42px;
    padding: 0;
    flex: none;
    margin-left: auto;
    align-items: center;
    justify-content: center;
    background: transparent;
    border: 1px solid var(--pub-line-mid);
    border-radius: 11px;
    color: var(--pub-ink);
    cursor: pointer;
    transition: border-color 0.15s ease, background 0.15s ease;
}
.pub-burger:hover { border-color: var(--pub-ink); }
.pub-burger[aria-expanded='true'] { background: var(--pub-gold-wash); border-color: var(--pub-gold); }

/* Three bars from one element: the middle is the box itself, the outer two are its
   pseudo-elements. Open state folds them into a cross. */
.pub-burger__bars,
.pub-burger__bars::before,
.pub-burger__bars::after {
    display: block;
    width: 18px;
    height: 1.75px;
    border-radius: 2px;
    background: currentColor;
    transition: transform 0.2s ease, opacity 0.15s ease;
}
.pub-burger__bars { position: relative; }
.pub-burger__bars::before,
.pub-burger__bars::after {
    content: '';
    position: absolute;
    left: 0;
}
.pub-burger__bars::before { top: -6px; }
.pub-burger__bars::after { top: 6px; }

.pub-burger[aria-expanded='true'] .pub-burger__bars { background: transparent; }
.pub-burger[aria-expanded='true'] .pub-burger__bars::before { transform: translateY(6px) rotate(45deg); }
.pub-burger[aria-expanded='true'] .pub-burger__bars::after { transform: translateY(-6px) rotate(-45deg); }

.pub-menu {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    display: block;
    padding: 16px clamp(20px, 4vw, 56px) 22px;
    background: var(--pub-card);
    border-bottom: 1px solid var(--pub-line);
    box-shadow: var(--pub-shadow-float);
    /* The header is sticky at the top, so the panel can never be taller than what is
       left of the viewport below it. */
    max-height: calc(100dvh - 100%);
    overflow-y: auto;
    overscroll-behavior: contain;
    animation: pub-menu-in 0.18s ease-out;
}
.pub-menu[hidden] { display: none; }

@keyframes pub-menu-in {
    from { opacity: 0; transform: translateY(-6px); }
    to { opacity: 1; transform: none; }
}

.pub-menu__nav {
    display: flex;
    flex-direction: column;
}

.pub-menu__link {
    padding: 13px 2px;
    font-size: 16px;
    font-weight: 500;
    color: var(--pub-ink);
    border-bottom: 1px solid var(--pub-line-soft);
}
.pub-menu__link:hover { color: var(--pub-gold-text); }

.pub-menu__actions {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 18px 0 4px;
}
/* Primary action last in the DOM (login above "start free"), but visually first. */
.pub-menu__actions .pub-btn--primary { order: -1; }

/* Dims the page behind the open panel; clicking it closes the menu. Anchored to the
   header (which is sticky, so it follows) and starting right below it: the header bar
   itself must keep its own colour, and a `position: fixed` scrim would sit on top of it
   — negative z-index would not help, since children paint after the parent's background.
   The panel is a later sibling, so it stays above this. */
.pub-menu__scrim {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    height: 100dvh;
    background: rgba(20, 18, 14, 0.32);
}

/* Locks the page while the panel is open — the panel scrolls, the page does not. */
body.pub.pub-menu-open { overflow: hidden; }

/* The language switcher stays in the header bar at every width — only the section links
   and the auth buttons move into the panel. */
@media (max-width: 900px) {
    .pub-nav { display: none; }
    .pub-header__actions .pub-btn { display: none; }
    .pub-header__actions .pub-lang { margin-right: 2px; }
    .pub-burger { display: inline-flex; margin-left: 0; }
}

/* Above the breakpoint the panel must never show, even if a resize raced the controller. */
@media (min-width: 901px) {
    .pub-menu,
    .pub-menu__scrim { display: none; }
}

@media (prefers-reduced-motion: reduce) {
    .pub-menu { animation: none; }
    .pub-burger__bars,
    .pub-burger__bars::before,
    .pub-burger__bars::after { transition: none; }
}

/* Language switcher — reads as the mockup's static "RU · EN · PL" but stays clickable. */
.pub-lang {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 13px;
    color: var(--pub-text-soft);
    white-space: nowrap;
    flex: none;
}
/* Slightly wider gap before the auth buttons than between the buttons themselves,
   so the switcher reads as its own thing rather than a third button. */
.pub-header__actions .pub-lang { margin-right: 6px; }
.pub-lang__sep { color: rgba(20, 18, 14, 0.3); }
.pub-lang__item { color: var(--pub-text-soft); }
.pub-lang__item:hover { color: var(--pub-ink); }
.pub-lang__item[aria-current] { color: var(--pub-ink); font-weight: 700; }

/* ── hero ───────────────────────────────────────────────────────────────── */

.pub-hero {
    position: relative;
    overflow: hidden;
    border-radius: 24px;
    margin: clamp(20px, 3vw, 34px) 0 clamp(48px, 6vw, 80px);
    /* The dot grid lives here rather than inside `.pub-art`: the svg is `slice`-scaled to
       cover the panel, so on a narrow, tall hero the pattern would be magnified into big
       dark blobs. As a background-size'd gradient it stays 26px at every viewport. */
    background-image:
        radial-gradient(circle at 1.6px 1.6px, rgba(20, 18, 14, 0.09) 1.6px, transparent 1.7px),
        linear-gradient(135deg, #fcf9f0 0%, #f6edd3 46%, #efe0b6 100%);
    background-size: 26px 26px, auto;
    box-shadow: inset 0 0 0 1px rgba(20, 18, 14, 0.07);
}

.pub-art {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
}

.pub-hero__inner {
    position: relative;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(380px, 100%), 1fr));
    gap: 56px clamp(32px, 5vw, 80px);
    padding: clamp(48px, 6vw, 88px) clamp(24px, 4vw, 60px) clamp(44px, 5vw, 72px);
    align-items: center;
}

.pub-hero__badge {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--pub-gold-text);
    margin-bottom: 26px;
}
.pub-hero__badge::before {
    content: '';
    width: 7px;
    height: 7px;
    background: var(--pub-gold);
    border-radius: 50%;
}

.pub-hero__lead {
    font-size: 19px;
    line-height: 1.6;
    max-width: 48ch;
    margin: 0 0 34px;
    color: var(--pub-text);
}

.pub-hero__actions {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    align-items: center;
    margin-bottom: 22px;
}
.pub-hero__actions .pub-btn--ghost { font-size: 16.5px; padding: 16px 20px; }

.pub-hero__fine {
    font-size: 14px;
    line-height: 1.55;
    color: rgba(20, 18, 14, 0.68);
    margin: 0;
    max-width: 46ch;
}

/* ── reader mock (hero right column) ────────────────────────────────────── */

.pub-mock { position: relative; isolation: isolate; }
.pub-mock::before {
    content: '';
    position: absolute;
    inset: auto -18px -22px 34px;
    height: 78%;
    background: #ede3c6;
    border-radius: 14px;
}

.pub-reader {
    position: relative;
    background: var(--pub-card);
    border-radius: 14px;
    box-shadow: var(--pub-shadow-hero);
    overflow: hidden;
}

.pub-reader__bar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    padding: 14px 20px;
    border-bottom: 1px solid var(--pub-line);
    font-size: 13px;
    color: var(--pub-text-faint);
}
.pub-reader__bar strong { font-weight: 700; color: var(--pub-ink); }

.pub-reader__page {
    position: relative;
    padding: 34px 40px 26px;
    overflow: hidden;
}

.pub-reader__marks { position: absolute; inset: 0; pointer-events: none; }
.pub-reader__mark {
    position: absolute;
    transform: rotate(-22deg);
    font-size: 13px;
    color: rgba(20, 18, 14, 0.11);
}

.pub-reader__title {
    font-size: 22px;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1.25;
    margin: 0 0 22px;
}

.pub-lines { display: flex; flex-direction: column; gap: 10px; }
.pub-lines--sm { gap: 7px; }
.pub-line {
    height: 8px;
    border-radius: 4px;
    background: rgba(20, 18, 14, 0.13);
}
.pub-lines--sm .pub-line { height: 7px; background: rgba(20, 18, 14, 0.14); }

.pub-reader__foot {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    margin-top: 28px;
    padding-top: 14px;
    border-top: 1px solid var(--pub-line);
    font-size: 12px;
    color: rgba(20, 18, 14, 0.45);
}

.pub-pill-float {
    position: absolute;
    right: 0;
    top: -16px;
    background: var(--pub-card);
    color: var(--pub-ink);
    font-size: 12.5px;
    font-weight: 700;
    letter-spacing: 0.03em;
    padding: 9px 15px;
    border-radius: 999px;
    box-shadow: 0 14px 28px rgba(20, 18, 14, 0.18);
}

.pub-float {
    position: absolute;
    display: flex;
    align-items: center;
    gap: 11px;
    background: var(--pub-card);
    padding: 11px 16px;
    border-radius: 12px;
    box-shadow: var(--pub-shadow-float);
}
.pub-float--left { left: -14px; top: 24%; }
.pub-float--right { right: -10px; bottom: 8%; }
.pub-float__title { display: block; font-size: 13.5px; font-weight: 700; line-height: 1.25; }
.pub-float__sub { display: block; font-size: 12.5px; color: var(--pub-text-soft); line-height: 1.3; }

.pub-float__icon {
    width: 26px;
    height: 26px;
    flex: none;
    border-radius: 8px;
    background: var(--pub-gold-wash-strong);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--pub-gold-text);
}

/* Miniature bar chart used by the floating badge and the analytics feature card. */
.pub-spark {
    display: flex;
    align-items: flex-end;
    gap: 2px;
    width: 26px;
    height: 20px;
    flex: none;
}
.pub-spark span { flex: 1; background: rgba(20, 18, 14, 0.2); border-radius: 2px 2px 0 0; }
.pub-spark span.is-on { background: var(--pub-gold); }

/* Small screens: the badges stay pinned to the mock as in the design — detaching them
   into the flow (`position: static`) made them read as stray content below the hero.
   They only get pulled inside its edges so the negative offsets can't be clipped. */
@media (max-width: 640px) {
    .pub-float { padding: 9px 13px; max-width: calc(100% - 8px); }
    .pub-float--left { left: 4px; top: 16%; }
    .pub-float--right { right: 4px; bottom: 6%; }
    .pub-pill-float { right: 4px; }
    .pub-mock::before { display: none; }
}

/* ── stats strip ────────────────────────────────────────────────────────── */

.pub-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr));
    gap: 28px;
    padding: 0 0 clamp(56px, 7vw, 96px);
}

.pub-stat { border-top: 1px solid rgba(20, 18, 14, 0.16); padding-top: 16px; }
.pub-stat__value {
    font-size: 30px;
    font-weight: 800;
    letter-spacing: -0.03em;
    margin-bottom: 6px;
}
.pub-stat__value--gold { color: var(--pub-gold); }
.pub-stat__label { font-size: 13.5px; color: var(--pub-text-soft); }

.pub-stat--lg .pub-stat__value { font-size: 38px; line-height: 1; margin-bottom: 0; }
.pub-stat--lg .pub-stat__label { font-size: 13px; margin-top: 8px; }
.pub-stat--lg { border-top: 0; padding-top: 0; }

.pub-stats-inline { display: flex; flex-wrap: wrap; gap: 20px 44px; }

/* ── cards & chips ──────────────────────────────────────────────────────── */

.pub-card {
    background: var(--pub-card);
    border-radius: 14px;
    padding: 30px;
    box-shadow: var(--pub-shadow-card);
}
.pub-card--step { padding: 32px 30px; }
.pub-card--wide { padding: 36px 34px; }

.pub-card--dark {
    background: var(--pub-ink);
    color: var(--pub-on-dark);
    box-shadow: 0 30px 60px -30px rgba(20, 18, 14, 0.5);
}
.pub-card--dark .pub-text { color: rgba(247, 243, 233, 0.78); }

.pub-card__step {
    font-size: 15px;
    font-weight: 700;
    color: var(--pub-gold-text);
    margin-bottom: 22px;
}

.pub-card__hr {
    font-size: 15px;
    line-height: 1.6;
    margin: 0 0 24px;
    padding-top: 20px;
    border-top: 1px solid var(--pub-line-mid);
}
.pub-card--dark .pub-card__hr { border-top-color: rgba(247, 243, 233, 0.22); }

.pub-card__title {
    font-size: 29px;
    line-height: 1.1;
    letter-spacing: -0.025em;
    font-weight: 800;
    margin: 0 0 16px;
}
.pub-card__title--sm {
    font-size: 21px;
    font-weight: 800;
    letter-spacing: -0.02em;
    line-height: 1.3;
    margin: 0 0 10px;
}

.pub-chips { display: flex; gap: 7px; flex-wrap: wrap; }

.pub-chip {
    font-size: 12.5px;
    padding: 6px 11px;
    border-radius: 20px;
    background: var(--pub-tint);
    color: rgba(20, 18, 14, 0.74);
}
.pub-chip--gold {
    font-weight: 500;
    background: var(--pub-gold-wash-strong);
    color: var(--pub-gold-deep);
}
.pub-chip--dark {
    background: rgba(247, 243, 233, 0.12);
    color: rgba(247, 243, 233, 0.85);
}

/* Small inline preview blocks inside the "how it works" cards. */
.pub-inset {
    position: relative;
    padding: 14px;
    border-radius: 8px;
    background: var(--pub-tint);
    overflow: hidden;
}
.pub-inset--file {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    font-size: 13px;
    color: rgba(20, 18, 14, 0.65);
}
.pub-inset__doc {
    width: 20px;
    height: 26px;
    flex: none;
    border: 1.5px solid rgba(20, 18, 14, 0.6);
    border-radius: 2px;
}
.pub-inset__mark {
    position: absolute;
    top: 18px;
    left: 38px;
    transform: rotate(-22deg);
    font-size: 11.5px;
    color: rgba(20, 18, 14, 0.16);
}

/* ── hairline tile grid (protection features) ───────────────────────────── */

.pub-tiles {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr));
    gap: 2px;
    background: rgba(20, 18, 14, 0.12);
    border-radius: 14px;
    overflow: hidden;
}
.pub-tile { background: var(--pub-card); padding: 28px 26px; }
.pub-tile p {
    font-size: 14.5px;
    line-height: 1.6;
    color: rgba(20, 18, 14, 0.65);
    margin: 0;
}

/* ── server → device flow ───────────────────────────────────────────────── */

.pub-flow {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    font-size: 13.5px;
    color: rgba(20, 18, 14, 0.6);
}
.pub-flow__node { font-weight: 700; color: var(--pub-ink); }
.pub-flow__label { color: var(--pub-gold-text); }
.pub-flow__rail { flex: 1; min-width: 40px; height: 2px; border-radius: 2px; background: rgba(20, 18, 14, 0.18); }
.pub-flow__rail--on { background: var(--pub-gold); }

/* ── honesty block (stop / don't promise) ───────────────────────────────── */

.pub-honest {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr));
    gap: 28px clamp(32px, 4vw, 56px);
    margin-top: 36px;
    padding-top: 30px;
    border-top: 1px solid rgba(20, 18, 14, 0.16);
}

.pub-cols {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr));
    gap: 26px 32px;
    align-content: start;
}

.pub-col__title {
    font-size: 12.5px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--pub-gold-text);
    margin-bottom: 12px;
}
.pub-col__title--muted { color: var(--pub-text-faint); }

.pub-rules { display: flex; flex-direction: column; gap: 10px; font-size: 14.5px; line-height: 1.45; }
.pub-rules > * { padding-top: 10px; border-top: 1px solid var(--pub-line-mid); }
.pub-rules--muted { color: rgba(20, 18, 14, 0.68); }

/* ── bullet list (auth panel, legal prohibitions) ───────────────────────── */

.pub-bullets { display: flex; flex-direction: column; gap: 14px; }
.pub-bullet {
    display: flex;
    gap: 12px;
    align-items: baseline;
    font-size: 15.5px;
    line-height: 1.5;
}
.pub-bullet::before {
    content: '';
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--pub-gold);
    flex: none;
    transform: translateY(-2px);
}

/* ── analytics bar chart (feature card) ─────────────────────────────────── */

.pub-bars { display: flex; align-items: flex-end; gap: 4px; height: 76px; }
.pub-bars > span { flex: 1; border-radius: 3px 3px 0 0; background: rgba(20, 18, 14, 0.16); }
.pub-bars > span.is-on { background: var(--pub-gold); }
.pub-bars__legend {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    font-size: 12px;
    color: var(--pub-text-soft);
    margin-top: 10px;
}

/* ── comparison / pricing table ─────────────────────────────────────────── */

.pub-table {
    border-radius: 14px;
    background: var(--pub-card);
    box-shadow: var(--pub-shadow-side);
    overflow-x: auto;
    overflow-y: hidden;
}
.pub-table__grid {
    display: grid;
    grid-template-columns: minmax(200px, 1.25fr) minmax(170px, 1fr) minmax(190px, 1fr);
    min-width: 560px;
}

.pub-table__head {
    padding: 18px 20px;
    font-size: 16px;
    font-weight: 700;
    letter-spacing: -0.015em;
    color: var(--pub-text-soft);
    border-bottom: 1px solid rgba(20, 18, 14, 0.12);
}
.pub-table__head--empty { padding: 18px 20px; border-bottom: 1px solid rgba(20, 18, 14, 0.12); }
.pub-table__head--hl {
    font-weight: 800;
    color: var(--pub-gold-text);
    background: var(--pub-gold-wash-soft);
    border-bottom: 1px solid rgba(176, 138, 46, 0.35);
}

.pub-table__row {
    padding: 16px 18px;
    font-size: 14.5px;
    font-weight: 700;
    line-height: 1.45;
    border-bottom: 1px solid var(--pub-line-soft);
}
.pub-table__cell {
    padding: 16px 18px;
    font-size: 14.5px;
    line-height: 1.45;
    color: var(--pub-text-soft);
    border-bottom: 1px solid var(--pub-line-soft);
}
.pub-table__cell--hl {
    color: var(--pub-ink);
    background: var(--pub-gold-wash-soft);
    border-bottom: 1px solid rgba(176, 138, 46, 0.22);
}
.pub-table__grid > .is-last { border-bottom: 0; }

/* ── callout ────────────────────────────────────────────────────────────── */

.pub-callout {
    display: flex;
    gap: 13px;
    align-items: flex-start;
    padding: 16px 18px;
    border-radius: 12px;
    background: var(--pub-gold-wash);
    font-size: 14px;
    line-height: 1.55;
    color: rgba(20, 18, 14, 0.78);
}
.pub-callout::before {
    content: '!';
    width: 22px;
    height: 22px;
    flex: none;
    border-radius: 50%;
    background: var(--pub-gold);
    color: var(--pub-ink);
    font-size: 14px;
    font-weight: 800;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}

/* Terms acknowledgement row on the sign-in form. */
.pub-consent {
    display: flex;
    gap: 11px;
    align-items: flex-start;
    margin: 6px 0 22px;
    font-size: 14px;
    line-height: 1.55;
    color: rgba(20, 18, 14, 0.75);
    cursor: pointer;
}

/* Inline notice box (e.g. "confirm your email" on the login page). */
.pub-notice {
    padding: 16px 18px;
    margin-bottom: 22px;
    border-radius: 12px;
    background: var(--pub-gold-wash);
}
.pub-notice__text {
    margin: 0 0 12px;
    font-size: 14px;
    line-height: 1.55;
    color: rgba(20, 18, 14, 0.78);
}

/* ── dark CTA band + footer ─────────────────────────────────────────────── */

.pub-dark { background: var(--pub-ink); color: var(--pub-on-dark); }
.pub-dark__inner {
    max-width: 1240px;
    margin: 0 auto;
    padding: clamp(56px, 7vw, 96px) clamp(20px, 4vw, 56px);
}
.pub-dark__inner--compact { padding: clamp(44px, 5vw, 72px) clamp(20px, 4vw, 56px); }

.pub-cta__title {
    font-size: clamp(30px, 3.4vw, 46px);
    line-height: 1.08;
    letter-spacing: -0.03em;
    font-weight: 800;
    margin: 0 0 26px;
    max-width: 26ch;
}
.pub-cta__title em { font-style: normal; color: var(--pub-gold-strong); }
.pub-cta__lead {
    font-size: 18px;
    line-height: 1.6;
    color: var(--pub-on-dark-soft);
    margin: 0 0 34px;
    max-width: 52ch;
}

.pub-footer {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr));
    gap: 40px;
}
.pub-footer--spaced {
    margin-top: clamp(56px, 7vw, 92px);
    padding-top: 44px;
    border-top: 1px solid rgba(247, 243, 233, 0.18);
}

.pub-footer__brand {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -0.02em;
    margin-bottom: 14px;
    color: var(--pub-on-dark);
}
.pub-footer__brand .pub-brand__mark { background: var(--pub-on-dark); color: var(--pub-ink); }
.pub-footer__tagline {
    font-size: 14px;
    line-height: 1.6;
    color: rgba(247, 243, 233, 0.66);
    margin: 0;
    max-width: 34ch;
}

.pub-footer__title {
    font-size: 12.5px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--pub-on-dark-faint);
    margin-bottom: 16px;
}
.pub-footer__links { display: flex; flex-direction: column; gap: 11px; font-size: 14.5px; }
.pub-footer__links a { color: rgba(247, 243, 233, 0.86); }
.pub-footer__links a:hover { color: var(--pub-gold-strong); }

.pub-footer__bottom {
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 44px;
    padding-top: 24px;
    border-top: 1px solid rgba(247, 243, 233, 0.12);
    font-size: 13px;
    color: rgba(247, 243, 233, 0.62);
}

/* ── page hero (contact, legal) ─────────────────────────────────────────── */

.pub-pagehead {
    padding: clamp(40px, 5vw, 72px) 0 clamp(28px, 3vw, 44px);
    border-bottom: 1px solid var(--pub-line-mid);
}
.pub-pagehead__title {
    font-size: clamp(32px, 4vw, 52px);
    line-height: 1.06;
    letter-spacing: -0.03em;
    font-weight: 800;
    margin: 0 0 18px;
    max-width: 30ch;
    text-wrap: balance;
}
.pub-pagehead__lead {
    font-size: 17.5px;
    line-height: 1.65;
    color: rgba(20, 18, 14, 0.75);
    margin: 0;
    max-width: 56ch;
}
.pub-pagehead__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 12px 28px;
    align-items: center;
    font-size: 14px;
    color: rgba(20, 18, 14, 0.68);
}
.pub-pagehead__dot { width: 4px; height: 4px; border-radius: 50%; background: rgba(20, 18, 14, 0.3); }

/* ── sticky sidebar ─────────────────────────────────────────────────────── */

.pub-side {
    position: sticky;
    top: 96px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}
@media (max-width: 900px) {
    .pub-side { position: static; }
}

.pub-side__card {
    padding: 24px 22px;
    border-radius: 14px;
    background: var(--pub-card);
    box-shadow: var(--pub-shadow-side);
}
.pub-side__card--plain { padding: 22px; background: transparent; box-shadow: none; border: 1px solid var(--pub-line-mid); }
.pub-side__card--gold { padding: 22px; background: var(--pub-gold-wash); box-shadow: none; }

.pub-side__title {
    font-size: 12.5px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: rgba(20, 18, 14, 0.68);
    margin-bottom: 16px;
}
.pub-side__list { display: flex; flex-direction: column; gap: 16px; font-size: 14.5px; line-height: 1.5; }
.pub-side__label { font-weight: 700; margin-bottom: 3px; }
.pub-side__heading { font-size: 15.5px; font-weight: 800; letter-spacing: -0.015em; margin: 0 0 8px; }
.pub-side__text { font-size: 14px; line-height: 1.6; color: var(--pub-text); margin: 0 0 16px; }
.pub-side__text:last-child { margin-bottom: 0; }

.pub-doclist { display: flex; flex-direction: column; gap: 2px; font-size: 14.5px; line-height: 1.45; }
.pub-doclist a {
    padding: 10px 12px;
    border-radius: 8px;
    color: rgba(20, 18, 14, 0.75);
}
.pub-doclist a:hover { background: rgba(20, 18, 14, 0.06); color: var(--pub-ink); }
.pub-doclist a[aria-current] {
    background: rgba(176, 138, 46, 0.14);
    color: var(--pub-ink);
    font-weight: 700;
}

/* ── auth split screen ──────────────────────────────────────────────────── */

.pub-auth {
    min-height: 100vh;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(460px, 100%), 1fr));
    align-items: stretch;
    background: var(--pub-bg);
    overflow-x: clip;
}

.pub-auth__panel {
    position: relative;
    overflow: hidden;
    background: linear-gradient(150deg, #fcf9f0 0%, #f5ebcf 48%, #eddcae 100%);
    padding: clamp(32px, 4vw, 56px);
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 48px;
    min-height: 100vh;
}
/* Lift the content above the backdrop without pulling the absolutely-positioned
   `.pub-art` svg into the flex flow (it would then claim a row of its own). */
.pub-auth__panel > :not(.pub-art) { position: relative; }

.pub-auth__pitch { max-width: 46ch; }
.pub-auth__title {
    font-size: clamp(30px, 3.2vw, 42px);
    line-height: 1.1;
    letter-spacing: -0.03em;
    font-weight: 800;
    margin: 0 0 20px;
}
.pub-auth__lead {
    font-size: 17px;
    line-height: 1.6;
    color: var(--pub-text);
    margin: 0 0 28px;
}
.pub-auth__badge { font-size: 13px; color: var(--pub-text-soft); margin: 0; }

/* Centred as a whole (toggle bar + form). Safe against tall forms such as sign-in:
   the grid row grows to fit the content, so `center` only ever adds slack, never
   clips the top. */
.pub-auth__main {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    padding: clamp(28px, 3.5vw, 56px);
    gap: 32px;
}

.pub-auth__bar {
    flex: none;
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
}

.pub-auth__toggle {
    display: inline-flex;
    padding: 4px;
    border-radius: 999px;
    background: rgba(20, 18, 14, 0.07);
}
.pub-auth__toggle a {
    padding: 9px 20px;
    border-radius: 999px;
    font-size: 14.5px;
    font-weight: 500;
    color: var(--pub-text-soft);
    display: inline-flex;
    align-items: center;
}
.pub-auth__toggle a:hover { color: var(--pub-ink); }
.pub-auth__toggle a[aria-current] {
    font-weight: 700;
    background: var(--pub-ink);
    color: var(--pub-bg);
}

.pub-auth__form { flex: none; width: 100%; max-width: var(--form-width, 440px); }
.pub-auth__heading {
    font-size: 32px;
    font-weight: 800;
    letter-spacing: -0.03em;
    line-height: 1.1;
    margin: 0 0 10px;
}
.pub-auth__sub {
    font-size: 15.5px;
    line-height: 1.6;
    color: rgba(20, 18, 14, 0.68);
    margin: 0 0 30px;
}
.pub-auth__foot { font-size: 14.5px; color: rgba(20, 18, 14, 0.7); margin: 26px 0 0; }
.pub-auth__foot a { font-weight: 700; }

.pub-auth__divider {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 24px 0;
    font-size: 13px;
    color: var(--pub-text-faint);
}
.pub-auth__divider::before,
.pub-auth__divider::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--pub-line-mid);
}

/* Below the split's breakpoint (2 × 460px) the marketing panel would stack into a tall
   block above the form; drop it and give the form the whole viewport instead. */
@media (max-width: 919px) {
    .pub-auth__panel { display: none; }
    .pub-auth__main { align-items: center; min-height: 100vh; }
}

/* Field labels on the raw-HTML auth forms (the Symfony form theme supplies its own). */
.pub-field {
    display: block;
    font-size: 13px;
    font-weight: 500;
    color: rgba(20, 18, 14, 0.7);
    margin-bottom: 7px;
}
.pub-field-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 12px;
    margin-bottom: 7px;
}
.pub-field-row .pub-field { margin-bottom: 0; }

/* ── centred card (account deletion) ────────────────────────────────────── */

.pub-cardpage {
    display: flex;
    min-height: 100vh;
    align-items: center;
    justify-content: center;
    padding: 24px;
}
.pub-cardpage__card {
    width: 100%;
    max-width: 520px;
    overflow: hidden;
    border-radius: 14px;
    background: var(--pub-card);
    box-shadow: var(--pub-shadow-card);
}
.pub-cardpage__tone { height: 6px; }
.pub-cardpage__body { padding: clamp(24px, 4vw, 36px); }
.pub-cardpage__heading {
    font-size: 26px;
    font-weight: 800;
    letter-spacing: -0.025em;
    line-height: 1.2;
    margin: 0 0 14px;
}

/* ── rendered legal markdown ────────────────────────────────────────────── */

.pub .doc-content {
    max-width: 74ch;
    font-size: 16px;
    line-height: 1.7;
    color: rgba(20, 18, 14, 0.78);
}
.pub .doc-content > p:first-child { font-size: 17.5px; line-height: 1.65; margin-bottom: 36px; }
.pub .doc-content h1,
.pub .doc-content h2,
.pub .doc-content h3 { color: var(--pub-ink); letter-spacing: -0.025em; scroll-margin-top: 110px; }
.pub .doc-content h1 { font-size: 30px; font-weight: 800; line-height: 1.15; margin: 40px 0 16px; }
.pub .doc-content h2 { font-size: 26px; font-weight: 800; line-height: 1.2; margin: 36px 0 14px; }
.pub .doc-content h3 { font-size: 20px; font-weight: 700; line-height: 1.3; margin: 28px 0 12px; }
/* h4/hr/pre/code до сих пор не были оформлены, хотя санитайзер их пропускает, а панель
   help-редактора их предлагает — на странице они получались браузерным дефолтом. */
.pub .doc-content h4 {
    font-size: 17px;
    font-weight: 700;
    line-height: 1.35;
    margin: 24px 0 10px;
    color: var(--pub-ink);
    letter-spacing: -0.02em;
}
.pub .doc-content p { margin: 0 0 14px; }
.pub .doc-content hr { margin: 32px 0; border: 0; border-top: 1px solid var(--pub-line); }
.pub .doc-content code {
    padding: 2px 6px;
    border-radius: 6px;
    background: var(--pub-tint);
    color: var(--pub-ink);
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 0.92em;
}
.pub .doc-content pre {
    margin: 0 0 24px;
    padding: 16px 18px;
    border-radius: 12px;
    background: var(--pub-tint);
    overflow-x: auto;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 13.5px;
    line-height: 1.6;
    color: var(--pub-ink);
}
.pub .doc-content pre code { padding: 0; background: none; font-size: inherit; }
.pub .doc-content ul,
.pub .doc-content ol { margin: 0 0 32px; padding-left: 22px; }
.pub .doc-content li { margin-bottom: 10px; }
.pub .doc-content a { color: var(--pub-gold-text); text-decoration: none; font-weight: 700; }
.pub .doc-content a:hover { color: var(--pub-ink); }
.pub .doc-content table {
    margin: 22px 0 18px;
    width: 100%;
    border-collapse: collapse;
    background: var(--pub-card);
    border-radius: 14px;
    overflow: hidden;
    box-shadow: var(--pub-shadow-side);
    font-size: 15px;
}
.pub .doc-content th {
    padding: 16px 20px;
    font-size: 12.5px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: rgba(20, 18, 14, 0.68);
    text-align: left;
    border: 0;
    border-bottom: 1px solid rgba(20, 18, 14, 0.12);
}
.pub .doc-content td {
    padding: 15px 20px;
    border: 0;
    border-bottom: 1px solid var(--pub-line-soft);
}
.pub .doc-content tr:last-child td { border-bottom: 0; }
.pub .doc-content blockquote {
    margin: 0 0 32px;
    padding: 20px 22px;
    border: 0;
    border-radius: 12px;
    background: var(--pub-gold-wash);
    color: rgba(20, 18, 14, 0.8);
    font-size: 15px;
    line-height: 1.6;
}
/* width/height из редактора не ограничивают картинку колонкой — сжимаем по месту. */
.pub .doc-content img { margin: 1rem 0; border-radius: 12px; display: block; max-width: 100%; height: auto; }

/* ── help center ────────────────────────────────────────────────────────── */

.pub-help-section { margin: 0 0 clamp(36px, 5vw, 56px); scroll-margin-top: 110px; }
.pub-help-section__title {
    margin: 0 0 14px;
    font-size: 22px;
    font-weight: 800;
    letter-spacing: -0.02em;
    color: var(--pub-ink);
}
.pub-help-list { display: flex; flex-direction: column; gap: 10px; }
.pub-help-item {
    display: block;
    padding: 18px 22px;
    border-radius: 12px;
    background: var(--pub-card);
    box-shadow: var(--pub-shadow-card);
    text-decoration: none;
    color: inherit;
}
.pub-help-item:hover .pub-help-item__title { text-decoration: underline; }
.pub-help-item__title {
    margin: 0 0 4px;
    font-size: 16.5px;
    font-weight: 700;
    letter-spacing: -0.015em;
    color: var(--pub-ink);
}
.pub-help-item__desc { margin: 0; font-size: 14.5px; line-height: 1.55; color: var(--pub-text); }

/* ── scroll reveal (landing) ────────────────────────────────────────────── */

.pub .reveal {
    transition: opacity 0.6s cubic-bezier(0.2, 0.7, 0.3, 1), transform 0.6s cubic-bezier(0.2, 0.7, 0.3, 1);
}
.pub .reveal.reveal-hidden { opacity: 0; transform: translateY(16px); }

@media (prefers-reduced-motion: reduce) {
    .pub .reveal { transition: none; }
    .pub .reveal.reveal-hidden { opacity: 1; transform: none; }
}

/* ── standalone error pages (404/500/generic) ───────────────────────────── */
/* Rendered by Symfony's TwigErrorRenderer (templates/bundles/TwigBundle/Exception/),
   outside the normal controller flow — no header/nav, just brand + message centred
   on the same dot-grid backdrop as the landing hero / auth split. */

.pub-errorpage {
    position: relative;
    display: flex;
    min-height: 100vh;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    padding: 24px;
    background-image:
        radial-gradient(circle at 1.6px 1.6px, rgba(20, 18, 14, 0.09) 1.6px, transparent 1.7px),
        linear-gradient(180deg, #f9f6ef 0%, #f6efda 46%, #f7f3e9 100%);
    background-size: 26px 26px, auto;
}

.pub-errorpage__brand {
    position: absolute;
    top: clamp(20px, 4vw, 40px);
    left: clamp(20px, 4vw, 40px);
    z-index: 1;
}

.pub-errorpage__inner {
    position: relative;
    z-index: 1;
    width: 100%;
    max-width: 540px;
    text-align: center;
}

.pub-errorpage__code {
    font-size: clamp(72px, 13vw, 148px);
    font-weight: 800;
    line-height: 1;
    letter-spacing: -0.04em;
    margin: 0 0 4px;
    background: linear-gradient(135deg, var(--pub-ink) 0%, var(--pub-gold-text) 130%);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

.pub-errorpage__icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    margin: 0 auto 20px;
    border-radius: 14px;
    background: var(--pub-gold-wash);
    color: var(--pub-gold-text);
}
.pub-errorpage__icon svg { width: 24px; height: 24px; }

.pub-errorpage__heading {
    font-size: clamp(22px, 3vw, 27px);
    font-weight: 800;
    letter-spacing: -0.02em;
    line-height: 1.2;
    margin: 0 0 12px;
}

.pub-errorpage__body {
    font-size: 16px;
    line-height: 1.6;
    color: var(--pub-text);
    max-width: 42ch;
    margin: 0 auto 30px;
}

.pub-errorpage__actions {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
}

@media (max-width: 480px) {
    .pub-errorpage__actions { flex-direction: column; align-items: stretch; }
    .pub-errorpage__actions .pub-btn { width: 100%; }
}
