/* Syn City Lore Website Styles */

/*
 * Import modern, readable fonts from Google Fonts.
 *
 * We stick with Orbitron for headings to retain a futuristic vibe, but switch
 * the primary body text to Poppins.  Poppins is a versatile, geometric
 * sans‑serif that’s easy on the eyes and offers good readability at larger
 * sizes.  The combination gives the site a playful yet polished look.
 */
@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Poppins:wght@400;600;700&display=swap');

/* CSS Variables for easy theming */
:root {
    /*
     * Core colour palette for the redesigned site.  The new palette draws
     * directly from the supplied Syn City backdrop and logo: a vibrant
     * gradient of pinks and blues.  The primary colour is a neon magenta
     * reminiscent of sunset neon, while the secondary colour is a bright
     * cyan pulled from the skyline.  The background is set by the
     * backdrop image (see body styles) and overlaid with a dark tint for
     * legibility.  Text remains a near‑white for maximum contrast.
     */
    --primary-color: #ff4da6;
    --secondary-color: #35c6ff;
    --bg-color: #050814;
    --text-color: #f7f7f7;
    --card-bg: rgba(255, 255, 255, 0.05);
    --card-hover: rgba(255, 255, 255, 0.08);

    /* Additional accent colours for different districts/pages.  These
     * accents follow the same soft theme as the primary palette.
     */
    --accent-green: #3fc888;
    --accent-orange: #ff834d;
    --accent-purple: #b16be2;
    --accent-red: #d75a60;
    --accent-yellow: #f6d365;
    --accent-teal: #30c9c9;
    --accent-gray: #8aa2b1;
    --accent-silver: #c9d1d9;
    --accent-blue: #5fa8d3;
    --accent-white: #f1f1f1;
    --accent-gold: #e6c565;
}

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

html, body {
    height: 100%;
}

body {
    /* Use Poppins for body text; it’s friendly and highly readable. */
    font-family: 'Poppins', Arial, sans-serif;

    /*
     * Soft dotted grid over the base.  Reduce the opacity of the grid dots
     * so they don’t compete with the new photographic backdrop.  Increased
     * spacing keeps the pattern subtle.
     */
    background-color: var(--bg-color);
    background-image:
        radial-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),
        radial-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px);
    background-size: 70px 70px;
    background-position: 0 0, 35px 35px;

    color: var(--text-color);
    line-height: 1.8;
    font-size: 1.05rem;

    /* Sticky footer layout: keep footer at bottom on short pages */
    min-height: 100vh;
    display: flex;
    flex-direction: column;

    overflow-x: hidden;
}

/*
 * Use pseudo‑elements on the body to layer the supplied Syn City
 * backdrop and a dark tint across the entire site.  The ::before
 * element holds the photographic background, while ::after applies
 * a dark overlay for legibility.  Both are fixed so they remain
 * anchored when scrolling.  Lower z‑indices ensure that content
 * appears above these layers.
 */
body::before {
    content: '';
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url('../assets/background.webp') center/cover no-repeat;
    z-index: -3;
    opacity: 0.7;
}
body::after {
    content: '';
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(5, 8, 15, 0.7);
    z-index: -2;
}

/* Body colour themes for individual pages.  By assigning a class to the <body> element (e.g. class="history-page"), we can adjust the primary and secondary accent colours without duplicating the whole stylesheet. */
body.history-page {
    --primary-color: var(--accent-orange);
    --secondary-color: var(--accent-yellow);
}

body.geography-page {
    --primary-color: var(--accent-teal);
    --secondary-color: var(--accent-green);
}

body.factions-page {
    --primary-color: var(--accent-purple);
    --secondary-color: var(--accent-red);
}

body.corporations-page {
    --primary-color: var(--accent-red);
    --secondary-color: var(--accent-orange);
}

body.gangs-page {
    --primary-color: var(--accent-orange);
    --secondary-color: var(--accent-yellow);
}

body.life-page {
    --primary-color: var(--accent-green);
    --secondary-color: var(--accent-teal);
}

body.races-page {
    --primary-color: var(--accent-purple);
    --secondary-color: var(--accent-blue, #8e44ad);
}

body.traits-cybernetics-page {
    --primary-color: #3dffb0;
    --secondary-color: #ff2d9b;
    overflow: hidden;
}

/* District-specific page themes */
body.green-district-page {
    --primary-color: var(--accent-green);
    --secondary-color: var(--accent-yellow);
}

body.blue-district-page {
    --primary-color: var(--accent-blue);
    --secondary-color: var(--accent-teal);
}

body.gray-district-page {
    --primary-color: var(--accent-gray);
    --secondary-color: var(--accent-silver);
}

body.red-district-page {
    --primary-color: var(--accent-red);
    --secondary-color: var(--accent-orange);
}

body.white-district-page {
    --primary-color: var(--accent-white);
    --secondary-color: var(--accent-teal);
}

body.gold-district-page {
    --primary-color: var(--accent-gold);
    --secondary-color: var(--accent-orange);
}

/* Timeline wafer styling for history pages.  Each section is separated by a coloured bar on the left. */
.timeline-section {
    margin-bottom: 40px;
    padding: 28px 28px 28px 40px;
    /* Increase panel opacity slightly for improved legibility */
    background: rgba(255, 255, 255, 0.12);
    backdrop-filter: blur(6px);
    /* Replace the solid left border with a vertical gradient bar.  This
     * subtle shift ties the timeline sections into the Spider‑Verse
     * palette while maintaining clear separation from the page’s body.
     */
    border-left: none;
    border-radius: 8px;
    position: relative;
}

/* Vertical gradient accent for timeline sections */
.timeline-section::before {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    width: 6px;
    background: linear-gradient(to bottom, var(--primary-color), var(--secondary-color));
    border-radius: 4px 0 0 4px;
}

.timeline-section h3 {
    margin-bottom: 12px;
    color: var(--primary-color);
    font-size: 1.6rem;
    font-weight: 700;
}

.timeline-section ul {
    margin-left: 20px;
    list-style: square;
}

.timeline-section li {
    margin-bottom: 10px;
    font-size: 1.05rem;
    color: var(--text-color);
}

/* District hero/banner styling */
.district-hero {
    width: 100%;
    height: 250px;
    background-size: cover;
    background-position: center;
    border-radius: 8px;
    margin-bottom: 20px;
}

/* Large callout panels used on geography index and other pages */
.callout {
    position: relative;
    margin-bottom: 40px;
    border-radius: 10px;
    overflow: hidden;
    /* Slightly brighter panel for better contrast against the new backdrop */
    /* More opaque glass for callouts */
    background: rgba(255, 255, 255, 0.14);
    backdrop-filter: blur(8px);
    border: 1px solid rgba(255, 255, 255, 0.15);
    display: block;
    text-decoration: none;
    color: inherit;
    /* Add a subtle glitch‑shaped bottom edge on callouts */
    clip-path: polygon(0 0, 100% 0, 100% calc(100% - 20px), 95% 100%, 5% 100%, 0 calc(100% - 20px));
    position: relative;
}

/* Overlay a horizontal graffiti smear at the top of each callout.  It
 * introduces a splash of Spider‑Verse style without disrupting the
 * underlying glass panel.  The smear fades at the edges and is blurred
 * to avoid pulling focus from the copy.  Positioned above the image
 * but beneath the text container.
 */
.callout::before {
    content: '';
    position: absolute;
    /* Position the smear above the top edge of the callout and offset
     * slightly to the right so it peeks into the card.  This gives
     * the appearance that someone has sprayed paint across the header.
     */
    top: -20px;
    left: 20px;
    width: 220px;
    height: 60px;
    background-image: url('../assets/graffiti_smear_h.png');
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;
    opacity: 0.7;
    filter: blur(0.5px);
    transform: rotate(-3deg);
    pointer-events: none;
    z-index: 3;
}

/* Raise the image and content above the graffiti smear overlay */
.callout img,
.callout .callout-content {
    position: relative;
    /* Increase z‑index values so that the horizontal smear sits above the
     * underlying image while remaining beneath the text container.  The
     * image is lowest, the smear sits above it and the text sits on top.
     */
    /* Specific z‑index values are set below for each element. */
}

.callout img {
    width: 100%;
    height: 240px;
    object-fit: cover;
    /* Increase brightness so artwork details remain visible behind overlay text */
    filter: brightness(0.9);
    position: relative;
    z-index: 1;
}

/*
 * Callout text panel now sits at the bottom of the card and spans the full width.
 * This prevents overlapping issues on taller illustrations and keeps the copy
 * clearly legible.  A darker backdrop ensures sufficient contrast.
 */
.callout-content {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    max-width: 100%;
    transform: none;
    color: #fff;
    /* Darker backdrop for callout text */
    background: rgba(5, 8, 15, 0.85);
    padding: 20px 24px;
    border-radius: 0 0 10px 10px;
    z-index: 3;
}

.callout-content h3 {
    font-size: 2rem;
    margin-bottom: 10px;
    color: var(--primary-color);
}

.callout-content p {
    font-size: 1.2rem;
    line-height: 1.8;
    margin-bottom: 12px;
    color: rgba(255, 255, 255, 0.9);
}

.callout-content a {
    display: inline-block;
    margin-top: 10px;
    color: var(--secondary-color);
    font-weight: bold;
    text-decoration: none;
}

.callout-content a:hover {
    text-decoration: underline;
}

/* Sidebar navigation for pages that require sub‑navigation (e.g. History eras, City Life categories). */
.page-container {
    display: flex;
    flex-wrap: wrap;
}

/* Sidebar area */
.sidebar {
    /* Increase the sidebar width slightly so long era names fit on one or two lines
       without awkward truncation.  This also provides more breathing room for
       individual links. */
    width: 280px;
    padding: 24px;
    /* Use a semi‑opaque backdrop and blurred graffiti overlay.  The underlying
     * glass treatment remains intact, but a paint smear sits behind the
     * content to evoke the Spider‑Verse aesthetic.  Positioning is set
     * relative so the pseudo‑element can absolutely cover the sidebar.
     */
    /* Slightly more opaque glass for sidebars */
    background: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(6px);
    border-right: 1px solid rgba(255, 255, 255, 0.2);
    position: sticky;
    top: 70px;
    height: calc(100vh - 70px);
    overflow-y: auto;
    position: relative;
}

.sidebar h3 {
    font-size: 1.4rem;
    margin-bottom: 12px;
    color: var(--primary-color);
}

/* Inject a neon graffiti smear behind the sidebar content.  The smear is
 * contained within the sidebar boundaries and blurred slightly for
 * subtlety.  This element sits beneath the actual links, thanks to
 * z‑index layering.  Adjust the opacity to taste without overpowering
 * the legibility of the sidebar.
 */
.sidebar::before {
    /* Remove the graffiti smear overlay from sidebars to align with
     * the cleaner glass aesthetic.  This pseudo‑element is now
     * suppressed entirely. */
    display: none;
}

/* Ensure sidebar children sit above the graffiti overlay */
.sidebar > * {
    position: relative;
    z-index: 1;
}

.sidebar ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

.sidebar ul li {
    margin-bottom: 8px;
}

.sidebar ul li a {
    display: block;
    padding: 12px;
    color: var(--text-color);
    font-size: 1.05rem;
    text-decoration: none;
    border-left: 3px solid transparent;
    transition: background 0.3s, border-color 0.3s;
    /* Allow links to wrap onto multiple lines instead of being truncated */
    white-space: normal;
    line-height: 1.4;
}

.sidebar ul li a:hover,
.sidebar ul li a.active {
    background: rgba(255, 255, 255, 0.16);
    border-color: var(--primary-color);
    color: var(--primary-color);
}

/* Main content area when sidebar is present */
.main-content {
    flex: 1;
    padding: 20px;
    min-width: 0;
}

@media (max-width: 768px) {
    .sidebar {
        position: static;
        width: 100%;
        height: auto;
        border-right: none;
        border-bottom: 1px solid rgba(255, 255, 255, 0.1);
    }
    .main-content {
        margin-top: 10px;
    }
}

/* Header and navigation */
header {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    background: rgba(5, 8, 15, 0.85);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
    z-index: 1000;
}

nav {
    max-width: 1200px;
    margin: auto;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 20px;
}

/*
 * Replace the text‑based logo with the supplied Syn City skull graphic.
 * The anchor acts as a container for the logo; the actual text is
 * hidden via text‑indent.  A background image fills the container
 * and tinted duplicates appear on hover to create a glitch effect.
 */
.logo {
    /* Slightly larger logo for better visibility */
    width: 180px;
    height: 70px;
    display: block;
    position: relative;
    background: url('../assets/logo.webp') no-repeat center / contain;
    /* Hide any fallback text */
    color: transparent;
    text-indent: -9999px;
}

/* Two pseudo‑elements stack copies of the logo.  When hovered they
 * offset slightly with coloured drop‑shadows to evoke a glitch.
 */
.logo::before,
.logo::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: inherit;
    opacity: 0;
    transition: transform 0.3s, opacity 0.3s, filter 0.3s;
    mix-blend-mode: screen;
}

.logo::before {
    filter: drop-shadow(0 0 8px var(--primary-color));
}
.logo::after {
    filter: drop-shadow(0 0 8px var(--secondary-color));
}

.logo:hover::before {
    opacity: 0.9;
    /* Begin a dynamic glitch animation on hover for the primary shadow */
    animation: glitch-offset 0.8s infinite;
}

.logo:hover::after {
    opacity: 0.9;
    /* Offset animation for the secondary colour shadow */
    animation: glitch-offset-alt 0.8s infinite;
}

.nav-links {
    display: flex;
    gap: clamp(10px, 1.25vw, 20px);
    align-items: center;
}

.nav-links a {
    color: var(--text-color);
    text-decoration: none;
    font-weight: bold;
    font-size: clamp(0.9rem, 0.95vw, 1rem);
    padding: 8px;
    white-space: nowrap;
    transition: color 0.3s;
}

.nav-links a:hover {
    color: var(--primary-color);
}

.nav-links a.active {
    color: var(--primary-color);
}

.menu-toggle {
    display: none;
    font-size: 1.5rem;
    color: var(--text-color);
    cursor: pointer;
    background: none;
    border: none;
}

@media (max-width: 768px) {
    .nav-links {
        position: absolute;
        top: 60px;
        right: 0;
        flex-direction: column;
        background: rgba(5, 8, 15, 0.95);
        width: 220px;
        display: none;
        padding: 10px;
        border-left: 1px solid rgba(255, 255, 255, 0.1);
        border-bottom: 1px solid rgba(255, 255, 255, 0.1);
    }
    .nav-links.open {
        display: flex;
    }
    .menu-toggle {
        display: block;
    }
}

/* Hero section */
.hero {
    /* Blank-slate hero: half-height, with the supplied background art */
    height: 37.5vh;
    /* Use a less-zoomed framing (fit-to-width) to avoid the "too zoomed" look on wide screens.
       A higher-resolution asset is used to reduce pixelation on large displays. */
    background: url('../assets/hero_background_hd.webp') center/100% auto no-repeat;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
}

/* If the viewport is tall/narrow, fall back to cover so there are no empty bands. */
@media (max-aspect-ratio: 4/3) {
    .hero {
        background-size: cover;
    }
}

.hero::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    /* No overlay by default (hero is currently a blank slate). */
    background: rgba(0, 0, 0, 0);
}

.traits-cybernetics-shell {
    flex: 1 1 auto;
    min-height: 100vh;
    padding-top: 90px;
}

.traits-cybernetics-frame {
    display: block;
    width: 100%;
    height: calc(100vh - 90px);
    border: 0;
    background: #04070e;
}

@media (max-width: 768px) {
    .traits-cybernetics-shell {
        padding-top: 90px;
    }

    .traits-cybernetics-frame {
        height: calc(100vh - 90px);
    }
}

.hero-content {
    position: relative;
    text-align: center;
    padding: 20px;
    /* Add a translucent backdrop behind hero text for better contrast.  Lower opacity improves integration with the background */
    background: rgba(5, 8, 15, 0.45);
    border-radius: 10px;
    display: inline-block;
}

.hero-content h1 {
    /* Deprecated: the generic hero heading has been replaced by a logo and
     * tagline.  Leave this class defined for backwards compatibility but
     * remove styling so it does not interfere with the new design. */
    font-size: 0;
    height: 0;
    overflow: hidden;
    margin: 0;
}

.hero-content p {
    /* This rule applies to the deprecated hero paragraph.  See
     * .hero-subtagline below for the new design. */
    max-width: 0;
    margin: 0;
    font-size: 0;
}

/* New hero elements.  The logo is displayed prominently above the
 * tagline.  A drop‑shadow effect helps it stand out against the
 * vibrant backdrop. */
.hero-logo {
    width: 300px;
    max-width: 80vw;
    margin: 0 auto 16px;
    display: block;
    filter: drop-shadow(0 0 12px var(--primary-color)) drop-shadow(0 0 12px var(--secondary-color));
}

/* The primary tagline uses a gradient fill to evoke the Syn City
 * skull logo art.  The Orbitron font is used for a futuristic look,
 * and text is centred within the hero container. */
.hero-tagline {
    font-family: 'Orbitron', sans-serif;
    font-size: 3rem;
    font-weight: 700;
    line-height: 1.2;
    margin-bottom: 12px;
    background: linear-gradient(90deg, var(--primary-color), var(--secondary-color));
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
    text-shadow: 0 0 6px rgba(0, 0, 0, 0.4);
    display: block;
    max-width: 800px;
    margin-left: auto;
    margin-right: auto;
    white-space: normal;
}

/* Secondary tagline explaining the site’s mission.  A slightly larger
 * font size and increased opacity ensure readability against the
 * blurred overlay. */
.hero-subtagline {
    max-width: 900px;
    margin: 0 auto;
    color: rgba(255, 255, 255, 0.92);
    font-size: 1.2rem;
    line-height: 1.7;
}

/* General section styling */
.section {
    padding: 80px 20px;
    max-width: 1200px;
    margin: auto;
}

/*
 * Typography for headings.  Use Orbitron for all major headings to
 * maintain a futuristic aesthetic.  The heavier weight and tighter
 * line height make headings stand out and improve legibility.
 */
h1,
h2,
h3,
h4 {
    font-family: 'Orbitron', sans-serif;
    font-weight: 700;
    line-height: 1.2;
    color: var(--text-color);
    text-transform: uppercase;
}

.section h2 {
    font-size: 2rem;
    margin-bottom: 20px;
    border-left: 4px solid var(--primary-color);
    padding-left: 12px;
    line-height: 1.2;
    position: relative;
}

/* Section heading accent (graffiti smear) removed.
 * The site previously used a low-opacity graffiti smear image behind H2 section
 * headers. This has been disabled to keep headings clean and avoid any color
 * splash behind header text.
 */
.section h2::before {
    content: none;
    display: none;
}

/* Cards grid */
.cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 20px;
}

.card {
    background: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(6px);
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 10px;
    padding: 24px;
    transition: transform 0.3s, box-shadow 0.3s, background 0.3s;
}

.card:hover {
    transform: translateY(-6px);
    background: rgba(255, 255, 255, 0.16);
    box-shadow: 0 10px 20px rgba(0, 0, 0, 0.4);
}

.card img {
    width: 100%;
    height: 150px;
    object-fit: cover;
    border-radius: 4px;
}

.card h3 {
    margin-top: 12px;
    font-size: 1.5rem;
    color: var(--primary-color);
}

.card p {
    margin-top: 10px;
    font-size: 1.05rem;
    color: var(--text-color);
}

/* Icon styling inside cards */
.card i {
    font-size: 2rem;
    color: var(--secondary-color);
    margin-bottom: 10px;
}

.card a {
    display: inline-block;
    margin-top: 12px;
    color: var(--secondary-color);
    text-decoration: none;
    font-weight: 600;
    font-size: 1rem;
}

/* Generic wafer styling for clickable panels (used on the homepage and other index pages). */
.wafer {
    position: relative;
    display: block;
    padding: 36px;
    border-radius: 10px;
    background: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(10px);
    color: var(--text-color);
    text-decoration: none;
    border: 1px solid rgba(255, 255, 255, 0.15);
    transition: background 0.3s, transform 0.3s;
    clip-path: polygon(0 0, 100% 0, 100% calc(100% - 20px), 95% 100%, 5% 100%, 0 calc(100% - 20px));
}
.wafer:hover {
    background: rgba(255, 255, 255, 0.18);
    transform: translateY(-4px);
}
.wafer img {
    width: 100%;
    height: 220px;
    object-fit: cover;
    border-radius: 6px;
    margin-bottom: 18px;
    filter: brightness(0.85);
}
.wafer h3 {
    font-size: 1.8rem;
    font-weight: 700;
    margin-bottom: 12px;
    color: var(--primary-color);
}
.wafer p {
    font-size: 1.1rem;
    margin-bottom: 10px;
    color: var(--text-color);
    line-height: 1.6;
}

/* Icons inside wafers (used on faction and overview pages) */
.wafer i {
    font-size: 2.2rem;
    margin-bottom: 14px;
    color: var(--primary-color);
}

/* Override wafer text colours on pages where the primary colour is dark.  Factions and gangs use purple/orange schemes that require white text for contrast. */
/*
 * In some colour themes the primary colour may be dark (e.g. purple or red).
 * Ensure wafer text remains legible by forcing it to use the global text
 * colour when the primary colour’s luminance is low.  This rule applies
 * to pages that override the primary colour with a dark accent (such as
 * factions, gangs and corporations).  You can extend this list if other
 * pages adopt dark themes.
 */
.factions-page .wafer,
.factions-page .wafer h3,
.factions-page .wafer p,
.factions-page .wafer i,
.gangs-page .wafer,
.gangs-page .wafer h3,
.gangs-page .wafer p,
.gangs-page .wafer i,
.corporations-page .wafer,
.corporations-page .wafer h3,
.corporations-page .wafer p,
.corporations-page .wafer i {
    color: var(--text-color);
}

/*
 * Particle animation overlay.  A series of small dots drift upward across
 * the page, evoking the pulsing lights and dust motes of a cyberpunk city.
 */
#particles {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    /* Position particles behind page content but above the backdrop */
    z-index: -1;
    overflow: hidden;
}

.particle {
    position: absolute;
    /* Create slender code rain streaks instead of round motes */
    width: 2px;
    /* Height will be set dynamically via inline styles from JavaScript */
    border-radius: 0;
    /* Fade from the secondary accent colour to transparent like digital
       code streams cascading through the city */
    background: linear-gradient(to bottom, var(--secondary-color) 0%, rgba(5, 8, 15, 0) 100%);
    opacity: 0.4;
    animation: float var(--dur) linear infinite;
}

@keyframes float {
    0% {
        transform: translateY(100vh);
        opacity: 0.0;
    }
    100% {
        /* Move upwards beyond the top of the viewport to simulate
         * continuous code rain.  The scaling is removed to keep
         * streaks uniform. */
        transform: translateY(-150vh);
        opacity: 0.5;
    }
}

/* Glitch animations for the logo shadows.  These keyframes shift the
 * duplicate logo images in different directions over time to create
 * a flickering, multi‑coloured glitch reminiscent of Spider‑Verse
 * title cards.  The primary and secondary shadows use opposing
 * sequences to enhance the effect.
 */
@keyframes glitch-offset {
    0% {
        transform: translate(0, 0);
    }
    20% {
        transform: translate(-2px, -2px);
    }
    40% {
        transform: translate(2px, -2px);
    }
    60% {
        transform: translate(-2px, 2px);
    }
    80% {
        transform: translate(2px, 2px);
    }
    100% {
        transform: translate(0, 0);
    }
}

@keyframes glitch-offset-alt {
    0% {
        transform: translate(0, 0);
    }
    20% {
        transform: translate(2px, -2px);
    }
    40% {
        transform: translate(-2px, -2px);
    }
    60% {
        transform: translate(2px, 2px);
    }
    80% {
        transform: translate(-2px, 2px);
    }
    100% {
        transform: translate(0, 0);
    }
}

/* Glossary wrappers inside news items must remain inline; otherwise the
 * crawler layout breaks when proper nouns are highlighted. */
/* Footer */
.footer {
    padding: 40px 20px;
    background: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(6px);
    border-top: 1px solid rgba(255, 255, 255, 0.15);
    color: rgba(255, 255, 255, 0.7);
    font-size: 0.9rem;
    text-align: center;
    margin-top: auto;
}

.footer a {
    color: var(--secondary-color);
    text-decoration: none;
    font-weight: 600;
}

/* Page-specific styles */
.content {
    max-width: 900px;
    margin: auto;
    line-height: 1.7;
}

.content h3 {
    color: var(--primary-color);
    margin-top: 30px;
    margin-bottom: 10px;
    font-size: 1.5rem;
}

.content p,
.content li {
    margin-bottom: 10px;
    font-size: 0.95rem;
}

.content ul {
    margin-left: 20px;
    list-style: square;
}

.quote {
    background: rgba(255, 255, 255, 0.08);
    backdrop-filter: blur(4px);
    border-left: 4px solid var(--secondary-color);
    padding: 20px;
    margin: 24px 0;
    font-style: italic;
    color: rgba(255, 255, 255, 0.85);
}

/*
 * Era grid for the history overview.  The timeline sidebar has been
 * replaced with a 3×3 matrix of glass panels.  Each panel contains an
 * illustration for the era and a caption bar at the bottom.  Panels
 * adopt the same clipped‑corner silhouette as the wafers and lift
 * slightly on hover.
 */
.era-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 24px;
    margin-top: 30px;
}

.era-panel {
    position: relative;
    display: block;
    overflow: hidden;
    border-radius: 10px;
    background: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(8px);
    border: 1px solid rgba(255, 255, 255, 0.15);
    clip-path: polygon(0 0, 100% 0, 100% calc(100% - 16px), 96% 100%, 4% 100%, 0 calc(100% - 16px));
    transition: background 0.3s, transform 0.3s;
    color: inherit;
    text-decoration: none;
}

.era-panel:hover {
    background: rgba(255, 255, 255, 0.18);
    transform: translateY(-4px);
}

.era-panel img {
    width: 100%;
    height: 180px;
    object-fit: cover;
    filter: brightness(0.9);
    display: block;
}

.era-panel .label {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    background: rgba(5, 8, 15, 0.85);
    padding: 16px 20px;
    box-sizing: border-box;
}

.era-panel .label h4 {
    margin: 0 0 6px 0;
    font-family: 'Orbitron', sans-serif;
    font-size: 1.3rem;
    color: var(--primary-color);
}

.era-panel .label p {
    margin: 0;
    font-size: 0.95rem;
    color: rgba(255, 255, 255, 0.85);
}
/* ------------------------------
   Timeline (History page refresh)
   ------------------------------ */

/* Visually hidden text for screen readers */
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Keep the banner/footer pinned to the true bottom on the History page */
body.history-page {
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

body.history-page .section {
    flex: 1 0 auto;
}

body.history-page .footer {
    margin-top: auto;
}

/*
 * The generic `.section h2` styling adds an orange left border + graffiti smear.
 * On the History timeline we want the title centered with *no* left accent.
 */
.history-page .history-intro h2.timeline-title {
    text-align: center;
    border-left: none;
    padding-left: 0;
    margin-bottom: 14px;
}

.history-page .history-intro h2.timeline-title::before {
    display: none;
}

/* Center the intro copy a bit tighter on the Timeline page */
.history-page .history-intro {
    max-width: 980px;
    margin: 0 auto;
    text-align: center;
}

/* Glass panel for the timeline description (left-aligned copy) */
.history-page .timeline-intro-panel {
    margin: 0 auto 6px;
    padding: 18px 20px;
    border-radius: 18px;
    border: 1px solid rgba(255, 255, 255, 0.12);
    background: linear-gradient(180deg, rgba(10, 14, 18, 0.68), rgba(6, 8, 10, 0.56));
    box-shadow: 0 0 0 1px rgba(0, 190, 255, 0.08), 0 18px 44px rgba(0, 0, 0, 0.28);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    text-align: left;
}

.history-page .timeline-intro-panel p {
    margin: 0 0 12px;
    color: rgba(255, 255, 255, 0.92);
    line-height: 1.7;
}

.history-page .timeline-intro-panel p:last-child {
    margin-bottom: 0;
}

.timeline-foundations {
    margin-top: 28px;
}

.timeline-marker {
    position: relative;
    display: block;
    max-width: 860px;
    margin: 0 auto;
    text-decoration: none;
    color: inherit;
    /* No panel — just a free-floating marker with a soft glow */
    transition: transform 0.25s ease, filter 0.25s ease;
}

.timeline-marker img {
    width: 100%;
    height: auto;
    display: block;
    filter: drop-shadow(0 14px 22px rgba(0, 0, 0, 0.65));
}

.timeline-marker:hover,
.timeline-marker:focus-visible {
    transform: translateY(-6px);
    filter: drop-shadow(0 18px 30px rgba(0, 0, 0, 0.75));
    outline: none;
}


.timeline-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(240px, 1fr));
    gap: 34px;
    margin: 38px auto 0;
    max-width: 1180px;
}


@media (max-width: 900px) {
    .timeline-grid {
        grid-template-columns: repeat(2, minmax(240px, 1fr));
        gap: 28px;
    }
}


@media (max-width: 580px) {
    .timeline-grid {
        grid-template-columns: 1fr;
        max-width: 520px;
        gap: 22px;
    }
}


.timeline-tile {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px 18px;
    min-height: 120px;
    text-decoration: none;
    color: inherit;
    /* No panel behind the tiles; keep them free-floating */
    border-radius: 18px;
    background: transparent;
    border: none;
    box-shadow: none;
    transition: transform 0.25s ease, filter 0.25s ease;
}


.timeline-tile img {
    width: 100%;
    height: auto;
    max-height: 92px;
    object-fit: contain;
    display: block;
    filter: drop-shadow(0 14px 22px rgba(0, 0, 0, 0.65));
}

.timeline-tile:hover,
.timeline-tile:focus-visible {
    transform: translateY(-8px);
    filter: drop-shadow(0 18px 30px rgba(0, 0, 0, 0.75));
    outline: none;
}


.timeline-tile.disabled {
    cursor: not-allowed;
    opacity: 0.65;
}

/* Hover/focus tooltip */
.timeline-tooltip {
    position: absolute;
    left: 50%;
    bottom: calc(100% + 12px);
    transform: translate(-50%, 8px);
    width: min(360px, calc(100vw - 40px));
    padding: 12px 14px;
    border-radius: 12px;
    background: rgba(5, 8, 15, 0.92);
    border: 1px solid rgba(255, 255, 255, 0.18);
    box-shadow: 0 12px 30px rgba(0, 0, 0, 0.45);
    color: rgba(255, 255, 255, 0.92);
    font-size: 0.95rem;
    line-height: 1.45;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.18s ease, transform 0.18s ease;
    z-index: 5;
}

.timeline-tooltip::after {
    content: "";
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    border-width: 10px;
    border-style: solid;
    border-color: rgba(5, 8, 15, 0.92) transparent transparent transparent;
}

.timeline-tile:hover .timeline-tooltip,
.timeline-tile:focus-visible .timeline-tooltip,
.timeline-marker:hover .timeline-tooltip,
.timeline-marker:focus-visible .timeline-tooltip {
    opacity: 1;
    transform: translate(-50%, 0);
}

/* ------------------------------
   Timeline slider (History page)
   ------------------------------ */

.timeline-slider-wrap {
    /* Logo slider lives inside the summary header now */
    --slideW: min(440px, 62vw);
    --logoH: 118px;
    margin: 28px auto 0;
    max-width: 1180px;
    padding: 0 16px 12px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.timeline-slider {
    position: relative;
}

.timeline-viewport {
    display: block;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scroll-behavior: smooth;
    height: var(--logoH);
    padding: 6px calc((100% - var(--slideW)) / 2);
    border-radius: 14px;
}

/* Hide scrollbar chrome (still scrollable) */
.timeline-viewport {
    scrollbar-width: none;
}

.timeline-viewport::-webkit-scrollbar {
    width: 0;
    height: 0;
}

.timeline-track {
    display: flex;
    align-items: center;
    gap: 34px;
}

.timeline-slide {
    flex: 0 0 auto;
    width: var(--slideW);
    scroll-snap-align: center;
    text-decoration: none;
    color: inherit;
    border-radius: 22px;
    padding: 0;
    height: var(--logoH);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: filter 0.22s ease;
    outline: none;
}

.timeline-slide img {
    width: auto;
    height: auto;
    max-width: 100%;
    max-height: calc(var(--logoH) - 18px);
    display: block;
    object-fit: contain;
    filter: drop-shadow(0 14px 22px rgba(0, 0, 0, 0.65));
}

.timeline-slide:hover,
.timeline-slide:focus-visible {
    filter: drop-shadow(0 18px 30px rgba(0, 0, 0, 0.70));
}

.timeline-eraheader {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 12px;
    width: 100%;
}

.timeline-era-year {
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    letter-spacing: 0.16em;
    font-size: 12px;
    color: rgba(200, 230, 255, 0.86);
    white-space: nowrap;
}

.timeline-era-year.start { justify-self: start; }
.timeline-era-year.end { justify-self: end; }

.timeline-slide.is-disabled {
    cursor: not-allowed;
    opacity: 0.62;
}

.timeline-arrow {
    position: fixed;
    top: 50vh;
    transform: translateY(-50%);
    width: 46px;
    height: 46px;
    border-radius: 999px;
    border: 1px solid rgba(255, 255, 255, 0.14);
    background: rgba(5, 8, 15, 0.70);
    color: rgba(255, 255, 255, 0.92);
    display: grid;
    place-items: center;
    cursor: pointer;
    z-index: 1000;
    box-shadow: 0 10px 24px rgba(0, 0, 0, 0.38);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    transition: transform 0.16s ease, border-color 0.16s ease, opacity 0.16s ease;
}

.timeline-arrow:hover {
    border-color: rgba(0, 190, 255, 0.42);
    transform: translateY(-50%) scale(1.04);
}

.timeline-arrow:focus-visible {
    outline: none;
    border-color: rgba(255, 0, 200, 0.42);
    box-shadow: 0 0 0 3px rgba(255, 0, 200, 0.16), 0 10px 24px rgba(0, 0, 0, 0.38);
}

.timeline-arrow.prev {
    left: 18px; /* JS will override to hug the timeline box */
}

.timeline-arrow.next {
    right: 18px; /* JS will override to hug the timeline box */
}

.timeline-arrow[disabled] {
    opacity: 0.35;
    cursor: default;
}

.timeline-arrow.is-hidden {
    opacity: 0;
    pointer-events: none;
}

.timeline-info {
    border-radius: 18px;
    border: 1px solid rgba(255, 255, 255, 0.12);
    background: linear-gradient(180deg, rgba(10, 14, 18, 0.78), rgba(6, 8, 10, 0.68));
    box-shadow: 0 0 0 1px rgba(0, 190, 255, 0.10), 0 18px 44px rgba(0, 0, 0, 0.34);
    padding: 16px 16px 14px;
}

.timeline-info-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    flex-wrap: wrap;
}

/* Full chronicle expansion */
.timeline-full {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid rgba(255, 255, 255, 0.10);
}

.timeline-full-text {
    white-space: pre-wrap;
    overflow-wrap: anywhere;
    line-height: 1.65;
    font-size: 0.98rem;
    color: rgba(255, 255, 255, 0.90);
}

.timeline-full-text.typing::after {
    content: "▌";
    margin-left: 2px;
    opacity: 0.75;
    animation: synCaretBlink 0.9s steps(1, end) infinite;
}

.timeline-info.is-expanded {
    min-height: 100vh;
}


.timeline-viewmore-row{
    margin-top: 12px;
    display: flex;
    justify-content: center;
}
.timeline-viewmore {
    text-decoration: none;
    border-radius: 999px;
    padding: 10px 14px;
    border: 1px solid rgba(0, 190, 255, 0.32);
    background: linear-gradient(180deg, rgba(0, 190, 255, 0.10), rgba(0, 0, 0, 0.18));
    color: rgba(235, 250, 255, 0.92);
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    letter-spacing: 0.16em;
    font-size: 12px;
    box-shadow: 0 0 0 1px rgba(255, 0, 200, 0.10);
    transition: border-color 0.16s ease, transform 0.16s ease, opacity 0.16s ease;
    white-space: nowrap;
}

.timeline-viewmore:hover {
    border-color: rgba(0, 190, 255, 0.55);
    transform: translateY(-1px);
}

.timeline-viewmore[aria-disabled="true"] {
    opacity: 0.45;
    cursor: not-allowed;
    pointer-events: none;
}

.timeline-summary-box {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid rgba(255, 255, 255, 0.10);
}

.timeline-summary {
    margin: 0;
    font-size: 1rem;
    line-height: 1.55;
    color: rgba(255, 255, 255, 0.92);
    overflow-wrap: anywhere;
}

.timeline-summary.typing::after {
    content: "▌";
    margin-left: 2px;
    opacity: 0.75;
    animation: synCaretBlink 0.9s steps(1, end) infinite;
}

@keyframes synCaretBlink {
    50% { opacity: 0.18; }
}

.timeline-tags {
    margin-top: 10px;
    font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
    letter-spacing: 0.10em;
    font-size: 11px;
    color: rgba(200, 230, 255, 0.72);
    overflow-wrap: anywhere;
}

/* Expanded chronicle (View More) */
.timeline-full {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid rgba(255, 255, 255, 0.10);
}

.timeline-full-text {
    white-space: pre-wrap;
    font-size: 0.98rem;
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.92);
    overflow-wrap: anywhere;
}

.timeline-full-text.typing::after {
    content: "▌";
    margin-left: 2px;
    opacity: 0.72;
    animation: synCaretBlink 0.9s steps(1, end) infinite;
}

.timeline-info.is-expanded {
    /* When expanded, the box should feel like a full-page panel */
    min-height: 100vh;
    padding-bottom: 24px;
}

.timeline-info.is-expanded .timeline-summary-box {
    margin-top: 14px;
}

.timeline-dots {
    display: flex;
    justify-content: center;
    gap: 10px;
    /* Drop the dots slightly so they don't kiss/clamp against the panel edge */
    padding: 10px 6px 16px;
}

.timeline-dot {
    width: 12px;
    height: 12px;
    border-radius: 999px;
    border: 1px solid rgba(255, 255, 255, 0.28);
    background: transparent;
    padding: 0;
    cursor: pointer;
    transition: transform 0.12s ease, border-color 0.12s ease, background 0.12s ease;
}

.timeline-dot:hover {
    transform: translateY(-1px);
    border-color: rgba(0, 190, 255, 0.50);
}

.timeline-dot[aria-current="true"] {
    background: rgba(0, 190, 255, 0.78);
    border-color: rgba(0, 190, 255, 0.92);
}

@media (max-width: 640px) {
    .timeline-arrow {
        width: 42px;
        height: 42px;
    }
    .timeline-arrow.prev { left: 12px; }
    .timeline-arrow.next { right: 12px; }
    .timeline-slider-wrap {
        --slideW: min(360px, 82vw);
        --logoH: 104px;
        gap: 14px;
    }
    .timeline-viewport { padding: 6px calc((100% - var(--slideW)) / 2); }
}

@media (prefers-reduced-motion: reduce) {
    .timeline-viewport { scroll-behavior: auto; }
    .timeline-slide,
    .timeline-arrow,
    .timeline-viewmore { transition: none; }
    .timeline-summary.typing::after { animation: none; }
    .timeline-full-text.typing::after { animation: none; }
}


/* =========================================================
   Syn City — Proper-noun Glossary Tooltip System
   - .syn-term: dotted underline on matched terms
   - #syn-tooltip: single floating tooltip
   - #syn-glossary-banner: appears only during file:// testing when glossary can't be fetched
   ========================================================= */

.syn-term{
  text-decoration: underline dotted rgba(235,250,255,.55);
  text-underline-offset: 3px;
  cursor: help;
  white-space: normal;
}
.syn-term:hover{
  text-decoration-color: rgba(0,190,255,.75);
}
.syn-term:focus-visible{
  outline: 2px solid rgba(0,190,255,.45);
  outline-offset: 2px;
  border-radius: 6px;
}

#syn-tooltip{
  position: fixed;
  z-index: 99999;
  max-width: 360px;
  padding: 12px 12px 10px;
  border: 1px solid rgba(255,255,255,.12);
  background: linear-gradient(180deg, rgba(10,14,18,.94), rgba(6,8,10,.90));
  box-shadow: 0 0 0 1px rgba(0,190,255,.12), 0 18px 50px rgba(0,0,0,.45);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  color: rgba(245,250,255,.92);
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  letter-spacing: .03em;
  font-size: 12px;
  line-height: 1.35;
  pointer-events: none;
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 120ms ease, transform 120ms ease;
  visibility: hidden;
}
#syn-tooltip[data-show="1"]{
  opacity: 1;
  transform: translateY(0);
  visibility: visible;
}
#syn-tooltip .syn-tooltip-title{
  font-size: 12px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(200,230,255,.92);
  margin-bottom: 8px;
  border-bottom: 1px solid rgba(255,255,255,.08);
  padding-bottom: 6px;
}
#syn-tooltip .syn-tooltip-body{
  white-space: pre-wrap;
  color: rgba(235,250,255,.90);
}

#syn-glossary-banner{
  position: fixed;
  left: 14px;
  bottom: 14px;
  width: min(560px, 92vw);
  z-index: 99998;
  border: 1px solid rgba(255,255,255,.12);
  background: linear-gradient(180deg, rgba(10,14,18,.88), rgba(6,8,10,.82));
  box-shadow: 0 0 0 1px rgba(255,0,200,.10), 0 18px 50px rgba(0,0,0,.45);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
#syn-glossary-banner .syn-glossary-banner-inner{
  padding: 12px 12px 10px;
}
#syn-glossary-banner .syn-glossary-banner-title{
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  letter-spacing: .16em;
  font-size: 12px;
  color: rgba(245,250,255,.92);
  margin-bottom: 8px;
}
#syn-glossary-banner .syn-glossary-banner-sub{
  font-size: 12px;
  color: rgba(215,235,255,.86);
  line-height: 1.4;
  margin-bottom: 10px;
}
#syn-glossary-banner .mono{
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  letter-spacing: .08em;
  color: rgba(200,230,255,.92);
}
#syn-glossary-banner .syn-glossary-banner-actions{
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  flex-wrap: wrap;
}
#syn-glossary-banner .syn-glossary-btn{
  cursor: pointer;
  border: 1px solid rgba(0,190,255,.35);
  background: linear-gradient(180deg, rgba(0,190,255,.12), rgba(0,0,0,.16));
  color: rgba(235,250,255,.92);
  padding: 8px 10px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  letter-spacing: .16em;
  font-size: 11px;
}
#syn-glossary-banner .syn-glossary-btn:hover{
  border-color: rgba(0,190,255,.55);
}
#syn-glossary-banner .syn-glossary-btn.ghost{
  border-color: rgba(255,255,255,.12);
  background: rgba(0,0,0,.12);
}


/* Glossary cache controls (file:// preview) */
#syn-glossary-cachectl{
  position: fixed;
  left: 14px;
  bottom: 14px;
  width: min(420px, 92vw);
  z-index: 99997;
  border: 1px solid rgba(255,255,255,.10);
  background: linear-gradient(180deg, rgba(10,14,18,.84), rgba(6,8,10,.78));
  box-shadow: 0 0 0 1px rgba(0,190,255,.08), 0 14px 36px rgba(0,0,0,.42);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
#syn-glossary-cachectl .syn-glossary-banner-inner{
  padding: 10px 12px 10px;
}
#syn-glossary-cachectl .syn-glossary-banner-inner.compact .syn-glossary-banner-sub{
  margin-bottom: 8px;
}
#syn-glossary-cachectl .syn-glossary-banner-title{
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  letter-spacing: .16em;
  font-size: 12px;
  color: rgba(245,250,255,.92);
  margin-bottom: 6px;
}
#syn-glossary-cachectl .syn-glossary-banner-sub{
  font-size: 12px;
  color: rgba(215,235,255,.86);
  line-height: 1.4;
  margin-bottom: 10px;
}
#syn-glossary-cachectl .mono{
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  letter-spacing: .08em;
  color: rgba(200,230,255,.92);
}
#syn-glossary-cachectl .syn-glossary-banner-actions{
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  flex-wrap: wrap;
}
#syn-glossary-cachectl .syn-glossary-btn{
  cursor: pointer;
  border: 1px solid rgba(0,190,255,.35);
  background: linear-gradient(180deg, rgba(0,190,255,.12), rgba(0,0,0,.16));
  color: rgba(235,250,255,.92);
  padding: 8px 10px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  letter-spacing: .16em;
  font-size: 11px;
}
#syn-glossary-cachectl .syn-glossary-btn:hover{
  border-color: rgba(0,190,255,.55);
}
#syn-glossary-cachectl .syn-glossary-btn.ghost{
  border-color: rgba(255,255,255,.12);
  background: rgba(0,0,0,.12);
}
#syn-glossary-banner .syn-glossary-btn.danger,
#syn-glossary-cachectl .syn-glossary-btn.danger{
  border-color: rgba(255,90,90,.40);
  background: linear-gradient(180deg, rgba(255,90,90,.12), rgba(0,0,0,.18));
}
#syn-glossary-banner .syn-glossary-btn.danger:hover,
#syn-glossary-cachectl .syn-glossary-btn.danger:hover{
  border-color: rgba(255,90,90,.60);
}
