/* ==========================================================================
   OTPOS THEME — "circuit" design system
   Full-bleed sections alternating white / light gray, dark "ink" sections
   for heroes and calls-to-action, HUD-style details and inline illustrations.
   Loaded after tailwind + styles.css. All classes are prefixed with `ot-`.
   ========================================================================== */

:root {
    --ot-ink: #070b18;
    --ot-ink-2: #0c1428;
    --ot-ink-3: #131d38;
    --ot-blue: #2563eb;
    --ot-blue-600: #1d4ed8;
    --ot-cyan: #06b6d4;
    --ot-cyan-300: #67e8f9;
    --ot-violet: #7c3aed;
    --ot-green: #10b981;
    --ot-bg: #ffffff;
    --ot-bg-alt: #f3f6fa;
    --ot-line: #e2e8f0;
    --ot-line-strong: #cbd5e1;
    --ot-text: #0b1220;
    --ot-muted: #556070;
    --ot-grad: linear-gradient(100deg, #2563eb 0%, #06b6d4 100%);
    --ot-grad-text: linear-gradient(95deg, #60a5fa 0%, #22d3ee 55%, #a78bfa 100%);
    --ot-font-display: 'Space Grotesk', 'ProductSans', -apple-system, 'Segoe UI', Roboto, sans-serif;
    --ot-font-body: 'Inter', 'ProductSans', -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
    --ot-font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    --ot-radius: 10px;
    --ot-nav-h: 68px;
}

/* ---------- Base ---------- */
html { scroll-behavior: smooth; }

body,
body.ot-body {
    font-family: var(--ot-font-body);
    color: var(--ot-text);
    background: #ffffff;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4, h5, h6,
.ot-display {
    font-family: var(--ot-font-display);
    letter-spacing: -0.02em;
}

::selection { background: rgba(6, 182, 212, 0.25); }

.ot-mono { font-family: var(--ot-font-mono); }

/* ---------- Sections ---------- */
.ot-section {
    position: relative;
    padding: 96px 0;
    overflow: hidden;
    overflow: clip; /* clips glows without creating a scroll container, so position: sticky still works inside */
}
.ot-section--tight { padding: 64px 0; }
.ot-section--flush { padding: 0; }
.ot-section--white { background: var(--ot-bg); }
.ot-section--gray {
    background-color: var(--ot-bg-alt);
    border-top: 1px solid var(--ot-line);
    border-bottom: 1px solid var(--ot-line);
}
/* faint engineering grid on gray sections */
.ot-section--gray.ot-grid-bg,
.ot-grid-bg {
    background-image:
        linear-gradient(rgba(15, 23, 42, 0.035) 1px, transparent 1px),
        linear-gradient(90deg, rgba(15, 23, 42, 0.035) 1px, transparent 1px);
    background-size: 40px 40px;
}
.ot-section--gray + .ot-section--gray,
.ot-section--gray + .ot-section--dark,
.ot-section--dark + .ot-section--gray { border-top: 0; }

.ot-section--dark {
    background: var(--ot-ink);
    color: #e6edf7;
    isolation: isolate;
}
.ot-section--dark::before {
    /* grid */
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background-image:
        linear-gradient(rgba(148, 163, 184, 0.07) 1px, transparent 1px),
        linear-gradient(90deg, rgba(148, 163, 184, 0.07) 1px, transparent 1px);
    background-size: 48px 48px;
    -webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, #000 30%, transparent 100%);
    mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, #000 30%, transparent 100%);
}
.ot-section--dark::after {
    /* glows */
    content: "";
    position: absolute;
    inset: -20% -10% auto -10%;
    height: 140%;
    z-index: -2;
    background:
        radial-gradient(600px 380px at 15% 20%, rgba(37, 99, 235, 0.35), transparent 70%),
        radial-gradient(520px 360px at 85% 70%, rgba(6, 182, 212, 0.22), transparent 70%),
        radial-gradient(420px 300px at 60% 0%, rgba(124, 58, 237, 0.18), transparent 70%);
    pointer-events: none;
}
.ot-section--dark h1,
.ot-section--dark h2,
.ot-section--dark h3,
.ot-section--dark h4 { color: #ffffff; }
.ot-section--dark .ot-lead,
.ot-section--dark p { color: #a9b6cb; }

.ot-container {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 16px;
    position: relative;
}
@media (min-width: 640px) { .ot-container { padding: 0 24px; } }
@media (min-width: 1024px) { .ot-container { padding: 0 32px; } }

@media (max-width: 767px) {
    .ot-section { padding: 64px 0; }
    .ot-section--tight { padding: 44px 0; }
}

/* ---------- Typography ---------- */
.ot-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-family: var(--ot-font-mono);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ot-blue);
    margin-bottom: 18px;
}
.ot-eyebrow::before {
    content: "";
    width: 28px;
    height: 1px;
    background: currentColor;
    opacity: 0.8;
}
.ot-eyebrow--center { justify-content: center; }
.ot-eyebrow--center::after {
    content: "";
    width: 28px;
    height: 1px;
    background: currentColor;
    opacity: 0.8;
}
.ot-section--dark .ot-eyebrow { color: var(--ot-cyan-300); }

.ot-h1 {
    font-family: var(--ot-font-display);
    font-weight: 700;
    font-size: clamp(2.3rem, 5.2vw, 4.1rem);
    line-height: 1.05;
    letter-spacing: -0.035em;
}
.ot-h2 {
    font-family: var(--ot-font-display);
    font-weight: 700;
    font-size: clamp(1.8rem, 3.4vw, 2.75rem);
    line-height: 1.12;
    letter-spacing: -0.03em;
    color: var(--ot-text);
}
.ot-h3 {
    font-family: var(--ot-font-display);
    font-weight: 600;
    font-size: 1.25rem;
    line-height: 1.3;
    color: var(--ot-text);
}
.ot-lead {
    font-size: 1.125rem;
    line-height: 1.7;
    color: var(--ot-muted);
}
.ot-muted { color: var(--ot-muted); }
.ot-gradient-text {
    background: var(--ot-grad-text);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}
.ot-section--white .ot-gradient-text,
.ot-section--gray .ot-gradient-text {
    background: linear-gradient(95deg, #1d4ed8 0%, #0891b2 60%, #6d28d9 100%);
    -webkit-background-clip: text;
    background-clip: text;
}

.ot-section-head { max-width: 760px; margin-bottom: 56px; }
.ot-section-head--center { margin-left: auto; margin-right: auto; text-align: center; }
.ot-section-head .ot-lead { margin-top: 16px; }

/* ---------- Buttons ---------- */
.ot-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 14px 25px;
    border-radius: 8px;
    font-weight: 600;
    font-size: 15px;
    line-height: 1.2;
    border: 0; /* borderless: a transparent border lets gradient fills repeat into a thin line at the edges */
    transition: transform .2s ease, box-shadow .25s ease, background-color .2s ease, color .2s ease;
    cursor: pointer;
    white-space: nowrap;
    text-decoration: none;
}
.ot-btn svg, .ot-btn .ot-i { width: 18px; height: 18px; transition: transform .2s ease; }
.ot-btn:hover svg.ot-arrow, .ot-btn:hover .ot-i.ot-arrow { transform: translateX(3px); }
.ot-btn--primary {
    color: #fff;
    background: var(--ot-grad);
    box-shadow: 0 8px 24px -8px rgba(37, 99, 235, 0.65), inset 0 1px 0 rgba(255, 255, 255, 0.2);
}
.ot-btn--primary:hover {
    color: #fff;
    transform: translateY(-1px);
    box-shadow: 0 14px 34px -10px rgba(6, 182, 212, 0.7), inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
.ot-btn--ghost {
    color: #e6edf7;
    background: rgba(255, 255, 255, 0.1);
    -webkit-backdrop-filter: blur(6px);
    backdrop-filter: blur(6px);
}
.ot-btn--ghost:hover { color: #fff; background: rgba(6, 182, 212, 0.22); }
.ot-btn--outline {
    color: var(--ot-text);
    background: var(--ot-line);
}
.ot-btn--outline:hover { color: var(--ot-blue); background: #dbeafe; }
.ot-btn--dark { color: #fff; background: var(--ot-ink-2); }
.ot-btn--dark:hover { color: #fff; background: var(--ot-ink-3); transform: translateY(-1px); }
.ot-btn--sm { padding: 10px 17px; font-size: 14px; }
.ot-btn--lg { padding: 17px 31px; font-size: 16px; }
.ot-btn--block { width: 100%; }

.ot-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-weight: 600;
    color: var(--ot-blue);
}
.ot-link:hover { color: var(--ot-blue-600); }
.ot-link svg, .ot-link .ot-i { width: 16px; height: 16px; transition: transform .2s ease; }
.ot-link:hover svg, .ot-link:hover .ot-i { transform: translateX(3px); }

/* ---------- Chips / tags ---------- */
.ot-chip {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    border-radius: 999px;
    font-family: var(--ot-font-mono);
    font-size: 12px;
    letter-spacing: 0.04em;
    color: var(--ot-blue-600);
    background: rgba(37, 99, 235, 0.07);
    border: 1px solid rgba(37, 99, 235, 0.18);
}
.ot-section--dark .ot-chip {
    color: #bfe9f5;
    background: rgba(6, 182, 212, 0.08);
    border-color: rgba(103, 232, 249, 0.25);
}
.ot-dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--ot-green);
    box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.6);
    animation: ot-ping 2s infinite;
}
@keyframes ot-ping {
    0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.55); }
    70% { box-shadow: 0 0 0 8px rgba(16, 185, 129, 0); }
    100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
}

/* ---------- Hero ---------- */
.ot-hero {
    padding: 120px 0 110px;
    min-height: 640px;
    display: flex;
    align-items: center;
}
.ot-hero .ot-lead { font-size: 1.2rem; max-width: 560px; }
.ot-hero-art {
    position: relative;
    width: 100%;
    max-width: 560px;
    margin: 0 auto;
    filter: drop-shadow(0 30px 60px rgba(6, 182, 212, 0.18));
}
.ot-hero-art img, .ot-hero-art svg, .ot-hero-art .ot-i { width: 100%; height: auto; display: block; }
.ot-float { animation: ot-float 7s ease-in-out infinite; }
@keyframes ot-float {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-12px); }
}
.ot-scanline {
    position: absolute;
    left: 0;
    right: 0;
    height: 120px;
    top: -120px;
    background: linear-gradient(180deg, transparent, rgba(6, 182, 212, 0.07), transparent);
    animation: ot-scan 8s linear infinite;
    pointer-events: none;
    z-index: -1;
}
@keyframes ot-scan { to { top: 110%; } }

@media (max-width: 767px) {
    .ot-hero { padding: 56px 0 64px; min-height: 0; }
    .ot-page-hero { padding: 56px 0 52px; }
}

/* compact hero for inner pages */
.ot-page-hero { padding: 84px 0 76px; }
.ot-page-hero .ot-h1 { font-size: clamp(2rem, 4.2vw, 3.2rem); }
.ot-page-hero .ot-lead { max-width: 640px; }
.ot-page-hero--center { text-align: center; }
.ot-page-hero--center .ot-lead { margin-left: auto; margin-right: auto; }
.ot-page-hero-art { max-width: 420px; margin-left: auto; }
@media (max-width: 1023px) { .ot-page-hero-art { display: none; } }

.ot-breadcrumb {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    font-family: var(--ot-font-mono);
    font-size: 12px;
    letter-spacing: 0.06em;
    color: #7f8ba3;
    margin-bottom: 22px;
}
.ot-breadcrumb a { color: #9fb0c9; }
.ot-breadcrumb a:hover { color: var(--ot-cyan-300); }
.ot-breadcrumb .sep { opacity: .5; }
.ot-section--white .ot-breadcrumb a,
.ot-section--gray .ot-breadcrumb a { color: var(--ot-muted); }
.ot-section--white .ot-breadcrumb a:hover,
.ot-section--gray .ot-breadcrumb a:hover { color: var(--ot-blue); }

/* ---------- Stats strip ---------- */
.ot-stats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    border-top: 1px solid var(--ot-line);
}
@media (min-width: 768px) { .ot-stats { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.ot-stat {
    padding: 28px 24px 8px 0;
    position: relative;
}
.ot-stat + .ot-stat { padding-left: 24px; border-left: 1px solid var(--ot-line); }
@media (max-width: 767px) {
    .ot-stat:nth-child(3) { border-left: 0; padding-left: 0; }
}
.ot-stat-num {
    font-family: var(--ot-font-display);
    font-weight: 700;
    font-size: clamp(2rem, 3.4vw, 2.8rem);
    line-height: 1;
    letter-spacing: -0.03em;
    color: var(--ot-text);
}
.ot-stat-num small { font-size: .5em; color: var(--ot-blue); margin-left: 2px; }
.ot-stat-label {
    margin-top: 10px;
    font-family: var(--ot-font-mono);
    font-size: 12px;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--ot-muted);
}
.ot-section--dark .ot-stats { border-top-color: rgba(148, 163, 184, 0.18); }
.ot-section--dark .ot-stat + .ot-stat { border-left-color: rgba(148, 163, 184, 0.18); }
.ot-section--dark .ot-stat-num { color: #fff; }
.ot-section--dark .ot-stat-label { color: #8a98b1; }

/* ---------- Feature columns (no cards: hairline dividers) ---------- */
.ot-features {
    display: grid;
    grid-template-columns: 1fr;
    border-top: 1px solid var(--ot-line);
}
@media (min-width: 768px) { .ot-features { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1024px) {
    .ot-features--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .ot-features--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
.ot-feature {
    position: relative;
    padding: 36px 28px 36px 0;
    border-bottom: 1px solid var(--ot-line);
}
@media (min-width: 768px) {
    .ot-feature { padding: 40px 32px; border-right: 1px solid var(--ot-line); }
    .ot-features--2 .ot-feature:nth-child(2n),
    .ot-features:not(.ot-features--3):not(.ot-features--4) .ot-feature:nth-child(2n) { border-right: 0; }
}
@media (min-width: 1024px) {
    .ot-features--3 .ot-feature:nth-child(2n) { border-right: 1px solid var(--ot-line); }
    .ot-features--3 .ot-feature:nth-child(3n) { border-right: 0; }
    .ot-features--4 .ot-feature:nth-child(2n) { border-right: 1px solid var(--ot-line); }
    .ot-features--4 .ot-feature:nth-child(4n) { border-right: 0; }
}
.ot-feature::before {
    /* hover accent line on top */
    content: "";
    position: absolute;
    top: -1px;
    left: 0;
    height: 2px;
    width: 0;
    background: var(--ot-grad);
    transition: width .45s ease;
}
.ot-feature:hover::before { width: 100%; }
.ot-feature-index {
    font-family: var(--ot-font-mono);
    font-size: 12px;
    color: #94a3b8;
    letter-spacing: .1em;
    margin-bottom: 22px;
    display: block;
}
.ot-feature h3,
.ot-feature .ot-h3 { margin: 18px 0 10px; }
.ot-feature p { color: var(--ot-muted); line-height: 1.7; }
.ot-section--dark .ot-features,
.ot-section--dark .ot-feature { border-color: rgba(148, 163, 184, 0.16); }

/* HUD icon: outlined square with corner ticks */
.ot-icon {
    position: relative;
    width: 52px;
    height: 52px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--ot-blue);
    background: linear-gradient(135deg, rgba(37, 99, 235, 0.08), rgba(6, 182, 212, 0.08));
    border: 1px solid rgba(37, 99, 235, 0.18);
    border-radius: 10px;
}
.ot-icon svg, .ot-icon .ot-i { width: 24px; height: 24px; }
.ot-icon::after {
    content: "";
    position: absolute;
    right: -4px;
    top: -4px;
    width: 8px;
    height: 8px;
    border-top: 2px solid var(--ot-cyan);
    border-right: 2px solid var(--ot-cyan);
    border-radius: 0 3px 0 0;
}
.ot-icon--sm { width: 40px; height: 40px; border-radius: 8px; }
.ot-icon--sm svg, .ot-icon--sm .ot-i { width: 20px; height: 20px; }
.ot-section--dark .ot-icon {
    color: var(--ot-cyan-300);
    background: rgba(6, 182, 212, 0.08);
    border-color: rgba(103, 232, 249, 0.22);
}

/* ---------- Split rows (text + illustration) ---------- */
.ot-split {
    display: grid;
    grid-template-columns: 1fr;
    gap: 48px;
    align-items: center;
}
@media (min-width: 1024px) {
    .ot-split { grid-template-columns: 1fr 1fr; gap: 80px; }
    .ot-split--reverse > :first-child { order: 2; }
    .ot-split--wide-text { grid-template-columns: 1.15fr .85fr; }
}
.ot-illus {
    width: 100%;
    max-width: 540px;
    margin: 0 auto;
    display: block;
}
.ot-illus img, .ot-illus svg, .ot-illus .ot-i { width: 100%; height: auto; display: block; }

/* check list */
.ot-checklist { list-style: none; padding: 0; margin: 0; }
.ot-checklist li {
    position: relative;
    padding: 12px 0 12px 34px;
    border-bottom: 1px dashed var(--ot-line);
    color: #2a3445;
}
.ot-checklist li:last-child { border-bottom: 0; }
.ot-checklist li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 14px;
    width: 20px;
    height: 20px;
    border-radius: 6px;
    background: rgba(6, 182, 212, 0.12) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='%230891b2'%3E%3Cpath fill-rule='evenodd' d='M16.7 5.3a1 1 0 010 1.4l-8 8a1 1 0 01-1.4 0l-4-4a1 1 0 011.4-1.4L8 12.6l7.3-7.3a1 1 0 011.4 0z' clip-rule='evenodd'/%3E%3C/svg%3E") center / 14px no-repeat;
}
.ot-checklist li strong { color: var(--ot-text); }
.ot-section--dark .ot-checklist li { color: #c5d0e0; border-color: rgba(148, 163, 184, 0.18); }
.ot-section--dark .ot-checklist li strong { color: #fff; }

/* numbered steps / timeline */
.ot-steps { counter-reset: ot-step; display: grid; gap: 0; }
@media (min-width: 1024px) { .ot-steps--row { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.ot-step {
    counter-increment: ot-step;
    position: relative;
    padding: 28px 24px 28px 64px;
    border-left: 1px solid var(--ot-line);
}
.ot-step::before {
    content: counter(ot-step, decimal-leading-zero);
    position: absolute;
    left: -18px;
    top: 26px;
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: var(--ot-font-mono);
    font-size: 12px;
    color: var(--ot-blue);
    background: #fff;
    border: 1px solid var(--ot-line-strong);
    border-radius: 50%;
}
.ot-section--gray .ot-step::before { background: var(--ot-bg-alt); }
@media (min-width: 1024px) {
    .ot-steps--row .ot-step {
        padding: 64px 28px 0 0;
        border-left: 0;
        border-top: 1px solid var(--ot-line);
    }
    .ot-steps--row .ot-step::before { left: 0; top: -18px; }
}
.ot-step h3 { font-family: var(--ot-font-display); font-weight: 600; font-size: 1.15rem; margin-bottom: 8px; color: var(--ot-text); }
.ot-step p { color: var(--ot-muted); line-height: 1.7; }

/* ---------- Frames (HUD corners around media) ---------- */
.ot-frame {
    position: relative;
    padding: 10px;
    border-radius: 14px;
    background: #fff;
    border: 1px solid var(--ot-line);
    box-shadow: 0 30px 60px -30px rgba(15, 23, 42, 0.25);
}
.ot-frame::before,
.ot-frame::after {
    content: "";
    position: absolute;
    width: 22px;
    height: 22px;
    border-color: var(--ot-cyan);
    border-style: solid;
    pointer-events: none;
}
.ot-frame::before { left: -7px; top: -7px; border-width: 2px 0 0 2px; border-radius: 6px 0 0 0; }
.ot-frame::after { right: -7px; bottom: -7px; border-width: 0 2px 2px 0; border-radius: 0 0 6px 0; }
.ot-frame img { border-radius: 8px; display: block; width: 100%; }
.ot-section--dark .ot-frame { background: rgba(255, 255, 255, 0.03); border-color: rgba(148, 163, 184, 0.2); }

/* ---------- Panels (used sparingly: forms, summaries) ---------- */
.ot-panel {
    background: #fff;
    border: 1px solid var(--ot-line);
    border-radius: 14px;
    box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 20px 40px -28px rgba(15, 23, 42, 0.18);
}
.ot-panel-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 18px 24px;
    border-bottom: 1px solid var(--ot-line);
    font-family: var(--ot-font-display);
    font-weight: 600;
}
.ot-panel-body { padding: 24px; }
.ot-panel--glass {
    background: rgba(12, 20, 40, 0.6);
    border-color: rgba(148, 163, 184, 0.18);
    -webkit-backdrop-filter: blur(12px);
    backdrop-filter: blur(12px);
    color: #e6edf7;
}

/* ---------- Rows list (replaces card grids for lists of items) ---------- */
.ot-rows { border-top: 1px solid var(--ot-line); }
.ot-row {
    display: grid;
    grid-template-columns: 1fr;
    gap: 16px;
    padding: 28px 0;
    border-bottom: 1px solid var(--ot-line);
    align-items: center;
    transition: background-color .2s ease;
}
@media (min-width: 768px) { .ot-row { grid-template-columns: auto 1fr auto; gap: 28px; } }
.ot-row:hover { background: linear-gradient(90deg, rgba(37, 99, 235, 0.03), transparent 70%); }

/* ---------- Tables ---------- */
.ot-table { width: 100%; border-collapse: collapse; font-size: 15px; }
.ot-table th {
    text-align: left;
    font-family: var(--ot-font-mono);
    font-size: 11px;
    font-weight: 500;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--ot-muted);
    padding: 14px 16px;
    border-bottom: 1px solid var(--ot-line-strong);
}
.ot-table td { padding: 16px; border-bottom: 1px solid var(--ot-line); }
.ot-table tr:hover td { background: rgba(37, 99, 235, 0.025); }

/* ---------- Prose (legal / long text pages) ---------- */
.ot-prose { max-width: 780px; color: #2a3445; line-height: 1.8; font-size: 1.02rem; }
.ot-prose h2 {
    font-family: var(--ot-font-display);
    font-size: 1.6rem;
    font-weight: 700;
    color: var(--ot-text);
    margin: 56px 0 16px;
    padding-top: 28px;
    border-top: 1px solid var(--ot-line);
}
.ot-prose h2:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.ot-prose h3 { font-family: var(--ot-font-display); font-size: 1.2rem; font-weight: 600; color: var(--ot-text); margin: 32px 0 10px; }
.ot-prose p { margin: 0 0 16px; }
.ot-prose ul, .ot-prose ol { margin: 0 0 18px; padding-left: 1.3rem; }
.ot-prose ul { list-style: none; padding-left: 0; }
.ot-prose ul li { position: relative; padding-left: 22px; margin-bottom: 8px; }
.ot-prose ul li::before {
    content: "";
    position: absolute;
    left: 2px;
    top: .72em;
    width: 8px;
    height: 2px;
    background: var(--ot-cyan);
}
.ot-prose ol { list-style: decimal; }
.ot-prose ol li { margin-bottom: 8px; padding-left: 4px; }
.ot-prose a { color: var(--ot-blue); text-decoration: underline; text-underline-offset: 3px; }
.ot-prose strong { color: var(--ot-text); }

/* sticky table of contents */
.ot-toc { position: sticky; top: calc(var(--ot-nav-h) + 24px); }
.ot-toc a {
    display: block;
    padding: 8px 0 8px 16px;
    border-left: 1px solid var(--ot-line);
    color: var(--ot-muted);
    font-size: 14px;
}
.ot-toc a:hover { color: var(--ot-blue); border-left-color: var(--ot-blue); }

/* ---------- Forms ---------- */
.ot-input,
.ot-form input[type="text"],
.ot-form input[type="email"],
.ot-form input[type="password"],
.ot-form input[type="tel"],
.ot-form input[type="number"],
.ot-form input[type="search"],
.ot-form input[type="url"],
.ot-form select,
.ot-form textarea {
    width: 100%;
    padding: 12px 14px;
    font-size: 15px;
    color: var(--ot-text);
    background: #fff;
    border: 1px solid var(--ot-line-strong);
    border-radius: 8px;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.ot-input:focus,
.ot-form input:focus,
.ot-form select:focus,
.ot-form textarea:focus {
    outline: none;
    border-color: var(--ot-blue);
    box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.12);
}
.ot-label {
    display: block;
    margin-bottom: 7px;
    font-size: 13px;
    font-weight: 600;
    color: #334155;
}

/* ---------- CTA band ---------- */
.ot-cta { padding: 88px 0; }
.ot-cta-inner {
    display: flex;
    flex-direction: column;
    gap: 32px;
    align-items: flex-start;
    justify-content: space-between;
}
@media (min-width: 1024px) { .ot-cta-inner { flex-direction: row; align-items: center; } }

/* ---------- Marquee (logos / keywords) ---------- */
.ot-marquee { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }
.ot-marquee-track { display: flex; gap: 56px; width: max-content; animation: ot-marquee 38s linear infinite; }
.ot-marquee-item {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-family: var(--ot-font-mono);
    font-size: 13px;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: #64748b;
    white-space: nowrap;
}
.ot-marquee-item::before { content: "◆"; color: var(--ot-cyan); font-size: 9px; }
@keyframes ot-marquee { to { transform: translateX(-50%); } }

/* ---------- Scroll reveal ---------- */
.ot-reveal { opacity: 0; transform: translateY(24px); transition: opacity .7s ease, transform .7s cubic-bezier(.2, .7, .2, 1); }
.ot-reveal.is-visible { opacity: 1; transform: none; }
.ot-reveal-d1 { transition-delay: .08s; }
.ot-reveal-d2 { transition-delay: .16s; }
.ot-reveal-d3 { transition-delay: .24s; }
@media (prefers-reduced-motion: reduce) {
    .ot-reveal { opacity: 1; transform: none; transition: none; }
    .ot-float, .ot-scanline, .ot-marquee-track, .ot-dot, .ot-anim-dash, .ot-anim-pulse, .ot-anim-blink { animation: none !important; }
}

/* SVG illustration animation helpers (used inside inline SVGs) */
.ot-anim-dash { stroke-dasharray: 6 8; animation: ot-dash 1.6s linear infinite; }
@keyframes ot-dash { to { stroke-dashoffset: -28; } }
.ot-anim-pulse { transform-box: fill-box; transform-origin: center; animation: ot-pulse 2.4s ease-in-out infinite; }
@keyframes ot-pulse { 0%, 100% { opacity: .35; transform: scale(.9); } 50% { opacity: 1; transform: scale(1.1); } }
.ot-anim-blink { animation: ot-blink 1.4s steps(2, start) infinite; }
@keyframes ot-blink { to { visibility: hidden; } }

/* ==========================================================================
   Header / navigation
   ========================================================================== */
.ot-nav {
    position: sticky;
    top: 0;
    z-index: 60;
    height: var(--ot-nav-h);
    background: rgba(255, 255, 255, 0.82);
    -webkit-backdrop-filter: saturate(180%) blur(14px);
    backdrop-filter: saturate(180%) blur(14px);
    border-bottom: 1px solid rgba(226, 232, 240, 0.9);
    transition: box-shadow .25s ease, background-color .25s ease;
}
.ot-nav::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(6, 182, 212, 0.6), rgba(37, 99, 235, 0.6), transparent);
    opacity: 0;
    transition: opacity .3s ease;
}
.ot-nav.is-scrolled { box-shadow: 0 10px 30px -20px rgba(15, 23, 42, 0.35); background: rgba(255, 255, 255, 0.92); }
.ot-nav.is-scrolled::after { opacity: 1; }
.ot-nav-inner { height: var(--ot-nav-h); display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.ot-nav-link {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 8px 2px;
    font-size: 15px;
    font-weight: 500;
    color: #334155;
    transition: color .2s ease;
    background: none;
    border: 0;
    cursor: pointer;
}
.ot-nav-link::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 2px;
    height: 2px;
    border-radius: 2px;
    background: var(--ot-grad);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform .25s ease;
}
.ot-nav-link:hover,
.ot-nav-link.is-active { color: var(--ot-text); }
.ot-nav-link:hover::after,
.ot-nav-link.is-active::after { transform: scaleX(1); }
.ot-nav-link svg, .ot-nav-link .ot-i { width: 14px; height: 14px; opacity: .6; }

.ot-dropdown {
    position: absolute;
    left: -16px;
    top: calc(100% + 6px);
    min-width: 290px;
    padding: 8px;
    background: #fff;
    border: 1px solid var(--ot-line);
    border-radius: 12px;
    box-shadow: 0 24px 50px -20px rgba(15, 23, 42, 0.3);
    opacity: 0;
    visibility: hidden;
    transform: translateY(6px);
    transition: all .2s ease;
    z-index: 70;
}
.ot-dropdown::before { content: ""; position: absolute; left: 0; right: 0; top: -12px; height: 12px; }
.group:hover > .ot-dropdown,
.group:focus-within > .ot-dropdown { opacity: 1; visibility: visible; transform: none; }
.ot-dropdown a {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 10px 12px;
    border-radius: 8px;
    color: var(--ot-text);
    transition: background-color .15s ease;
}
.ot-dropdown a:hover { background: var(--ot-bg-alt); }
.ot-dropdown a .ot-icon { flex-shrink: 0; }
.ot-dropdown a .ot-icon::after { display: none; }
.ot-dropdown-title { font-weight: 600; font-size: 14px; display: block; }
.ot-dropdown-desc { font-size: 12.5px; color: var(--ot-muted); display: block; line-height: 1.45; margin-top: 2px; }

.ot-nav-icon-btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 10px;
    color: #334155;
    transition: background-color .2s ease, color .2s ease;
}
.ot-nav-icon-btn:hover { background: var(--ot-bg-alt); color: var(--ot-blue); }
.ot-nav-icon-btn svg, .ot-nav-icon-btn .ot-i { width: 22px; height: 22px; }

/* mobile menu sits under the sticky bar */
@media (max-width: 767px) {
    .mobile-menu { top: var(--ot-nav-h) !important; max-height: calc(100vh - var(--ot-nav-h)); overflow-y: auto; }
}

/* ==========================================================================
   Footer
   ========================================================================== */
.ot-footer { padding: 80px 0 0; }
.ot-footer h5 {
    font-family: var(--ot-font-mono);
    font-size: 12px;
    letter-spacing: .14em;
    text-transform: uppercase;
    color: #7f8ba3;
    margin-bottom: 18px;
}
.ot-footer a { color: #b6c2d6; transition: color .2s ease; }
.ot-footer a:hover { color: #fff; }
.ot-footer-bottom {
    margin-top: 64px;
    padding: 22px 0 28px;
    border-top: 1px solid rgba(148, 163, 184, 0.16);
    font-size: 13px;
    color: #7f8ba3;
}
.ot-social {
    width: 38px;
    height: 38px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 10px;
    border: 1px solid rgba(148, 163, 184, 0.22);
    color: #b6c2d6;
}
.ot-social:hover { border-color: var(--ot-cyan-300); color: #fff; background: rgba(6, 182, 212, 0.08); }
.ot-social svg, .ot-social .ot-i { width: 18px; height: 18px; }

/* ==========================================================================
   Product tiles (shop) — flat tiles separated by hairlines, not shadow cards
   ========================================================================== */
.ot-tiles {
    display: grid;
    grid-template-columns: repeat(1, minmax(0, 1fr));
    border-top: 1px solid var(--ot-line);
    border-left: 1px solid var(--ot-line);
}
@media (min-width: 640px) { .ot-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1024px) { .ot-tiles { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1280px) { .ot-tiles--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.ot-tile {
    position: relative;
    display: flex;
    flex-direction: column;
    background: #fff;
    border-right: 1px solid var(--ot-line);
    border-bottom: 1px solid var(--ot-line);
    transition: background-color .25s ease;
}
.ot-tile:hover { background: #fbfcfe; }
.ot-tile::after {
    content: "";
    position: absolute;
    inset: -1px;
    border: 1px solid transparent;
    pointer-events: none;
    transition: border-color .25s ease;
}
.ot-tile:hover::after { border-color: rgba(37, 99, 235, 0.45); }
.ot-tile-media {
    position: relative;
    aspect-ratio: 1 / 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 28px;
    background: radial-gradient(circle at 50% 60%, #f1f5fb 0%, #ffffff 70%);
    overflow: hidden;
}
.ot-tile-media img { max-height: 100%; object-fit: contain; transition: transform .5s ease; }
.ot-tile:hover .ot-tile-media img { transform: scale(1.05); }
.ot-tile-body { padding: 20px 22px 24px; display: flex; flex-direction: column; flex: 1; }
.ot-price {
    font-family: var(--ot-font-display);
    font-weight: 700;
    font-size: 1.35rem;
    color: var(--ot-text);
    letter-spacing: -0.02em;
}

/* ==========================================================================
   Misc
   ========================================================================== */
.ot-divider { height: 1px; background: var(--ot-line); border: 0; }
.ot-kbd {
    font-family: var(--ot-font-mono);
    font-size: 12px;
    padding: 2px 8px;
    border-radius: 6px;
    background: var(--ot-bg-alt);
    border: 1px solid var(--ot-line);
    color: #334155;
}
.ot-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 600;
}
.ot-badge--green { color: #047857; background: #d1fae5; }
.ot-badge--blue { color: #1d4ed8; background: #dbeafe; }
.ot-badge--amber { color: #b45309; background: #fef3c7; }
.ot-badge--red { color: #b91c1c; background: #fee2e2; }
.ot-badge--gray { color: #475569; background: #e2e8f0; }

.ot-bg-circuit {
    position: absolute;
    pointer-events: none;
    opacity: .5;
    z-index: 0;
}

/* ==========================================================================
   Re-assert Tailwind display utilities so `hidden md:flex` etc. still win
   over the display set by ot-* component classes above.
   ========================================================================== */
.block { display: block; }
.inline-block { display: inline-block; }
.inline { display: inline; }
.flex { display: flex; }
.inline-flex { display: inline-flex; }
.grid { display: grid; }
.hidden { display: none; }
@media (min-width: 640px) {
    .sm\:hidden { display: none; }
    .sm\:block { display: block; }
    .sm\:inline-block { display: inline-block; }
    .sm\:inline { display: inline; }
    .sm\:flex { display: flex; }
    .sm\:inline-flex { display: inline-flex; }
    .sm\:grid { display: grid; }
    .sm\:hidden { display: none; }
}
@media (min-width: 768px) {
    .md\:hidden { display: none; }
    .md\:block { display: block; }
    .md\:inline-block { display: inline-block; }
    .md\:inline { display: inline; }
    .md\:flex { display: flex; }
    .md\:inline-flex { display: inline-flex; }
    .md\:grid { display: grid; }
    .md\:hidden { display: none; }
}
@media (min-width: 1024px) {
    .lg\:hidden { display: none; }
    .lg\:block { display: block; }
    .lg\:inline-block { display: inline-block; }
    .lg\:inline { display: inline; }
    .lg\:flex { display: flex; }
    .lg\:inline-flex { display: inline-flex; }
    .lg\:grid { display: grid; }
    .lg\:hidden { display: none; }
}
@media (min-width: 1280px) {
    .xl\:hidden { display: none; }
    .xl\:block { display: block; }
    .xl\:inline-block { display: inline-block; }
    .xl\:inline { display: inline; }
    .xl\:flex { display: flex; }
    .xl\:inline-flex { display: inline-flex; }
    .xl\:grid { display: grid; }
    .xl\:hidden { display: none; }
}

/* ==========================================================================
   Brand logo size + themed scrollbars
   ========================================================================== */
.ot-nav-logo { display: block; height: 28px; width: auto; }
@media (max-width: 767px) { .ot-nav-logo { height: 24px; } }

html { scrollbar-color: #94a3b8 #eef2f7; scrollbar-width: thin; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: #eef2f7; }
::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, #60a5fa, #22d3ee);
    border-radius: 999px;
    border: 2px solid #eef2f7;
}
::-webkit-scrollbar-thumb:hover { background: linear-gradient(180deg, #2563eb, #06b6d4); }
::-webkit-scrollbar-corner { background: #eef2f7; }
/* thin dark variant inside dark panels (e.g. scrollable code/menus) */
.ot-section--dark ::-webkit-scrollbar-track { background: var(--ot-ink-2); }
.ot-section--dark ::-webkit-scrollbar-thumb { border-color: var(--ot-ink-2); }

/* Phones: two compact product tiles per row instead of one full-width tile */
@media (max-width: 639px) {
    .ot-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ot-tile-media { padding: 14px; }
    .ot-tile-body { padding: 12px 12px 14px; }
    .ot-tile .ot-h3 { font-size: .9rem !important; }
    .ot-price { font-size: 1.05rem; }
}

.ot-footer-logo { display: block; height: 32px; width: auto; margin-bottom: 24px; }

/* ==========================================================================
   Dark sections (heroes etc.): flowing data-wave lines instead of the grid
   ========================================================================== */
.ot-section--dark::before {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 600' preserveAspectRatio='none'%3E%3Cpolyline points='0,150.0 20,160.8 40,170.7 60,179.3 80,185.9 100,190.2 120,192.1 140,191.8 160,189.5 180,186.0 200,181.7 220,177.3 240,173.5 260,170.7 280,169.3 300,169.4 320,170.8 340,173.2 360,176.1 380,178.9 400,181.0 420,181.7 440,180.6 460,177.4 480,172.0 500,164.6 520,155.4 540,145.2 560,134.7 580,124.4 600,115.3 620,108.0 640,102.9 660,100.3 680,100.2 700,102.4 720,106.5 740,111.8 760,117.9 780,123.8 800,129.1 820,133.2 840,135.8 860,136.9 880,136.6 900,135.3 920,133.5 940,131.8 960,130.7 980,130.9 1000,132.9 1020,136.8 1040,142.6 1060,150.3 1080,159.2 1100,169.0 1120,178.7 1140,187.8 1160,195.4 1180,200.9 1200,204.1 1220,204.6 1240,202.6 1260,198.3 1280,192.2 1300,185.0 1320,177.3 1340,169.9 1360,163.4 1380,158.2 1400,154.7 1420,152.8 1440,152.3 1460,153.0 1480,154.3 1500,155.6 1520,156.2 1540,155.6 1560,153.5 1580,149.6 1600,144.0' stroke='%2322d3ee' stroke-opacity='0.160' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,222.0 20,229.4 40,234.3 60,236.7 80,236.6 100,234.4 120,230.5 140,225.5 160,220.2 180,215.2 200,211.1 220,208.1 240,206.5 260,206.3 280,207.1 300,208.6 320,210.1 340,211.1 360,211.0 380,209.1 400,205.4 420,199.5 440,191.6 460,182.2 480,171.6 500,160.6 520,150.0 540,140.5 560,132.8 580,127.3 600,124.5 620,124.4 640,126.9 660,131.4 680,137.6 700,144.6 720,151.8 740,158.6 760,164.3 780,168.7 800,171.6 820,173.0 840,173.2 860,172.7 880,172.1 900,171.9 920,172.8 940,175.1 960,179.3 980,185.2 1000,192.9 1020,201.8 1040,211.5 1060,221.2 1080,230.2 1100,237.8 1120,243.3 1140,246.4 1160,246.7 1180,244.2 1200,239.3 1220,232.4 1240,224.1 1260,215.2 1280,206.3 1300,198.1 1320,191.2 1340,185.9 1360,182.3 1380,180.4 1400,179.7 1420,179.9 1440,180.4 1460,180.5 1480,179.7 1500,177.6 1520,173.9 1540,168.5 1560,161.8 1580,154.1 1600,145.9' stroke='%2360a5fa' stroke-opacity='0.189' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,281.5 20,281.4 40,278.8 60,274.3 80,268.4 100,261.9 120,255.5 140,249.6 160,244.9 180,241.5 200,239.4 220,238.5 240,238.4 260,238.6 280,238.4 300,237.4 320,234.9 340,230.7 360,224.5 380,216.5 400,206.9 420,196.3 440,185.2 460,174.5 480,165.0 500,157.3 520,151.9 540,149.3 560,149.5 580,152.4 600,157.7 620,164.9 640,173.2 660,181.9 680,190.3 700,197.9 720,204.1 740,208.8 760,212.0 780,213.8 800,214.6 820,215.1 840,215.7 860,217.1 880,219.7 900,223.8 920,229.6 940,236.9 960,245.5 980,254.8 1000,264.1 1020,272.7 1040,279.8 1060,284.9 1080,287.5 1100,287.2 1120,284.1 1140,278.4 1160,270.4 1180,260.9 1200,250.5 1220,240.1 1240,230.2 1260,221.5 1280,214.5 1300,209.3 1320,205.9 1340,204.0 1360,203.2 1380,203.0 1400,202.8 1420,202.0 1440,200.1 1460,196.9 1480,192.3 1500,186.4 1520,179.5 1540,172.2 1560,165.1 1580,159.0 1600,154.5' stroke='%2360a5fa' stroke-opacity='0.218' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,316.8 20,309.7 40,301.8 60,293.6 80,285.9 100,279.2 120,273.8 140,269.8 160,267.1 180,265.4 200,264.2 220,263.0 240,261.1 260,258.1 280,253.6 300,247.4 320,239.5 340,230.1 360,219.7 380,209.0 400,198.7 420,189.5 440,182.1 460,177.2 480,175.1 500,175.9 520,179.7 540,186.0 560,194.4 580,204.1 600,214.5 620,224.7 640,234.1 660,242.3 680,248.8 700,253.7 720,257.0 740,259.1 760,260.5 780,261.8 800,263.5 820,266.0 840,269.9 860,275.2 880,281.9 900,289.7 920,298.2 940,306.6 960,314.4 980,320.8 1000,325.1 1020,326.9 1040,325.8 1060,321.8 1080,315.0 1100,305.9 1120,295.0 1140,283.1 1160,271.1 1180,259.5 1200,249.2 1220,240.5 1240,233.7 1260,229.0 1280,226.0 1300,224.5 1320,223.9 1340,223.6 1360,223.1 1380,221.8 1400,219.5 1420,215.9 1440,211.1 1460,205.5 1480,199.4 1500,193.6 1520,188.6 1540,185.2 1560,183.9 1580,185.2 1600,189.3' stroke='%2322d3ee' stroke-opacity='0.243' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,329.2 20,319.6 40,310.8 60,303.3 80,297.4 100,292.9 120,289.6 140,287.1 160,284.9 180,282.4 200,279.1 220,274.5 240,268.6 260,261.1 280,252.3 300,242.7 320,232.7 340,223.1 360,214.7 380,208.1 400,203.9 420,202.7 440,204.5 460,209.3 480,216.8 500,226.6 520,237.8 540,249.9 560,261.9 580,273.2 600,283.2 620,291.6 640,298.0 660,302.8 680,306.0 700,308.1 720,309.8 740,311.5 760,313.7 780,317.0 800,321.4 820,327.1 840,333.8 860,341.0 880,348.3 900,354.8 920,360.1 940,363.3 960,364.0 980,361.8 1000,356.6 1020,348.7 1040,338.3 1060,326.1 1080,312.8 1100,299.2 1120,286.1 1140,274.1 1160,264.0 1180,255.9 1200,250.1 1220,246.3 1240,244.3 1260,243.6 1280,243.5 1300,243.6 1320,243.3 1340,242.1 1360,240.0 1380,236.7 1400,232.7 1420,228.3 1440,224.0 1460,220.5 1480,218.4 1500,218.4 1520,220.8 1540,226.0 1560,233.8 1580,244.2 1600,256.5' stroke='%2360a5fa' stroke-opacity='0.272' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,329.9 20,322.0 40,315.8 60,311.0 80,307.4 100,304.5 120,301.6 140,298.3 160,294.1 180,288.7 200,282.0 220,274.3 240,265.7 260,256.9 280,248.5 300,241.2 320,235.8 340,232.8 360,232.7 380,235.6 400,241.7 420,250.6 440,261.8 460,274.7 480,288.4 500,302.2 520,315.2 540,327.0 560,336.9 580,344.8 600,350.7 620,354.7 640,357.4 660,359.1 680,360.5 700,362.1 720,364.4 740,367.6 760,371.8 780,376.9 800,382.6 820,388.2 840,393.3 860,397.0 880,398.8 900,398.2 920,394.7 940,388.4 960,379.2 980,367.6 1000,354.1 1020,339.4 1040,324.4 1060,309.9 1080,296.7 1100,285.3 1120,276.2 1140,269.6 1160,265.3 1180,263.2 1200,262.6 1220,263.2 1240,264.2 1260,265.2 1280,265.6 1300,265.2 1320,263.9 1340,261.8 1360,259.3 1380,256.9 1400,255.1 1420,254.6 1440,256.0 1460,259.7 1480,265.9 1500,274.8 1520,286.1 1540,299.4 1560,314.0 1580,329.2 1600,344.2' stroke='%2360a5fa' stroke-opacity='0.243' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,330.2 20,325.7 40,322.2 60,319.3 80,316.3 100,312.7 120,308.3 140,302.9 160,296.6 180,289.6 200,282.3 220,275.5 240,269.8 260,265.8 280,264.3 300,265.6 320,269.9 340,277.4 360,287.7 380,300.3 400,314.7 420,330.0 440,345.4 460,360.1 480,373.3 500,384.6 520,393.6 540,400.4 560,404.9 580,407.7 600,409.2 620,409.9 640,410.5 660,411.4 680,413.0 700,415.4 720,418.6 740,422.2 760,425.9 780,429.1 800,431.1 820,431.3 840,429.2 860,424.4 880,416.8 900,406.4 920,393.6 940,378.9 960,363.1 980,347.0 1000,331.5 1020,317.2 1040,305.0 1060,295.2 1080,288.1 1100,283.7 1120,281.7 1140,281.8 1160,283.3 1180,285.7 1200,288.3 1220,290.6 1240,292.3 1260,293.2 1280,293.4 1300,293.1 1320,292.7 1340,292.8 1360,294.0 1380,296.9 1400,301.8 1420,309.2 1440,319.0 1460,331.1 1480,345.0 1500,360.3 1520,376.1 1540,391.5 1560,405.8 1580,418.2 1600,428.2' stroke='%2322d3ee' stroke-opacity='0.218' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,336.1 20,333.7 40,331.3 60,328.3 80,324.5 100,320.0 120,315.0 140,309.7 160,304.9 180,301.0 200,298.8 220,298.9 240,301.8 260,307.6 280,316.5 300,328.2 320,342.3 340,358.0 360,374.7 380,391.5 400,407.4 420,421.8 440,434.2 460,444.0 480,451.2 500,455.9 520,458.5 540,459.3 560,459.0 580,458.2 600,457.3 620,456.9 640,457.1 660,458.0 680,459.4 700,460.8 720,461.9 740,461.9 760,460.4 780,456.7 800,450.5 820,441.7 840,430.2 860,416.4 880,400.9 900,384.2 920,367.3 940,351.1 960,336.2 980,323.5 1000,313.4 1020,306.3 1040,302.2 1060,300.8 1080,301.8 1100,304.7 1120,308.7 1140,313.3 1160,317.9 1180,321.9 1200,325.3 1220,328.0 1240,330.0 1260,331.9 1280,334.0 1300,336.9 1320,341.2 1340,347.4 1360,355.6 1380,366.1 1400,378.8 1420,393.1 1440,408.6 1460,424.6 1480,440.1 1500,454.4 1520,466.7 1540,476.4 1560,482.9 1580,486.3 1600,486.4' stroke='%2360a5fa' stroke-opacity='0.189' stroke-width='1.2' fill='none'/%3E%3Cpolyline points='0,349.3 20,347.6 40,345.3 60,342.6 80,339.7 100,337.1 120,335.4 140,335.2 160,337.2 180,341.7 200,349.0 220,359.3 240,372.3 260,387.5 280,404.4 300,422.2 320,440.0 340,456.9 360,472.1 380,485.0 400,495.2 420,502.5 440,507.0 460,508.9 480,508.7 500,506.9 520,504.3 540,501.4 560,498.6 580,496.3 600,494.6 620,493.4 640,492.5 660,491.2 680,489.2 700,485.8 720,480.6 740,473.1 760,463.2 780,450.9 800,436.4 820,420.2 840,403.1 860,385.8 880,369.3 900,354.3 920,341.5 940,331.6 960,324.9 980,321.5 1000,321.1 1020,323.5 1040,328.0 1060,334.0 1080,340.9 1100,347.9 1120,354.6 1140,360.6 1160,365.8 1180,370.4 1200,374.5 1220,378.6 1240,383.2 1260,388.9 1280,396.1 1300,405.0 1320,416.0 1340,428.7 1360,443.1 1380,458.4 1400,474.1 1420,489.2 1440,503.1 1460,514.8 1480,523.7 1500,529.4 1520,531.7 1540,530.5 1560,526.2 1580,519.2 1600,510.2' stroke='%2360a5fa' stroke-opacity='0.160' stroke-width='1.2' fill='none'/%3E%3C/svg%3E");
    background-size: 1600px 100%;
    background-repeat: repeat-x;
    background-position: 0 0;
    -webkit-mask-image: linear-gradient(180deg, transparent 0%, #000 30%, #000 70%, transparent 100%);
    mask-image: linear-gradient(180deg, transparent 0%, #000 30%, #000 70%, transparent 100%);
    animation: ot-wave-drift 40s linear infinite;
}
@keyframes ot-wave-drift { to { background-position: -1600px 0; } }
@media (prefers-reduced-motion: reduce) { .ot-section--dark::before { animation: none; } }

/* ==========================================================================
   Brand backgrounds for CTA bands and the footer (replace the grid)
   ========================================================================== */
/* CTA: concentric "signal" rings from the logo mark + a slow radar sweep */
.ot-section--dark.ot-cta::before {
    animation: none;
    inset: auto;
    top: 50%;
    right: -220px;
    width: 900px;
    height: 900px;
    transform: translateY(-50%);
    background-image:
        radial-gradient(circle, transparent 0 118px, rgba(34, 211, 238, .22) 119px 121px, transparent 122px),
        repeating-radial-gradient(circle, transparent 0 58px, rgba(96, 165, 250, .12) 59px 60px, transparent 61px 90px);
    -webkit-mask-image: radial-gradient(circle, #000 20%, transparent 70%);
    mask-image: radial-gradient(circle, #000 20%, transparent 70%);
    border-radius: 50%;
}
.ot-section--dark.ot-cta .ot-container::after {
    content: "";
    position: absolute;
    top: 50%;
    right: -220px;
    width: 900px;
    height: 900px;
    margin-top: -450px;
    border-radius: 50%;
    background: conic-gradient(from 0deg, rgba(34, 211, 238, .18), transparent 18%, transparent);
    -webkit-mask-image: radial-gradient(circle, #000 25%, transparent 68%);
    mask-image: radial-gradient(circle, #000 25%, transparent 68%);
    animation: ot-sweep 9s linear infinite;
    pointer-events: none;
    z-index: -1;
}
.ot-section--dark.ot-cta .ot-container { z-index: 0; }
@keyframes ot-sweep { to { transform: rotate(360deg); } }
@media (max-width: 767px) {
    .ot-section--dark.ot-cta::before,
    .ot-section--dark.ot-cta .ot-container::after { right: -420px; }
}

/* Footer: faint PCB traces rising from the bottom + gradient top edge */
footer.ot-section--dark::before {
    animation: none;
    background-position: 0 0;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='160' viewBox='0 0 240 160' fill='none' stroke='%2360a5fa' stroke-opacity='.22' stroke-width='1'%3E%3Cpath d='M0 40h60l20 20h60M140 60h40l20-20h40M20 120h50l20-20h50l15 15h85M100 160v-30l15-15M200 0v25l-20 15M40 0v20l20 20'/%3E%3Cg fill='%2322d3ee' fill-opacity='.35' stroke='none'%3E%3Ccircle cx='60' cy='40' r='2.5'/%3E%3Ccircle cx='140' cy='60' r='2.5'/%3E%3Ccircle cx='70' cy='120' r='2.5'/%3E%3Ccircle cx='155' cy='115' r='2.5'/%3E%3Ccircle cx='200' cy='25' r='2.5'/%3E%3C/g%3E%3C/svg%3E");
    background-size: 240px 160px;
    -webkit-mask-image: linear-gradient(to top, #000 0%, rgba(0, 0, 0, .35) 45%, transparent 85%);
    mask-image: linear-gradient(to top, #000 0%, rgba(0, 0, 0, .35) 45%, transparent 85%);
}
footer.ot-section--dark { border-top: 1px solid transparent; border-image: linear-gradient(90deg, transparent, rgba(34, 211, 238, .55), rgba(37, 99, 235, .55), transparent) 1; }
@media (prefers-reduced-motion: reduce) {
    .ot-section--dark.ot-cta .ot-container::after { animation: none; }
}
.ot-section--dark.ot-cta::before {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 900 900' fill='none'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='1' x2='1' y2='0'%3E%3Cstop offset='0' stop-color='%232563eb'/%3E%3Cstop offset='1' stop-color='%2322d3ee'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='%2360a5fa' stroke-opacity='.16'%3E%3Ccircle cx='450' cy='450' r='120'/%3E%3Ccircle cx='450' cy='450' r='200'/%3E%3Ccircle cx='450' cy='450' r='280' stroke-dasharray='2 10'/%3E%3Ccircle cx='450' cy='450' r='420'/%3E%3C/g%3E%3Cpath d='M769.6 300.9 A350 350 0 1 1 597.9 132.8' stroke='url(%23g)' stroke-opacity='.55' stroke-width='18' stroke-linecap='round'/%3E%3Ccircle cx='450' cy='450' r='150' stroke='url(%23g)' stroke-opacity='.35' stroke-width='18'/%3E%3Crect x='680' y='195' width='34' height='34' rx='8' fill='%2322d3ee' fill-opacity='.55'/%3E%3C/svg%3E");
    background-size: contain;
    background-repeat: no-repeat;
    -webkit-mask-image: radial-gradient(circle, #000 45%, transparent 72%);
    mask-image: radial-gradient(circle, #000 45%, transparent 72%);
    opacity: .9;
}

/* ==========================================================================
   Icons: static SVGs from /assets/svg/, applied as a mask and filled with
   currentColor so they follow text colour and hover states.
   Usage: <i class="ot-i" style="--i:url(/assets/svg/name.svg)" aria-hidden="true"></i>
   ========================================================================== */
.ot-i {
    display: inline-block;
    flex-shrink: 0;
    width: 1.25em;
    height: 1.25em;
    vertical-align: -0.2em;
    font-style: normal;
    background-color: currentColor;
    -webkit-mask: var(--i) center / contain no-repeat;
    mask: var(--i) center / contain no-repeat;
}

/* ==========================================================================
   Flat buttons: keep gradient fills, drop shadows, glows and lift-on-hover
   ========================================================================== */
.ot-btn,
.ot-btn:hover,
.ot-btn:focus,
.ot-btn:active,
button,
input[type="submit"],
input[type="button"],
.form-button {
    box-shadow: none !important;
    text-shadow: none;
}
.ot-btn:hover,
.ot-btn:active,
.form-button:active { transform: none !important; }
.ot-btn--primary:hover { filter: brightness(1.08) saturate(1.05); }
.ot-btn--primary:active { filter: brightness(.95); }
.ot-btn--dark:hover { filter: brightness(1.2); }
.ot-btn:focus-visible { outline: 2px solid var(--ot-cyan); outline-offset: 2px; }
