/* ============================================================================
   theme.css — the ONE monochrome design system for randomchat.io.
   ============================================================================

   Rules this file enforces (2026-07-29 redesign). Do not reintroduce any of
   the things on the "never" list — they are the whole point of the rewrite:

     NEVER  hues — with exactly ONE exception: --online, the live-user dot
            (see the token). Everything else is a neutral grey: R == G == B
     NEVER  gradients (linear-gradient / conic-gradient / background-image)
     NEVER  box-shadow, text-shadow, glow or blur ornamentation
     NEVER  accent stripes (border-left/right: Npx solid <colour>)
     NEVER  border-radius — --radius is 0 and every component reads it
     NEVER  emoji in markup — use the .ico SVG set (scripts/build-icons.py)

   Only two surfaces exist: page (--bg/--fg) and its inverse (--fg/--bg).
   Separation comes from 1px hairlines and whitespace, nothing else.

   Theme: light is the default; `data-theme="dark"` on <html> flips it. The
   attribute is written by the no-FOUC boot snippet in every page <head> and
   by js/theme.js (localStorage key `rc_theme`, values light|dark|system).
   With no stored choice we follow prefers-color-scheme.

   Layering: this file styles the public site (landing pages, blog, footer).
   The chat/room/form app shells add css/app.css on top; it inherits these
   tokens and must not redefine them.
   ========================================================================== */

/* ---------- Tokens ---------- */
:root {
    color-scheme: light;

    --bg: #ffffff;          /* page background                         */
    --fg: #000000;          /* body text, and the inverse surface fill  */
    --muted: #595959;       /* secondary text — 7.0:1 on white          */
    --faint: #767676;       /* tertiary text — 4.7:1 on white           */
    --line: #d4d4d4;        /* hairline borders                        */
    --line-strong: #8c8c8c; /* borders that must read as a real edge   */
    --surface: #f5f5f5;     /* the single tinted fill we allow         */

    /* THE ONE COLOUR ON THE SITE.
       The live-user dot is the single element allowed a hue: "people are
       online right now" is a status signal, and a green dot is the one
       convention every visitor already reads without a legend. It is used
       by .online-dot and nothing else — do not reach for it anywhere else,
       and do not add a second accent. 4.6:1 on white. */
    --online: #15803d;

    --radius: 0;
    --hairline: 1px solid var(--line);

    --font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;

    --wrap: 1200px;         /* navbar / footer width  */
    --measure: 860px;       /* article width          */
}

:root[data-theme="dark"] {
    color-scheme: dark;

    --bg: #000000;
    --fg: #ffffff;
    --muted: #a6a6a6;       /* 9.7:1 on black */
    --faint: #8c8c8c;       /* 6.4:1 on black */
    --line: #333333;
    --line-strong: #737373;
    --surface: #0f0f0f;
    --online: #4ade80;      /* 9.4:1 on black — see the light-mode note */
}

/* Visitors who never opened the picker follow the OS. The boot snippet
   stamps data-theme="light" explicitly, so an explicit choice always wins
   over this block regardless of source order. */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        color-scheme: dark;
        --bg: #000000;
        --fg: #ffffff;
        --muted: #a6a6a6;
        --faint: #8c8c8c;
        --line: #333333;
        --line-strong: #737373;
        --surface: #0f0f0f;
        --online: #4ade80;
    }
}

/* ---------- Reset ---------- */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

body {
    font-family: var(--font);
    background: var(--bg);
    color: var(--fg);
    line-height: 1.65;
    font-size: 16px;
    min-height: 100vh;
    -webkit-font-smoothing: antialiased;
}

img, svg, video { display: block; max-width: 100%; }
img { height: auto; }
button, input, select, textarea { font: inherit; color: inherit; }
[hidden] { display: none !important; }

::selection { background: var(--fg); color: var(--bg); }

:where(a, button, input, select, textarea, [tabindex]):focus-visible {
    outline: 2px solid var(--fg);
    outline-offset: 2px;
}

/* ---------- Icons ----------
   Every former emoji is now one of these. Uniform geometry: 24x24 box,
   no fill, 1.5px currentColor stroke, round joins. Size follows font-size,
   so an icon always matches the text it sits next to. */
.ico {
    width: 1em;
    height: 1em;
    display: inline-block;
    vertical-align: -0.14em;
    flex-shrink: 0;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.5;
    stroke-linecap: round;
    stroke-linejoin: round;
    overflow: visible;
}
.ico-fill { fill: currentColor; stroke: none; }

/* Icon slots that used to be sized emoji spans. */
.icon, .use-case-icon, .benefit-icon, .emoji, .lang-flag,
.result-icon, .fab-chat-icon, .btn-icon, .country-flag, .tip-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
}
.icon, .use-case-icon, .emoji { font-size: 32px; margin-bottom: 14px; }
.result-icon { font-size: 40px; margin-bottom: 10px; justify-content: center; display: flex; }
.lang-flag { font-size: 26px; margin-bottom: 8px; display: flex; justify-content: center; }

/* ---------- Typography ---------- */
h1, h2, h3, h4, h5, h6 {
    color: var(--fg);
    font-weight: 700;
    line-height: 1.25;
    letter-spacing: -0.01em;
    text-wrap: balance;
}
h1 { font-size: clamp(30px, 5vw, 44px); }
h2 { font-size: clamp(23px, 3.2vw, 28px); margin: 44px 0 16px; }
h3 { font-size: 19px; margin: 28px 0 10px; }
h4 { font-size: 16px; margin: 20px 0 8px; }
h2:first-child, h3:first-child, h2:first-of-type { margin-top: 0; }

p { margin-bottom: 16px; color: var(--muted); }
strong, b { color: var(--fg); font-weight: 700; }
em, i { font-style: italic; }
small { font-size: 13px; }

ul, ol { margin: 0 0 20px 22px; }
ul { list-style: square; }
ol { list-style: decimal; }
li { margin-bottom: 8px; color: var(--muted); }
li::marker { color: var(--faint); }

a { color: var(--fg); text-decoration: underline; text-underline-offset: 2px; }
a:hover { text-decoration-thickness: 2px; }

hr { border: 0; border-top: var(--hairline); margin: 32px 0; }

code, kbd, pre, samp { font-family: var(--font-mono); font-size: 0.92em; }
code { border: var(--hairline); padding: 1px 5px; }
pre { border: var(--hairline); padding: 14px; overflow-x: auto; }
pre code { border: 0; padding: 0; }

blockquote {
    border-left: var(--hairline);
    padding-left: 18px;
    margin: 24px 0;
    color: var(--muted);
}

/* ---------- Buttons ----------
   Two shapes only. Primary is the inverse surface, secondary is an outline.
   Both are square and flat; hover swaps fill instead of moving the element. */
.btn, .cta-button, .cta-btn, .submit-btn, .local-submit,
.btn-primary, .btn-secondary, .navbar-cta, .pwa-banner-install {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 14px 28px;
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    background: var(--fg);
    color: var(--bg);
    font-size: 16px;
    font-weight: 600;
    line-height: 1.2;
    text-decoration: none;
    cursor: pointer;
    transition: background 0.15s, color 0.15s;
}
.btn:hover, .cta-button:hover, .cta-btn:hover, .submit-btn:hover,
.local-submit:hover, .btn-primary:hover, .navbar-cta:hover,
.pwa-banner-install:hover {
    background: var(--bg);
    color: var(--fg);
    text-decoration: none;
}
.btn-secondary, .btn-outline {
    background: transparent;
    color: var(--fg);
    border-color: var(--line-strong);
}
.btn-secondary:hover, .btn-outline:hover { background: var(--fg); color: var(--bg); }
.btn:disabled, button:disabled, .submit-btn:disabled, .local-submit:disabled {
    opacity: 0.4;
    cursor: not-allowed;
}
.btn:disabled:hover, button:disabled:hover { background: var(--fg); color: var(--bg); }

/* ---------- Navbar ---------- */
.navbar {
    position: sticky;
    top: 0;
    z-index: 1000;
    background: var(--bg);
    border-bottom: var(--hairline);
    padding: 0 20px;
}
.navbar-inner {
    max-width: var(--wrap);
    margin: 0 auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 64px;
    gap: 16px;
}
.navbar-brand {
    display: flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
    color: var(--fg);
}
/* Brand mark. Inline SVG rather than the raster /icons/Icon-192.png so it
   inherits currentColor and flips with the theme; the PNG survives as the
   PWA/app icon and the favicon fallback. */
.brand-mark {
    width: 30px;
    height: 30px;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    flex-shrink: 0;
}
.navbar-brand img { width: 32px; height: 32px; border-radius: var(--radius); }
.navbar-brand span { font-size: 19px; font-weight: 700; letter-spacing: -0.02em; color: var(--fg); }
.navbar-links { display: flex; align-items: center; gap: 4px; }
.navbar-links a {
    color: var(--muted);
    text-decoration: none;
    padding: 8px 12px;
    font-size: 15px;
    border: 1px solid transparent;
}
.navbar-links a:hover { color: var(--fg); border-color: var(--line); }
.navbar-cta { padding: 9px 18px; font-size: 15px; }
.navbar-cta:hover { background: var(--bg); color: var(--fg); }
.mobile-menu-btn {
    display: none;
    background: transparent;
    border: 1px solid var(--line-strong);
    border-radius: var(--radius);
    color: var(--fg);
    font-size: 20px;
    line-height: 1;
    cursor: pointer;
    padding: 8px 10px;
}
.mobile-menu-btn:hover { background: var(--fg); color: var(--bg); }

/* Theme switch that sits in the navbar / header of every page. */
.theme-toggle {
    background: transparent;
    border: 1px solid var(--line-strong);
    border-radius: var(--radius);
    color: var(--fg);
    cursor: pointer;
    font-size: 18px;
    line-height: 1;
    padding: 7px 9px;
    display: inline-flex;
    align-items: center;
}
.theme-toggle:hover { background: var(--fg); color: var(--bg); }

/* ---------- Page hero ----------
   Was a colour gradient band. Now it is the page itself: big type, one
   hairline underneath, nothing else. */
.page-hero {
    background: var(--bg);
    color: var(--fg);
    border-bottom: var(--hairline);
    padding: 64px 20px 56px;
    text-align: center;
}
.page-hero h1 { margin-bottom: 18px; }
.page-hero p {
    color: var(--muted);
    font-size: 18px;
    max-width: 640px;
    margin: 0 auto 26px;
}
.page-hero p:last-child { margin-bottom: 0; }

/* ---------- Layout ---------- */
main { max-width: var(--measure); margin: 0 auto; padding: 52px 20px 72px; }
.content-card { background: var(--bg); border: 0; padding: 0; margin-bottom: 44px; }
.content-section { padding: 64px 20px; max-width: var(--measure); margin: 0 auto; }
.section-title { font-size: clamp(25px, 3.6vw, 32px); text-align: center; margin-bottom: 14px; }
.section-subtitle {
    font-size: 17px;
    text-align: center;
    color: var(--muted);
    margin: 0 auto 44px;
    max-width: 620px;
}

/* ---------- Callout boxes ----------
   All the old accent-striped, tinted, rounded variants collapse into one
   flat bordered block. .warning-box keeps a heavier border so a genuine
   warning still reads as one without colour. */
.info-box, .value-box, .feature-box, .highlight-box, .warning-box,
.tip-box, .tip-card, .inclusivity-section {
    background: var(--bg);
    border: var(--hairline);
    border-radius: var(--radius);
    padding: 22px 24px;
    margin: 26px 0;
}
.warning-box { border-color: var(--line-strong); border-width: 2px; }
.info-box h3, .value-box h3, .feature-box h3, .highlight-box h3,
.warning-box h3, .tip-box h3, .tip-card h3, .inclusivity-section h3 {
    margin-top: 0;
    margin-bottom: 10px;
    color: var(--fg);
    display: flex;
    align-items: center;
    gap: 10px;
}
.info-box p:last-child, .value-box p:last-child, .feature-box p:last-child,
.highlight-box p:last-child, .warning-box p:last-child, .tip-box p:last-child,
.tip-card p:last-child, .inclusivity-section p:last-child { margin-bottom: 0; }
.inclusivity-section { text-align: center; }
.inclusivity-section p { max-width: 680px; margin-left: auto; margin-right: auto; }
.tip-number {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    font-weight: 700;
    font-size: 15px;
    margin-right: 10px;
    flex-shrink: 0;
}

/* ---------- Card grids ----------
   privacy / feature / cam / alt / use-case / testimonial / comparison all
   had their own tint + radius. One flat bordered tile serves all of them. */
.privacy-grid, .feature-grid, .cam-grid, .alt-grid, .use-cases,
.testimonial-grid, .comparison-grid, .benefits-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 18px;
    margin: 30px 0;
}
.privacy-card, .feature-card, .cam-card, .alt-card, .use-case,
.testimonial-card, .comparison-card, .benefit-card {
    background: var(--bg);
    border: var(--hairline);
    border-radius: var(--radius);
    padding: 24px;
}
.privacy-card, .feature-card, .cam-card, .use-case, .comparison-card { text-align: center; }
.privacy-card h3, .feature-card h3, .cam-card h3, .alt-card h3,
.use-case h3, .comparison-card h3, .benefit-card h3 {
    font-size: 17px;
    margin: 0 0 8px;
}
.privacy-card p, .feature-card p, .cam-card p, .alt-card p,
.use-case p, .comparison-card p, .benefit-card p {
    font-size: 15px;
    margin-bottom: 0;
}
.benefit-icon {
    width: 44px;
    height: 44px;
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    font-size: 22px;
    margin-bottom: 16px;
}
.testimonials { margin: 40px 0; }
.testimonial-text { font-style: italic; color: var(--muted); margin-bottom: 10px; font-size: 15px; }
.testimonial-author { font-size: 13px; color: var(--faint); font-weight: 600; }
.alt-rating { color: var(--muted); font-size: 14px; margin-bottom: 8px; display: flex; gap: 3px; align-items: center; }

/* ---------- Stats ---------- */
.stats-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
    margin: 30px 0;
}
.stat-item {
    text-align: center;
    padding: 24px 16px;
    border: var(--hairline);
    border-radius: var(--radius);
}
.stat-number { font-size: 32px; font-weight: 800; color: var(--fg); display: block; line-height: 1.1; }
.stat-label { font-size: 13px; color: var(--muted); margin-top: 6px; }

/* ---------- Steps ---------- */
.step-grid, .steps-container { display: grid; gap: 18px; margin: 30px 0; }
.step-card, .step {
    display: flex;
    gap: 20px;
    padding: 24px;
    border: var(--hairline);
    border-radius: var(--radius);
    background: var(--bg);
    align-items: flex-start;
}
.step-number {
    width: 44px;
    height: 44px;
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 19px;
    font-weight: 700;
    flex-shrink: 0;
}
.step-content h3 { font-size: 18px; margin: 0 0 8px; }
.step-content p { margin: 0; }

/* ---------- Tables ---------- */
.comparison-table {
    width: 100%;
    border-collapse: collapse;
    margin: 30px 0;
    font-size: 15px;
    border: var(--hairline);
}
.comparison-table th {
    background: var(--fg);
    color: var(--bg);
    padding: 12px 14px;
    text-align: left;
    font-weight: 600;
}
/* The header row is the inverse surface, so a link inside it must take the
   row's colour — the global `a { color: var(--fg) }` would paint it black on
   black. Same for the ranked site names, which are headings, not body links. */
.comparison-table th a { color: inherit; text-underline-offset: 3px; }
.comparison-table td { padding: 11px 14px; border-top: var(--hairline); color: var(--muted); }
.comparison-table tr:hover td { background: var(--surface); }
/* Verdict glyphs are icons now — no green/red, the shape carries the meaning. */
.check, .cross, .partial { color: var(--fg); font-weight: 700; }
.cross, .partial { color: var(--faint); }

/* ---------- FAQ (accordion) ----------
   Pages toggle either `.open` (most landing pages, index) or `.active`
   (faq.html) on .faq-item. Both are honoured here so no page needs its own
   accordion CSS. */
.faq-section { margin-top: 44px; padding: 0; background: var(--bg); }
.faq-container { max-width: 800px; margin: 0 auto; }
.faq-item {
    border: var(--hairline);
    border-radius: var(--radius);
    margin-bottom: 10px;
    overflow: hidden;
    background: var(--bg);
}
.faq-question {
    padding: 18px 20px;
    font-weight: 600;
    font-size: 16px;
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 14px;
    background: var(--bg);
    color: var(--fg);
    border: 0;
    width: 100%;
    text-align: left;
}
.faq-question:hover { background: var(--surface); }
.faq-answer { padding: 0 20px 18px; color: var(--muted); display: none; }
.faq-item.open .faq-answer,
.faq-item.active .faq-answer { display: block; }
.faq-answer p:last-child { margin-bottom: 0; }
.faq-arrow, .faq-toggle, .q-toggle {
    transition: transform 0.2s;
    color: var(--muted);
    display: inline-flex;
    align-items: center;
    font-size: 16px;
    flex-shrink: 0;
}
.faq-item.open .faq-arrow, .faq-item.active .faq-arrow,
.faq-item.open .q-toggle, .faq-item.active .q-toggle,
.faq-item.open .faq-toggle, .faq-item.active .faq-toggle { transform: rotate(180deg); }
.faq-question .q-icon {
    width: 30px;
    height: 30px;
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 14px;
    margin-right: 12px;
    flex-shrink: 0;
}
.faq-question .q-text { flex: 1; }
.faq-answer-content { padding: 0 20px 18px 62px; color: var(--muted); font-size: 15px; }

/* ---------- Site cards (best-omegle-alternatives) ---------- */
.site-card {
    border: var(--hairline);
    border-radius: var(--radius);
    padding: 26px;
    margin: 22px 0;
}
.site-card.featured { border-color: var(--fg); border-width: 2px; }
/* Scoped to .site-card on purpose: every page also wraps its <nav> in
   <header class="site-header">, and an unscoped flex rule here shrink-wraps
   the navbar so its bottom hairline stops short of the viewport edge. */
.site-card .site-header { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; }
.site-rank { font-size: 28px; font-weight: 800; color: var(--fg); }
.site-name { font-size: 21px; font-weight: 700; color: var(--fg); flex: 1; }
.site-name a { color: inherit; text-underline-offset: 3px; display: inline-flex; align-items: baseline; gap: 6px; }
.site-badge {
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    padding: 4px 12px;
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.site-desc { color: var(--muted); margin-bottom: 18px; }
.pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 14px 0; }
.pros, .cons { padding: 16px; border: var(--hairline); border-radius: var(--radius); }
.pros h4, .cons h4 { color: var(--fg); margin: 0 0 8px; display: flex; align-items: center; gap: 8px; }
.pros li, .cons li { font-size: 14px; margin-bottom: 5px; }
.site-features { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.feature-tag {
    border: var(--hairline);
    border-radius: var(--radius);
    color: var(--muted);
    padding: 3px 10px;
    font-size: 13px;
}

/* ---------- Language grid ---------- */
.lang-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 12px;
    margin: 30px 0;
}
.lang-item {
    text-align: center;
    padding: 18px 12px;
    border: var(--hairline);
    border-radius: var(--radius);
}
.lang-name { font-size: 14px; color: var(--muted); font-weight: 500; }

/* ---------- CTA banner ---------- */
.cta-banner {
    background: var(--bg);
    border-top: var(--hairline);
    border-bottom: var(--hairline);
    padding: 56px 20px;
    text-align: center;
}
.cta-banner h2 { margin-top: 0; margin-bottom: 12px; }
.cta-banner p { font-size: 17px; margin-bottom: 26px; }

/* ---------- Platform carousel ----------
   "Popular random chat sites & apps" — a horizontally scrolling strip of
   competitor cards that all link back into our own comparison pages.
   Markup: build/platforms.html · arrows: js/platforms.js. The scroller works
   with no JS at all; the arrows are enhancement. */
.platforms {
    border-top: var(--hairline);
    border-bottom: var(--hairline);
    padding: 44px 0;
    background: var(--bg);
}
.platforms-inner { max-width: var(--wrap); margin: 0 auto; padding: 0 20px; }
.platforms-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    margin-bottom: 18px;
}
.platforms-head h2 { font-size: clamp(20px, 2.6vw, 25px); margin: 0; }
.platforms-nav { display: flex; gap: 8px; flex-shrink: 0; }
.platforms-arrow {
    width: 40px;
    height: 40px;
    border: 1px solid var(--line-strong);
    border-radius: var(--radius);
    background: var(--bg);
    color: var(--fg);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    transition: background 0.15s, color 0.15s;
}
.platforms-arrow:hover:not(:disabled) { background: var(--fg); color: var(--bg); }
.platforms-arrow:disabled { opacity: 0.3; cursor: default; }

.platforms-track {
    display: flex;
    gap: 14px;
    margin: 0;
    padding: 2px;              /* room for the focus ring */
    list-style: none;
    overflow-x: auto;
    /* NO scroll-snap here. Bisected 2026-07-29: putting scroll-snap-align on
       the cards makes Chrome perform a snap during load, after which it
       reports NO Largest Contentful Paint candidate at all — Lighthouse went
       from perf 97 to a category error (score 0) on all 28 pages carrying the
       carousel. Neither snap-type value avoids it; the alignment on the
       children is what does it. The arrow buttons already step one screenful
       at a time, so snapping was a nicety, not a requirement. */
    scroll-behavior: smooth;
    scrollbar-width: none;     /* the arrows are the affordance */
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
}
.platforms-track::-webkit-scrollbar { display: none; }
@media (prefers-reduced-motion: reduce) { .platforms-track { scroll-behavior: auto; } }

.platform-card {
    flex: 0 0 250px;
    margin: 0;
    border: var(--hairline);
    border-radius: var(--radius);
    background: var(--bg);
}
/* The card is not one big anchor: it carries two separate links (the
   platform's own site and our comparison page), and anchors cannot nest. */
.platform-card {
    display: flex;
    flex-direction: column;
    gap: 7px;
    padding: 18px;
}
.platform-card:hover { border-color: var(--fg); }
.platform-card-self { border-color: var(--fg); border-width: 2px; }
.platform-name { font-size: 17px; font-weight: 700; color: var(--fg); }
.platform-desc { font-size: 14px; color: var(--muted); line-height: 1.5; flex: 1; }
.platform-tag {
    align-self: flex-start;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--muted);
    border: var(--hairline);
    padding: 2px 8px;
}
.platform-links { display: flex; gap: 8px; margin-top: 4px; flex-wrap: wrap; }
.platform-link, .platform-compare {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 11px;
    border: var(--hairline);
    border-radius: var(--radius);
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: none;
    color: var(--fg);
    white-space: nowrap;
}
.platform-link:hover, .platform-compare:hover {
    background: var(--fg);
    color: var(--bg);
    text-decoration: none;
}
.platform-compare { border-color: var(--fg); }

@media (max-width: 600px) {
    .platforms { padding: 32px 0; }
    .platforms-inner { padding: 0 16px; }
    .platform-card { flex-basis: 78%; }
}

/* ---------- Footer ---------- */
.footer {
    background: var(--bg);
    color: var(--fg);
    border-top: var(--hairline);
    padding: 52px 20px 26px;
}
.footer-content { max-width: var(--wrap); margin: 0 auto; }
.footer-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 32px;
    margin-bottom: 36px;
}
.footer-section h3, .footer-section h4 {
    font-size: 13px;
    margin: 0 0 14px;
    color: var(--fg);
    text-transform: uppercase;
    letter-spacing: 0.06em;
}
.footer-section a {
    display: block;
    color: var(--muted);
    text-decoration: none;
    padding: 6px 0;
    font-size: 14px;
}
.footer-section a:hover { color: var(--fg); text-decoration: underline; }
.footer-social { display: flex; gap: 10px; margin-top: 12px; }
.footer-social a {
    width: 36px;
    height: 36px;
    border: var(--hairline);
    border-radius: var(--radius);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    padding: 0;
}
.footer-social a:hover { background: var(--fg); color: var(--bg); }
.footer-bottom {
    border-top: var(--hairline);
    padding-top: 24px;
    text-align: center;
    color: var(--muted);
    font-size: 14px;
}
.footer-bottom a { color: var(--muted); }
.footer-bottom a:hover { color: var(--fg); }

/* ---------- Floating "start chatting" button ----------
   The pulsing ring element was removed from the markup with the redesign;
   .fab-chat-ring is kept hidden only so a stale cached page cannot draw it. */
.fab-chat {
    position: fixed;
    bottom: 20px;
    right: 20px;
    z-index: 9000;
    display: flex;
    align-items: center;
    gap: 9px;
    background: var(--fg);
    color: var(--bg);
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    padding: 13px 20px;
    font-size: 15px;
    font-weight: 700;
    text-decoration: none;
}
.fab-chat:hover { background: var(--bg); color: var(--fg); text-decoration: none; }
.fab-chat-icon { font-size: 18px; }
.fab-chat-label { display: inline; }
.fab-chat-ring { display: none; }

/* ---------- Profile panel (js/profile.js — modal, /profile page, widget) ---------- */
.gf-fab {
    position: fixed;
    right: 20px;
    bottom: 76px;
    z-index: 9000;
    width: 46px;
    height: 46px;
    border-radius: var(--radius);
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--bg);
    color: var(--fg);
    border: 1px solid var(--fg);
    cursor: pointer;
    font-size: 20px;
}
.gf-fab:hover { background: var(--fg); color: var(--bg); }
.gf-modal[hidden] { display: none; }
.gf-modal {
    position: fixed;
    inset: 0;
    background: var(--bg);
    z-index: 10000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
}
.gf-card {
    background: var(--bg);
    color: var(--fg);
    border: 1px solid var(--line-strong);
    border-radius: var(--radius);
    padding: 24px;
    width: 100%;
    max-width: 380px;
    font-family: var(--font);
}
.gf-page { width: 100%; max-width: 420px; }
.gf-back { display: inline-block; margin-bottom: 14px; color: var(--muted); font-size: 14px; }
.gf-title { font-size: 18px; font-weight: 700; margin-bottom: 10px; }
.gf-body { font-size: 14px; line-height: 1.55; }
.gf-body p { margin: 0 0 6px; }
.gf-link { color: var(--fg); }
.gf-group { margin: 16px 0; }
.gf-group-label {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--faint);
    margin-bottom: 7px;
    display: flex;
    align-items: center;
    gap: 6px;
}
.gf-opts { display: flex; gap: 8px; flex-wrap: wrap; }
.gf-opt {
    flex: 1 1 auto;
    min-width: 72px;
    text-align: center;
    background: var(--bg);
    color: var(--fg);
    border: var(--hairline);
    border-radius: var(--radius);
    padding: 10px 8px;
    cursor: pointer;
    font-size: 13px;
    user-select: none;
}
.gf-opt:hover { border-color: var(--line-strong); }
.gf-opt-active { background: var(--fg); color: var(--bg); border-color: var(--fg); }
.gf-progress-track {
    background: var(--bg);
    border: var(--hairline);
    height: 8px;
    overflow: hidden;
    margin: 10px 0 6px;
}
.gf-progress-fill { background: var(--fg); height: 100%; width: 0; transition: width 0.3s; }
.gf-muted { color: var(--muted); font-size: 12.5px; }
.gf-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 18px; }
.gf-btn {
    border: 1px solid var(--fg);
    border-radius: var(--radius);
    padding: 9px 16px;
    font-size: 13px;
    cursor: pointer;
    font-family: inherit;
    background: var(--bg);
    color: var(--fg);
}
.gf-btn-primary { background: var(--fg); color: var(--bg); }
.gf-btn-primary:hover { background: var(--bg); color: var(--fg); }
.gf-btn-secondary:hover { background: var(--fg); color: var(--bg); }
.gf-btn-danger { border-color: var(--line-strong); }
.gf-btn-danger:hover { background: var(--fg); color: var(--bg); }
.gf-toast { margin-top: 10px; font-size: 12.5px; min-height: 16px; color: var(--muted); }
.gf-toast.gf-ok, .gf-toast.gf-err { color: var(--fg); }
.gf-toast.gf-err { font-weight: 600; }

/* ---------- Responsive ---------- */
@media (max-width: 900px) {
    .pros-cons { grid-template-columns: 1fr; }
    .stats-grid { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
    .navbar-links { display: none; }
    .mobile-menu-btn { display: block; }
    .page-hero { padding: 44px 18px 40px; }
    main { padding: 36px 18px 56px; }
    .content-section { padding: 44px 18px; }
    .step-card, .step { flex-direction: column; }
    .footer-grid { grid-template-columns: 1fr 1fr; }
    .comparison-table { font-size: 13px; }
    .comparison-table th, .comparison-table td { padding: 9px 10px; }
    .faq-answer-content { padding-left: 20px; }
}
@media (max-width: 480px) {
    .footer-grid { grid-template-columns: 1fr; }
    .fab-chat { bottom: 14px; right: 14px; padding: 12px; }
    .fab-chat-label { display: none; }
    .fab-chat-icon { font-size: 22px; }
    .gf-fab { bottom: 70px; right: 14px; }
    .lang-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ---------- Print ---------- */
@media print {
    .navbar, .footer, .fab-chat, .gf-fab, .theme-toggle, .cta-banner { display: none !important; }
    body { background: #fff; color: #000; }
}
