/* ============================================================================ uptime mongers - CSS Improved design with better hierarchy and visual appeal ============================================================================ */ /* Reset & Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } /* ============================================================================ Theme Variables ============================================================================ */ :root { /* Shared */ --mono: 'JetBrains Mono', monospace; --sans: 'IBM Plex Sans', sans-serif; --transition: 0.3s ease; } /* Dark Theme (default) */ :root, [data-theme="dark"] { --bg: #0a0a0a; --surface: #1a1a1a; --surface-light: #252525; --text: #e8e8e8; --text-dim: #a0a0a0; --accent: #00ff88; --accent-dim: #00cc6a; --accent-hover: #00ffaa; --accent-em: #00dd99; --brand-primary: #00ff88; --error-highlight: #ff4444; --border: #333; --grid-opacity: 0.1; --header-bg: rgba(10, 10, 10, 0.95); --shadow: rgba(0, 255, 136, 0.2); } /* Light Theme */ [data-theme="light"] { --bg: #ffffff; --surface: #f5f5f5; --surface-light: #e8e8e8; --text: #1a1a1a; --text-dim: #5a5a5a; /* 7:1 contrast - meets WCAG AAA */ --accent: #008844; /* 4.6:1 contrast - meets WCAG AA */ --accent-dim: #006633; /* 5.9:1 contrast - meets WCAG AA */ --accent-hover: #00aa55; /* 4.5:1 contrast - meets WCAG AA */ --accent-em: #007a3d; /* 5.3:1 contrast - meets WCAG AA */ --brand-primary: #008844; /* 4.6:1 contrast - meets WCAG AA */ --error-highlight: #b30000; /* 5.1:1 contrast - meets WCAG AA */ --border: #d0d0d0; --grid-opacity: 0.05; --header-bg: rgba(255, 255, 255, 0.95); --shadow: rgba(0, 136, 68, 0.15); } @media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } } body { background: var(--bg); color: var(--text); font-family: var(--sans); line-height: 1.6; overflow-x: hidden; transition: background-color var(--transition), color var(--transition); } /* ============================================================================ Base Element Styles ============================================================================ */ h1, h2, h3, h4, h5, h6 { color: var(--text); font-weight: 600; line-height: 1.3; margin-bottom: 1rem; } h1 { font-size: 2.5rem; } h2 { font-size: 2rem; margin-top: 2.5rem; } h3 { font-size: 1.5rem; margin-top: 2rem; } p { margin-bottom: 1rem; color: var(--text); font-size: 1.1rem; line-height: 1.75; } a { color: var(--accent); text-decoration: none; transition: opacity 0.2s; } a:hover { opacity: 0.8; } a:focus { outline: 2px solid var(--accent); outline-offset: 2px; } strong { font-weight: 600; color: var(--text); } em { font-style: italic; font-weight: 500; color: var(--text); } code { font-family: var(--mono); background: var(--surface); padding: 0.2rem 0.4rem; border-radius: 0.25rem; font-size: 0.9em; } pre { font-family: var(--mono); background: var(--surface); border: 1px solid var(--border); padding: 1rem; border-radius: 0.5rem; overflow-x: auto; margin: 1rem 0; line-height: 1.5; } ul, ol { margin: 1rem 0; padding-left: 2rem; } li { margin-bottom: 0.75rem; color: var(--text); font-size: 1.05rem; line-height: 1.7; } blockquote { margin: 1.5rem 0; padding-left: 1.5rem; border-left: 3px solid var(--accent); font-style: italic; } blockquote p { color: var(--text-dim); margin-bottom: 0.5rem; } blockquote footer { margin-top: 0.5rem; font-style: normal; color: var(--text-dim); font-size: 0.95rem; } dl { margin: 1rem 0; } dt { font-weight: 600; color: var(--text); margin-top: 0.75rem; font-size: 1.05rem; } dd { margin-left: 1.5rem; margin-bottom: 0.5rem; color: var(--text); font-size: 1.05rem; line-height: 1.7; } details { margin: 0.5rem 0; } summary { cursor: pointer; font-weight: 500; color: var(--text); user-select: none; } summary:hover { color: var(--accent); } input, select, textarea { background: var(--surface); border: 1px solid var(--border); color: var(--text); padding: 0.5rem; border-radius: 0.25rem; font-family: var(--mono); transition: border-color 0.2s; } input:focus, select:focus, textarea:focus { outline: 2px solid var(--accent); outline-offset: 2px; border-color: var(--accent); } input[type="submit"], input[type="button"] { background: var(--accent); color: var(--bg); border: none; padding: 0.75rem 1.5rem; font-weight: 600; cursor: pointer; transition: all 0.3s; } input[type="submit"]:hover, input[type="button"]:hover { background: var(--accent-dim); transform: translateY(-2px); } table { width: 100%; border-collapse: collapse; margin: 1rem 0; } th, td { padding: 0.75rem; text-align: left; border-bottom: 1px solid var(--border); } th { font-weight: 600; color: var(--text); background: var(--surface); } td { color: var(--text-dim); } /* Animated grid background */ body::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-image: linear-gradient(var(--border) 1px, transparent 1px), linear-gradient(90deg, var(--border) 1px, transparent 1px); background-size: 50px 50px; opacity: var(--grid-opacity); z-index: -1; animation: gridMove 20s linear infinite; pointer-events: none; } @keyframes gridMove { 0% { transform: translate(0, 0); } 100% { transform: translate(50px, 50px); } } /* ============================================================================ Theme Toggle ============================================================================ */ .theme-toggle { position: fixed; top: 1rem; right: 1rem; z-index: 1000; background: var(--surface); border: 1px solid var(--border); padding: 0.5rem 0.6rem; border-radius: 0.5rem; cursor: pointer; transition: all var(--transition); display: flex; align-items: center; justify-content: center; } .theme-toggle:hover { border-color: var(--accent); transform: scale(1.1); } .theme-icon { font-size: 1.25rem; line-height: 1; } .theme-toggle-text { display: none; } /* Skip Link */ .skip-link { position: absolute; top: -100px; left: 0; background: var(--accent); color: var(--bg); padding: 0.75rem 1.5rem; font-family: var(--mono); font-size: 0.95rem; font-weight: 700; text-decoration: none; border: 2px solid var(--accent); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); z-index: 10000; transition: top 0.2s ease-out; } .skip-link:focus { top: 0; outline: 3px solid var(--text); outline-offset: 3px; } /* Container */ .container { max-width: 1337px; margin: 0 auto; padding: 0 2rem; } /* ============================================================================ Header / Navigation ============================================================================ */ /* Clock display for check.html - fixed bottom-right corner */ #clock { position: fixed; bottom: 2rem; right: 2rem; font-family: var(--mono); font-size: 1.2rem; font-weight: 700; padding: 1rem 1.5rem; background: var(--surface); border: 2px solid var(--border); border-radius: 0.5rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); z-index: 1000; backdrop-filter: blur(10px); transition: all 0.3s; } #clock:hover { transform: translateY(-2px); box-shadow: 0 6px 30px rgba(0, 0, 0, 0.7); } #clock.up { color: var(--accent); border-color: var(--accent); } #clock.degraded { color: #ffaa00; border-color: #ffaa00; } #clock.unknown, #clock.down { color: var(--error-highlight); border-color: var(--error-highlight); } /* Clock QR code tooltip */ #clock-qr { position: fixed; bottom: 2rem; right: 10rem; background: var(--surface); border: 2px solid var(--border); border-radius: 0.5rem; padding: 1rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); z-index: 1001; opacity: 0; visibility: hidden; transition: opacity 0.3s, visibility 0.3s; pointer-events: none; } #clock:hover + #clock-qr, #clock-qr:hover { opacity: 1; visibility: visible; } #clock-qr canvas { display: block; border-radius: 0.25rem; } /* Hover QR codes - reusable component for inline links */ .hover-qr { display: inline-block; position: relative; } .hover-qr-container { position: absolute; left: 100%; top: 50%; transform: translateY(-50%); margin-left: 1rem; background: var(--surface); border: 2px solid var(--border); border-radius: 0.5rem; padding: 0.75rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); z-index: 1002; opacity: 0; visibility: hidden; transition: opacity 0.3s, visibility 0.3s; pointer-events: none; white-space: nowrap; } .hover-qr:hover .hover-qr-container { opacity: 1; visibility: visible; } .hover-qr-container canvas { display: block; border-radius: 0.25rem; } /* Superscript links styling */ sup a { color: var(--error-highlight); font-weight: bold; text-decoration: none; } sup a:hover { text-decoration: underline; } .site-header { padding: 2rem 0; border-bottom: 1px solid var(--border); background: var(--header-bg); backdrop-filter: blur(10px); position: sticky; top: 0; z-index: 100; } .site-header .container { display: flex; justify-content: space-between; align-items: center; min-height: 40px; } .logo { font-family: var(--mono); font-size: 1.2rem; font-weight: 700; color: var(--accent); text-decoration: none; display: flex; align-items: center; gap: 0.5rem; line-height: 1; } /* Logo mark SVG styling - theme aware */ .logo svg { flex-shrink: 0; display: block; } .logo svg rect { fill: var(--accent); } .logo svg path:nth-of-type(1) { stroke: var(--accent-dim); } .logo svg path:nth-of-type(2) { stroke: var(--accent-em); } .logo svg path:nth-of-type(3) { stroke: var(--accent); } @keyframes blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } } .blink-prompt { color: var(--text); text-decoration: none; margin-right: 0.5rem; animation: blink 1.5s infinite; } .blink-prompt:hover { opacity: 1; } .main-nav { display: flex; gap: 2rem; } .main-nav a { color: var(--text-dim); text-decoration: none; font-size: 0.9rem; transition: color 0.2s; } .main-nav a:hover { color: var(--accent); } /* Page title for check and newmon pages */ .site-header .page-title { margin: 1rem 0 0 0; font-size: 1.5rem; color: var(--text); text-align: left; } /* ============================================================================ Hero Section ============================================================================ */ .hero { padding: 6rem 0 4rem; text-align: center; position: relative; } .hero-badge { display: inline-block; padding: 0.5rem 1rem; background: var(--surface); border: 1px solid var(--border); border-radius: 2rem; font-family: var(--mono); font-size: 0.75rem; color: var(--text-dim); margin-bottom: 2rem; animation: slideDown 0.6s ease-out; } @keyframes slideDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } .hero-title { font-size: 4rem; font-weight: 700; line-height: 1.1; margin-bottom: 1.5rem; animation: slideUp 0.8s ease-out 0.2s both; } @keyframes slideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .hero-tagline { font-family: var(--mono); font-size: 1.5rem; color: var(--accent); margin-bottom: 1rem; animation: slideUp 0.8s ease-out 0.3s both; } .hero-description { font-size: 1.2rem; color: var(--text-dim); max-width: 700px; margin: 0 auto 3rem; line-height: 1.8; animation: slideUp 0.8s ease-out 0.4s both; } /* ============================================================================ Buttons & CTAs ============================================================================ */ .cta-group { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; animation: slideUp 0.8s ease-out 0.5s both; } .btn { padding: 1rem 2.5rem; font-family: var(--mono); font-size: 1rem; font-weight: 600; text-decoration: none; border: none; cursor: pointer; transition: all 0.3s; display: inline-block; position: relative; overflow: hidden; } .btn:focus { outline: 2px solid var(--accent); outline-offset: 4px; } .btn-primary { background: var(--accent); color: var(--bg); border: 2px solid var(--accent); } .btn-primary::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: var(--accent-dim); transition: left 0.3s; z-index: -1; } .btn-primary:hover::before { left: 0; } .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(0, 255, 136, 0.3); } .btn-secondary { background: transparent; color: var(--text); border: 2px solid var(--border); } .btn-secondary:hover { border-color: var(--accent); color: var(--accent); transform: translateY(-2px); } .btn-full { width: 100%; text-align: center; margin-top: 1.5rem; } /* ============================================================================ Stats Bar ============================================================================ */ .stats-bar { background: var(--surface); border: 1px solid var(--border); border-radius: 0.5rem; padding: 1.5rem; margin: 4rem 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 2rem; } .stat { text-align: center; } .stat-value { font-family: var(--mono); font-size: 2rem; font-weight: 700; color: var(--accent); display: block; } .stat-label { font-size: 0.9rem; color: var(--text-dim); margin-top: 0.25rem; } /* ============================================================================ Section Headers ============================================================================ */ .section-features { padding: 4rem 0; } .section-alt { background: var(--surface); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } .section-header { text-align: center; margin-bottom: 4rem; } .section-title { font-size: 2.5rem; margin-bottom: 1rem; } .section-subtitle { font-size: 1.2rem; color: var(--text-dim); max-width: 600px; margin: 0 auto; } /* ============================================================================ Feature Cards ============================================================================ */ .feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; margin-bottom: 2rem; } .feature-card { background: var(--surface); border: 1px solid var(--border); padding: 2rem; border-radius: 0.5rem; transition: all 0.3s; position: relative; overflow: hidden; } .section-alt .feature-card { background: var(--bg); } .feature-card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 3px; background: var(--accent); transform: scaleX(0); transition: transform 0.3s; } .feature-card:hover { border-color: var(--accent); transform: translateY(-5px); } .feature-card:hover::before { transform: scaleX(1); } .feature-category { font-family: var(--mono); font-size: 0.75rem; color: var(--accent); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 1rem; } .feature-card h3 { font-size: 1.5rem; margin-bottom: 1rem; } .feature-card p { color: var(--text-dim); margin-bottom: 1.5rem; line-height: 1.7; } .feature-links { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1rem; } .feature-link { font-family: var(--mono); font-size: 0.85rem; color: var(--accent); text-decoration: none; padding: 0.5rem 1rem; border: 1px solid var(--border); border-radius: 0.25rem; transition: all 0.2s; } .feature-link:hover { background: var(--accent); color: var(--bg); border-color: var(--accent); } .feature-cta { display: inline-block; font-family: var(--mono); font-size: 0.9rem; color: var(--accent); text-decoration: none; padding: 0.75rem 1.5rem; border: 2px solid var(--accent); border-radius: 0.25rem; transition: all 0.2s; margin-top: 1rem; } .feature-cta:hover { background: var(--accent); color: var(--bg); } .additional-features { text-align: center; color: var(--text-dim); margin-top: 2rem; } .additional-features a, .mon-link { color: var(--accent); text-decoration: none; transition: opacity 0.2s; } .additional-features a:hover, .mon-link:hover { opacity: 0.8; } /* ============================================================================ Tech Stack Section ============================================================================ */ .tech-stack { background: var(--surface); border: 1px solid var(--border); padding: 3rem; border-radius: 0.5rem; margin: 4rem 0; text-align: center; } .tech-stack h2 { font-size: 2rem; margin-bottom: 1.5rem; } .tech-stack p { color: var(--text-dim); font-size: 1.1rem; line-height: 1.8; max-width: 800px; margin: 0 auto 1rem; } .tech-note { font-family: var(--mono); font-size: 0.9rem; color: var(--accent); margin-top: 2rem; } .tech-note a { color: var(--accent); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color 0.2s; } .tech-note a:hover { border-bottom-color: var(--accent); } /* ============================================================================ Alerts Section ============================================================================ */ .alerts-section { padding: 4rem 0; } .alert-methods { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; margin-top: 2rem; } .alert-method { background: var(--surface); border: 1px solid var(--border); padding: 1.5rem; border-radius: 0.5rem; text-align: center; transition: all 0.3s; } .alert-method:hover { border-color: var(--accent); transform: scale(1.05); } .alert-method-name { font-family: var(--mono); font-size: 1.2rem; color: var(--accent); margin-bottom: 0.5rem; } .alert-method-desc { font-size: 0.9rem; color: var(--text-dim); } .no-account-message { text-align: center; color: var(--text); margin-top: 3rem; font-size: 1.1rem; } /* ============================================================================ Pricing Section ============================================================================ */ .pricing-section { padding: 4rem 0; background: var(--surface); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); } .pricing-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; margin-top: 3rem; max-width: 900px; margin-left: auto; margin-right: auto; } .pricing-card { background: var(--bg); border: 2px solid var(--border); padding: 2.5rem; border-radius: 0.5rem; position: relative; transition: all 0.3s; } .pricing-card:hover { border-color: var(--accent); transform: translateY(-10px); box-shadow: 0 20px 60px rgba(0, 255, 136, 0.2); } .pricing-price { font-size: 3rem; font-weight: 700; color: var(--accent); margin-bottom: 0.5rem; } .pricing-period { font-family: var(--mono); font-size: 0.9rem; color: var(--text-dim); } .pricing-title { font-size: 1.3rem; margin: 1.5rem 0; } .pricing-features { list-style: none; margin: 1.5rem 0; } .pricing-features li { padding: 0.75rem 0; border-bottom: 1px solid var(--border); color: var(--text-dim); } .pricing-features li::before { content: '✓'; color: var(--accent); margin-right: 0.75rem; font-weight: bold; } .pricing-note { font-size: 0.85rem; color: var(--text-dim); margin-top: 2rem; text-align: center; } .pricing-note a { color: var(--accent); text-decoration: none; } .pricing-note a:hover { text-decoration: underline; } .examples-link { text-align: center; margin-top: 2rem; } .examples-link p { color: var(--text-dim); } .examples-link a { color: var(--accent); text-decoration: none; } .examples-link a:hover { text-decoration: underline; } /* ============================================================================ Footer ============================================================================ */ .site-footer { padding: 3rem 0; border-top: 1px solid var(--border); } .footer-content { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 2rem; } .footer-links { display: flex; gap: 2rem; flex-wrap: wrap; } .footer-links a { color: var(--text-dim); text-decoration: none; font-size: 0.9rem; transition: color 0.2s; } .footer-links a:hover { color: var(--accent); } .footer-support { display: flex; gap: 1.5rem; } .footer-support a { color: #ff4500; text-decoration: none; font-family: var(--mono); font-size: 0.85rem; transition: color 0.2s; } .footer-support a:hover { color: var(--accent); } /* ============================================================================ Legacy Layout System (used in check, newmon, about, terms) ============================================================================ */ .row { display: flex; flex-wrap: wrap; gap: 1rem; margin-bottom: 2rem; } .part { flex: 1; min-width: 0; } .col-38 { flex: 0 0 calc(38% - 0.5rem); } .col-50 { flex: 0 0 calc(50% - 0.5rem); } .col-62 { flex: 0 0 calc(62% - 0.5rem); } .col-100 { flex: 0 0 100%; } /* ============================================================================ Status Indicators ============================================================================ */ .up { color: var(--accent); font-weight: 700; } .down { color: #ff4444; font-weight: 700; } /* ============================================================================ Typography & Headers ============================================================================ */ .page-subtitle { color: var(--text-dim); font-weight: 400; } .check-name { color: var(--accent); } .check-name a { color: var(--accent); } .t { font-size: 2rem; margin-bottom: 1.5rem; color: var(--text); } /* ============================================================================ Utility Classes ============================================================================ */ /* Panel/Card base - reusable container styling */ .panel { background: var(--surface); border: 1px solid var(--border); border-radius: 0.5rem; padding: 1rem; min-width: 0; box-sizing: border-box; } /* Fixed corner panel - for clock-style fixed position boxes */ .fixed-panel { position: fixed; background: var(--surface); border: 2px solid var(--border); border-radius: 0.5rem; padding: 1rem; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); backdrop-filter: blur(10px); z-index: 999; } /* Section header with bottom border */ .section-header-bordered { font-size: 1.5rem; margin-top: 2.5rem; margin-bottom: 1.5rem; color: var(--accent); border-bottom: 2px solid var(--border); padding-bottom: 0.5rem; } .section-header-bordered:first-of-type { margin-top: 1rem; } /* Details with custom arrow */ .details-custom summary { font-family: var(--sans); user-select: none; list-style: none; cursor: pointer; } .details-custom summary::-webkit-details-marker { display: none; } .details-custom summary::before { content: '▶ '; display: inline-block; transition: transform 0.2s; font-size: 0.7rem; margin-right: 0.35rem; } .details-custom[open] summary::before { transform: rotate(90deg); } .details-custom summary:hover { color: var(--accent); } /* Hover effects */ .hover-accent-border { transition: border-color 0.3s; } .hover-accent-border:hover { border-color: var(--accent); } /* Text alignment */ .text-center { text-align: center; } /* Text color utilities */ .text-muted { color: var(--text-dim); } .text-error { color: var(--error-highlight); } /* Subsection heading - used in about.html */ .subsection-heading { font-size: 1.8rem; margin-bottom: 1.5rem; margin-top: 3rem; } /* Content width constraint */ .content-max-width { max-width: 800px; margin: 0 auto; } /* Scrollable container */ .scroll-box { max-height: 600px; overflow-y: auto; border: 1px solid var(--border); padding: 1rem; background: var(--surface); border-radius: 0.25rem; } /* Form-specific utilities - used in newmon.html */ .form-section { margin-bottom: 2rem; } .form-field { margin-bottom: 1.5rem; } .form-field label { display: block; } .form-help-text { color: var(--text-dim); font-size: 0.95rem; line-height: 1.6; margin-top: 0.5rem; } .form-field-label { font-weight: bold; font-size: 1.1rem; margin-bottom: 0.75rem; display: block; } .form-field-label.required::after { content: " *"; color: var(--error-highlight); font-weight: bold; } .form-field-label.has-error { color: var(--error-highlight); } /* Form notes and help text */ .form-note { color: var(--text-dim); } .form-note-list { font-size: 0.9rem; margin-top: 0.5rem; color: var(--text-dim); } /* Form error list */ .form-errors { color: var(--error-highlight); font-weight: bold; margin-top: 1rem; padding: 1rem; background: rgba(255, 68, 68, 0.1); border-left: 3px solid var(--error-highlight); border-radius: 0.25rem; list-style-position: inside; } /* Info/callout box */ .info-box { background: var(--surface); border-left: 3px solid var(--accent); padding: 1rem 1.5rem; margin-bottom: 1.5rem; border-radius: 0.25rem; } .info-box p:last-child { margin-bottom: 0; } /* Details without list style */ .details-plain { list-style: none; } /* Scrollable content */ .overflow-scroll { max-width: 500px; overflow-x: auto; } .code-scrollable { font-size: smaller; max-width: 550px; max-height: 200px; overflow-x: auto; } /* Results column pre-formatted code blocks - wider for newmon results */ #monres pre.code-scrollable { width: 100%; max-width: 100%; margin: 0.5rem 0; overflow-x: auto; box-sizing: border-box; } /* Diff preview in events */ .diff-preview { font-size: smaller; } .diff-preview-content { width: 100%; max-width: 100%; max-height: 100px; overflow: auto; box-sizing: border-box; white-space: pre; word-wrap: normal; } /* Events list scrollable container */ .events-scrollable { max-height: 450px; overflow-y: auto; overflow-x: hidden; } /* Text size utilities */ .text-larger { font-size: larger; } .text-smaller { font-size: smaller; } /* Spacing utilities - replaces inline styles */ .section-compact { padding-top: 2rem !important; } .spacing-top-sm { margin-top: 2rem; } .feature-grid-wide { grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); } /* ============================================================================ Reduced Motion Support (WCAG 2.1 Level AA) ============================================================================ */ @media (prefers-reduced-motion: reduce) { /* Disable all animations and transitions */ *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } /* Specifically disable animated grid background */ body::before { animation: none !important; } /* Disable logo blink animation */ .logo::before, .blink-prompt { animation: none !important; opacity: 1 !important; } /* Disable hover transforms */ .btn-primary:hover, .btn-secondary:hover, .theme-toggle:hover, #clock:hover, .feature-card:hover, .alert-method:hover, .pricing-card:hover, input[type="submit"]:hover, input[type="button"]:hover { transform: none !important; } } /* ============================================================================ Print Styles ============================================================================ */ @media print { /* Hide interactive UI elements when printing */ #clock, #clock-qr, .theme-toggle { display: none !important; } /* Disable animated grid background */ body::before { display: none !important; } } /* ============================================================================ Responsive Design ============================================================================ */ @media (max-width: 768px) { .container { padding: 0 1rem; } .theme-toggle { top: 0.75rem; right: 0.75rem; } #clock-qr { display: none; } .hero { padding: 4rem 0 3rem; } .hero-title { font-size: 2.5rem; } .hero-tagline { font-size: 1.2rem; } .hero-description { font-size: 1rem; } .stats-bar { grid-template-columns: 1fr; gap: 1rem; } .section-title { font-size: 2rem; } .section-subtitle { font-size: 1rem; } .feature-grid { grid-template-columns: 1fr; } .pricing-grid { grid-template-columns: 1fr; } .main-nav { display: none; } .footer-content { flex-direction: column; text-align: center; } .footer-links { justify-content: center; } .btn { padding: 0.875rem 2rem; font-size: 0.9rem; } /* Legacy layout system responsive */ .row { flex-direction: column; } .col-38, .col-62, .col-100 { flex: 0 0 100%; } .t { font-size: 1.5rem; } /* Clock responsive */ #clock { bottom: 1rem; right: 1rem; font-size: 1rem; padding: 0.75rem 1rem; } } @media (max-width: 480px) { .theme-toggle { padding: 0.4rem; } .hero-title { font-size: 2rem; } .hero-tagline { font-size: 1rem; } .cta-group { flex-direction: column; } .btn { width: 100%; } .feature-card { padding: 1.5rem; } .pricing-card { padding: 2rem; } }