Files
OTSSigns-Website/theme/assets/css/main.css

6140 lines
164 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* =============================================================
OTS Theme - Main Stylesheet
============================================================= */
/* ── 1. CSS Variables ───────────────────────────────────────── */
:root,
[data-theme="light"] {
/* ── Light palette - Orange Primary + Green Accent ── */
--color-primary: var(--wp--preset--color--primary, #D83302);
--color-primary-dk: var(--wp--preset--color--primary-dk, #A22702);
--color-primary-lt: var(--wp--preset--color--primary-lt, #FFF0EB);
--color-primary-rgb: 216,51,2;
--color-accent: var(--wp--preset--color--accent, #4CAF50);
--color-accent-dk: var(--wp--preset--color--accent-dk, #388E3C);
--color-accent-lt: var(--wp--preset--color--accent-lt, #E8F5E9);
--color-accent-rgb: 76,175,80;
--color-dark: var(--wp--preset--color--dark, #111111);
--color-dark-2: var(--wp--preset--color--dark-2, #1A1A1A);
--color-text: var(--wp--preset--color--text, #333333);
--color-text-muted: var(--wp--preset--color--text-muted, #666666);
--color-border: var(--wp--preset--color--border, #E0E0E0);
--color-bg: var(--wp--preset--color--bg, #ffffff);
--color-bg-alt: var(--wp--preset--color--bg-alt, #F5F5F5);
--color-bg-dark: var(--wp--preset--color--dark, #111111);
--color-heading: var(--wp--preset--color--dark, #111111);
--header-scrolled-bg: rgba(255,255,255,.97);
--header-scrolled-text: var(--wp--preset--color--text, #333333);
--card-bg: var(--wp--preset--color--bg, #ffffff);
--form-bg: var(--wp--preset--color--bg-alt, #F5F5F5);
--form-bg-focus: var(--wp--preset--color--bg, #ffffff);
/* ── Typography ── */
--font-sans: var(--wp--preset--font-family--sans, 'Inter', system-ui, -apple-system, sans-serif);
--font-heading: var(--wp--preset--font-family--heading, var(--font-sans));
/* ── Border radii ── */
--radius-sm: var(--wp--custom--radius--sm, 6px);
--radius-md: var(--wp--custom--radius--md, 10px);
--radius-lg: var(--wp--custom--radius--lg, 16px);
--radius-xl: var(--wp--custom--radius--xl, 24px);
--shadow-sm: none;
--shadow-md: 0 2px 8px rgba(0,0,0,.06);
--shadow-lg: 0 4px 16px rgba(0,0,0,.08);
--transition: 0.2s ease;
/* ── Layout ── */
--container-max: var(--wp--custom--container--max, 1200px);
--container-pad: var(--wp--custom--container--pad, clamp(1rem, 5vw, 2rem));
}
/* ── Dark Mode ────────────────────────────────────────────── */
[data-theme="dark"] {
--color-primary: var(--wp--custom--dark--primary, #FF6B3D);
--color-primary-dk: var(--wp--custom--dark--primary-dk, #D83302);
--color-primary-lt: var(--wp--custom--dark--primary-lt, rgba(216,51,2,.15));
--color-primary-rgb: 255,107,61;
--color-accent: var(--wp--custom--dark--accent, #66BB6A);
--color-accent-dk: var(--wp--custom--dark--accent-dk, #388E3C);
--color-accent-lt: var(--wp--custom--dark--accent-lt, rgba(76,175,80,.12));
--color-accent-rgb: 102,187,106;
--color-dark: var(--wp--custom--dark--dark, #E0E0E0);
--color-dark-2: var(--wp--custom--dark--dark-2, #BDBDBD);
--color-text: var(--wp--custom--dark--text, #E0E0E0);
--color-text-muted: var(--wp--custom--dark--text-muted, #9E9E9E);
--color-border: var(--wp--custom--dark--border, #333333);
--color-bg: var(--wp--custom--dark--bg, #1A1A1A);
--color-bg-alt: var(--wp--custom--dark--bg-alt, #222222);
--color-bg-dark: var(--wp--custom--dark--bg-dark, #111111);
--color-heading: var(--wp--custom--dark--heading, #F5F5F5);
--header-scrolled-bg: rgba(26,26,26,.97);
--header-scrolled-text: var(--wp--custom--dark--text, #E0E0E0);
--card-bg: var(--wp--custom--dark--card-bg, #222222);
--form-bg: var(--wp--custom--dark--card-bg, #222222);
--form-bg-focus: #2A2A2A;
--shadow-sm: none;
--shadow-md: 0 2px 8px rgba(0,0,0,.3);
--shadow-lg: 0 4px 16px rgba(0,0,0,.4);
}
/* ── 2. Reset / Base ────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; font-size: 16px; }
body {
font-family: var(--font-sans);
color: var(--color-text);
background: var(--color-bg);
line-height: 1.65;
-webkit-font-smoothing: antialiased;
}
img, video { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; transition: color var(--transition); }
a:hover { color: var(--color-primary); }
/* ── Scroll-reveal animation classes ───────────────────────── */
.scroll-hidden {
opacity: 0 !important;
transform: translateY(24px) !important;
/* Prevent transition: all on card elements from animating the hide,
which would cause a visible fade-out flicker and race conditions
with IntersectionObserver — especially after Gutenberg re-saves
inject inline styles onto the block element. */
transition: none !important;
}
.scroll-visible {
opacity: 1;
transform: translateY(0);
/* !important ensures this wins over transition: all on .oribi-card
(same selector specificity, but .oribi-card appears later in the
stylesheet and would otherwise override this). */
transition: opacity .5s ease, transform .5s ease !important;
}
/* Smooth theme transition */
body,
.site-header,
.feature-card,
.pricing-card,
.contact-form-wrap,
.platform-visual,
.platform-text h3,
.platform-text p,
.form-group input,
.form-group textarea,
.form-group select,
.comparison-table-wrap,
.comparison-table thead th,
.comparison-table tbody td,
.comparison-group-row td { transition: background var(--transition), color var(--transition), border-color var(--transition), box-shadow var(--transition); }
ul { list-style: none; }
button { font-family: inherit; cursor: pointer; border: none; background: none; }
/* ── 3. Layout Utilities ───────────────────────────────────── */
.container {
width: 100%;
max-width: var(--container-max);
margin-inline: auto;
padding-inline: var(--container-pad);
}
.section {
padding-block: clamp(4rem, 8vw, 7rem);
}
.section-alt { background: var(--color-bg-alt); }
.section-dark {
background: #111111;
color: #fff;
}
.section-header {
text-align: center;
max-width: 680px;
margin-inline: auto;
margin-bottom: 3.5rem;
}
.section-header .section-label {
display: inline-block;
font-size: .75rem;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
color: var(--color-primary);
margin-bottom: .75rem;
}
.section-dark .section-header .section-label { color: var(--color-primary-lt); }
.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 2rem; }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.5rem; }
@media (max-width: 960px) {
.grid-3 { grid-template-columns: repeat(2, 1fr); }
.grid-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
.grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; gap: 1.25rem; }
}
/* ── 4. Typography ─────────────────────────────────────────── */
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-heading, var(--font-sans));
font-weight: 700;
line-height: 1.2;
color: var(--color-heading);
}
.section-dark h1,
.section-dark h2,
.section-dark h3 { color: #fff; }
h1 { font-size: clamp(2rem, 5vw, 3.5rem); }
h2 { font-size: clamp(1.6rem, 3.5vw, 2.4rem); }
h3 { font-size: clamp(1.1rem, 2vw, 1.35rem); }
h4 { font-size: 1rem; }
p { margin-bottom: 1rem; }
p:last-child { margin-bottom: 0; }
.lead {
font-size: clamp(1rem, 2vw, 1.2rem);
color: var(--color-text-muted);
line-height: 1.75;
}
.section-dark .lead { color: rgba(255,255,255,.75); }
/* ── 5. Buttons ────────────────────────────────────────────── */
.btn {
display: inline-flex;
align-items: center;
gap: .5rem;
padding: .8rem 1.75rem;
border-radius: var(--radius-sm);
font-size: .95rem;
font-weight: 600;
transition: all var(--transition);
white-space: nowrap;
cursor: pointer;
}
.btn-primary {
background: var(--color-primary);
color: #fff;
}
.btn-primary:hover {
background: var(--color-primary-dk);
color: #fff;
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(var(--color-primary-rgb),.3);
}
.btn-outline {
border: 2px solid var(--color-primary);
color: var(--color-primary);
background: transparent;
}
.btn-outline:hover {
background: var(--color-primary);
color: #fff;
transform: translateY(-1px);
}
.btn-ghost {
border: 2px solid rgba(255,255,255,.35);
color: #fff;
background: transparent;
}
.btn-ghost:hover {
background: rgba(255,255,255,.1);
border-color: rgba(255,255,255,.6);
color: #fff;
}
.btn-sm { padding: .55rem 1.2rem; font-size: .875rem; }
.btn-lg { padding: 1rem 2.25rem; font-size: 1.05rem; }
.btn-group {
display: flex;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
}
/* ── 6. Header ─────────────────────────────────────────────── */
.site-header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 100;
padding-block: 1rem;
background: transparent;
transition: background var(--transition), box-shadow var(--transition), padding var(--transition);
}
.site-header.scrolled {
background: var(--header-scrolled-bg);
box-shadow: var(--shadow-sm);
padding-block: .65rem;
-webkit-backdrop-filter: blur(8px);
backdrop-filter: blur(8px);
}
.header-inner {
display: flex;
align-items: center;
gap: 2rem;
height: 70px;
}
/* Logo */
.site-logo {
display: flex;
align-items: center;
flex-shrink: 0;
max-height: 80px;
overflow: hidden;
gap: 1.25rem;
}
.site-logo a { display: flex; align-items: center; }
.custom-logo-link { display: flex; align-items: center; }
.site-logo img,
.custom-logo-link img,
.custom-logo,
.header-inner img {
max-height: 80px !important;
width: auto !important;
height: auto !important;
max-width: 260px !important;
display: block !important;
object-fit: contain;
}
.logo-text {
font-size: 1.35rem;
font-weight: 300;
color: #fff;
letter-spacing: -.01em;
transition: color var(--transition);
}
.logo-text strong { font-weight: 800; color: var(--color-primary); margin-right: .25em; }
/* When header is over a light hero (set by JS) — unscrolled only */
.site-header.over-light-hero:not(.scrolled) .nav-menu a { color: var(--color-text); }
.site-header.over-light-hero:not(.scrolled) .nav-menu a:hover,
.site-header.over-light-hero:not(.scrolled) .nav-menu .current-menu-item > a { color: var(--color-primary); }
.site-header.over-light-hero:not(.scrolled) .logo-text { color: var(--color-heading); }
.site-header.over-light-hero:not(.scrolled) .nav-toggle span { background: var(--color-heading); }
/* Nav */
.site-nav { margin-left: auto; }
.nav-menu {
display: flex;
align-items: center;
gap: 2rem;
}
.nav-menu a {
font-size: .9rem;
font-weight: 500;
color: rgba(255,255,255,.85);
position: relative;
padding-bottom: 2px;
}
/* Scrolled: switch to theme-appropriate text on solid bg */
.site-header.scrolled .nav-menu a { color: var(--header-scrolled-text); }
.site-header.scrolled .nav-menu a:hover,
.site-header.scrolled .nav-menu .current-menu-item > a { color: var(--color-primary); }
.site-header.scrolled .logo-text { color: var(--color-heading); }
.site-header.scrolled .nav-toggle span { background: var(--color-heading); }
.nav-menu a::after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 0;
height: 2px;
background: var(--color-primary);
transition: width var(--transition);
}
.nav-menu a:hover,
.nav-menu .current-menu-item > a { color: #fff; }
.nav-menu a:hover::after,
.nav-menu .current-menu-item > a::after { width: 100%; }
/* Contact button in nav */
.nav-contact a.btn {
display: flex !important;
align-items: center !important;
justify-content: center !important;
padding: .6rem 1.8rem;
font-size: .85rem;
border-radius: 50px;
color: #fff !important;
}
.nav-contact a.btn::after { display: none; } /* Remove underline animation from button */
/* ── Dropdown sub-menu ─────────────────────────────────────── */
.nav-menu > li {
position: relative;
}
/* Invisible bridge fills the gap between the link and the dropdown panel,
so moving the cursor downward never breaks the :hover state. */
.nav-menu > li.menu-item-has-children::after {
content: '';
position: absolute;
top: 100%;
left: -1rem;
right: -1rem;
height: .85rem; /* must be >= the gap set on .sub-menu (top: calc(100% + .75rem)) */
}
/* Caret indicator on parent items */
.nav-menu > li.menu-item-has-children > a {
padding-right: 1.2em;
}
.nav-menu > li.menu-item-has-children > a::before {
content: '';
position: absolute;
right: 0;
top: 50%;
transform: translateY(-55%) rotate(45deg);
width: 5px;
height: 5px;
border-right: 1.5px solid currentColor;
border-bottom: 1.5px solid currentColor;
transition: transform var(--transition);
}
.nav-menu > li.menu-item-has-children:hover > a::before {
transform: translateY(-30%) rotate(225deg);
}
/* Dropdown panel */
.nav-menu .sub-menu {
position: absolute;
top: calc(100% + .75rem);
left: 50%;
transform: translateX(-50%);
min-width: 200px;
background: var(--color-bg);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
box-shadow: var(--shadow-md);
padding: .5rem 0;
list-style: none;
margin: 0;
z-index: 200;
/* Hidden by default */
opacity: 0;
pointer-events: none;
visibility: hidden;
transform: translateX(-50%) translateY(-6px);
transition: opacity var(--transition), transform var(--transition), visibility var(--transition);
}
/* Arrow notch above the dropdown */
.nav-menu .sub-menu::before {
content: '';
position: absolute;
top: -6px;
left: 50%;
transform: translateX(-50%) rotate(45deg);
width: 10px;
height: 10px;
background: var(--color-bg);
border-top: 1px solid var(--color-border);
border-left: 1px solid var(--color-border);
}
/* Show on hover */
.nav-menu > li.menu-item-has-children:hover > .sub-menu,
.nav-menu > li.menu-item-has-children:focus-within > .sub-menu {
opacity: 1;
pointer-events: auto;
visibility: visible;
transform: translateX(-50%) translateY(0);
}
/* Sub-menu links */
.nav-menu .sub-menu a {
display: block;
padding: .55rem 1.25rem;
font-size: .875rem;
font-weight: 500;
color: var(--color-text);
white-space: nowrap;
}
.nav-menu .sub-menu a::after { display: none; }
.nav-menu .sub-menu a:hover,
.nav-menu .sub-menu .current-menu-item > a {
color: var(--color-primary);
background: var(--color-primary-lt);
}
/* Dark mode overrides */
[data-theme="dark"] .nav-menu .sub-menu {
background: var(--card-bg);
border-color: var(--color-border);
}
[data-theme="dark"] .nav-menu .sub-menu::before {
background: var(--card-bg);
}
[data-theme="dark"] .nav-menu .sub-menu a:hover,
[data-theme="dark"] .nav-menu .sub-menu .current-menu-item > a {
background: var(--color-primary-lt);
}
.header-cta { margin-left: 1rem; }
/* Mobile toggle */
.nav-toggle {
display: none;
flex-direction: column;
gap: 5px;
margin-left: auto;
padding: 4px;
position: relative;
z-index: 101;
}
.nav-toggle span {
display: block;
width: 24px;
height: 2px;
background: #fff;
border-radius: 2px;
transition: all var(--transition);
}
.nav-toggle.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle.open span:nth-child(2) { opacity: 0; }
.nav-toggle.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
@media (max-width: 768px) {
.nav-toggle { display: flex; }
.site-nav, .header-cta { display: none; }
.site-nav.open {
display: block;
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
background: var(--color-bg);
z-index: 99;
overflow: hidden;
}
.site-nav.open .nav-menu {
padding: 5rem 2rem 2rem;
height: 100vh;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
body.menu-open {
overflow: hidden;
}
body.menu-open .site-header.scrolled {
-webkit-backdrop-filter: none;
backdrop-filter: none;
}
.site-nav.open .nav-menu {
flex-direction: column;
align-items: flex-start;
gap: 1.5rem;
}
.site-nav.open .nav-menu > li {
width: 100%;
}
.nav-toggle.open span { background: var(--color-heading); }
.site-nav.open .nav-menu a {
color: var(--color-heading);
font-size: 1.25rem;
}
.site-nav.open .nav-menu a::after {
display: none;
}
/* Mobile sub-menu */
.site-nav.open .nav-menu > li.menu-item-has-children > a {
padding-right: 2rem;
}
.site-nav.open .nav-menu > li.menu-item-has-children > a::before {
right: .25rem;
border-color: var(--color-text-muted);
}
.site-nav.open .nav-menu > li.menu-item-has-children.submenu-open > a::before {
transform: translateY(-30%) rotate(225deg);
}
.site-nav.open .nav-menu .sub-menu {
position: static;
transform: none;
opacity: 1;
visibility: visible;
pointer-events: auto;
background: var(--color-bg-alt);
border: none;
border-radius: var(--radius-sm);
box-shadow: none;
padding: .5rem 0 .5rem .75rem;
margin-top: .5rem;
display: none;
min-width: 0;
width: 100%;
left: auto;
}
.site-nav.open .nav-menu .sub-menu::before { display: none; }
.site-nav.open .nav-menu > li.menu-item-has-children.submenu-open > .sub-menu {
display: block;
}
.site-nav.open .nav-menu > li.menu-item-has-children:hover > .sub-menu,
.site-nav.open .nav-menu > li.menu-item-has-children:focus-within > .sub-menu {
transform: none;
}
.site-nav.open .nav-menu .sub-menu a {
font-size: 1rem;
padding: .4rem .75rem;
color: var(--color-text);
white-space: normal;
display: block;
}
.site-nav.open .nav-menu .sub-menu a:hover {
color: var(--color-primary);
background: transparent;
}
}
/* ── 7. Hero ───────────────────────────────────────────────── */
/* Datacenter canvas background (used by page-hero) */
@keyframes dc-breathe {
0%, 100% { filter: blur(1.5px) brightness(0.82) saturate(1.1); }
50% { filter: blur(2.5px) brightness(0.76) saturate(1.2); }
}
.dc-canvas {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
z-index: 0;
filter: blur(2px) brightness(0.80) saturate(1.15);
animation: dc-breathe 8s ease-in-out infinite;
pointer-events: none;
display: block;
will-change: filter;
}
.hero-overlay {
position: absolute;
inset: 0;
z-index: 1;
pointer-events: none;
background: rgba(17, 17, 17, 0.85);
}
.hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
background: #111111;
color: #fff;
}
.hero-inner {
position: relative;
z-index: 2;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3rem;
align-items: center;
padding-block: 8rem 5rem;
}
.hero-label {
display: inline-flex;
align-items: center;
gap: .5rem;
background: rgba(var(--color-primary-rgb),.12);
border: 1px solid rgba(var(--color-primary-rgb),.25);
color: var(--color-primary);
font-size: .75rem;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
padding: .4rem 1rem;
border-radius: 100px;
margin-bottom: 1.5rem;
}
.hero-title {
font-size: clamp(2.2rem, 5vw, 3.8rem);
font-weight: 900;
line-height: 1.1;
color: #fff;
margin-bottom: 1.5rem;
}
.hero-title .highlight {
color: var(--color-primary);
}
.hero-description {
font-size: 1.1rem;
color: rgba(255,255,255,.7);
max-width: 520px;
margin-bottom: 2.5rem;
line-height: 1.8;
}
.hero-stats {
display: flex;
gap: 2.5rem;
margin-top: 3rem;
padding-top: 2rem;
border-top: 1px solid rgba(255,255,255,.1);
}
.hero-stat-value {
font-size: 1.75rem;
font-weight: 800;
color: #fff;
}
.hero-stat-label {
font-size: .8rem;
color: rgba(255,255,255,.5);
margin-top: .2rem;
}
/* Hero visual - device illustration */
.hero-visual {
display: flex;
justify-content: center;
align-items: flex-end;
min-height: 0;
align-self: center;
}
/* ── Device grid ───────────────────────────────────────────── */
.hero-devices {
display: flex;
align-items: flex-end;
gap: 1.75rem;
padding-bottom: 1rem;
}
/* ── Individual device wrapper ─────────────────────────────── */
.hero-device {
display: flex;
flex-direction: column-reverse;
align-items: center;
gap: .75rem;
opacity: 0;
animation: hero-device-in 1.4s ease-out forwards;
}
.hero-device--laptop { animation-delay: .3s; }
.hero-device--cloud { animation-delay: .6s; }
.hero-device--desktop { animation-delay: .9s; }
.hero-device--phone { animation-delay: 1.2s; }
@keyframes hero-device-in {
from { opacity: 0; transform: translateY(18px); }
to { opacity: 1; transform: translateY(0); }
}
/* ── Device frame ──────────────────────────────────────────── */
.hero-device__frame {
display: flex;
flex-direction: column;
align-items: center;
}
/* ── Screen (shared) ───────────────────────────────────────── */
.hero-device__screen {
background: var(--hero-screen-bg, #0f1623);
border: 1.5px solid var(--hero-screen-border, rgba(255,255,255,.15));
border-radius: 8px 8px 0 0;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 20px rgba(0,0,0,.3), 0 0 0 1px rgba(255,255,255,.05);
}
.hero-device__screen-content {
padding: .75rem;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
gap: .4rem;
}
/* ── Laptop specifics ──────────────────────────────────────── */
.hero-device--laptop .hero-device__screen {
width: 140px;
height: 95px;
}
.hero-device__base {
width: 160px;
height: 6px;
background: var(--hero-frame-bg, #1a2236);
border-radius: 0 0 4px 4px;
border: 1.5px solid var(--hero-screen-border, rgba(255,255,255,.15));
border-top: none;
}
/* -- Laptop app bars -- */
.hero-device__app-bars {
display: flex;
flex-direction: column;
gap: 4px;
width: 80%;
}
.hero-device__app-bars div {
height: 5px;
border-radius: 2px;
background: var(--hero-bar-bg, rgba(255,255,255,.12));
}
.hero-device__app-bars div:nth-child(1) { width: 100%; }
.hero-device__app-bars div:nth-child(2) { width: 75%; }
.hero-device__app-bars div:nth-child(3) { width: 55%; }
.hero-device__app-bars div:nth-child(4) { width: 40%; }
/* ── Cloud (365Care) specifics ─────────────────────────────── */
.hero-device--cloud .hero-device__frame {
align-items: center;
}
.hero-device__cloud-icon {
position: relative;
width: 80px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
filter: drop-shadow(0 2px 12px rgba(var(--color-primary-rgb),.2));
}
.hero-device__cloud-icon svg {
width: 100%;
height: 100%;
}
.hero-device__cloud-icon svg path {
stroke-width: 2.5;
}
.hero-device__cloud-label {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-sans);
font-size: 1.1rem;
font-weight: 900;
color: var(--color-primary);
letter-spacing: -.02em;
padding-top: 6px;
}
/* ── Desktop specifics ─────────────────────────────────────── */
.hero-device--desktop .hero-device__screen {
width: 170px;
height: 115px;
border: 1.5px solid var(--color-primary);
box-shadow: 0 4px 24px rgba(var(--color-primary-rgb),.15), 0 0 0 1px rgba(var(--color-primary-rgb),.08);
}
.hero-device__stand {
width: 10px;
height: 18px;
background: var(--hero-frame-bg, #1a2236);
border-left: 1px solid var(--hero-screen-border, rgba(255,255,255,.1));
border-right: 1px solid var(--hero-screen-border, rgba(255,255,255,.1));
}
.hero-device__stand-base {
width: 50px;
height: 5px;
background: var(--hero-frame-bg, #1a2236);
border-radius: 0 0 3px 3px;
border: 1px solid var(--hero-screen-border, rgba(255,255,255,.1));
border-top: none;
}
/* Dashboard contents */
.hero-device__dash-row {
display: flex;
gap: 6px;
width: 100%;
}
.hero-device__dash-card {
flex: 1;
height: 28px;
border-radius: 4px;
background: var(--hero-bar-bg, rgba(255,255,255,.08));
border: 1px solid var(--hero-card-inner-border, rgba(255,255,255,.04));
}
.hero-device__dash-bar {
width: 100%;
height: 6px;
border-radius: 3px;
background: var(--color-primary);
opacity: .65;
}
.hero-device__dash-bar--short {
width: 60%;
background: var(--color-primary);
opacity: .5;
}
/* ── Phone specifics ───────────────────────────────────────── */
.hero-device--phone .hero-device__screen {
width: 72px;
height: 120px;
border-radius: 12px;
border: 1.5px solid var(--hero-screen-border, rgba(255,255,255,.2));
box-shadow: 0 4px 20px rgba(0,0,0,.3);
}
.hero-device__notif {
display: flex;
flex-direction: column;
align-items: center;
gap: .25rem;
}
.hero-device__notif-icon {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 32px;
border-radius: 50%;
background: rgba(34,197,94,.2);
color: #22c55e;
font-size: .9rem;
font-weight: 700;
box-shadow: 0 0 12px rgba(34,197,94,.25);
}
.hero-device__notif-text {
font-size: .6rem;
font-weight: 600;
color: var(--hero-text-secondary, rgba(255,255,255,.5));
text-transform: uppercase;
letter-spacing: .08em;
}
/* ── Service list (stacks from bottom) ─────────────────────── */
.hero-device__services {
list-style: none;
display: flex;
flex-direction: column-reverse;
gap: .35rem;
width: 100%;
}
.svc {
display: flex;
align-items: center;
gap: .4rem;
font-size: .65rem;
font-weight: 600;
color: var(--hero-text-secondary, rgba(255,255,255,.6));
background: var(--hero-svc-bg, rgba(255,255,255,.04));
border: 1px solid var(--hero-svc-border, rgba(255,255,255,.06));
border-radius: 6px;
padding: .3rem .5rem;
white-space: nowrap;
opacity: 0;
animation: svc-stack-in .8s ease-out forwards;
}
.svc__dot {
width: 5px;
height: 5px;
border-radius: 50%;
background: #22c55e;
flex-shrink: 0;
}
/* Stagger service items - stack upward from device */
.hero-device--laptop .svc--1 { animation-delay: 1.2s; }
.hero-device--laptop .svc--2 { animation-delay: 1.5s; }
.hero-device--laptop .svc--3 { animation-delay: 1.8s; }
.hero-device--cloud .svc--1 { animation-delay: 1.5s; }
.hero-device--cloud .svc--2 { animation-delay: 1.8s; }
.hero-device--cloud .svc--3 { animation-delay: 2.1s; }
.hero-device--desktop .svc--1 { animation-delay: 1.8s; }
.hero-device--desktop .svc--2 { animation-delay: 2.1s; }
.hero-device--desktop .svc--3 { animation-delay: 2.4s; }
.hero-device--phone .svc--1 { animation-delay: 2.1s; }
.hero-device--phone .svc--2 { animation-delay: 2.4s; }
@keyframes svc-stack-in {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
/* ── Light / Dark theme vars for hero ──────────────────────── */
:root, [data-theme="light"] {
--hero-screen-bg: #f7fafc;
--hero-screen-border: #e2e8f0;
--hero-frame-bg: #edf2f7;
--hero-bar-bg: #e2e8f0;
--hero-card-inner-border: #cbd5e0;
--hero-text-secondary: rgba(45,55,72,.6);
--hero-svc-bg: rgba(0,0,0,.03);
--hero-svc-border: #e2e8f0;
}
[data-theme="dark"] {
--hero-screen-bg: #0f1623;
--hero-screen-border: rgba(255,255,255,.1);
--hero-frame-bg: #1a2236;
--hero-bar-bg: rgba(255,255,255,.08);
--hero-card-inner-border: rgba(255,255,255,.04);
--hero-text-secondary: rgba(255,255,255,.55);
--hero-svc-bg: rgba(255,255,255,.04);
--hero-svc-border: rgba(255,255,255,.06);
}
/* Light-mode hero overrides */
[data-theme="light"] .hero {
background: var(--color-bg);
color: var(--color-text);
}
[data-theme="light"] .hero-title {
color: var(--color-heading);
}
[data-theme="light"] .hero-description {
color: var(--color-text-muted);
}
[data-theme="light"] .hero-stats {
border-top-color: var(--color-border);
}
[data-theme="light"] .hero-stat-value {
color: var(--color-heading);
}
[data-theme="light"] .hero-stat-label {
color: var(--color-text-muted);
}
[data-theme="light"] .hero-label {
background: rgba(var(--color-primary-rgb),.08);
border-color: rgba(var(--color-primary-rgb),.2);
}
[data-theme="light"] .hero-device__app-bars div {
background: #cbd5e0;
}
[data-theme="light"] .hero-device__screen {
box-shadow: 0 4px 20px rgba(0,0,0,.08), 0 0 0 1px rgba(0,0,0,.05);
}
[data-theme="light"] .hero-device--desktop .hero-device__screen {
box-shadow: 0 4px 24px rgba(var(--color-primary-rgb),.08), 0 0 0 1px rgba(var(--color-primary-rgb),.05);
}
[data-theme="light"] .hero-device--phone .hero-device__screen {
box-shadow: 0 4px 20px rgba(0,0,0,.08);
}
[data-theme="light"] .hero-device__cloud-icon {
filter: drop-shadow(0 2px 12px rgba(var(--color-primary-rgb),.15));
}
[data-theme="light"] .hero-device__cloud-icon svg path {
stroke: var(--color-primary);
}
[data-theme="light"] .hero-device__notif-icon {
background: rgba(22,163,74,.12);
color: #16a34a;
box-shadow: 0 0 10px rgba(22,163,74,.15);
}
[data-theme="light"] .hero-device__dash-bar {
opacity: .5;
}
[data-theme="light"] .hero-device__dash-bar--short {
opacity: .35;
}
[data-theme="light"] .svc__dot {
background: #16a34a;
}
/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
.hero-device,
.svc {
animation: none;
opacity: 1;
}
}
@media (max-width: 900px) {
.hero-inner { grid-template-columns: 1fr; text-align: center; }
.hero-description { margin-inline: auto; }
.btn-group { justify-content: center; }
.hero-stats { justify-content: center; }
.hero-visual { margin-top: 2rem; }
.hero-devices { gap: 1rem; justify-content: center; }
.hero-device--laptop .hero-device__screen { width: 110px; height: 75px; }
.hero-device__base { width: 126px; }
.hero-device__cloud-icon { width: 64px; height: 48px; }
.hero-device__cloud-label { font-size: .9rem; }
.hero-device--desktop .hero-device__screen { width: 130px; height: 88px; }
.hero-device--phone .hero-device__screen { width: 58px; height: 96px; }
.svc { font-size: .58rem; padding: .25rem .4rem; }
}
@media (max-width: 480px) {
.hero-devices { flex-wrap: wrap; gap: 1.5rem; }
.hero-device--desktop { order: -1; }
}
/* ── 8. Shared Card Base ───────────────────────────────────── */
.oribi-card {
background: var(--card-bg);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
padding: 2rem;
transition: all var(--transition);
position: relative;
}
.oribi-card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-4px);
border-color: var(--color-primary-lt);
}
.oribi-card h3 { margin-bottom: .5rem; font-size: 1.1rem; }
.oribi-card p { color: var(--color-text-muted); font-size: .95rem; }
/* ── Card Image System ─────────────────────────────────────── */
.oribi-card-img {
display: block;
max-width: 100%;
border-radius: var(--radius-sm);
}
.oribi-card-img--contain { object-fit: contain; }
.oribi-card-img--cover { object-fit: cover; }
.oribi-card-img-wrap {
line-height: 0;
overflow: hidden;
}
/* Image position: top */
.oribi-card.img-top .oribi-card-img-wrap {
margin-bottom: 1.25rem;
}
/* Image position: left - side-by-side */
.oribi-card.img-left {
display: flex;
flex-direction: row;
align-items: flex-start;
gap: 1.25rem;
}
.oribi-card.img-left .oribi-card-img-wrap {
flex-shrink: 0;
}
.oribi-card.img-left .oribi-card-body {
flex: 1;
min-width: 0;
}
@media (max-width: 480px) {
.oribi-card.img-left {
flex-direction: column;
}
}
/* Image position: replace-icon - image takes icon slot */
.oribi-card.img-replace-icon .oribi-card-img-wrap {
margin-bottom: 1.25rem;
}
/* Image position: background */
.oribi-card.img-bg {
overflow: hidden;
color: #fff;
}
.oribi-card.img-bg .oribi-card-img-wrap {
position: absolute;
inset: 0;
z-index: 0;
}
.oribi-card.img-bg .oribi-card-img-wrap .oribi-card-img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 0;
}
.oribi-card.img-bg::after {
content: '';
position: absolute;
inset: 0;
background: rgba(17, 17, 17, 0.75);
z-index: 1;
pointer-events: none;
}
.oribi-card.img-bg .oribi-card-body {
position: relative;
z-index: 2;
}
.oribi-card.img-bg h3 { color: #fff; }
.oribi-card.img-bg p { color: rgba(255,255,255,.8); }
/* ── 8a. Feature Card ──────────────────────────────────────── */
.feature-card-link {
display: block;
text-decoration: none;
color: inherit;
}
.feature-card-link:hover { color: inherit; }
.feature-icon {
width: 52px; height: 52px;
background: var(--color-primary-lt);
color: var(--color-primary);
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 1.25rem;
font-size: 1.4rem;
transition: transform var(--transition), background var(--transition), color var(--transition);
}
/* Font Awesome <i> inside icon containers - normalise line-height and prevent
the icon from inheriting an unexpected font-size from its wrapper. */
.feature-icon i, .value-icon i {
line-height: 1;
font-size: inherit;
}
.oribi-card:hover .feature-icon {
transform: scale(1.1);
background: var(--color-primary);
color: #fff;
}
/* ── 8b. Value Card ────────────────────────────────────────── */
.value-card {
text-align: center;
border-top: 3px solid var(--color-primary);
border-radius: var(--radius-sm) var(--radius-sm) var(--radius-md) var(--radius-md);
}
.value-card:hover {
border-top-color: var(--color-primary-dk);
}
.value-icon {
width: 64px; height: 64px;
background: var(--color-primary-lt);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-inline: auto;
margin-bottom: 1.25rem;
font-size: 1.75rem;
color: var(--color-primary);
transition: transform var(--transition);
}
.value-card:hover .value-icon {
transform: scale(1.05);
}
/* ── 8c. Addon Card ────────────────────────────────────────── */
.oribi-card.addon-card {
border-style: dashed;
border-left: 3px solid var(--color-primary);
border-left-style: solid;
background: var(--card-bg);
}
.oribi-card.addon-card:hover {
border-style: solid;
border-color: var(--color-primary);
}
.addon-tag {
display: inline-block;
font-size: var(--wp--preset--font-size--xs, .75rem);
background: var(--color-primary-lt);
color: var(--color-primary);
padding: .25rem .75rem;
border-radius: 999px;
margin-bottom: .75rem;
font-weight: 600;
}
.addon-card h3 {
color: var(--color-heading);
}
.addon-card p {
font-size: .9rem;
}
/* ── 8d. Image Card ────────────────────────────────────────── */
.image-card {
padding: 0;
overflow: hidden;
border-radius: var(--radius-lg);
border: none;
box-shadow: var(--shadow-sm);
}
.image-card:hover {
box-shadow: var(--shadow-lg);
border: none;
}
.image-card .oribi-card-body { padding: 1.5rem 2rem; }
.image-card.img-left .oribi-card-body { padding: 1.5rem 1.5rem 1.5rem 0; }
.image-card .oribi-card-img {
transition: transform .4s ease;
}
.image-card:hover .oribi-card-img {
transform: scale(1.05);
}
/* ── 8e. Stat Card ─────────────────────────────────────────── */
.stat-card {
text-align: center;
position: relative;
overflow: hidden;
}
.stat-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
background: var(--color-primary);
}
.stat-value {
font-size: var(--wp--preset--font-size--4-xl, 2.5rem);
font-weight: 800;
color: var(--color-primary);
line-height: 1;
margin-bottom: .25rem;
letter-spacing: -0.02em;
}
.stat-card:hover .stat-value {
color: var(--color-primary-dk);
}
.stat-label {
font-size: var(--wp--preset--font-size--md, 1rem);
font-weight: 600;
color: var(--color-heading);
text-transform: uppercase;
letter-spacing: .05em;
font-size: .85rem;
}
.stat-card p {
margin-top: .75rem;
padding-top: .75rem;
border-top: 1px solid var(--color-border);
}
/* ── 8f. Link Card ─────────────────────────────────────────── */
.link-card {
display: flex;
flex-direction: column;
border-left: 4px solid var(--color-dark-2);
border-radius: var(--radius-sm) var(--radius-md) var(--radius-md) var(--radius-sm);
background: var(--color-bg-alt);
}
.link-card:hover {
border-left-width: 5px;
border-left-color: var(--color-primary);
background: var(--color-primary-lt);
}
.link-card .feature-icon {
background: transparent;
padding: 0;
font-size: 1.6rem;
width: auto;
height: auto;
margin-bottom: 1rem;
}
.link-card:hover .feature-icon {
background: transparent;
transform: none;
}
.link-card-cta {
color: var(--color-primary);
font-weight: 600;
font-size: var(--wp--preset--font-size--sm, .875rem);
text-decoration: none;
display: inline-flex;
align-items: center;
gap: .35rem;
margin-top: auto;
padding-top: .75rem;
}
.link-card-cta::after {
content: '\2192';
transition: transform var(--transition);
}
.link-card:hover .link-card-cta::after {
transform: translateX(4px);
}
.link-card-cta:hover { text-decoration: underline; }
/* ── 8g. Card Mobile Responsive ────────────────────────────── */
/* Tablet - tighten padding & typography */
@media (max-width: 960px) {
.oribi-card {
padding: 1.5rem;
}
.stat-value {
font-size: var(--wp--preset--font-size--3-xl, 2rem);
}
.image-card .oribi-card-body {
padding: 1.25rem 1.5rem;
}
}
/* Small screens - single-column adjustments */
@media (max-width: 640px) {
.oribi-card {
padding: 1.25rem;
}
.oribi-card h3 {
font-size: 1rem;
}
.oribi-card p {
font-size: .9rem;
}
/* Feature card: smaller icon */
.feature-icon {
width: 44px;
height: 44px;
font-size: 1.2rem;
margin-bottom: 1rem;
}
/* Value card: downsize icon, keep centered */
.value-icon {
width: 52px;
height: 52px;
font-size: 1.5rem;
margin-bottom: 1rem;
}
/* Addon card: softer gradient, thinner accent */
.oribi-card.addon-card {
border-left-width: 2px;
}
/* Image card: reduce body padding */
.image-card .oribi-card-body {
padding: 1rem 1.25rem;
}
.image-card.img-left .oribi-card-body {
padding: 1rem 1.25rem;
}
.image-card {
border-radius: var(--radius-md);
}
/* Stat card: scale down the value */
.stat-value {
font-size: var(--wp--preset--font-size--2-xl, 1.75rem);
}
.stat-label {
font-size: .8rem;
}
.stat-card p {
font-size: .85rem;
}
/* Link card: full-width friendly */
.link-card {
border-left-width: 2px;
}
.link-card:hover {
border-left-width: 3px;
}
.link-card .feature-icon {
font-size: 1.4rem;
margin-bottom: .75rem;
}
/* Image-left layout stacks at this breakpoint */
.oribi-card.img-left {
flex-direction: column;
}
.image-card.img-left {
flex-direction: column;
}
.image-card.img-left .oribi-card-img-wrap {
width: 100%;
}
}
/* Extra-small - compact for narrow phones */
@media (max-width: 400px) {
.oribi-card {
padding: 1rem;
}
.feature-icon {
width: 40px;
height: 40px;
font-size: 1.1rem;
}
.value-icon {
width: 46px;
height: 46px;
font-size: 1.3rem;
}
.stat-value {
font-size: var(--wp--preset--font-size--xl, 1.5rem);
}
.image-card .oribi-card-body {
padding: .875rem 1rem;
}
}
/* Touch devices - disable hover transform to prevent sticky states */
@media (hover: none) {
.oribi-card:hover {
transform: none;
box-shadow: none;
border-color: var(--color-border);
}
.value-card:hover {
border-top-color: var(--color-primary);
}
.oribi-card.addon-card:hover {
border-style: dashed;
border-left-style: solid;
border-color: var(--color-border);
border-left-color: var(--color-primary);
}
.link-card:hover {
border-left-width: 4px;
border-left-color: var(--color-dark-2);
background: var(--color-bg-alt);
}
.image-card:hover {
box-shadow: var(--shadow-sm);
}
.image-card:hover .oribi-card-img {
transform: none;
}
.oribi-card:hover .feature-icon {
transform: none;
background: var(--color-primary-lt);
color: var(--color-primary);
}
.value-card:hover .value-icon {
transform: none;
box-shadow: none;
}
.stat-card:hover .stat-value {
color: var(--color-primary);
}
.link-card:hover .link-card-cta::after {
transform: none;
}
}
/* Legacy compat aliases (deprecated) */
/* ── 8h. New Card Variants ─────────────────────────────────── */
/* Bold Statement Card - large text, green left border */
.oribi-card.bold-statement {
border-left: 5px solid var(--color-primary);
border-radius: 0 var(--radius-md) var(--radius-md) 0;
padding: 2.5rem;
}
.oribi-card.bold-statement h3 {
font-size: clamp(1.3rem, 2.5vw, 1.75rem);
font-weight: 800;
margin-bottom: .75rem;
}
.oribi-card.bold-statement p {
font-size: 1rem;
line-height: 1.7;
}
/* Minimal Feature Card - clean icon + title + description */
.oribi-card.minimal-feature {
border: none;
border-bottom: 2px solid var(--color-border);
border-radius: 0;
padding: 1.75rem 0;
background: transparent;
}
.oribi-card.minimal-feature:hover {
border-bottom-color: var(--color-primary);
transform: none;
box-shadow: none;
}
.oribi-card.minimal-feature .feature-icon {
width: 44px; height: 44px;
border-radius: 50%;
font-size: 1.1rem;
}
.oribi-card.minimal-feature h3 {
font-size: 1rem;
font-weight: 700;
}
.oribi-card.minimal-feature p {
font-size: .9rem;
margin: 0;
}
/* Prominent Stat Card - oversized number */
.oribi-card.prominent-stat {
text-align: center;
border: 1px solid var(--color-border);
padding: 2.5rem 2rem;
}
.oribi-card.prominent-stat:hover {
background: var(--color-primary-lt);
border-color: var(--color-primary);
transform: none;
box-shadow: none;
}
.oribi-card.prominent-stat .stat-value {
font-size: clamp(2.5rem, 5vw, 3.5rem);
font-weight: 900;
color: var(--color-primary);
line-height: 1;
margin-bottom: .5rem;
}
.oribi-card.prominent-stat .stat-label {
font-size: .85rem;
font-weight: 600;
color: var(--color-text-muted);
text-transform: uppercase;
letter-spacing: .08em;
}
.oribi-card.prominent-stat::before {
display: none;
}
/* Testimonial Card - quote with author */
.oribi-card.testimonial {
border: none;
border-left: 4px solid var(--color-primary);
border-radius: 0 var(--radius-md) var(--radius-md) 0;
background: var(--color-bg-alt);
padding: 2rem 2.5rem;
}
.oribi-card.testimonial:hover {
transform: none;
box-shadow: none;
background: var(--color-primary-lt);
}
.oribi-card.testimonial blockquote,
.oribi-card.testimonial .testimonial-quote {
font-size: 1.05rem;
line-height: 1.8;
color: var(--color-text);
margin-bottom: 1.25rem;
font-style: normal;
}
.oribi-card.testimonial .testimonial-author {
font-weight: 700;
color: var(--color-primary);
font-size: .95rem;
}
.oribi-card.testimonial .testimonial-role {
font-size: .85rem;
color: var(--color-text-muted);
}
/* Action Card - icon, title, arrow CTA */
.oribi-card.action {
display: flex;
flex-direction: column;
border: 1px solid var(--color-border);
padding: 2rem;
cursor: pointer;
}
.oribi-card.action:hover {
background: var(--color-primary);
border-color: var(--color-primary);
color: #fff;
transform: none;
box-shadow: none;
}
.oribi-card.action:hover h3,
.oribi-card.action:hover p,
.oribi-card.action:hover .feature-icon {
color: #fff;
}
.oribi-card.action:hover .feature-icon {
background: rgba(255,255,255,.15);
}
.oribi-card.action .action-arrow {
margin-top: auto;
padding-top: 1rem;
font-size: 1.2rem;
color: var(--color-primary);
transition: transform var(--transition), color var(--transition);
}
.oribi-card.action:hover .action-arrow {
color: #fff;
transform: translateX(4px);
}
/* Comparison Row Card - checkmark + label */
.oribi-card.comparison-row {
display: flex;
align-items: center;
gap: 1rem;
border: none;
border-bottom: 1px solid var(--color-border);
border-radius: 0;
padding: 1.25rem 0;
background: transparent;
}
.oribi-card.comparison-row:hover {
background: var(--color-primary-lt);
transform: none;
box-shadow: none;
padding-inline: 1rem;
border-radius: var(--radius-sm);
}
@media (prefers-color-scheme: dark) {
.oribi-card.comparison-row:hover {
background: rgba(var(--color-primary-rgb), .1);
}
}
.oribi-card.comparison-row .comparison-check {
width: 32px;
height: 32px;
background: var(--color-accent);
color: var(--color-bg);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: .9rem;
font-weight: 800;
flex-shrink: 0;
box-shadow: 0 2px 8px rgba(76, 175, 80, 0.2);
}
@media (prefers-color-scheme: dark) {
.oribi-card.comparison-row .comparison-check {
background: var(--color-accent-dk);
color: var(--color-accent-lt);
box-shadow: 0 2px 8px rgba(76, 175, 80, 0.3);
}
}
.oribi-card.comparison-row h3 {
font-size: 1rem;
font-weight: 600;
margin: 0;
}
.oribi-card.comparison-row p {
font-size: .9rem;
margin: 0;
flex: 1;
}
/* Image Info Card - image top + metadata */
.oribi-card.image-info {
padding: 0;
overflow: hidden;
border: 1px solid var(--color-border);
}
.oribi-card.image-info:hover {
border-color: var(--color-primary);
transform: none;
box-shadow: none;
}
.oribi-card.image-info .oribi-card-img-wrap {
overflow: hidden;
line-height: 0;
}
.oribi-card.image-info .oribi-card-img {
transition: transform .3s ease;
width: 100%;
height: auto;
}
.oribi-card.image-info:hover .oribi-card-img {
transform: scale(1.03);
}
.oribi-card.image-info .oribi-card-body {
padding: 1.5rem;
}
.oribi-card.image-info .image-info-tag {
display: inline-block;
font-size: .72rem;
font-weight: 700;
letter-spacing: .08em;
text-transform: uppercase;
color: var(--color-primary);
margin-bottom: .5rem;
}
.oribi-card.image-info h3 {
font-size: 1.1rem;
margin-bottom: .5rem;
}
.oribi-card.image-info p {
font-size: .9rem;
line-height: 1.6;
}
/* Addon Bundle Card - icon grid + features */
.oribi-card.addon-bundle {
border: 1px solid var(--color-border);
padding: 2rem;
}
.oribi-card.addon-bundle:hover {
border-color: var(--color-primary);
transform: none;
box-shadow: none;
}
.oribi-card.addon-bundle .bundle-icons {
display: flex;
gap: .75rem;
margin-bottom: 1.25rem;
flex-wrap: wrap;
}
.oribi-card.addon-bundle .bundle-icon {
width: 40px;
height: 40px;
background: var(--color-primary-lt);
color: var(--color-primary);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
}
.oribi-card.addon-bundle .bundle-features {
list-style: none;
margin-top: 1rem;
}
.oribi-card.addon-bundle .bundle-features li {
display: flex;
align-items: center;
gap: .5rem;
font-size: .9rem;
padding: .35rem 0;
color: var(--color-text-muted);
}
.oribi-card.addon-bundle .bundle-features li::before {
content: '\2713';
color: var(--color-primary);
font-weight: 700;
font-size: .8rem;
}
/* Status Badge Card - circle badge + label */
.oribi-card.status-badge {
text-align: center;
border: 1px solid var(--color-border);
padding: 2.5rem 1.5rem;
}
.oribi-card.status-badge:hover {
border-color: var(--color-primary);
transform: none;
box-shadow: none;
}
.oribi-card.status-badge .badge-circle {
width: 80px;
height: 80px;
border-radius: 50%;
background: var(--color-primary);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 1rem;
font-size: 1.5rem;
font-weight: 800;
}
.oribi-card.status-badge .badge-label {
font-size: .9rem;
font-weight: 600;
color: var(--color-heading);
text-transform: uppercase;
letter-spacing: .05em;
}
/* Content Block Card - title + description + optional icon */
.oribi-card.content-block {
display: flex;
gap: 1.5rem;
align-items: flex-start;
border: 1px solid var(--color-border);
padding: 2rem;
}
.oribi-card.content-block:hover {
border-color: var(--color-primary);
transform: none;
box-shadow: none;
}
.oribi-card.content-block .content-block-icon {
width: 56px;
height: 56px;
flex-shrink: 0;
background: var(--color-primary-lt);
color: var(--color-primary);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.4rem;
}
.oribi-card.content-block .content-block-body {
flex: 1;
min-width: 0;
}
.oribi-card.content-block h3 {
font-size: 1.1rem;
margin-bottom: .5rem;
}
.oribi-card.content-block p {
font-size: .9rem;
line-height: 1.65;
}
/* ── New card variants: responsive overrides ───────────────── */
@media (max-width: 640px) {
.oribi-card.bold-statement {
padding: 1.5rem;
border-left-width: 4px;
}
.oribi-card.prominent-stat {
padding: 1.5rem;
}
.oribi-card.prominent-stat .stat-value {
font-size: 2rem;
}
.oribi-card.testimonial {
padding: 1.5rem;
}
.oribi-card.content-block {
flex-direction: column;
gap: 1rem;
}
.oribi-card.image-info .oribi-card-body {
padding: 1rem;
}
.oribi-card.addon-bundle {
padding: 1.5rem;
}
.oribi-card.status-badge .badge-circle {
width: 64px;
height: 64px;
font-size: 1.2rem;
}
}
/* Legacy compat aliases (deprecated) */
.feature-card {
background: var(--card-bg);
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
padding: 2rem;
transition: all var(--transition);
}
.feature-card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-4px);
border-color: var(--color-primary-lt);
}
.card-image {
display: block;
height: auto;
max-width: 100%;
object-fit: contain;
border-radius: var(--radius-sm);
}
.card-image-wrap { line-height: 0; }
.card-img-left {
display: flex;
flex-direction: row;
align-items: flex-start;
gap: 1.25rem;
}
.card-img-left .card-image-wrap { flex-shrink: 0; }
.card-img-left-body { flex: 1; min-width: 0; }
.card-img-left h3 { margin-bottom: .5rem; font-size: 1.1rem; }
.card-img-left p { color: var(--color-text-muted); font-size: .95rem; margin: 0; }
@media (max-width: 480px) {
.card-img-left { flex-direction: column; }
}
/* ── 9. Pricing ────────────────────────────────────────────── */
.pricing-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 2rem;
max-width: 800px;
margin-inline: auto;
}
.pricing-grid-3 {
grid-template-columns: repeat(3, 1fr);
max-width: 1100px;
}
.pricing-card {
background: var(--card-bg);
border: 2px solid var(--color-border);
border-radius: var(--radius-lg);
padding: 2.5rem;
position: relative;
transition: all var(--transition);
}
.pricing-card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-4px);
}
.pricing-card.featured {
}
.pricing-badge {
position: absolute;
top: -14px;
left: 50%;
transform: translateX(-50%);
background: var(--color-primary);
color: #fff;
font-size: .72rem;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
padding: .35rem 1rem;
border-radius: 100px;
}
.pricing-name { font-size: 1.25rem; font-weight: 700; margin-bottom: .5rem; }
.pricing-tagline { font-size: .9rem; color: var(--color-text-muted); margin-bottom: 1.5rem; }
.pricing-price { margin-bottom: 1.5rem; }
.pricing-amount {
font-size: 2.5rem;
font-weight: 900;
color: var(--color-heading);
line-height: 1;
}
.pricing-amount sup { font-size: 1.25rem; vertical-align: super; }
.pricing-amount .pricing-unit { font-size: 1rem; font-weight: 500; color: var(--color-text-muted); margin-left: .2em; }
.pricing-per { font-size: .85rem; color: var(--color-text-muted); margin-top: .35rem; }
.pricing-features {
list-style: none;
margin-bottom: 2rem;
}
.pricing-features li {
display: flex;
align-items: flex-start;
gap: .6rem;
font-size: .9rem;
padding: .5rem 0;
border-bottom: 1px solid var(--color-border);
color: var(--color-text);
}
.pricing-features li:last-child { border-bottom: none; }
.pricing-check { color: var(--color-primary); font-size: 1rem; flex-shrink: 0; margin-top: 1px; }
@media (max-width: 900px) {
.pricing-grid-3 { grid-template-columns: 1fr; max-width: 400px; }
}
@media (max-width: 640px) {
.pricing-grid { grid-template-columns: 1fr; }
}
/* ── 10. Platform Feature Rows ─────────────────────────────── */
.platform-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
padding-block: 2rem;
}
.platform-row + .platform-row {
border-top: 1px solid var(--color-border);
margin-top: 2rem;
}
.platform-row.reverse .platform-text { order: 2; }
.platform-row.reverse .platform-visual { order: 1; }
.platform-text h3 { font-size: 1.5rem; margin-bottom: 1rem; color: var(--color-heading); }
.platform-text p { color: var(--color-text-muted); }
.platform-visual {
background: var(--color-bg-alt);
border-radius: var(--radius-md);
aspect-ratio: 4/3;
display: flex;
align-items: center;
justify-content: center;
font-size: 4rem;
border: 1px solid var(--color-border);
}
/* When an image is set, remove the framed background styling */
.platform-visual.has-img {
background: none;
border: none;
aspect-ratio: unset;
font-size: inherit;
}
@media (max-width: 768px) {
.platform-row { grid-template-columns: 1fr; }
.platform-row.reverse .platform-text,
.platform-row.reverse .platform-visual { order: unset; }
}
/* Dashboard visual - remove framed background */
.platform-visual.has-dashboard {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
box-shadow: none;
display: flex;
align-items: center;
justify-content: center;
}
/* ── Dashboard TV frame ────────────────────────── */
.dashboard-tv {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
margin: 0 auto;
}
.dashboard-tv__body {
width: 100%;
max-width: 520px;
background: #111;
border: 4px solid #111;
border-radius: 6px 6px 4px 4px;
outline: 1px solid #000;
padding: 3px;
position: relative;
box-shadow: 0 14px 48px rgba(0,0,0,0.55);
}
.dashboard-tv__body::after {
content: '\25B6';
position: absolute;
bottom: -13px;
left: 50%;
transform: translateX(-50%);
font-size: 8px;
color: rgba(74,222,128,0.7);
}
.dashboard-tv__screen {
width: 100%;
aspect-ratio: 16/9;
background: var(--color-bg);
border-radius: 2px;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
}
.dashboard-tv__screen .dashboard-chart {
width: 100%;
height: 100%;
display: block;
}
.dashboard-tv__feet {
display: flex;
justify-content: space-between;
width: 60%;
max-width: 300px;
}
.dashboard-tv__foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* ── 10b. Device Animator ───────────────────────────────────── */
.platform-visual.has-anim {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
min-height: 300px;
padding: 0;
overflow: visible;
position: relative;
font-size: inherit;
}
.da-stage {
position: absolute;
inset: 0;
}
/* Each device panel hidden by default, centred in stage */
.da-device {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(0.88);
opacity: 0;
display: flex;
flex-direction: column;
align-items: center;
transition: opacity 0.55s cubic-bezier(0.4,0,0.2,1),
transform 0.55s cubic-bezier(0.4,0,0.2,1);
will-change: opacity, transform;
}
.da-device.is-active {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
.da-device.is-leaving {
opacity: 0;
transform: translate(-50%, -50%) scale(1.07);
}
/* Screen surface */
.da-screen {
width: 100%;
height: 100%;
border-radius: 2px;
position: relative;
overflow: hidden;
background:
repeating-linear-gradient(
180deg,
transparent,
transparent 3px,
rgba(0,0,0,0.10) 3px,
rgba(0,0,0,0.10) 4px
),
linear-gradient(135deg, #0c1016 0%, #151c28 60%, #0c1016 100%);
}
.da-screen::before {
content: '';
position: absolute;
top: -20%;
left: -10%;
width: 60%;
height: 60%;
background: radial-gradient(ellipse, rgba(74,222,128,0.12) 0%, transparent 70%);
pointer-events: none;
}
@keyframes da-scan {
0% { top: -6%; opacity: 0; }
5% { opacity: 1; }
95% { opacity: 1; }
100% { top: 106%; opacity: 0; }
}
.da-screen::after {
content: '';
position: absolute;
left: 0;
width: 100%;
height: 3px;
background: linear-gradient(90deg, transparent, rgba(74,222,128,0.28), transparent);
animation: da-scan 3s linear infinite;
pointer-events: none;
}
.da-promo {
position: absolute;
inset: 0;
z-index: 1;
padding: 6% 7%;
display: flex;
flex-direction: column;
gap: 6%;
}
.da-promo__top {
display: flex;
align-items: center;
gap: 6px;
}
.da-promo__dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: #f97316;
box-shadow: 0 0 6px rgba(249,115,22,.55);
animation: da-dot-pulse 2.8s ease-in-out infinite;
}
.da-promo__brand {
width: 40%;
height: 5px;
border-radius: 999px;
background: linear-gradient(90deg, rgba(249,115,22,.95), rgba(251,191,36,.75));
}
.da-promo__hero {
height: 30%;
border-radius: 4px;
background:
linear-gradient(160deg, rgba(2,132,199,.38), rgba(15,23,42,.08) 58%),
linear-gradient(115deg, rgba(249,115,22,.42), rgba(249,115,22,.08) 62%);
}
.da-promo__row {
display: flex;
align-items: center;
gap: 6px;
}
.da-promo__line {
display: block;
height: 4px;
border-radius: 999px;
background: rgba(241,245,249,.70);
}
.da-promo__line--lg { width: 56%; }
.da-promo__line--md { width: 46%; }
.da-promo__line--sm { width: 24%; background: rgba(74,222,128,.72); }
.da-promo__line--xs { width: 19%; background: rgba(249,115,22,.72); }
.da-promo__ticker {
margin-top: auto;
display: flex;
align-items: center;
gap: 5px;
animation: da-ticker 6.5s linear infinite;
}
.da-promo__chip {
width: 34%;
height: 8px;
border-radius: 999px;
background: linear-gradient(90deg, rgba(74,222,128,.72), rgba(56,189,248,.72));
flex: 0 0 auto;
}
@keyframes da-dot-pulse {
0%, 100% { transform: scale(1); opacity: .92; }
50% { transform: scale(1.22); opacity: 1; }
}
@keyframes da-ticker {
0% { transform: translateX(0); }
50% { transform: translateX(-8%); }
100% { transform: translateX(0); }
}
/* Device label */
.da-label {
display: block;
margin-top: 11px;
font-size: 0.68rem;
font-weight: 600;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--color-text-muted);
text-align: center;
}
/* ── Tablet ────────────────────────────────────── */
.da-tablet .da-body {
width: 128px;
height: 194px;
background: #111;
border: 2px solid #000;
border-radius: 14px;
padding: 10px 8px 14px;
display: flex;
align-items: stretch;
position: relative;
box-shadow: 0 16px 48px rgba(0,0,0,0.50);
}
.da-tablet .da-body::before {
content: '';
position: absolute;
top: 5px;
left: 50%;
transform: translateX(-50%);
width: 6px;
height: 6px;
background: #333;
border-radius: 50%;
}
.da-tablet .da-body::after {
content: '';
position: absolute;
bottom: 5px;
left: 50%;
transform: translateX(-50%);
width: 36px;
height: 3px;
background: #333;
border-radius: 2px;
}
/* ── Small Monitor ─────────────────────────────── */
.da-monitor-sm .da-body {
width: 236px;
height: 146px;
background: #111;
border: 5px solid #111;
border-radius: 6px;
outline: 1px solid #000;
padding: 3px;
display: flex;
align-items: stretch;
position: relative;
box-shadow: 0 10px 36px rgba(0,0,0,0.50);
}
.da-monitor-sm .da-body::after {
content: '';
position: absolute;
bottom: -9px;
right: 8px;
width: 5px;
height: 5px;
background: var(--color-primary);
border-radius: 50%;
box-shadow: 0 0 5px var(--color-primary);
}
.da-monitor-sm .da-stand,
.da-monitor-lg .da-stand { display: flex; flex-direction: column; align-items: center; }
.da-monitor-sm .da-stem {
width: 14px;
height: 20px;
background: #111;
border-left: 1px solid #000;
border-right: 1px solid #000;
}
.da-monitor-sm .da-base {
width: 68px;
height: 5px;
background: #111;
border: 1px solid #000;
border-radius: 3px;
}
/* ── Large Monitor ─────────────────────────────── */
.da-monitor-lg .da-body {
width: 298px;
height: 177px;
background: #111;
border: 4px solid #111;
border-radius: 6px;
outline: 1px solid #000;
padding: 3px;
display: flex;
align-items: stretch;
position: relative;
box-shadow: 0 12px 40px rgba(0,0,0,0.50);
}
.da-monitor-lg .da-stem {
width: 16px;
height: 26px;
background: #111;
border-left: 1px solid #000;
border-right: 1px solid #000;
}
.da-monitor-lg .da-base {
width: 88px;
height: 5px;
background: #111;
border: 1px solid #000;
border-radius: 3px;
}
/* ── TV ────────────────────────────────────────── */
.da-tv .da-body {
width: 320px;
height: 188px;
background: #111;
border: 4px solid #111;
border-radius: 6px 6px 4px 4px;
outline: 1px solid #000;
padding: 3px;
display: flex;
align-items: stretch;
position: relative;
box-shadow: 0 14px 48px rgba(0,0,0,0.55);
}
.da-tv .da-body::after {
content: '\25B6';
position: absolute;
bottom: -13px;
left: 50%;
transform: translateX(-50%);
font-size: 8px;
color: rgba(74,222,128,0.7);
}
.da-tv .da-feet { display: flex; justify-content: space-between; width: 180px; }
.da-tv .da-foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* ── Projector ─────────────────────────────────── */
.da-projector .da-proj-layout { display: flex; flex-direction: column; align-items: center; }
.da-projector .da-proj-body {
width: 156px;
height: 62px;
background: #111;
border: 1px solid #000;
border-radius: 10px 10px 8px 8px;
display: flex;
align-items: center;
padding: 0 14px;
gap: 10px;
box-shadow: 0 6px 20px rgba(0,0,0,0.45);
position: relative;
}
.da-projector .da-proj-body::after {
content: '';
position: absolute;
top: 8px;
right: 10px;
width: 7px;
height: 7px;
background: var(--color-primary);
border-radius: 50%;
box-shadow: 0 0 6px var(--color-primary);
}
.da-projector .da-proj-body::before {
content: '';
position: absolute;
right: 10px;
bottom: 8px;
width: 28px;
height: 8px;
background: repeating-linear-gradient(
90deg,
#333 0px,
#333 2px,
transparent 2px,
transparent 5px
);
border-radius: 1px;
}
.da-projector .da-lens {
width: 38px;
height: 38px;
background: #080c12;
border: 2px solid #000;
border-radius: 50%;
flex-shrink: 0;
position: relative;
box-shadow: inset 0 0 8px rgba(0,0,0,0.8);
}
.da-projector .da-lens::after {
content: '';
position: absolute;
inset: 5px;
background: radial-gradient(circle at 35% 35%, rgba(74,222,128,0.30) 0%, #080c12 65%);
border-radius: 50%;
}
.da-projector .da-beam {
width: 240px;
height: 50px;
clip-path: polygon(31% 0%, 69% 0%, 100% 100%, 0% 100%);
background: linear-gradient(
180deg,
rgba(74,222,128,0.07) 0%,
rgba(74,222,128,0.02) 100%
);
}
.da-projector .da-proj-screen {
width: 240px;
height: 72px;
background: #111;
border: 1px solid #000;
border-radius: 3px;
overflow: hidden;
padding: 3px;
box-shadow: 0 4px 14px rgba(0,0,0,0.40);
}
/* ── Video Wall (2×2) ──────────────────────────── */
.da-vwall .da-vwall-grid {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: 5px;
background: #0a0d12;
padding: 5px;
border: 1px solid #000;
border-radius: 4px;
box-shadow: 0 14px 48px rgba(0,0,0,0.60);
}
.da-vwall .da-panel {
width: 148px;
height: 90px;
background: #111;
border: 2px solid #111;
padding: 2px;
display: flex;
align-items: stretch;
overflow: hidden;
}
.da-vwall .da-panel:nth-child(2) .da-screen::after { animation-delay: -0.75s; }
.da-vwall .da-panel:nth-child(3) .da-screen::after { animation-delay: -1.5s; }
.da-vwall .da-panel:nth-child(4) .da-screen::after { animation-delay: -2.25s; }
.da-vwall .da-panel:nth-child(2) .da-promo { filter: hue-rotate(32deg); }
.da-vwall .da-panel:nth-child(3) .da-promo { filter: hue-rotate(-18deg); }
.da-vwall .da-panel:nth-child(4) .da-promo { filter: hue-rotate(58deg); }
/* ── Responsive scale-down ─────────────────────── */
@media (max-width: 900px) {
.da-device { transform: translate(-50%,-50%) scale(0.76); }
.da-device.is-active { transform: translate(-50%,-50%) scale(0.84); }
.da-device.is-leaving { transform: translate(-50%,-50%) scale(0.91); }
}
@media (max-width: 640px) {
.da-device { transform: translate(-50%,-50%) scale(0.56); }
.da-device.is-active { transform: translate(-50%,-50%) scale(0.64); }
.da-device.is-leaving { transform: translate(-50%,-50%) scale(0.70); }
}
@media (prefers-reduced-motion: reduce) {
.da-device { transition: none; }
.da-screen::after { animation: none; }
.da-promo__dot,
.da-promo__ticker { animation: none; }
}
/* ── 10c. TV Stick Plug Animation ──────────────────────────── */
.platform-visual.has-tv-stick {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
position: relative;
font-size: inherit;
display: flex;
align-items: center;
justify-content: center;
align-self: center;
}
.ts-stage {
position: relative;
width: 100%;
aspect-ratio: 4/3;
display: flex;
align-items: center;
justify-content: center;
/* Offset center leftward to account for the stick protruding on the right,
so the TV+stick combo appears visually centered in the column */
padding-right: 90px;
}
/* ── TV ── */
.ts-tv {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
}
.ts-tv__body {
width: 400px;
height: 235px;
background: #111;
border: 4px solid #111;
border-radius: 6px 6px 4px 4px;
outline: 1px solid #000;
padding: 3px;
display: flex;
align-items: stretch;
position: relative;
box-shadow: 0 14px 48px rgba(0,0,0,0.55);
}
.ts-tv__screen {
width: 100%;
height: 100%;
border-radius: 2px;
position: relative;
overflow: hidden;
background:
repeating-linear-gradient(
180deg,
transparent,
transparent 3px,
rgba(0,0,0,0.10) 3px,
rgba(0,0,0,0.10) 4px
),
linear-gradient(135deg, #0c1016 0%, #151c28 60%, #0c1016 100%);
}
/* Subtle green ambient glow on screen */
.ts-tv__screen::before {
content: '';
position: absolute;
top: -20%;
left: -10%;
width: 60%;
height: 60%;
background: radial-gradient(ellipse, rgba(74,222,128,0.12) 0%, transparent 70%);
pointer-events: none;
}
/* Scan line on screen */
.ts-tv__screen::after {
content: '';
position: absolute;
left: 0;
width: 100%;
height: 3px;
background: linear-gradient(90deg, transparent, rgba(74,222,128,0.28), transparent);
animation: da-scan 3s linear infinite;
pointer-events: none;
}
/* Screen glow when stick plugs in */
.ts-stage.is-plugged .ts-tv__screen {
animation: ts-screen-glow 0.8s ease 0.1s both;
}
@keyframes ts-screen-glow {
0% { filter: brightness(1); }
40% { filter: brightness(1.25); }
100% { filter: brightness(1); }
}
/* ── Promotional slides inside screen ── */
.ts-slides {
position: absolute;
inset: 0;
opacity: 0;
transition: opacity 0.6s ease;
z-index: 1;
}
.ts-stage.is-playing .ts-slides { opacity: 1; }
.ts-slide {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 12%;
opacity: 0;
transition: opacity 0.7s ease;
}
.ts-slide.is-active { opacity: 1; }
/* ═══════════════════════════════════════════════════════════
Slide 1 — Menu Board
═══════════════════════════════════════════════════════════ */
.ts-slide--menu {
background: linear-gradient(170deg, #1a1206 0%, #0d0a04 100%);
padding: 8%;
}
.ts-menu { width: 100%; height: 100%; display: flex; flex-direction: column; }
.ts-menu__header {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 6px;
padding-bottom: 4px;
border-bottom: 1px solid rgba(255,200,100,0.25);
}
.ts-menu__logo {
width: 10px;
height: 10px;
border-radius: 50%;
background: #e6a730;
flex-shrink: 0;
}
.ts-menu__title {
width: 50%;
height: 5px;
background: rgba(255,220,150,0.8);
border-radius: 1px;
}
.ts-menu__cols {
display: flex;
gap: 10px;
flex: 1;
}
.ts-menu__col {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
}
.ts-menu__cat {
width: 55%;
height: 4px;
background: #e6a730;
border-radius: 1px;
margin-bottom: 1px;
}
.ts-menu__item {
display: flex;
align-items: center;
gap: 2px;
}
.ts-menu__name {
width: 40%;
height: 3px;
background: rgba(255,255,255,0.6);
border-radius: 1px;
flex-shrink: 0;
}
.ts-menu__dots {
flex: 1;
height: 0;
border-bottom: 1px dotted rgba(255,255,255,0.18);
}
.ts-menu__price {
width: 14%;
height: 3px;
background: rgba(255,220,150,0.7);
border-radius: 1px;
flex-shrink: 0;
}
/* ═══════════════════════════════════════════════════════════
Slide 2 — Wayfinding Sign
═══════════════════════════════════════════════════════════ */
.ts-slide--wayfind {
background: linear-gradient(170deg, #0c1a2e 0%, #081220 100%);
padding: 8%;
}
.ts-wf { width: 100%; height: 100%; display: flex; flex-direction: column; }
.ts-wf__header {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 8px;
padding-bottom: 5px;
border-bottom: 1px solid rgba(74,222,128,0.2);
}
.ts-wf__building {
width: 60%;
height: 5px;
background: rgba(255,255,255,0.7);
border-radius: 1px;
}
.ts-wf__rows {
display: flex;
flex-direction: column;
gap: 5px;
flex: 1;
justify-content: center;
}
.ts-wf__row {
display: flex;
align-items: center;
gap: 5px;
padding: 3px 4px;
background: rgba(255,255,255,0.04);
border-radius: 2px;
}
.ts-wf__arrow {
width: 0;
height: 0;
flex-shrink: 0;
}
.ts-wf__arrow--left {
border-top: 3px solid transparent;
border-bottom: 3px solid transparent;
border-right: 5px solid #4ade80;
}
.ts-wf__arrow--right {
border-top: 3px solid transparent;
border-bottom: 3px solid transparent;
border-left: 5px solid #4ade80;
}
.ts-wf__arrow--up {
border-left: 3px solid transparent;
border-right: 3px solid transparent;
border-bottom: 5px solid #4ade80;
}
.ts-wf__label {
height: 3px;
background: rgba(255,255,255,0.55);
border-radius: 1px;
flex: 1;
}
.ts-wf__label--w1 { max-width: 60%; }
.ts-wf__label--w2 { max-width: 45%; }
.ts-wf__label--w3 { max-width: 70%; }
.ts-wf__label--w4 { max-width: 50%; }
.ts-wf__floor {
width: 14px;
height: 8px;
background: rgba(74,222,128,0.15);
border: 1px solid rgba(74,222,128,0.3);
border-radius: 2px;
flex-shrink: 0;
margin-left: auto;
}
/* ═══════════════════════════════════════════════════════════
Slide 3 — Schedule / Timetable
═══════════════════════════════════════════════════════════ */
.ts-slide--sched {
background: linear-gradient(170deg, #111827 0%, #0a0f1a 100%);
padding: 8%;
}
.ts-sched { width: 100%; height: 100%; display: flex; flex-direction: column; }
.ts-sched__header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 6px;
padding-bottom: 4px;
border-bottom: 1px solid rgba(74,222,128,0.2);
}
.ts-sched__title {
width: 35%;
height: 5px;
background: rgba(255,255,255,0.75);
border-radius: 1px;
}
.ts-sched__date {
width: 20%;
height: 4px;
background: rgba(255,255,255,0.3);
border-radius: 1px;
}
.ts-sched__table {
display: flex;
flex-direction: column;
gap: 3px;
flex: 1;
}
.ts-sched__hrow,
.ts-sched__row {
display: flex;
gap: 3px;
}
.ts-sched__hrow {
margin-bottom: 2px;
}
.ts-sched__hcell {
flex: 1;
height: 3px;
background: rgba(255,255,255,0.25);
border-radius: 1px;
}
.ts-sched__hcell:first-child { flex: 0.5; }
.ts-sched__row {
align-items: stretch;
}
.ts-sched__time {
flex: 0.5;
height: 10px;
display: flex;
align-items: center;
}
.ts-sched__time::before {
content: '';
width: 80%;
height: 3px;
background: rgba(255,255,255,0.3);
border-radius: 1px;
}
.ts-sched__cell {
flex: 1;
height: 10px;
background: rgba(255,255,255,0.04);
border-radius: 2px;
border: 1px solid rgba(255,255,255,0.06);
}
.ts-sched__event {
flex: 1;
height: 10px;
border-radius: 2px;
}
.ts-sched__event--a {
background: rgba(74,222,128,0.25);
border: 1px solid rgba(74,222,128,0.4);
}
.ts-sched__event--b {
background: rgba(96,165,250,0.25);
border: 1px solid rgba(96,165,250,0.4);
}
.ts-sched__event--c {
background: rgba(251,191,36,0.25);
border: 1px solid rgba(251,191,36,0.4);
}
/* HDMI port on back-right of TV */
.ts-tv__port {
position: absolute;
right: -6px;
top: 50%;
transform: translateY(-50%);
width: 6px;
height: 14px;
background: #1a1a1a;
border: 1px solid #000;
border-left: none;
border-radius: 0 2px 2px 0;
z-index: 1;
}
.ts-tv__port::before {
content: '';
position: absolute;
left: 0;
top: 2px;
width: 3px;
height: 8px;
background: #333;
border-radius: 0 1px 1px 0;
}
/* Feet */
.ts-tv__feet {
display: flex;
justify-content: space-between;
width: 224px;
}
.ts-tv__foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* ── Stick device ── */
.ts-stick {
position: absolute;
right: -20px;
top: 50%;
transform: translateY(-50%) translateX(80px) scaleX(-1);
display: flex;
align-items: center;
opacity: 0;
z-index: 2;
}
.ts-stick__body {
width: 84px;
height: 32px;
background: linear-gradient(180deg, #f5f5f5, #e0e0e0);
border: 1px solid #ccc;
border-radius: 5px;
position: relative;
box-shadow:
0 2px 8px rgba(0,0,0,0.25),
inset 0 1px 0 rgba(255,255,255,0.6);
}
/* Brand logo area subtle inset */
.ts-stick__body::before {
content: '';
position: absolute;
top: 6px;
left: 10px;
width: 28px;
height: 12px;
background: rgba(0,0,0,0.04);
border-radius: 2px;
}
/* LED indicator */
.ts-stick__led {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
width: 4px;
height: 4px;
background: #999;
border-radius: 50%;
transition: background 0.4s ease, box-shadow 0.4s ease;
}
.ts-stage.is-plugged .ts-stick__led {
background: #4CAF50;
box-shadow: 0 0 6px rgba(76,175,80,0.8);
}
/* HDMI connector */
.ts-stick__connector {
width: 18px;
height: 14px;
background: linear-gradient(180deg, #888, #666);
border-radius: 0 2px 2px 0;
margin-left: -1px;
position: relative;
box-shadow: 0 1px 3px rgba(0,0,0,0.3);
}
.ts-stick__connector::before {
content: '';
position: absolute;
left: 2px;
top: 2px;
width: 8px;
height: 8px;
background: #555;
border-radius: 1px;
}
/* ── Plug-in animation ── */
.ts-stage.is-animating .ts-stick {
animation: ts-slide-in 1.4s cubic-bezier(0.22, 0.61, 0.36, 1) forwards;
}
@keyframes ts-slide-in {
0% { opacity: 0; transform: translateY(-50%) translateX(80px) scaleX(-1); }
20% { opacity: 1; transform: translateY(-50%) translateX(60px) scaleX(-1); }
70% { transform: translateY(-50%) translateX(8px) scaleX(-1); }
85% { transform: translateY(-50%) translateX(12px) scaleX(-1); }
100% { opacity: 1; transform: translateY(-50%) translateX(6px) scaleX(-1); }
}
/* Responsive scale-down */
@media (max-width: 900px) {
.ts-tv__body { width: 320px; height: 188px; }
.ts-tv__feet { width: 178px; }
.ts-stick__body { width: 68px; height: 26px; }
.ts-stage { padding-right: 72px; }
}
@media (max-width: 640px) {
.ts-tv__body { width: 240px; height: 142px; }
.ts-tv__feet { width: 134px; }
.ts-stick__body { width: 52px; height: 20px; }
.ts-stick__connector { width: 12px; height: 10px; }
.ts-stick__body::before { top: 4px; left: 6px; width: 22px; height: 10px; }
.ts-stick__led { width: 3px; height: 3px; right: 5px; }
.ts-stage { padding-right: 56px; }
}
@media (prefers-reduced-motion: reduce) {
.ts-stage .ts-stick {
opacity: 1;
transform: translateY(-50%) translateX(6px) scaleX(-1);
}
.ts-stage.is-animating .ts-stick { animation: none; }
.ts-stage.is-plugged .ts-tv__screen { animation: none; }
.ts-stage.is-plugged .ts-stick__led {
background: #4CAF50;
box-shadow: 0 0 6px rgba(76,175,80,0.8);
}
}
/* ── 11. Page Hero (inner pages) ───────────────────────────── */
.page-hero {
background: #111111;
color: #fff;
padding: 8rem 0 5rem;
text-align: center;
position: relative;
overflow: hidden;
}
.page-hero .hero-overlay {
background: rgba(17, 17, 17, 0.80);
}
.page-hero .container { position: relative; z-index: 2; }
.page-hero h1 { color: #fff; margin-bottom: 1rem; }
.page-hero .lead { color: rgba(255,255,255,.7); }
.page-hero .hero-label { margin-bottom: 1.5rem; }
/* ── 11b. Animated Hero (OTS Signs) ────────────────────────── */
/* Particle keyframes */
@keyframes particle-float {
0% { transform: translateY(0) translateX(0) scale(1); opacity: 0; }
10% { opacity: var(--p-opacity, 0.4); }
90% { opacity: var(--p-opacity, 0.4); }
100% { transform: translateY(var(--p-ty, -100vh)) translateX(var(--p-tx, 40px)) scale(var(--p-scale-end, 0.3)); opacity: 0; }
}
@keyframes glow-appear {
from { opacity: 0; filter: blur(80px); transform: translate(-50%, -50%) scale(0.2); }
to { opacity: 0.65; filter: blur(22px); transform: translate(-50%, -50%) scale(0.85); }
}
@keyframes glow-drift {
0% { transform: translate(-50%, -50%) scale(0.85); opacity: 0.6; }
15% { transform: translate(-20%, -30%) scale(1.35); opacity: 0.75; }
30% { transform: translate(-65%, -70%) scale(0.65); opacity: 0.5; }
45% { transform: translate(-80%, -40%) scale(1.45); opacity: 0.8; }
60% { transform: translate(-30%, -75%) scale(0.7); opacity: 0.55; }
75% { transform: translate(-70%, -25%) scale(1.5); opacity: 0.75; }
90% { transform: translate(-40%, -60%) scale(0.8); opacity: 0.65; }
100% { transform: translate(-50%, -50%) scale(0.85); opacity: 0.6; }
}
/* Particle container */
.hero-particles {
position: absolute;
inset: 0;
overflow: hidden;
z-index: 1;
pointer-events: none;
}
/* Individual particles - circles with staggered float animation */
.hero-particle {
position: absolute;
border-radius: 50%;
background: rgba(255, 255, 255, 0.12);
animation: particle-float var(--p-dur, 18s) var(--p-delay, 0s) linear infinite;
will-change: transform, opacity;
}
/* 12 particles with unique positions, sizes, speeds, and trajectories */
.hero-particle--1 { --p-dur: 22s; --p-delay: 0s; --p-tx: 60px; --p-ty: -110vh; --p-opacity: 0.35; --p-scale-end: 0.2; width: 8px; height: 8px; bottom: -10px; left: 8%; }
.hero-particle--2 { --p-dur: 28s; --p-delay: 3s; --p-tx: -40px; --p-ty: -105vh; --p-opacity: 0.25; --p-scale-end: 0.4; width: 14px; height: 14px; bottom: -20px; left: 20%; }
.hero-particle--3 { --p-dur: 20s; --p-delay: 1s; --p-tx: 80px; --p-ty: -115vh; --p-opacity: 0.3; --p-scale-end: 0.3; width: 6px; height: 6px; bottom: -8px; left: 35%; }
.hero-particle--4 { --p-dur: 26s; --p-delay: 5s; --p-tx: -60px; --p-ty: -100vh; --p-opacity: 0.4; --p-scale-end: 0.2; width: 10px; height: 10px; bottom: -12px; left: 50%; }
.hero-particle--5 { --p-dur: 24s; --p-delay: 2s; --p-tx: 30px; --p-ty: -108vh; --p-opacity: 0.2; --p-scale-end: 0.5; width: 20px; height: 20px; bottom: -25px; left: 65%; background: rgba(var(--color-primary-rgb),0.12); }
.hero-particle--6 { --p-dur: 30s; --p-delay: 7s; --p-tx: -20px; --p-ty: -112vh; --p-opacity: 0.35; --p-scale-end: 0.3; width: 12px; height: 12px; bottom: -15px; left: 78%; }
.hero-particle--7 { --p-dur: 19s; --p-delay: 4s; --p-tx: 50px; --p-ty: -106vh; --p-opacity: 0.2; --p-scale-end: 0.4; width: 16px; height: 16px; bottom: -20px; left: 90%; background: rgba(var(--color-primary-rgb),0.08); }
.hero-particle--8 { --p-dur: 25s; --p-delay: 6s; --p-tx: -70px; --p-ty: -102vh; --p-opacity: 0.3; --p-scale-end: 0.2; width: 7px; height: 7px; bottom: -10px; left: 15%; }
.hero-particle--9 { --p-dur: 32s; --p-delay: 8s; --p-tx: 45px; --p-ty: -110vh; --p-opacity: 0.15; --p-scale-end: 0.6; width: 24px; height: 24px; bottom: -30px; left: 42%; background: rgba(var(--color-primary-rgb),0.08); }
.hero-particle--10 { --p-dur: 21s; --p-delay: 10s; --p-tx: -35px; --p-ty: -108vh; --p-opacity: 0.3; --p-scale-end: 0.3; width: 9px; height: 9px; bottom: -12px; left: 58%; }
.hero-particle--11 { --p-dur: 27s; --p-delay: 12s; --p-tx: 25px; --p-ty: -104vh; --p-opacity: 0.2; --p-scale-end: 0.4; width: 18px; height: 18px; bottom: -22px; left: 72%; background: rgba(var(--color-primary-rgb),0.06); }
.hero-particle--12 { --p-dur: 23s; --p-delay: 9s; --p-tx: -55px; --p-ty: -106vh; --p-opacity: 0.25; --p-scale-end: 0.3; width: 11px; height: 11px; bottom: -14px; left: 5%; }
/* Ambient glow effect behind content */
.hero-animated__glow {
position: absolute;
top: 50%;
left: 50%;
width: 520px;
height: 520px;
border-radius: 50%;
background: radial-gradient(circle, rgba(var(--color-primary-rgb), 0.32) 0%, rgba(var(--color-primary-rgb), 0.14) 45%, rgba(var(--color-primary-rgb), 0.04) 70%, transparent 90%);
z-index: 1;
pointer-events: none;
filter: blur(22px);
animation:
glow-appear 0.45s cubic-bezier(0.16, 1, 0.3, 1) forwards,
glow-drift 20s 0.45s ease-in-out infinite;
}
/* Animated hero layout - centered single-column content */
.hero-animated__inner {
position: relative;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding-block: 10rem 6rem;
}
.hero-animated__content {
max-width: 720px;
}
.hero-animated__content .hero-title {
font-size: clamp(2.4rem, 5vw, 4rem);
}
.hero-animated__content .hero-description {
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
.hero-animated__content .btn-group {
justify-content: center;
}
/* Keep secondary CTA visible on light homepage hero */
.hero-animated .btn-ghost {
border-color: rgba(var(--color-primary-rgb), .35);
color: var(--color-text);
background: rgba(255,255,255,.55);
}
.hero-animated .btn-ghost:hover {
border-color: rgba(var(--color-primary-rgb), .6);
background: rgba(var(--color-primary-rgb), .08);
color: var(--color-text);
}
.hero-animated__content .hero-stats {
justify-content: center;
}
/* Homepage flow: avoid oversized gap before use-cases section */
.hero-animated {
min-height: auto;
}
.hero-animated + .use-cases-section {
padding-top: clamp(2rem, 4vw, 3.5rem);
}
.hero-stats--three {
display: flex;
gap: 3rem;
margin-top: 2.5rem;
}
/* Page hero animated - inherits base page-hero + adds particles */
.page-hero-animated {
position: relative;
}
.page-hero-animated .hero-particles { z-index: 0; }
.page-hero-animated .hero-animated__glow { z-index: 0; }
.page-hero-animated .hero-overlay { z-index: 1; }
.page-hero-animated .container { position: relative; z-index: 2; }
/* Reduce motion for accessibility */
@media (prefers-reduced-motion: reduce) {
.hero-particle,
.hero-animated__glow {
animation: none;
opacity: 0.6;
transform: translate(-50%, -50%) scale(0.85);
filter: blur(22px);
}
}
@media (max-width: 768px) {
.hero-animated__glow { width: 340px; height: 340px; }
.hero-animated__inner { padding-block: 7rem 4rem; }
.hero-stats--three { gap: 1.5rem; flex-wrap: wrap; justify-content: center; }
}
/* ── 12. About page ────────────────────────────────────────── */
.about-intro {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.about-intro-visual {
background: var(--color-primary);
border-radius: var(--radius-xl);
aspect-ratio: 1;
max-width: 420px;
display: flex;
align-items: center;
justify-content: center;
font-size: 6rem;
color: #fff;
}
/* When an image is set, remove the gradient box styling */
.about-intro-visual.has-img {
background: none;
box-shadow: none;
aspect-ratio: unset;
font-size: inherit;
color: inherit;
}
@media (max-width: 768px) {
.about-intro { grid-template-columns: 1fr; }
.about-intro-visual { max-width: 280px; margin-inline: auto; }
}
/* ── 13. Contact ────────────────────────────────────────────── */
.contact-layout {
display: grid;
grid-template-columns: 1fr 1.6fr;
gap: 4rem;
align-items: start;
}
@media (max-width: 768px) {
.contact-layout { grid-template-columns: 1fr; }
}
.contact-info h2 { margin-bottom: 1rem; }
.contact-info .lead { margin-bottom: 2rem; }
.contact-method {
display: flex;
align-items: flex-start;
gap: 1rem;
margin-bottom: 1.5rem;
}
.contact-method-icon {
width: 44px; height: 44px;
background: var(--color-primary-lt);
border-radius: var(--radius-sm);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
flex-shrink: 0;
}
.contact-method-label { font-size: .8rem; color: var(--color-text-muted); }
.contact-method-value { font-weight: 600; color: var(--color-heading); font-size: .95rem; }
.contact-form-wrap {
background: var(--card-bg);
border: 1px solid var(--color-border);
border-radius: var(--radius-lg);
padding: 2.5rem;
box-shadow: var(--shadow-sm);
}
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
@media (max-width: 560px) { .form-row { grid-template-columns: 1fr; } }
.form-group { margin-bottom: 1.25rem; }
.form-group label {
display: block;
font-size: .85rem;
font-weight: 600;
color: var(--color-text);
margin-bottom: .4rem;
}
.form-group label .req { color: #D32F2F; }
.form-group input,
.form-group textarea,
.form-group select {
width: 100%;
padding: .75rem 1rem;
font-family: var(--font-sans);
font-size: .95rem;
color: var(--color-text);
background: var(--form-bg);
border: 1.5px solid var(--color-border);
border-radius: var(--radius-sm);
transition: border-color var(--transition), box-shadow var(--transition);
outline: none;
resize: vertical;
}
.form-group input:focus,
.form-group textarea:focus,
.form-group select:focus {
border-color: var(--color-primary);
box-shadow: 0 0 0 3px rgba(var(--color-primary-rgb),.12);
background: var(--form-bg-focus);
}
.form-group textarea { min-height: 140px; }
.form-notice {
margin-top: 1rem;
font-size: .85rem;
padding: .75rem 1rem;
border-radius: var(--radius-sm);
display: none;
}
.form-notice.success { background: #f0fdf4; color: #16a34a; border: 1px solid #bbf7d0; display: block; }
.form-notice.error { background: #fef2f2; color: #dc2626; border: 1px solid #fecaca; display: block; }
/* ── 14. CTA Banner ─────────────────────────────────────────── */
@keyframes cta-shimmer {
0% { opacity: 1; }
100% { opacity: 1; }
}
/* ── Dashboard Chart ───────────────────────────────────── */
.dashboard-chart {
width: 100%;
height: auto;
display: block;
user-select: none;
overflow: visible;
}
/* Reduced-motion: JS already checks the media query, belt-and-suspenders */
@media (prefers-reduced-motion: reduce) {
.dashboard-chart .bar,
.dashboard-chart .pie-segment { transition: none !important; }
}
@media (max-width: 768px) {
.dashboard-chart-container { padding: 1rem; border-radius: var(--radius-md, 12px); }
}
.cta-banner {
position: relative;
overflow: hidden;
background: var(--color-primary);
color: #fff;
padding-block: 5rem;
text-align: center;
}
.cta-banner::before {
content: none;
}
.cta-banner::after {
content: none;
}
.cta-banner .container { position: relative; z-index: 1; }
.cta-banner h2 { color: #fff; margin-bottom: 1rem; }
.cta-banner p { color: rgba(255,255,255,.85); margin-bottom: 2rem; font-size: 1.1rem; }
.devices-split-card {
display: grid;
grid-template-columns: 1fr 1fr;
border-radius: var(--radius-xl);
overflow: hidden;
border: 1px solid var(--color-border);
background: var(--card-bg);
}
.devices-split-card__panel {
padding: clamp(1.5rem, 3vw, 2.5rem);
}
.devices-split-card__panel h3 {
margin-bottom: .85rem;
}
.devices-split-card__panel p {
color: var(--color-text-muted);
line-height: 1.75;
}
.devices-split-card__panel--brand {
background: var(--color-primary);
color: var(--color-bg);
}
.devices-split-card__panel--brand h3,
.devices-split-card__panel--brand p {
color: inherit;
}
@media (max-width: 768px) {
.devices-split-card {
grid-template-columns: 1fr;
}
}
/* ── 15. Footer ────────────────────────────────────────────── */
.site-footer {
background: #111111;
color: rgba(255,255,255,.7);
padding-top: 4rem;
}
.footer-inner {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr 1fr;
gap: 2rem;
padding-bottom: 3rem;
border-bottom: 1px solid rgba(255,255,255,.08);
}
@media (max-width: 900px) {
.footer-inner { grid-template-columns: 1fr 1fr; }
.footer-brand { grid-column: 1 / -1; }
}
@media (max-width: 480px) {
.footer-inner { grid-template-columns: 1fr; }
}
.footer-brand .logo-text { font-size: 1.5rem; color: #fff; }
.footer-logo-section { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1rem; }
.footer-logo-section .custom-logo-link img,
.footer-logo-section .custom-logo {
max-height: 60px !important;
width: auto !important;
}
.footer-company-name { display: flex; align-items: center; }
.footer-tagline { font-size: .9rem; color: rgba(255,255,255,.5); margin-top: .75rem; margin-bottom: .5rem; }
.footer-location { font-size: .8rem; color: rgba(255,255,255,.8); }
.footer-location a { color: var(--color-primary); font-weight: 600; }
.footer-location a:hover { color: var(--color-primary-lt); }
.footer-links { display: contents; }
.footer-col h4 {
font-size: .8rem;
font-weight: 700;
letter-spacing: .1em;
text-transform: uppercase;
color: rgba(255,255,255,.4);
margin-bottom: 1rem;
}
.footer-col ul { display: flex; flex-direction: column; gap: .6rem; }
.footer-col a {
font-size: .875rem;
color: rgba(255,255,255,.6);
transition: color var(--transition);
}
.footer-col a:hover { color: #fff; }
.footer-bottom {
padding-block: 1.5rem;
display: flex;
align-items: center;
gap: 1rem;
}
.footer-bottom p {
font-size: .8rem;
color: rgba(255,255,255,.3);
margin: 0;
flex: 0 1 auto;
}
.footer-bottom .theme-toggle {
margin-left: auto;
}
/* ── 15a. FAQ Accordion ─────────────────────────────────────── */
.faq-list {
max-width: 800px;
margin-inline: auto;
}
.faq-item {
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
margin-bottom: 1rem;
background: var(--card-bg);
transition: box-shadow var(--transition), border-color var(--transition);
}
.faq-item[open] {
border-color: var(--color-primary);
box-shadow: 0 0 0 3px rgba(var(--color-primary-rgb),.08);
}
.faq-question {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
padding: 1.25rem 1.5rem;
font-weight: 600;
font-size: 1rem;
color: var(--color-heading);
cursor: pointer;
list-style: none;
user-select: none;
}
.faq-question::-webkit-details-marker { display: none; }
.faq-question::marker { content: ''; }
.faq-toggle {
flex-shrink: 0;
width: 24px;
height: 24px;
position: relative;
transition: transform var(--transition);
}
.faq-toggle::before,
.faq-toggle::after {
content: '';
position: absolute;
background: var(--color-text-muted);
border-radius: 2px;
transition: transform var(--transition);
}
.faq-toggle::before {
width: 14px; height: 2px;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
}
.faq-toggle::after {
width: 2px; height: 14px;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
}
.faq-item[open] .faq-toggle::after {
transform: translate(-50%, -50%) rotate(90deg);
opacity: 0;
}
.faq-answer {
padding: 0 1.5rem 1.25rem;
color: var(--color-text-muted);
font-size: .95rem;
line-height: 1.7;
}
.faq-answer p { margin-bottom: .5rem; }
.faq-answer p:last-child { margin-bottom: 0; }
/* ── 15b. Comparison Table ──────────────────────────────────── */
.comparison-table-wrap {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
background: var(--card-bg);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
@media (prefers-color-scheme: dark) {
.comparison-table-wrap {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}
}
.comparison-table {
width: 100%;
border-collapse: collapse;
font-size: .92rem;
min-width: 600px;
}
.comparison-table thead th {
background: var(--color-bg-alt);
font-weight: 700;
font-size: .85rem;
text-transform: uppercase;
letter-spacing: .05em;
color: var(--color-heading);
padding: 1rem 1.25rem;
text-align: center;
border-bottom: 2px solid var(--color-border);
position: sticky;
top: 0;
z-index: 1;
}
@media (prefers-color-scheme: dark) {
.comparison-table thead th {
background: var(--color-bg-alt);
border-bottom-color: var(--color-border);
}
}
.comparison-table thead th:first-child {
text-align: left;
min-width: 220px;
}
.comparison-table tbody td {
padding: .85rem 1.25rem;
border-bottom: 1px solid var(--color-border);
text-align: center;
color: var(--color-text);
vertical-align: middle;
}
.comparison-table tbody tr:last-child td {
border-bottom: none;
}
.comparison-table tbody td:first-child {
text-align: left;
font-weight: 500;
}
.comparison-feature-col { min-width: 220px; }
.comparison-feature-name { color: var(--color-text); }
.comparison-group-row td {
background: var(--color-primary);
font-weight: 700;
font-size: .82rem;
text-transform: uppercase;
letter-spacing: .08em;
color: var(--color-bg);
text-align: left !important;
padding: .85rem 1.25rem;
border-bottom-color: var(--color-primary) !important;
}
.comparison-group-row td:first-child {
border-left: 4px solid var(--color-accent);
}
@media (prefers-color-scheme: dark) {
.comparison-group-row td {
background: var(--color-primary-dk);
border-bottom-color: var(--color-primary-dk) !important;
}
}
.comparison-yes {
color: var(--color-accent);
font-size: 1.1rem;
font-weight: 700;
}
.comparison-no {
color: var(--color-text-muted);
font-size: 1rem;
}
.comparison-table tbody tr:hover td {
background: rgba(var(--color-primary-rgb), .03);
}
@media (prefers-color-scheme: dark) {
.comparison-table tbody tr:hover td {
background: rgba(var(--color-primary-rgb), .08);
}
}
@media (max-width: 640px) {
.comparison-table-wrap { margin-inline: calc(var(--container-pad) * -1); border-radius: 0; border-left: none; border-right: none; }
}
/* ── 16. Misc ───────────────────────────────────────────────── */
.text-center { text-align: center; }
.text-primary { color: var(--color-primary); }
.text-accent { color: var(--color-accent); }
.mt-1 { margin-top: .5rem; }
.mt-2 { margin-top: 1rem; }
.mt-3 { margin-top: 1.5rem; }
.mt-4 { margin-top: 2rem; }
.mb-4 { margin-bottom: 2rem; }
/* Divider */
.divider {
border: none;
border-top: 1px solid var(--color-border);
margin-block: 3rem;
}
/* Screen reader only */
.sr-only {
position: absolute;
width: 1px; height: 1px;
margin: -1px; padding: 0;
overflow: hidden; clip: rect(0,0,0,0);
white-space: nowrap; border: 0;
}
/* Scroll to top */
.scroll-top {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 44px; height: 44px;
background: var(--color-primary);
color: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
box-shadow: var(--shadow-md);
opacity: 0;
transform: translateY(10px);
transition: all var(--transition);
z-index: 50;
cursor: pointer;
}
.scroll-top.visible {
opacity: 1;
transform: translateY(0);
}
/* ── 17. Theme Toggle ──────────────────────────────────────── */
.theme-toggle {
position: relative;
width: 48px;
height: 26px;
background: var(--color-border);
border-radius: 100px;
border: none;
cursor: pointer;
margin-left: .75rem;
flex-shrink: 0;
transition: background var(--transition);
}
.theme-toggle:hover { background: var(--color-text-muted); }
.theme-toggle::before {
content: '';
position: absolute;
top: 3px;
left: 3px;
width: 20px;
height: 20px;
background: #fff;
border-radius: 50%;
transition: transform var(--transition);
box-shadow: 0 1px 3px rgba(0,0,0,.2);
}
[data-theme="dark"] .theme-toggle {
background: var(--color-primary);
}
[data-theme="dark"] .theme-toggle::before {
transform: translateX(22px);
}
.theme-toggle-icon {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 14px;
height: 14px;
pointer-events: none;
}
.theme-toggle .sun-icon {
left: 5px;
color: #f59e0b;
}
.theme-toggle .moon-icon {
right: 5px;
color: #fff;
opacity: .7;
}
/* ── Dark mode overrides ───────────────────────────────────── */
[data-theme="dark"] .section-dark { background: #111111; }
[data-theme="dark"] .section-alt { background: var(--color-bg-alt); }
[data-theme="dark"] .hero { background: #111111; }
[data-theme="dark"] .page-hero {
background: #111111;
}
[data-theme="dark"] .hero-animated { background: #0D0D0D; }
[data-theme="dark"] .page-hero-animated { background: #0D0D0D; }
[data-theme="dark"] .hero-animated__glow {
background: radial-gradient(circle, rgba(var(--color-primary-rgb), 0.40) 0%, rgba(var(--color-primary-rgb), 0.18) 45%, rgba(var(--color-primary-rgb), 0.06) 70%, transparent 90%);
}
[data-theme="dark"] .site-footer { background: #0D0D0D; }
[data-theme="dark"] .logo-text { color: #F5F5F5; }
[data-theme="dark"] .logo-text strong { color: var(--color-primary); }
[data-theme="dark"] .nav-menu a { color: rgba(255,255,255,.8); }
[data-theme="dark"] .nav-menu a:hover,
[data-theme="dark"] .nav-menu .current-menu-item > a { color: var(--color-primary); }
[data-theme="dark"] .nav-toggle span { background: #F5F5F5; }
[data-theme="dark"] .cta-banner {
background: var(--color-primary-dk);
}
[data-theme="dark"] .btn-ghost {
border-color: rgba(255,255,255,.25);
}
[data-theme="dark"] .hero-animated .btn-ghost {
color: #fff;
background: transparent;
}
[data-theme="dark"] .hero-animated .btn-ghost:hover {
background: rgba(255,255,255,.1);
color: #fff;
}
[data-theme="dark"] .platform-visual:not(.has-img):not(.has-dashboard) {
background: var(--color-bg-alt);
border-color: var(--color-border);
}
[data-theme="dark"] .platform-visual.has-img {
background: none;
border: none;
}
[data-theme="dark"] .form-notice.success {
background: rgba(22,163,74,.1);
color: #4ade80;
border-color: rgba(22,163,74,.3);
}
[data-theme="dark"] .form-notice.error {
background: rgba(220,38,38,.1);
color: #f87171;
border-color: rgba(220,38,38,.3);
}
[data-theme="dark"] .faq-item { background: var(--card-bg); border-color: var(--color-border); }
[data-theme="dark"] .faq-item[open] { border-color: var(--color-primary); }
[data-theme="dark"] .faq-question { color: var(--color-heading); }
[data-theme="dark"] .faq-toggle::before,
[data-theme="dark"] .faq-toggle::after { background: var(--color-text-muted); }
[data-theme="dark"] .comparison-table-wrap { background: var(--card-bg); border-color: var(--color-border); }
[data-theme="dark"] .comparison-table thead th { background: var(--color-bg-alt); color: var(--color-heading); border-color: var(--color-border); }
[data-theme="dark"] .comparison-table tbody td { border-color: var(--color-border); color: var(--color-text); }
[data-theme="dark"] .comparison-group-row td { background: var(--color-bg-alt); color: var(--color-primary); }
[data-theme="dark"] .comparison-table tbody tr:hover td { background: rgba(var(--color-primary-rgb), .06); }
@media (max-width: 768px) {
.theme-toggle { margin-left: 0; margin-right: .5rem; }
}
/* =============================================================
Block Editor Overrides
(loaded into the editor canvas via add_editor_style)
============================================================= */
/* Remove Gutenberg's default group-block padding so our section
classes control all spacing */
.wp-block-group {
padding: 0 !important;
margin: 0 !important;
}
/* The editor root container should not add extra padding */
.is-root-container {
padding: 0 !important;
}
/* Make the editor canvas full-width so sections render at
their natural width instead of being constrained to post-content width */
.editor-styles-wrapper .is-root-container > .wp-block {
max-width: 100% !important;
margin-left: 0 !important;
margin-right: 0 !important;
}
.editor-styles-wrapper .wp-block.wp-block-group {
max-width: 100% !important;
}
/* Headings inside the editor should use our theme styles */
.editor-styles-wrapper h1,
.editor-styles-wrapper h2,
.editor-styles-wrapper h3 {
font-family: var(--font-sans);
}
/* Prevent Gutenberg from adding default margin on headings/paragraphs
since our sections control spacing */
.editor-styles-wrapper .wp-block-heading,
.editor-styles-wrapper .wp-block-paragraph {
margin: 0;
}
/* ══════════════════════════════════════════════════════════════════════════════
CAMERA ANIMATOR (.platform-visual.has-camera)
Photo camera (left) + product scene (centre) + VHS camcorder on tripod (right)
══════════════════════════════════════════════════════════════════════════════ */
.platform-visual.has-camera {
--cam-cycle: 9s;
--cam-rec-cycle: 1.4s;
--cam-lens-cycle: 4s;
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
display: flex;
align-items: center;
justify-content: center;
font-size: inherit;
min-height: 220px;
}
.cam-stage {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
gap: 6px;
padding-bottom: 4px;
}
/* ── Product scene (between the two cameras) ── */
.cam-scene {
width: 140px;
height: 130px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
border-radius: 4px;
position: relative;
overflow: hidden;
flex-shrink: 0;
background-image:
linear-gradient(rgba(255,255,255,.04) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.04) 1px, transparent 1px);
background-size: 18px 18px;
}
/* ── Rotating product items: shoe, food, laptop ── */
.cam-subject {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
}
.cam-subject::before,
.cam-subject::after {
content: '';
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.cam-subject--shoe { animation: cam-subject-1 var(--cam-cycle) ease-in-out infinite; }
.cam-subject--shoe::before {
width: 76px;
height: 28px;
border-radius: 16px 20px 10px 14px;
background: linear-gradient(145deg, #312e81 0%, #4f46e5 45%, #818cf8 100%);
box-shadow:
0 0 14px rgba(129,140,248,.25),
inset 0 -2px 0 rgba(0,0,0,.22),
inset 0 2px 0 rgba(255,255,255,.18);
}
.cam-subject--shoe::after {
width: 80px;
height: 8px;
border-radius: 999px;
background: #e5e7eb;
transform: translate(-50%, calc(-50% + 13px));
box-shadow: inset 0 -1px 0 rgba(0,0,0,.2);
}
.cam-subject--food { animation: cam-subject-2 var(--cam-cycle) ease-in-out infinite; }
.cam-subject--food::before {
width: 68px;
height: 46px;
border-radius: 22px 22px 14px 14px;
background:
linear-gradient(to bottom,
#fbbf24 0 34%,
#65a30d 34% 43%,
#7c2d12 43% 60%,
#f59e0b 60% 100%);
box-shadow:
0 0 14px rgba(251,191,36,.28),
inset 0 1px 0 rgba(255,255,255,.35);
}
.cam-subject--food::after {
width: 16px;
height: 16px;
border-radius: 50%;
background: rgba(255,255,255,.26);
transform: translate(calc(-50% - 14px), calc(-50% - 10px));
}
.cam-subject--laptop { animation: cam-subject-3 var(--cam-cycle) ease-in-out infinite; }
.cam-subject--laptop::before {
width: 74px;
height: 44px;
border-radius: 6px;
background:
linear-gradient(165deg, #0f172a 0%, #1e293b 100%);
border: 2px solid #94a3b8;
box-shadow:
0 0 16px rgba(148,163,184,.25),
inset 0 0 0 2px rgba(15,23,42,.7);
}
.cam-subject--laptop::after {
width: 90px;
height: 10px;
border-radius: 4px;
background: linear-gradient(180deg, #d1d5db, #9ca3af);
transform: translate(-50%, calc(-50% + 28px));
box-shadow: inset 0 1px 0 rgba(255,255,255,.5);
}
/* Flash overlay */
.cam-flash-overlay {
position: absolute;
inset: 0;
background: #fff;
opacity: 0;
pointer-events: none;
animation: cam-flash-pulse var(--cam-cycle) linear infinite;
}
/* CRT scanlines from the video cam */
.cam-vid-overlay {
position: absolute;
inset: 0;
background: repeating-linear-gradient(
to bottom,
transparent 0px, transparent 3px,
rgba(0,0,0,.08) 3px, rgba(0,0,0,.08) 4px
);
pointer-events: none;
}
/* ══════════════════════════════════════════
PHOTO CAMERA (compact point-and-shoot)
══════════════════════════════════════════ */
.pc-wrap {
display: flex;
flex-direction: column;
align-items: flex-start;
flex-shrink: 0;
transform: translateY(-12px);
}
.pc-body {
width: 90px;
display: flex;
flex-direction: column;
position: relative;
filter: drop-shadow(0 6px 18px rgba(0,0,0,.8));
}
/* Hot-shoe flash on top */
.pc-flash-unit {
width: 30px;
height: 10px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
border-bottom: none;
border-radius: 3px 3px 0 0;
margin-left: 10px;
position: relative;
box-shadow: inset 0 1px 0 rgba(255,255,255,.06);
}
.pc-flash-unit::after {
content: '';
position: absolute;
top: 2px; left: 4px; right: 4px; bottom: 2px;
background: #c8c870;
border-radius: 1px;
animation: pc-flash-glow var(--cam-cycle) linear infinite;
}
/* Top strip */
.pc-top {
width: 100%;
height: 18px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
border-bottom: none;
border-radius: 3px 3px 0 0;
display: flex;
align-items: center;
padding: 0 8px;
position: relative;
box-shadow: inset 0 1px 0 rgba(255,255,255,.06);
}
.pc-shutter-btn {
position: absolute;
top: -8px; right: 10px;
width: 14px; height: 14px;
background: var(--color-border);
border-radius: 50%;
border: 2px solid var(--color-border);
box-shadow: 0 0 0 1px rgba(255,255,255,.15), inset 0 1px 0 rgba(255,255,255,.1);
animation: pc-shutter var(--cam-cycle) linear infinite;
transform-origin: center;
}
.pc-viewfinder {
width: 11px; height: 7px;
background: rgba(0,0,0,.6);
border: 1px solid rgba(255,255,255,.18);
border-radius: 1px;
margin-left: auto;
}
/* Front face */
.pc-front {
width: 100%;
height: 52px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
border-top: 1px solid rgba(255,255,255,.1);
border-radius: 0 0 4px 4px;
display: flex;
align-items: center;
padding: 0 8px;
gap: 8px;
box-shadow: inset 0 -1px 0 rgba(0,0,0,.3);
}
/* Lens */
.pc-lens-ring {
width: 38px; height: 38px;
border-radius: 50%;
background: #0a0a0a;
border: 3px solid var(--color-border);
box-shadow: 0 0 0 1px rgba(255,255,255,.1), inset 0 0 8px rgba(0,0,0,1);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.pc-lens-glass {
width: 26px; height: 26px;
border-radius: 50%;
background: radial-gradient(circle at 30% 30%, #1a6ad6 0%, #0a1844 50%, #000b1a 100%);
position: relative;
overflow: hidden;
}
.pc-lens-reflex {
position: absolute;
top: 3px; left: 3px;
width: 8px; height: 5px;
background: rgba(255,255,255,.25);
border-radius: 50%;
transform: rotate(-20deg);
}
/* Grip ridges */
.pc-grip {
flex: 1;
display: flex;
flex-direction: column;
gap: 5px;
align-items: stretch;
}
.pc-grip::before, .pc-grip::after {
content: '';
display: block;
height: 4px;
background: rgba(255,255,255,.06);
border: 1px solid var(--color-border);
border-radius: 1px;
}
/* Polaroid prints */
.pc-prints {
position: relative;
width: 90px;
height: 52px;
flex-shrink: 0;
}
.pc-print {
position: absolute;
width: 54px; height: 60px;
background: #f0e8d0;
border-radius: 2px;
box-shadow: 0 4px 14px rgba(0,0,0,.7);
opacity: 0;
}
.pc-print__img {
position: absolute;
top: 6px; left: 6px; right: 6px;
height: 38px;
border-radius: 1px;
}
.pc-print--1 { left: 0; top: 0; transform-origin: bottom center; animation: pc-print-1 var(--cam-cycle) linear infinite; }
.pc-print--2 { left: 18px; top: 0; transform-origin: bottom center; animation: pc-print-2 var(--cam-cycle) linear infinite; }
.pc-print--3 { left: 36px; top: 0; transform-origin: bottom center; animation: pc-print-3 var(--cam-cycle) linear infinite; }
.pc-print--1 .pc-print__img { background: linear-gradient(135deg, #064e3b, #4ade80); }
.pc-print--2 .pc-print__img { background: linear-gradient(160deg, #78350f, #fbbf24); }
.pc-print--3 .pc-print__img { background: linear-gradient(135deg, #1e1b4b, #818cf8); }
/* ══════════════════════════════════════════
VIDEO CAMERA ON TRIPOD (retro VHS-era)
Lens barrel faces LEFT toward the scene
══════════════════════════════════════════ */
.vc-wrap {
display: flex;
flex-direction: column;
align-items: center;
flex-shrink: 0;
transform: translateY(12px);
}
.vc-camera {
display: flex;
flex-direction: column;
align-items: center;
filter: drop-shadow(0 6px 18px rgba(0,0,0,.8));
}
/* Top carry handle */
.vc-handle {
width: 58px;
height: 13px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
border-radius: 8px 8px 0 0;
position: relative;
overflow: hidden;
box-shadow: inset 0 1px 0 rgba(255,255,255,.07);
}
.vc-handle::after {
content: '';
position: absolute;
left: 8px; top: 3px; right: 8px; bottom: 3px;
background: repeating-linear-gradient(90deg,
rgba(255,255,255,.04) 0, rgba(255,255,255,.04) 3px,
transparent 3px, transparent 6px);
border-radius: 2px;
}
/* Main body */
.vc-body {
width: 98px;
height: 54px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
border-top: 1px solid rgba(255,255,255,.12);
border-radius: 4px 0 0 4px;
position: relative;
display: flex;
align-items: center;
overflow: visible;
box-shadow: inset 0 -1px 0 rgba(0,0,0,.3);
}
/* Lens barrel — extends RIGHT */
.vc-lens-barrel {
position: absolute;
right: -34px;
top: calc(50% - 1px);
transform: translateY(-50%);
width: 38px; height: 38px;
border-radius: 50%;
background: #0c0c0c;
border: 2px solid var(--color-border);
box-shadow: 0 0 0 1px rgba(255,255,255,.1), inset 0 0 8px rgba(0,0,0,1);
display: flex;
align-items: center;
justify-content: center;
animation: vc-lens-zoom var(--cam-lens-cycle) ease-in-out infinite;
}
.vc-lens-tip {
width: 26px; height: 26px;
border-radius: 50%;
background: #0a0a18;
border: 1px solid rgba(100,140,255,.3);
display: flex;
align-items: center;
justify-content: center;
}
.vc-lens-glass {
width: 17px; height: 17px;
border-radius: 50%;
background: radial-gradient(circle at 30% 30%, #1a6ad6 0%, #0a0f2e 55%, #000510 100%);
position: relative;
overflow: hidden;
}
.vc-lens-reflex {
position: absolute;
top: 2px; left: 2px;
width: 6px; height: 4px;
background: rgba(255,255,255,.25);
border-radius: 50%;
transform: rotate(-20deg);
}
/* Top rail */
.vc-top-rail {
position: absolute;
top: 0; left: 6px; right: 6px;
height: 4px;
background: rgba(255,255,255,.04);
border: 1px solid var(--color-border);
border-top: none;
border-radius: 0 0 2px 2px;
}
/* REC indicator */
.vc-rec-light {
position: absolute;
top: 8px;
right: 16px;
width: 7px; height: 7px;
border-radius: 50%;
background: #ef4444;
box-shadow: 0 0 8px #ef4444, 0 0 16px rgba(239,68,68,.4);
animation: vc-rec-blink var(--cam-rec-cycle) ease-in-out infinite;
}
/* Eyepiece — extends LEFT */
.vc-eyepiece {
position: absolute;
left: -14px;
top: 50%;
transform: translateY(-50%);
width: 14px; height: 18px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
border-right: none;
border-radius: 4px 0 0 4px;
display: flex;
align-items: center;
justify-content: center;
}
.vc-eyepiece::after {
content: '';
width: 8px; height: 8px;
background: rgba(0,0,0,.8);
border-radius: 50%;
border: 1px solid rgba(255,255,255,.15);
}
/* Cassette door */
.vc-body::after {
content: '';
position: absolute;
left: 6px; top: 7px;
width: 28px; height: 34px;
background: rgba(0,0,0,.2);
border: 1px solid var(--color-border);
border-radius: 2px;
}
/* ── Tripod ── */
.vc-tripod {
display: flex;
flex-direction: column;
align-items: center;
width: 98px;
filter: drop-shadow(0 4px 10px rgba(0,0,0,.6));
}
.vc-stem {
width: 5px;
height: 40px;
background: linear-gradient(to right, var(--color-bg-alt), var(--color-border), var(--color-bg-alt));
border-radius: 2px;
margin-bottom: -2px;
}
.vc-legs {
display: flex;
justify-content: space-between;
align-items: flex-end;
width: 82px;
position: relative;
height: 30px;
}
.vc-leg {
width: 3px; height: 30px;
background: linear-gradient(to right, var(--color-bg-alt), var(--color-border));
border-radius: 0 0 2px 2px;
transform-origin: top center;
}
.vc-leg--l { transform: rotate(-22deg); }
.vc-leg--c { height: 20px; }
.vc-leg--r { transform: rotate(22deg); }
.vc-legs::after {
content: '';
position: absolute;
top: 9px; left: 9px; right: 9px;
height: 2px;
background: var(--color-border);
border-radius: 1px;
opacity: .7;
}
/* ══ Keyframes ══ */
@keyframes cam-subject-1 {
0%, 30% { opacity: 1; }
33%, 100% { opacity: 0; }
}
@keyframes cam-subject-2 {
0%, 30% { opacity: 0; }
33%, 63% { opacity: 1; }
66%, 100% { opacity: 0; }
}
@keyframes cam-subject-3 {
0%, 63% { opacity: 0; }
66%, 100% { opacity: 1; }
}
@keyframes cam-flash-pulse {
0% { opacity: 0; } 0.5% { opacity: 0.9; } 2.5% { opacity: 0; }
33% { opacity: 0; } 33.5% { opacity: 0.9; } 35.5% { opacity: 0; }
66% { opacity: 0; } 66.5% { opacity: 0.9; } 68.5% { opacity: 0; }
100% { opacity: 0; }
}
@keyframes pc-flash-glow {
0% { background: #c8c870; filter: brightness(1); }
0.5% { background: #ffffa0; filter: brightness(4); }
2.5% { background: #c8c870; filter: brightness(1); }
33% { background: #c8c870; filter: brightness(1); }
33.5% { background: #ffffa0; filter: brightness(4); }
35.5% { background: #c8c870; filter: brightness(1); }
66% { background: #c8c870; filter: brightness(1); }
66.5% { background: #ffffa0; filter: brightness(4); }
68.5% { background: #c8c870; filter: brightness(1); }
100% { background: #c8c870; filter: brightness(1); }
}
@keyframes pc-shutter {
0% { transform: scaleY(1); }
0.4% { transform: scaleY(0.7) translateY(1px); }
2% { transform: scaleY(1); }
33% { transform: scaleY(1); }
33.4% { transform: scaleY(0.7) translateY(1px); }
35% { transform: scaleY(1); }
66% { transform: scaleY(1); }
66.4% { transform: scaleY(0.7) translateY(1px); }
68% { transform: scaleY(1); }
100% { transform: scaleY(1); }
}
@keyframes pc-print-1 {
0% { opacity: 0; transform: rotate(-12deg) translateY(-16px); }
1.5% { opacity: 1; }
4% { opacity: 1; transform: rotate(-12deg) translateY(0); }
95% { opacity: 1; transform: rotate(-12deg) translateY(0); }
99% { opacity: 0; } 100% { opacity: 0; transform: rotate(-12deg) translateY(-16px); }
}
@keyframes pc-print-2 {
0%, 33% { opacity: 0; transform: rotate(-2deg) translateY(-16px); }
34.5% { opacity: 1; }
37% { opacity: 1; transform: rotate(-2deg) translateY(0); }
95% { opacity: 1; transform: rotate(-2deg) translateY(0); }
99% { opacity: 0; } 100% { opacity: 0; transform: rotate(-2deg) translateY(-16px); }
}
@keyframes pc-print-3 {
0%, 66% { opacity: 0; transform: rotate(10deg) translateY(-16px); }
67.5% { opacity: 1; }
70% { opacity: 1; transform: rotate(10deg) translateY(0); }
95% { opacity: 1; transform: rotate(10deg) translateY(0); }
99% { opacity: 0; } 100% { opacity: 0; transform: rotate(10deg) translateY(-16px); }
}
@keyframes vc-rec-blink {
0%, 45% { opacity: 1; }
55%, 100% { opacity: 0.15; }
}
@keyframes vc-lens-zoom {
0%, 100% { transform: translateY(-50%) scale(1); }
50% { transform: translateY(-50%) scale(1.08); }
}
/* ── Responsive scale-down ── */
@media (max-width: 900px) {
.cam-stage { transform: scale(0.85); transform-origin: center center; }
}
@media (max-width: 640px) {
.cam-stage { transform: scale(0.72); transform-origin: center center; }
}
/* ── Reduced-motion ── */
@media (prefers-reduced-motion: reduce) {
.cam-subject--food, .cam-subject--laptop,
.cam-flash-overlay,
.pc-print--2, .pc-print--3 { animation: none !important; opacity: 0 !important; }
.cam-subject--shoe { animation: none !important; opacity: 1 !important; }
.pc-shutter-btn, .pc-flash-unit::after,
.vc-lens-barrel, .vc-rec-light { animation: none !important; }
.pc-print--1 {
animation: none !important;
opacity: 1 !important;
transform: rotate(-12deg) translateY(0) !important;
}
}
/* ═══════════════════════════════════════════════════════════════════════
USE CASES SHOWCASE (uc-*)
Four animated circles in a rounded-border track beneath the hero.
═══════════════════════════════════════════════════════════════════════ */
.uc-track {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 1.5rem;
border: 1px solid var(--color-border);
border-radius: var(--radius-xl, 1.25rem);
padding: 2.5rem 3rem;
background: var(--color-bg-alt);
}
.uc-item {
display: flex;
flex-direction: column;
align-items: center;
flex: 1;
}
.uc-circle {
width: 158px;
height: 158px;
border-radius: 50%;
border: 1.5px solid var(--color-border);
overflow: hidden;
position: relative;
background: var(--color-bg);
flex-shrink: 0;
}
.uc-item-body {
margin-top: 1.1rem;
text-align: center;
}
.uc-item-title {
font-size: .875rem;
font-weight: 600;
color: var(--color-heading);
}
.uc-item-desc {
font-size: .75rem;
color: var(--color-muted);
margin-top: .3rem;
line-height: 1.45;
max-width: 160px;
}
/* ── Shared inner wrapper ─────────────────────────────────────────────── */
.uc-inner {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 18px;
box-sizing: border-box;
gap: 6px;
}
/* ══════════════════════════════════
1 — MENU BOARD
══════════════════════════════════ */
.uc-inner--menu { gap: 0; padding: 14px 18px; }
.uc-menu-header {
width: 100%;
height: 16px;
border-radius: 3px;
background: var(--color-primary);
margin-bottom: 10px;
flex-shrink: 0;
}
.uc-menu-row {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 5px 4px;
border-radius: 3px;
gap: 6px;
flex-shrink: 0;
}
.uc-menu-row + .uc-menu-row { margin-top: 4px; }
.uc-menu-divider {
width: 100%;
height: 1px;
background: var(--color-border);
margin: 6px 0;
flex-shrink: 0;
}
.uc-menu-name {
height: 7px;
flex: 1;
border-radius: 3px;
background: var(--color-border);
}
.uc-menu-name--sm { max-width: 55%; }
.uc-menu-price {
height: 7px;
width: 22px;
border-radius: 3px;
background: var(--color-border);
flex-shrink: 0;
}
.uc-menu-row--highlight {
background: color-mix(in srgb, var(--color-primary) 15%, transparent);
animation: uc-menu-highlight 3s ease-in-out infinite;
}
.uc-menu-row--highlight .uc-menu-name,
.uc-menu-row--highlight .uc-menu-price {
background: var(--color-primary);
animation: uc-menu-price-update 3s ease-in-out infinite;
}
@keyframes uc-menu-highlight {
0%, 100% { background: color-mix(in srgb, var(--color-primary) 15%, transparent); }
45%, 55% { background: color-mix(in srgb, var(--color-accent) 25%, transparent); }
}
@keyframes uc-menu-price-update {
0%, 38% { opacity: 1; }
42% { opacity: 0; }
48% { opacity: 1; }
52% { opacity: 0; }
58%, 100%{ opacity: 1; }
}
/* ══════════════════════════════════
2 — EVENT DISPLAY
══════════════════════════════════ */
.uc-inner--event {
gap: 0;
padding: 16px 18px;
position: relative;
}
.uc-event-header {
width: 100%;
height: 13px;
border-radius: 3px;
background: var(--color-border);
margin-bottom: 10px;
flex-shrink: 0;
display: flex;
align-items: center;
padding: 0 6px;
font-size: 9px;
font-weight: 700;
color: var(--color-text);
letter-spacing: 0.5px;
}
.uc-event-row {
width: 100%;
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
}
.uc-event-row + .uc-event-row { margin-top: 7px; }
.uc-event-time {
height: 10px;
width: 28px;
border-radius: 2px;
background: var(--color-border);
flex-shrink: 0;
font-size: 7px;
display: flex;
align-items: center;
justify-content: center;
color: var(--color-muted);
font-weight: 600;
}
.uc-event-title {
height: 14px;
flex: 1;
border-radius: 3px;
background: var(--color-border);
position: relative;
overflow: hidden;
font-size: 8px;
display: flex;
align-items: center;
padding: 0 6px;
color: var(--color-muted);
font-weight: 500;
white-space: nowrap;
text-overflow: ellipsis;
}
.uc-event-title::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,.2) 50%, transparent 100%);
transform: translateX(-150%);
pointer-events: none;
}
.uc-event-title--active {
background: var(--color-primary);
color: #fff;
}
.uc-event-title--accent {
background: color-mix(in srgb, var(--color-accent) 55%, var(--color-border));
color: var(--color-text);
}
.uc-event-title--active::after { animation: uc-event-shimmer 2.2s linear infinite; }
.uc-event-title--accent::after { animation: uc-event-shimmer 2.2s linear infinite 1.1s; }
.uc-event-cursor {
position: absolute;
top: 32px;
left: 0;
right: 0;
height: 2px;
background: var(--color-primary);
opacity: .85;
pointer-events: none;
box-shadow: 0 0 8px rgba(var(--color-primary-rgb), 0.4);
animation: uc-event-time-progress 20s linear infinite;
}
.uc-event-cursor::before {
content: '';
position: absolute;
left: -6px;
top: -4px;
width: 12px;
height: 10px;
background: var(--color-primary);
border-radius: 50%;
box-shadow: 0 0 8px rgba(var(--color-primary-rgb), 0.6);
}
@keyframes uc-event-shimmer {
0% { transform: translateX(-150%); }
100% { transform: translateX(250%); }
}
@keyframes uc-event-time-progress {
0% { top: 32px; }
100% { top: calc(100% - 10px); }
}
/* ══════════════════════════════════
3 — OFFICE DASHBOARD
══════════════════════════════════ */
.uc-inner--dashboard {
justify-content: flex-end;
padding: 18px 16px 12px;
}
.uc-db-bars {
display: flex;
align-items: stretch;
gap: 9px;
width: 100%;
height: 80px;
}
.uc-db-bar {
flex: 1;
border-radius: 4px 4px 0 0;
transform-origin: bottom;
transform: scaleY(.55);
}
.uc-db-bar--1, .uc-db-bar--3 { background: var(--color-primary); }
.uc-db-bar--2, .uc-db-bar--4 { background: color-mix(in srgb, var(--color-primary) 45%, var(--color-border)); }
.uc-db-bar--1 { animation: uc-db-scale-1 3s ease-in-out infinite; }
.uc-db-bar--2 { animation: uc-db-scale-2 3s ease-in-out infinite .4s; }
.uc-db-bar--3 { animation: uc-db-scale-3 3s ease-in-out infinite .8s; }
.uc-db-bar--4 { animation: uc-db-scale-4 3s ease-in-out infinite 1.2s; }
.uc-db-baseline {
width: 100%;
height: 1px;
background: var(--color-border);
flex-shrink: 0;
margin-bottom: 6px;
}
.uc-db-labels {
display: flex;
gap: 9px;
width: 100%;
flex-shrink: 0;
}
.uc-db-lbl {
flex: 1;
height: 5px;
border-radius: 2px;
background: var(--color-border);
opacity: .6;
}
@keyframes uc-db-scale-1 {
0%, 100% { transform: scaleY(.55); }
40% { transform: scaleY(.82); }
70% { transform: scaleY(.42); }
}
@keyframes uc-db-scale-2 {
0%, 100% { transform: scaleY(.70); }
40% { transform: scaleY(.38); }
70% { transform: scaleY(.78); }
}
@keyframes uc-db-scale-3 {
0%, 100% { transform: scaleY(.40); }
40% { transform: scaleY(.68); }
70% { transform: scaleY(.58); }
}
@keyframes uc-db-scale-4 {
0%, 100% { transform: scaleY(.62); }
40% { transform: scaleY(.50); }
70% { transform: scaleY(.88); }
}
/* ══════════════════════════════════
4 — WAYFINDING
══════════════════════════════════ */
.uc-inner--wayfinding { padding: 0; }
/* Corridor lines */
.uc-wf-corridor {
position: absolute;
background: var(--color-border);
}
.uc-wf-corridor--h {
height: 8px;
width: 70%;
top: 50%;
left: 15%;
transform: translateY(-50%);
border-radius: 2px;
}
.uc-wf-corridor--v {
width: 8px;
height: 54%;
left: 50%;
top: 23%;
transform: translateX(-50%);
border-radius: 2px;
}
/* Rooms */
.uc-wf-room {
position: absolute;
border: 1.5px solid var(--color-border);
border-radius: 3px;
background: var(--color-bg-alt);
}
.uc-wf-room--1 { width: 32px; height: 28px; top: 17%; left: 17%; }
.uc-wf-room--2 { width: 28px; height: 26px; top: 17%; right: 17%; }
.uc-wf-room--3 { width: 30px; height: 28px; bottom: 17%; left: 50%; transform: translateX(-50%); }
/* Location dot */
.uc-wf-dot {
position: absolute;
width: 12px;
height: 12px;
border-radius: 50%;
background: var(--color-primary);
top: 50%;
left: 36%;
transform: translate(-50%, -50%);
}
.uc-wf-dot::after {
content: '';
position: absolute;
inset: -5px;
border-radius: 50%;
border: 1.5px solid var(--color-primary);
animation: uc-wf-pulse 2s ease-out infinite;
}
/* Direction arrow */
.uc-wf-arrow {
position: absolute;
top: 50%;
left: 36%;
transform: translate(-50%, calc(-50% - 18px));
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 11px solid var(--color-accent);
animation: uc-wf-arrow-bob 1.8s ease-in-out infinite;
}
@keyframes uc-wf-pulse {
0% { transform: scale(1); opacity: .7; }
70% { transform: scale(2.4); opacity: 0; }
100% { transform: scale(1); opacity: 0; }
}
@keyframes uc-wf-arrow-bob {
0%, 100% { transform: translate(-50%, calc(-50% - 18px)); }
50% { transform: translate(-50%, calc(-50% - 24px)); }
}
/* ── Responsive ──────────────────────────────────────────── */
@media (max-width: 900px) {
.uc-track { flex-wrap: wrap; justify-content: center; gap: 2rem; padding: 2.5rem 2rem; }
.uc-item { width: calc(50% - 1rem); flex: none; }
}
@media (max-width: 500px) {
.uc-track { padding: 2rem 1.5rem; }
.uc-item { width: 100%; }
.uc-item-desc { max-width: none; }
}
/* ── Reduced-motion overrides ────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
.uc-menu-row--highlight,
.uc-menu-row--highlight .uc-menu-name,
.uc-menu-row--highlight .uc-menu-price,
.uc-event-title--active::after,
.uc-event-title--accent::after,
.uc-event-cursor,
.uc-db-bar--1, .uc-db-bar--2, .uc-db-bar--3, .uc-db-bar--4,
.uc-wf-dot::after,
.uc-wf-arrow { animation: none !important; }
/* Static bar heights when animation is off */
.uc-db-bar--1 { transform: scaleY(.55) !important; }
.uc-db-bar--2 { transform: scaleY(.70) !important; }
.uc-db-bar--3 { transform: scaleY(.40) !important; }
.uc-db-bar--4 { transform: scaleY(.62) !important; }
}
/* ═══════════════════════════════════════════════════════════
NEVER GOES DARK ANIMATION (.platform-visual.has-ngd)
Sequence (10 s loop):
0 30 % : Connected dots travel player → cloud, cloud green
30 45 % : Breaking line turns red, × icon fades in
45 72 % : Offline × visible, ✓ on player, TV still plays
72 85 % : Reconnect × fades, dots resume, cloud back to green
85 100% : Connected steady state before next loop
═══════════════════════════════════════════════════════════ */
/* ── Wrapper overrides ─────────────────────────────────────── */
.platform-visual.has-ngd {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
position: relative;
font-size: inherit;
}
/* ── Stage ─────────────────────────────────────────────────── */
.ngd-stage {
position: relative;
width: 100%;
max-width: 560px;
aspect-ratio: 1/1;
margin: 0 auto;
}
/* ── TV ─────────────────────────────────────────────────────── */
.ngd-tv {
position: absolute;
left: 20px;
top: 72px;
display: flex;
flex-direction: column;
align-items: center;
}
.ngd-tv__body {
width: 400px;
height: 235px;
background: #111;
border: 4px solid #111;
border-radius: 6px 6px 4px 4px;
outline: 1px solid #000;
padding: 3px;
display: flex;
align-items: stretch;
position: relative;
box-shadow: 0 14px 48px rgba(0,0,0,.55);
}
/* HDMI port stub on right side */
.ngd-tv__port {
position: absolute;
right: -6px;
top: 110px;
width: 6px;
height: 14px;
background: #1a1a1a;
border: 1px solid #000;
border-left: none;
border-radius: 0 2px 2px 0;
}
.ngd-tv__port::before {
content: '';
position: absolute;
left: 0;
top: 2px;
width: 3px;
height: 8px;
background: #333;
border-radius: 0 1px 1px 0;
}
.ngd-tv__screen {
--ngd-menu-scale-x: 1.8182;
--ngd-menu-scale-y: 1.4506;
width: 100%;
height: 100%;
border-radius: 2px;
position: relative;
overflow: hidden;
background:
repeating-linear-gradient(
180deg,
transparent, transparent 3px,
rgba(0,0,0,.10) 3px, rgba(0,0,0,.10) 4px
),
linear-gradient(135deg, #0c1016 0%, #151c28 60%, #0c1016 100%);
}
/* Scanline sweep */
.ngd-tv__screen::after {
content: '';
position: absolute;
left: 0; width: 100%; height: 3px;
background: linear-gradient(90deg, transparent, rgba(74,222,128,.22), transparent);
animation: da-scan 4s linear infinite;
pointer-events: none;
}
/* TV feet */
.ngd-tv__feet {
display: flex;
justify-content: space-between;
width: 224px;
}
.ngd-tv__foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* ── Menu board content (always playing) ───────────────────── */
.ngd-menu {
position: absolute;
left: 0;
top: 0;
width: 220px;
height: 162px;
transform: scale(var(--ngd-menu-scale-x), var(--ngd-menu-scale-y));
transform-origin: top left;
display: flex;
flex-direction: column;
padding: 7px 6px 4px;
gap: 3px;
}
.ngd-menu__hd {
display: flex;
align-items: center;
gap: 5px;
padding-bottom: 4px;
border-bottom: 1px solid rgba(255,200,80,.18);
flex-shrink: 0;
}
.ngd-menu__logo {
width: 9px; height: 9px;
background: #4CAF50;
border-radius: 50%;
flex-shrink: 0;
}
.ngd-menu__ttl {
flex: 1; height: 5px;
background: rgba(255,200,80,.45);
border-radius: 2px;
max-width: 55px;
}
.ngd-menu__cols {
display: flex;
gap: 6px;
flex: 1;
}
.ngd-menu__col {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
}
.ngd-menu__cat {
height: 4px;
background: rgba(76,175,80,.5);
border-radius: 1px;
margin-bottom: 1px;
}
.ngd-menu__row {
display: flex;
align-items: center;
gap: 3px;
padding: 2px 3px;
border-radius: 2px;
transition: background .3s;
}
.ngd-menu__row--hl {
background: rgba(76,175,80,.14);
animation: ngd-hl-pulse 1.75s ease-in-out infinite;
}
.ngd-menu__name {
flex: 1; height: 4px;
background: rgba(255,255,255,.25);
border-radius: 1px;
}
.ngd-menu__row--hl .ngd-menu__name {
background: rgba(76,175,80,.55);
}
.ngd-menu__price {
width: 16px; height: 4px;
background: rgba(255,200,80,.4);
border-radius: 1px;
}
.ngd-menu__row--hl .ngd-menu__price {
background: rgba(255,200,80,.7);
}
/* Scrolling ticker at bottom */
.ngd-menu__ticker {
height: 6px;
background: rgba(76,175,80,.12);
border-radius: 1px;
overflow: hidden;
flex-shrink: 0;
}
.ngd-menu__ticker-inner {
width: 250%;
height: 100%;
background: repeating-linear-gradient(
90deg,
rgba(76,175,80,.5) 0px, rgba(76,175,80,.5) 30px,
transparent 30px, transparent 50px
);
animation: ngd-ticker 2s linear infinite;
}
/* ── Player device (stick plugged into TV right-side HDMI port) ── */
.ngd-player {
position: absolute;
/* TV: left(20) + border(4) + width(400) + border(4) = 428px */
left: 428px;
/* TV top(72) + border(4) + port.top(110) + port half-h(7) = 193px
stick h=32px → top = 193 16 = 177px */
top: 177px;
display: flex;
flex-direction: row;
align-items: center;
}
/* HDMI connector plug — left side, inserts into TV port */
.ngd-player__connector {
width: 18px;
height: 14px;
background: linear-gradient(180deg, #888, #666);
border-radius: 2px 0 0 2px;
position: relative;
box-shadow: 0 1px 3px rgba(0,0,0,.3);
flex-shrink: 0;
z-index: 1;
}
.ngd-player__connector::before {
content: '';
position: absolute;
right: 2px;
top: 2px;
width: 8px;
height: 8px;
background: #555;
border-radius: 1px;
}
/* Main stick body — white gradient capsule */
.ngd-player__body {
width: 84px;
height: 32px;
background: linear-gradient(180deg, #f5f5f5, #e0e0e0);
border: 1px solid #ccc;
border-radius: 0 5px 5px 0;
position: relative;
box-shadow: 0 2px 8px rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.6);
}
/* Brand logo area subtle inset */
.ngd-player__body::before {
content: '';
position: absolute;
top: 6px;
left: 8px;
width: 28px;
height: 12px;
background: rgba(0,0,0,.04);
border-radius: 2px;
}
/* LED indicator — right side of body */
.ngd-player__led {
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
width: 4px;
height: 4px;
border-radius: 50%;
background: #4CAF50;
box-shadow: 0 0 6px rgba(76,175,80,.8);
animation: ngd-led 5s ease-in-out infinite;
}
/* Checkmark badge — visible only during offline phase */
.ngd-player__check {
position: absolute;
top: -14px;
right: -11px;
width: 24px; height: 24px;
opacity: 0;
transform: scale(0.4);
transform-origin: center;
animation: ngd-check-show 5s ease-in-out infinite;
filter: drop-shadow(0 0 4px rgba(76,175,80,.6));
}
/* ── Signal wrap (globe + vertical line to player) ─────────── */
.ngd-signal-wrap {
position: absolute;
/* body centre X: player left(428) + connector(18) + body half(42) = 488
globe width 88px → half = 44 → left = 488 44 = 444px */
left: 444px;
top: 22px;
width: 88px;
display: flex;
flex-direction: column;
align-items: center;
}
.ngd-cloud {
width: 88px;
flex-shrink: 0;
}
.ngd-cloud__svg {
width: 100%;
height: auto;
display: block;
}
.ngd-cloud__path {
stroke: #4CAF50;
opacity: .85;
animation: ngd-cloud-color 5s ease-in-out infinite;
}
/* Vertical signal line */
.ngd-signal-line {
width: 3px;
height: 92px;
background: rgba(76,175,80,.35);
border-radius: 2px;
position: relative;
overflow: visible;
animation: ngd-line-col 5s ease-in-out infinite;
}
/* Dots container — hidden during break phase */
.ngd-signal__dots {
position: absolute;
inset: 0;
overflow: hidden;
animation: ngd-dots-vis 5s linear infinite;
}
.ngd-signal__dot {
position: absolute;
left: 50%;
transform: translateX(-50%);
width: 5px; height: 5px;
border-radius: 50%;
background: #4CAF50;
box-shadow: 0 0 5px rgba(76,175,80,.8);
animation: ngd-dot-up 0.9s ease-in-out infinite;
}
.ngd-signal__dot--2 { animation-delay: -0.6s; }
.ngd-signal__dot--3 { animation-delay: -1.2s; }
/* Break × badge — centered on line */
.ngd-signal__break {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) scale(0);
width: 18px; height: 18px;
opacity: 0;
animation: ngd-break-show 5s ease-in-out infinite;
filter: drop-shadow(0 0 4px rgba(239,68,68,.5));
}
/* ═══════════════════════════════════════════════════════════
KEYFRAMES (10 s cycle)
═══════════════════════════════════════════════════════════ */
/* Ticker scroll */
@keyframes ngd-ticker {
from { transform: translateX(0); }
to { transform: translateX(-50%); }
}
/* Highlighted menu row pulsing */
@keyframes ngd-hl-pulse {
0%, 100% { background: rgba(76,175,80,.14); }
50% { background: rgba(76,175,80,.28); }
}
/* Player LED: green → amber → red during disconnect → back to green */
@keyframes ngd-led {
0%, 29% { background: #4CAF50; box-shadow: 0 0 6px rgba(76,175,80,.8); }
33% { background: #f59e0b; box-shadow: 0 0 5px rgba(245,158,11,.6); }
38%, 71% { background: #ef4444; box-shadow: 0 0 4px rgba(239,68,68,.4); }
75% { background: #4CAF50; box-shadow: 0 0 6px rgba(76,175,80,.8); }
100% { background: #4CAF50; box-shadow: 0 0 6px rgba(76,175,80,.8); }
}
/* Cloud stroke: green → red → green */
@keyframes ngd-cloud-color {
0%, 29% { stroke: #4CAF50; opacity: .85; }
36%, 71% { stroke: #ef4444; opacity: 1; }
76%, 100% { stroke: #4CAF50; opacity: .85; }
}
/* Signal line colour */
@keyframes ngd-line-col {
0%, 29% { background: rgba(76,175,80,.35); }
36%, 71% { background: rgba(239,68,68,.45); }
76%, 100% { background: rgba(76,175,80,.35); }
}
/* Dots container: visible during connected phases only */
@keyframes ngd-dots-vis {
0%, 29% { opacity: 1; }
33% { opacity: 0; }
71% { opacity: 0; }
75%, 100% { opacity: 1; }
}
/* Single dot travelling bottom → top */
@keyframes ngd-dot-up {
0% { bottom: 1px; opacity: 0; }
8% { opacity: 1; }
85% { opacity: 1; }
100% { bottom: calc(100% - 5px); opacity: 0; }
}
/* Break × badge: appears when disconnected */
@keyframes ngd-break-show {
0%, 29% { opacity: 0; transform: translate(-50%,-50%) scale(0); }
38%, 71% { opacity: 1; transform: translate(-50%,-50%) scale(1); }
76%, 100% { opacity: 0; transform: translate(-50%,-50%) scale(0); }
}
/* Checkmark: appears when offline, confirming local playback */
@keyframes ngd-check-show {
0%, 44% { opacity: 0; transform: scale(0.4); }
52%, 71% { opacity: 1; transform: scale(1); }
77%, 100% { opacity: 0; transform: scale(0.4); }
}
/* ── Responsive ─────────────────────────────────────────────── */
@media (max-width: 640px) {
.ngd-stage { max-width: 320px; }
/* Scale at 84% (320/380) */
.ngd-tv { left: 17px; top: 76px; }
.ngd-tv__body { width: 185px; height: 136px; }
.ngd-tv__screen { --ngd-menu-scale-x: 0.8409; --ngd-menu-scale-y: 0.8395; }
/* port at body midpoint: 136/2 7 = 61 */
.ngd-tv__port { top: 61px; }
.ngd-tv__feet { gap: 60px; }
.ngd-tv__foot { width: 24px; }
/* TV right: 17+4+185+4=210; port centre-y: 76+4+61+7=148; player top: 14813=135 */
.ngd-player { left: 210px; top: 135px; }
.ngd-player__connector { width: 12px; height: 9px; }
.ngd-player__body { width: 68px; height: 24px; }
.ngd-player__body::before { top: 5px; left: 6px; width: 24px; height: 10px; }
.ngd-player__led { width: 3px; height: 3px; right: 6px; }
/* body centre-x: 210+12+34=256; globe 72px → half=36 → wrap left=220 */
.ngd-signal-wrap { left: 220px; top: 18px; width: 72px; }
/* line: wrap.top(18)+globe_h(~52)=70 to player.top(135) → 65px */
.ngd-signal-line { height: 65px; }
}
/* ── Reduced-motion overrides ───────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
.ngd-tv__screen::after,
.ngd-menu__ticker-inner,
.ngd-menu__row--hl,
.ngd-player__led,
.ngd-signal__dot,
.ngd-signal__dots,
.ngd-signal__break,
.ngd-cloud__path,
.ngd-signal-line,
.ngd-player__check { animation: none !important; }
/* Static fallback states */
.ngd-player__led { background: #4CAF50; box-shadow: 0 0 5px rgba(76,175,80,.6); }
.ngd-cloud__path { stroke: #4CAF50; opacity: .8; }
.ngd-signal__dots { opacity: 1; }
}
/* ═══════════════════════════════════════════════════════════
BRANDED DISPLAY ANIMATION (.platform-visual.has-branded)
Sequence (8 s loop per screen, staggered by 0.5 s):
0 25 % : Boot splash — logo fades in centred on dark screen
25 40 % : Transition — logo shrinks to header, brand bar grows
40 90 % : Content — UI blocks slide in beneath brand header
90 100% : Reset — fade out, loop
═══════════════════════════════════════════════════════════ */
/* ── Wrapper overrides ─────────────────────────────────────── */
.platform-visual.has-branded {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
position: relative;
font-size: inherit;
display: flex;
align-items: center;
justify-content: center;
align-self: center;
}
/* ── Stage ─────────────────────────────────────────────────── */
.bd-stage {
position: relative;
width: 100%;
max-width: 500px;
aspect-ratio: 4/3;
margin: 0 auto;
display: flex;
align-items: center;
justify-content: center;
gap: 22px;
}
/* ── Shared device styles ─────────────────────────────────── */
.bd-device {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
}
.bd-device__body {
background: #111;
border: 3px solid #111;
border-radius: 5px;
outline: 1px solid #000;
padding: 2px;
display: flex;
align-items: stretch;
position: relative;
box-shadow: 0 10px 32px rgba(0,0,0,.50);
}
.bd-device__screen {
width: 100%;
height: 100%;
border-radius: 2px;
position: relative;
overflow: hidden;
background: linear-gradient(135deg, #0c1016 0%, #151c28 60%, #0c1016 100%);
}
.bd-device__label {
font-size: 10px;
color: rgba(255,255,255,.45);
margin-bottom: 6px;
letter-spacing: .5px;
text-transform: uppercase;
order: -1;
}
/* ── Tablet (portrait kiosk) ──────────────────────────────── */
.bd-device--tablet .bd-device__body {
width: 96px;
height: 144px;
border-radius: 8px;
}
.bd-device--tablet .bd-device__screen { border-radius: 4px; }
.bd-device--tablet { animation-delay: 0s; }
/* ── Wall display (wide landscape) ────────────────────────── */
.bd-device--wall .bd-device__body {
width: 216px;
height: 130px;
}
.bd-mount {
width: 7px;
height: 22px;
background: #222;
margin-top: -1px;
border-radius: 0 0 2px 2px;
}
.bd-device--wall { animation-delay: 0.5s; }
/* ── Interactive tablet on table ───────────────────────────── */
.bd-device--interactive .bd-device__body {
width: 132px;
height: 89px;
border-radius: 6px;
transform: perspective(400px) rotateX(25deg);
transform-origin: bottom center;
}
.bd-device--interactive .bd-device__screen { border-radius: 3px; }
.bd-table {
width: 156px;
height: 10px;
background: linear-gradient(180deg, #2a2a2a, #1a1a1a);
border-radius: 3px;
margin-top: -2px;
box-shadow: 0 4px 12px rgba(0,0,0,.4);
}
.bd-device--interactive { animation-delay: 1s; }
/* ── Boot splash overlay ──────────────────────────────────── */
.bd-splash {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
z-index: 2;
animation: bd-splash 8s ease-in-out infinite;
}
.bd-device--wall .bd-splash { animation-delay: 0.5s; }
.bd-device--interactive .bd-splash { animation-delay: 1s; }
.bd-splash__logo {
width: 28px;
height: 28px;
background: var(--color-primary);
border-radius: 6px;
box-shadow: 0 0 20px rgba(var(--color-primary-rgb),.5), 0 0 50px rgba(var(--color-primary-rgb),.15);
animation: bd-logo-pulse 8s ease-in-out infinite;
}
.bd-device--wall .bd-splash__logo {
width: 32px;
height: 32px;
animation-delay: 0.5s;
}
.bd-device--interactive .bd-splash__logo {
animation-delay: 1s;
}
/* ── Branded UI chrome ────────────────────────────────────── */
.bd-ui {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
padding: 0;
opacity: 0;
z-index: 1;
animation: bd-ui-show 8s ease-in-out infinite;
}
.bd-device--wall .bd-ui { animation-delay: 0.5s; }
.bd-device--interactive .bd-ui { animation-delay: 1s; }
/* Brand header bar */
.bd-ui__header {
display: flex;
align-items: center;
gap: 4px;
padding: 4px 5px;
background: rgba(var(--color-primary-rgb),.15);
border-bottom: 1px solid rgba(var(--color-primary-rgb),.25);
flex-shrink: 0;
}
.bd-ui__logo {
width: 10px;
height: 10px;
background: var(--color-primary);
border-radius: 3px;
flex-shrink: 0;
}
.bd-ui__brand-bar {
flex: 1;
height: 4px;
background: rgba(var(--color-primary-rgb),.4);
border-radius: 2px;
max-width: 50px;
animation: bd-bar-grow 8s ease-in-out infinite;
}
.bd-device--wall .bd-ui__brand-bar { animation-delay: 0.5s; }
.bd-device--interactive .bd-ui__brand-bar { animation-delay: 1s; }
/* Content area */
.bd-ui__content {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
padding: 6px 5px;
animation: bd-content-slide 8s ease-in-out infinite;
}
.bd-device--wall .bd-ui__content { animation-delay: 0.5s; }
.bd-device--interactive .bd-ui__content { animation-delay: 1s; }
.bd-ui__block {
border-radius: 2px;
}
.bd-ui__block--txt {
height: 4px;
background: rgba(255,255,255,.18);
}
.bd-ui__block--short {
width: 60%;
}
.bd-ui__block--img {
flex: 1;
min-height: 16px;
background: linear-gradient(
135deg,
rgba(var(--color-primary-rgb),.10) 0%,
rgba(var(--color-primary-rgb),.05) 100%
);
border: 1px solid rgba(var(--color-primary-rgb),.12);
}
/* ── Promotional content layouts ─────────────────────── */
.bd-promo {
flex: 1;
display: flex;
flex-direction: column;
gap: 3px;
}
/* ── Kiosk: Welcome / check-in screen ── */
.bd-promo--welcome {
align-items: center;
text-align: center;
gap: 4px;
}
.bd-promo__hero {
width: 100%;
flex: 1;
min-height: 28px;
background: linear-gradient(135deg, rgba(var(--color-primary-rgb),.18) 0%, rgba(var(--color-primary-rgb),.06) 100%);
border-radius: 2px;
}
.bd-promo__heading {
width: 70%;
height: 5px;
background: rgba(255,255,255,.3);
border-radius: 1px;
}
.bd-promo__text {
width: 85%;
height: 3px;
background: rgba(255,255,255,.14);
border-radius: 1px;
}
.bd-promo__btn {
width: 45%;
height: 8px;
background: var(--color-primary);
border-radius: 3px;
margin-top: 2px;
}
/* ── Wall display: Sale / featured product ── */
.bd-promo--sale {
gap: 0;
}
.bd-promo__cols {
display: flex;
gap: 5px;
flex: 1;
}
.bd-promo__visual {
flex: 1;
background: linear-gradient(160deg, rgba(var(--color-primary-rgb),.20) 0%, rgba(var(--color-primary-rgb),.06) 100%);
border-radius: 2px;
min-height: 24px;
}
.bd-promo__info {
flex: 1;
display: flex;
flex-direction: column;
gap: 3px;
justify-content: center;
}
.bd-promo__badge {
width: 28px;
height: 6px;
background: rgba(239,68,68,.7);
border-radius: 2px;
}
.bd-promo--sale .bd-promo__heading {
width: 90%;
height: 4px;
}
.bd-promo--sale .bd-promo__text {
width: 100%;
height: 3px;
}
.bd-promo__text--short {
width: 65% !important;
}
.bd-promo__price {
width: 36px;
height: 6px;
background: rgba(255,200,80,.6);
border-radius: 1px;
margin-top: 1px;
}
/* ── Interactive: Touch menu / category grid ── */
.bd-promo--menu {
gap: 3px;
}
.bd-promo--menu .bd-promo__heading {
width: 55%;
height: 4px;
}
.bd-promo__grid {
flex: 1;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 3px;
}
.bd-promo__tile {
background: rgba(255,255,255,.06);
border-radius: 2px;
display: flex;
flex-direction: column;
overflow: hidden;
}
.bd-promo__tile-img {
flex: 1;
background: linear-gradient(135deg, rgba(var(--color-primary-rgb),.14) 0%, rgba(var(--color-primary-rgb),.04) 100%);
}
.bd-promo__tile-lbl {
height: 4px;
margin: 2px 3px;
background: rgba(255,255,255,.18);
border-radius: 1px;
}
/* ═══════════════════════════════════════════════════════════
KEYFRAMES (8 s cycle)
═══════════════════════════════════════════════════════════ */
/* Splash: visible 030%, fades out 3040%, hidden rest */
@keyframes bd-splash {
0% { opacity: 0; }
5% { opacity: 1; }
25% { opacity: 1; }
35% { opacity: 0; }
100% { opacity: 0; }
}
/* Logo pulse glow during splash */
@keyframes bd-logo-pulse {
0%, 25% { transform: scale(1); box-shadow: 0 0 20px rgba(var(--color-primary-rgb),.5), 0 0 50px rgba(var(--color-primary-rgb),.15); }
12% { transform: scale(1.08); box-shadow: 0 0 28px rgba(var(--color-primary-rgb),.7), 0 0 60px rgba(var(--color-primary-rgb),.25); }
35%, 100% { transform: scale(0.6); opacity: 0; }
}
/* UI chrome: hidden 028%, fades in 2838%, visible until 88%, fades out */
@keyframes bd-ui-show {
0%, 28% { opacity: 0; }
38% { opacity: 1; }
88% { opacity: 1; }
96%, 100% { opacity: 0; }
}
/* Brand bar grows in from 0 width */
@keyframes bd-bar-grow {
0%, 30% { transform: scaleX(0); transform-origin: left; }
42% { transform: scaleX(1); transform-origin: left; }
88% { transform: scaleX(1); }
96%, 100% { transform: scaleX(0); }
}
/* Content blocks slide up into view */
@keyframes bd-content-slide {
0%, 35% { opacity: 0; transform: translateY(10px); }
48% { opacity: 1; transform: translateY(0); }
88% { opacity: 1; transform: translateY(0); }
96%, 100% { opacity: 0; transform: translateY(4px); }
}
/* ── Responsive ─────────────────────────────────────────────── */
@media (max-width: 900px) {
.bd-stage { max-width: 430px; gap: 14px; }
.bd-device--tablet .bd-device__body { width: 76px; height: 114px; }
.bd-device--wall .bd-device__body { width: 170px; height: 102px; }
.bd-device--interactive .bd-device__body { width: 101px; height: 67px; }
.bd-table { width: 120px; }
}
@media (max-width: 640px) {
.bd-stage { max-width: 340px; gap: 10px; }
.bd-device--tablet .bd-device__body { width: 60px; height: 90px; }
.bd-device--wall .bd-device__body { width: 138px; height: 83px; }
.bd-device--interactive .bd-device__body { width: 83px; height: 55px; }
.bd-device__label { font-size: 9px; }
.bd-table { width: 98px; height: 7px; }
}
/* ── Reduced-motion overrides ───────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
.bd-splash,
.bd-splash__logo,
.bd-ui,
.bd-ui__brand-bar,
.bd-ui__content { animation: none !important; }
/* Static fallback: show branded UI */
.bd-splash { opacity: 0; }
.bd-ui { opacity: 1; }
.bd-ui__brand-bar { transform: scaleX(1); }
.bd-ui__content { opacity: 1; transform: translateY(0); }
}
/* ═══════════════════════════════════════════════════════════════
GALLERY TV SLIDESHOW (.platform-visual.has-gallery-tv)
═══════════════════════════════════════════════════════════════ */
.platform-visual.has-gallery-tv {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
box-shadow: none;
font-size: inherit;
}
.gtv-stage {
width: 100%;
max-width: 520px;
margin: 0 auto;
}
/* TV frame (mirrors dashboard-tv pattern) */
.gtv-tv {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
}
.gtv-tv__body {
width: 100%;
background: #111;
border: 5px solid #1a1a1a;
border-radius: 8px 8px 4px 4px;
outline: 2px solid #000;
padding: 4px;
position: relative;
box-shadow:
0 14px 48px rgba(0,0,0,0.6),
0 0 0 1px rgba(255,255,255,0.04),
inset 0 1px 0 rgba(255,255,255,0.06);
}
.gtv-tv__body::after {
content: '\25CF';
position: absolute;
bottom: -14px;
left: 50%;
transform: translateX(-50%);
font-size: 7px;
color: rgba(74,222,128,0.8);
filter: drop-shadow(0 0 3px rgba(74,222,128,0.5));
}
.gtv-tv__screen {
width: 100%;
aspect-ratio: 16/9;
background: var(--color-bg);
border-radius: 2px;
overflow: hidden;
position: relative;
}
.gtv-tv__feet {
display: flex;
justify-content: space-between;
width: 60%;
max-width: 300px;
}
.gtv-tv__foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* Slides */
.gtv-slides {
position: relative;
width: 100%;
height: 100%;
}
.gtv-slide {
position: absolute;
inset: 0;
opacity: 0;
transition: opacity 0.8s ease;
}
.gtv-slide.is-active {
opacity: 1;
}
.gtv-slide img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* ── Reduced-motion overrides for gallery TV ── */
@media (prefers-reduced-motion: reduce) {
.gtv-slide {
transition: none !important;
}
}
/* ══════════════════════════════════════════════════════════════════════════════
VIDEO EDITOR ANIMATOR (.platform-visual.has-video-editor)
Laptop frame with dark editor UI, animated timeline playhead and preview.
══════════════════════════════════════════════════════════════════════════════ */
.platform-visual.has-video-editor {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
display: flex;
align-items: center;
justify-content: center;
min-height: 200px;
}
.ve-stage {
width: 100%;
max-width: 560px;
}
.ve-svg {
width: 100%;
height: auto;
display: block;
filter: drop-shadow(0 8px 28px rgba(0, 0, 0, 0.18));
}
/* ═══════════════════════════════════════════════════════════════
HOSPITALITY SIGN ANIMATION (.platform-visual.has-hospitality)
Rotating display: Breakfast -> Lunch -> Dinner (9s cycle)
═══════════════════════════════════════════════════════════════ */
.platform-visual.has-hospitality {
background: none !important;
border: none !important;
border-radius: 0;
aspect-ratio: unset;
padding: 0;
overflow: visible;
box-shadow: none;
font-size: inherit;
}
.hosp-stage {
width: 100%;
max-width: 520px;
margin: 0 auto;
}
.hosp-tv {
display: flex;
flex-direction: column;
align-items: center;
width: 100%;
}
.hosp-tv__body {
width: 100%;
background: #111;
border: 5px solid #1a1a1a;
border-radius: 8px 8px 4px 4px;
outline: 2px solid #000;
padding: 4px;
position: relative;
box-shadow:
0 14px 48px rgba(0,0,0,0.6),
inset 0 1px 0 rgba(255,255,255,0.06);
}
.hosp-tv__screen {
width: 100%;
aspect-ratio: 16/9;
background: #0a0a0a;
border-radius: 2px;
overflow: hidden;
position: relative;
}
.hosp-tv__feet {
display: flex;
justify-content: space-between;
width: 60%;
max-width: 300px;
}
.hosp-tv__foot {
width: 12px;
height: 8px;
background: #111;
border: 1px solid #000;
border-radius: 0 0 4px 4px;
}
/* POS Sync Indicator */
.hosp-pos {
position: absolute;
top: 12px;
right: 12px;
display: flex;
align-items: center;
gap: 6px;
background: rgba(0,0,0,0.5);
padding: 4px 8px;
border-radius: 40px;
z-index: 10;
border: 1px solid rgba(255,255,255,0.1);
backdrop-filter: blur(4px);
}
.hosp-pos__dot {
width: 6px;
height: 6px;
background: #4ade80;
border-radius: 50%;
box-shadow: 0 0 8px #4ade80;
animation: hosp-pos-pulse 2s ease-in-out infinite;
}
.hosp-pos__txt {
font-size: 9px;
color: #fff;
font-weight: 500;
letter-spacing: 0.3px;
}
/* Menu Slides */
.hosp-slides {
position: relative;
width: 100%;
height: 100%;
}
.hosp-slide {
position: absolute;
inset: 0;
opacity: 0;
animation: hosp-slide-fade 9s infinite;
display: flex;
flex-direction: column;
}
.hosp-slide--breakfast { animation-delay: 0s; }
.hosp-slide--lunch { animation-delay: 3s; }
.hosp-slide--dinner { animation-delay: 6s; }
.hosp-menu {
padding: 24px 32px;
height: 100%;
display: flex;
flex-direction: column;
background: linear-gradient(135deg, rgba(20,20,25,1) 0%, rgba(30,30,40,1) 100%);
color: #fff;
}
.hosp-menu__hd {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.hosp-menu__badge {
font-size: 10px;
text-transform: uppercase;
letter-spacing: 1px;
background: var(--color-primary);
padding: 2px 8px;
border-radius: 4px;
font-weight: 700;
}
.hosp-menu__time {
font-size: 11px;
color: rgba(255,255,255,0.5);
font-family: monospace;
}
.hosp-menu__title {
font-size: 24px;
font-weight: 800;
margin-bottom: 20px;
color: #fff;
}
.hosp-menu__items {
display: flex;
flex-direction: column;
gap: 16px;
}
.hosp-menu__item {
display: flex;
justify-content: space-between;
align-items: flex-start;
border-bottom: 1px solid rgba(255,255,255,0.05);
padding-bottom: 8px;
}
.hosp-menu__name {
font-size: 15px;
font-weight: 600;
color: #fff;
margin-bottom: 2px;
}
.hosp-menu__desc {
font-size: 12px;
color: rgba(255,255,255,0.4);
}
.hosp-menu__price {
font-size: 16px;
font-weight: 700;
color: var(--color-primary);
}
/* Keyframes */
@keyframes hosp-pos-pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.4; transform: scale(0.8); }
}
@keyframes hosp-slide-fade {
0%, 2% { opacity: 0; transform: translateY(10px); }
5%, 30% { opacity: 1; transform: translateY(0); }
33%, 100% { opacity: 0; transform: translateY(-10px); }
}
@media (max-width: 640px) {
.hosp-menu { padding: 16px 20px; }
.hosp-menu__title { font-size: 18px; margin-bottom: 12px; }
.hosp-menu__item { gap: 12px; }
.hosp-menu__name { font-size: 13px; }
.hosp-menu__desc { display: none; }
.hosp-menu__price { font-size: 14px; }
}