/* ============================================================= OTS Theme - Main Stylesheet ============================================================= */ /* ── 1. CSS Variables ───────────────────────────────────────── */ :root, [data-theme="light"] { /* ── Light palette - British Racing Green + Monochrome ── */ --color-primary: var(--wp--preset--color--primary, #004225); --color-primary-dk: var(--wp--preset--color--primary-dk, #002E1A); --color-primary-lt: var(--wp--preset--color--primary-lt, #E8F5E9); --color-primary-rgb: 0,66,37; --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, #4CAF50); --color-primary-dk: var(--wp--custom--dark--primary-dk, #004225); --color-primary-lt: var(--wp--custom--dark--primary-lt, rgba(0,66,37,.15)); --color-primary-rgb: 76,175,80; --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); } /* Smooth theme transition */ body, .site-header, .feature-card, .pricing-card, .contact-form-wrap, .platform-visual, .form-group input, .form-group textarea, .form-group select { 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; backdrop-filter: blur(8px); } .site-header.scrolled .logo-text { color: var(--color-heading); } .site-header.scrolled .nav-menu a { color: var(--header-scrolled-text); } .header-inner { display: flex; align-items: center; gap: 2rem; height: 70px; } /* Logo */ .site-logo { display: flex; align-items: center; flex-shrink: 0; max-height: 60px; overflow: hidden; } .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: 60px !important; width: auto !important; height: auto !important; max-width: 220px !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-accent); } /* When header is over light background (inner pages) */ .page-header-light .site-header { background: var(--color-bg); box-shadow: var(--shadow-sm); } .page-header-light .logo-text { color: var(--color-heading); } .page-header-light .nav-menu a { color: var(--color-text); } /* 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; } /* Light mode: nav text over hero needs to be dark */ [data-theme="light"] .nav-menu a { color: var(--color-text); } [data-theme="light"] .nav-menu a:hover, [data-theme="light"] .nav-menu .current-menu-item > a { color: var(--color-primary); } [data-theme="light"] .logo-text { color: var(--color-heading); } [data-theme="light"] .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%; } .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); } /* ── 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; } .nav-toggle span { display: block; width: 24px; height: 2px; background: #fff; border-radius: 2px; transition: all var(--transition); } .site-header.scrolled .nav-toggle span { background: var(--color-heading); } .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-dark); z-index: 99; padding: 5rem 2rem 2rem; overflow-y: auto; } .site-nav.open .nav-menu { flex-direction: column; align-items: flex-start; gap: 1.5rem; } .site-nav.open .nav-menu > li { width: 100%; } .site-nav.open .nav-menu a { color: #fff; font-size: 1.25rem; } /* 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: rgba(255,255,255,.7); } .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: rgba(255,255,255,.07); border: none; border-radius: var(--radius-sm); box-shadow: none; padding: .5rem 0 .5rem .75rem; margin-top: .5rem; display: none; } .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 .sub-menu a { font-size: 1rem; padding: .4rem .75rem; color: rgba(255,255,255,.8); } .site-nav.open .nav-menu .sub-menu a:hover { color: #fff; 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: transform; } .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 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); } .oribi-card.comparison-row .comparison-check { width: 28px; height: 28px; background: var(--color-primary-lt); color: var(--color-primary); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: .85rem; font-weight: 700; flex-shrink: 0; } .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 { border-color: var(--color-primary); box-shadow: 0 0 0 4px rgba(var(--color-primary-rgb),.1); } .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-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; } .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; } /* ── Dashboard TV frame ────────────────────────── */ .dashboard-tv { display: flex; flex-direction: column; align-items: center; } .dashboard-tv__body { width: 100%; max-width: 520px; background: var(--color-bg-alt); border: 4px solid var(--color-bg-alt); border-radius: 6px 6px 4px 4px; outline: 1px solid var(--color-border); 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: #111; 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: var(--color-bg-alt); border: 1px solid var(--color-border); 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; 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; } /* 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: var(--color-bg-alt); border: 2px solid var(--color-border); 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: var(--color-border); border-radius: 50%; } .da-tablet .da-body::after { content: ''; position: absolute; bottom: 5px; left: 50%; transform: translateX(-50%); width: 36px; height: 3px; background: var(--color-border); border-radius: 2px; } /* ── Small Monitor ─────────────────────────────── */ .da-monitor-sm .da-body { width: 236px; height: 146px; background: var(--color-bg-alt); border: 5px solid var(--color-bg-alt); border-radius: 6px; outline: 1px solid var(--color-border); 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: var(--color-bg-alt); border-left: 1px solid var(--color-border); border-right: 1px solid var(--color-border); } .da-monitor-sm .da-base { width: 68px; height: 5px; background: var(--color-bg-alt); border: 1px solid var(--color-border); border-radius: 3px; } /* ── Large Monitor ─────────────────────────────── */ .da-monitor-lg .da-body { width: 298px; height: 177px; background: var(--color-bg-alt); border: 4px solid var(--color-bg-alt); border-radius: 6px; outline: 1px solid var(--color-border); 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: var(--color-bg-alt); border-left: 1px solid var(--color-border); border-right: 1px solid var(--color-border); } .da-monitor-lg .da-base { width: 88px; height: 5px; background: var(--color-bg-alt); border: 1px solid var(--color-border); border-radius: 3px; } /* ── TV ────────────────────────────────────────── */ .da-tv .da-body { width: 320px; height: 188px; background: var(--color-bg-alt); border: 4px solid var(--color-bg-alt); border-radius: 6px 6px 4px 4px; outline: 1px solid var(--color-border); 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: var(--color-bg-alt); border: 1px solid var(--color-border); 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: var(--color-bg-alt); border: 1px solid var(--color-border); 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, var(--color-border) 0px, var(--color-border) 2px, transparent 2px, transparent 5px ); border-radius: 1px; } .da-projector .da-lens { width: 38px; height: 38px; background: #080c12; border: 2px solid var(--color-border); 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: var(--color-bg-alt); border: 1px solid var(--color-border); 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 var(--color-border); border-radius: 4px; box-shadow: 0 14px 48px rgba(0,0,0,0.60); } .da-vwall .da-panel { width: 148px; height: 90px; background: var(--color-bg-alt); border: 2px solid var(--color-bg-alt); 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; } /* ── 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; } } /* ── 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; } .ts-stage { position: relative; width: 100%; aspect-ratio: 4/3; display: flex; align-items: center; justify-content: center; } /* ── TV ── */ .ts-tv { display: flex; flex-direction: column; align-items: center; position: relative; } .ts-tv__body { width: 320px; height: 188px; background: var(--color-bg-alt); border: 4px solid var(--color-bg-alt); border-radius: 6px 6px 4px 4px; outline: 1px solid var(--color-border); 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); } } /* 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 var(--color-border); 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: 180px; } .ts-tv__foot { width: 12px; height: 8px; background: var(--color-bg-alt); border: 1px solid var(--color-border); border-radius: 0 0 4px 4px; } /* ── Stick device ── */ .ts-stick { position: absolute; right: -20px; top: 50%; transform: translateY(-50%) translateX(80px); display: flex; align-items: center; opacity: 0; z-index: 2; } .ts-stick__body { width: 68px; height: 26px; 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: 14px; height: 10px; 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: 6px; height: 6px; 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); } 20% { opacity: 1; transform: translateY(-50%) translateX(60px); } 70% { transform: translateY(-50%) translateX(8px); } 85% { transform: translateY(-50%) translateX(12px); } 100% { opacity: 1; transform: translateY(-50%) translateX(6px); } } /* Responsive scale-down */ @media (max-width: 900px) { .ts-tv__body { width: 260px; height: 152px; } .ts-tv__feet { width: 140px; } .ts-stick__body { width: 56px; height: 22px; } } @media (max-width: 640px) { .ts-tv__body { width: 200px; height: 118px; } .ts-tv__feet { width: 110px; } .ts-stick__body { width: 46px; height: 18px; } .ts-stick__connector { width: 10px; height: 8px; } .ts-stick__body::before { top: 4px; left: 6px; width: 20px; height: 8px; } .ts-stick__led { width: 3px; height: 3px; right: 5px; } } @media (prefers-reduced-motion: reduce) { .ts-stage .ts-stick { opacity: 1; transform: translateY(-50%) translateX(6px); } .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-drift { 0% { transform: translate(-50%, -50%) scale(1); opacity: 0.35; } 15% { transform: translate(-20%, -30%) scale(1.15); opacity: 0.45; } 30% { transform: translate(-65%, -70%) scale(0.9); opacity: 0.3; } 45% { transform: translate(-80%, -40%) scale(1.1); opacity: 0.5; } 60% { transform: translate(-30%, -75%) scale(0.95); opacity: 0.35; } 75% { transform: translate(-70%, -25%) scale(1.2); opacity: 0.45; } 90% { transform: translate(-40%, -60%) scale(1.05); opacity: 0.4; } 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.35; } } /* 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: 700px; height: 700px; border-radius: 50%; background: radial-gradient(circle, rgba(var(--color-primary-rgb), 0.18) 0%, rgba(var(--color-primary-rgb), 0.06) 50%, transparent 70%); z-index: 1; pointer-events: none; filter: blur(40px); animation: glow-drift 20s 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; } .hero-animated__content .hero-stats { justify-content: center; } .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: var(--p-opacity, 0.2); } } @media (max-width: 768px) { .hero-animated__glow { width: 400px; height: 400px; } .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; } /* ── 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-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,.4); } .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; } .footer-bottom p { font-size: .8rem; color: rgba(255,255,255,.3); text-align: center; margin: 0; } /* ── 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); } .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; } .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-bg-alt); font-weight: 700; font-size: .85rem; text-transform: uppercase; letter-spacing: .05em; color: var(--color-primary); text-align: left !important; padding: .75rem 1.25rem; } .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 (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.22) 0%, rgba(var(--color-primary-rgb), 0.08) 50%, transparent 70%); } [data-theme="dark"] .site-footer { background: #0D0D0D; } [data-theme="dark"] .site-nav.open { background: #111111; } [data-theme="dark"] .logo-text { color: #F5F5F5; } [data-theme="dark"] .logo-text strong { color: var(--color-accent); } [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"] .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; }