/* ============================================================ RTOSure Design System — styles.css Version 1.0 | May 2026 The single source of truth for all RTOSure web styles. All pages must import this file. ============================================================ */ /* ── Google Fonts ─────────────────────────────────────────── */ @import url('https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,300;1,9..40,400&display=swap'); /* ── Design Tokens ────────────────────────────────────────── */ :root { /* Brand colours */ --color-navy: #0f2744; /* Primary — deep navy */ --color-navy-mid: #1a3a62; /* Slightly lighter navy */ --color-teal: #00a896; /* Primary accent */ --color-teal-dark: #007a6e; /* Teal hover */ --color-teal-light: #e6f7f5; /* Teal tint background */ --color-teal-mid: #b3e8e2; /* Teal mid tone */ /* Sub-brand accent colours */ --color-cricos: #2563eb; /* CRICOSSure blue */ --color-cricos-light: #eff6ff; --color-cricos-text: #60a5fa; /* CRICOSSure on dark backgrounds */ --color-elicos: #7c3aed; /* ELICOSSure purple */ --color-elicos-light: #f5f3ff; --color-elicos-text: #a78bfa; /* ELICOSSure on dark backgrounds */ /* Semantic status colours */ --color-amber: #f59e0b; /* Warning / due items */ --color-amber-light: #fef3c7; --color-green-success: #10b981; /* Compliant / complete */ --color-green-light: #d1fae5; /* On-dark surface utilities */ --color-on-dark-text: rgba(255,255,255,0.72); /* Body text on navy/dark */ --color-on-dark-secondary: rgba(255,255,255,0.55); /* Secondary text on dark */ --color-on-dark-muted: rgba(255,255,255,0.35); /* Muted / labels on dark */ --color-on-dark-border: rgba(255,255,255,0.08); /* Borders on dark */ --color-on-dark-surface: rgba(255,255,255,0.04); /* Subtle card bg on dark */ --color-on-dark-surface-hover: rgba(255,255,255,0.07); /* Sub-brand on-dark tints (for dark bg hover states) */ --color-teal-on-dark-bg: rgba(0,168,150,0.10); --color-teal-on-dark-border: rgba(0,168,150,0.40); --color-cricos-on-dark-bg: rgba(37,99,235,0.10); --color-cricos-on-dark-border: rgba(37,99,235,0.40); --color-elicos-on-dark-bg: rgba(124,58,237,0.10); --color-elicos-on-dark-border: rgba(124,58,237,0.40); /* Neutral palette */ --color-dark: #0d1b2a; /* Near black */ --color-charcoal: #1e293b; /* Dark text */ --color-slate: #475569; /* Secondary text */ --color-muted: #94a3b8; /* Muted / labels */ --color-border: #e2e8f0; /* Dividers */ --color-surface: #f8fafc; /* Off-white panels */ --color-white: #ffffff; /* Typography */ --font-display: 'DM Serif Display', Georgia, serif; --font-body: 'DM Sans', system-ui, sans-serif; /* Spacing scale */ --space-xs: 4px; --space-sm: 8px; --space-md: 16px; --space-lg: 24px; --space-xl: 40px; --space-2xl: 64px; --space-3xl: 96px; --space-4xl: 128px; /* Layout */ --container: 1200px; --radius-sm: 6px; --radius-md: 10px; --radius-lg: 16px; --radius-xl: 24px; /* Shadows */ --shadow-sm: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06); --shadow-md: 0 4px 16px rgba(15,39,68,.10), 0 2px 6px rgba(15,39,68,.06); --shadow-lg: 0 12px 40px rgba(15,39,68,.14), 0 4px 12px rgba(15,39,68,.08); --shadow-teal:0 4px 20px rgba(0,168,150,.25); /* Transitions */ --ease: cubic-bezier(.4,0,.2,1); --duration: 200ms; } /* ── Reset & Base ─────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; } body { font-family: var(--font-body); font-size: 17px; line-height: 1.65; color: var(--color-charcoal); background: var(--color-white); -webkit-font-smoothing: antialiased; } img, svg { display: block; max-width: 100%; } a { color: inherit; text-decoration: none; } ul, ol { list-style: none; } button { font-family: inherit; cursor: pointer; border: none; background: none; } input, textarea, select { font-family: inherit; } /* ── Container ────────────────────────────────────────────── */ .container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--space-xl); } @media (max-width: 768px) { .container { padding-inline: var(--space-md); } } /* ── Typography Scale ─────────────────────────────────────── */ .display-xl { font-family: var(--font-display); font-size: clamp(42px, 5.5vw, 72px); line-height: 1.08; letter-spacing: -0.02em; color: var(--color-navy); } .display-lg { font-family: var(--font-display); font-size: clamp(34px, 4vw, 54px); line-height: 1.1; letter-spacing: -0.02em; color: var(--color-navy); } .display-md { font-family: var(--font-display); font-size: clamp(26px, 3vw, 40px); line-height: 1.15; letter-spacing: -0.01em; color: var(--color-navy); } h1, h2, h3, h4, h5, h6 { font-family: var(--font-body); font-weight: 600; line-height: 1.25; color: var(--color-navy); } h1 { font-size: clamp(32px, 3.5vw, 44px); } h2 { font-size: clamp(28px, 2.5vw, 34px); } h3 { font-size: clamp(22px, 2vw, 24px); } h4 { font-size: 18px; } h5 { font-size: 15px; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 600; } p { line-height: 1.7; } .text-lead { font-size: clamp(17px, 1.8vw, 20px); line-height: 1.6; color: var(--color-slate); font-weight: 400; } .text-sm { font-size: 14px; } .text-xs { font-size: 12px; letter-spacing: 0.04em; } .text-teal { color: var(--color-teal); } .text-navy { color: var(--color-navy); } .text-slate { color: var(--color-slate); } .text-muted { color: var(--color-muted); } .text-white { color: var(--color-white); } .label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.1em; color: var(--color-teal); } /* ── Buttons ──────────────────────────────────────────────── */ .btn { display: inline-flex; align-items: center; gap: var(--space-sm); padding: 14px 28px; border-radius: 8px; font-size: 15px; font-weight: 600; font-family: var(--font-body); transition: all var(--duration) var(--ease); white-space: nowrap; line-height: 1; cursor: pointer; } .btn-primary { background: var(--color-teal); color: var(--color-white); box-shadow: var(--shadow-teal); } .btn-primary:hover { background: var(--color-teal-dark); transform: translateY(-1px); box-shadow: 0 6px 24px rgba(0,168,150,.35); } .btn-outline { background: transparent; color: var(--color-navy); border: 1.5px solid var(--color-navy); } .btn-outline:hover { background: var(--color-navy); color: var(--color-white); } .btn-outline-white { background: transparent; color: var(--color-white); border: 1.5px solid rgba(255,255,255,0.5); } .btn-outline-white:hover { background: rgba(255,255,255,0.1); border-color: var(--color-white); } .btn-ghost { background: transparent; color: var(--color-teal); padding: 14px 0; gap: var(--space-xs); } .btn-ghost:hover { gap: 10px; } .btn-lg { padding: 17px 34px; font-size: 16px; } .btn-sm { padding: 10px 20px; font-size: 13px; } /* ── Section utilities ────────────────────────────────────── */ .section { padding-block: var(--space-3xl); } .section-sm { padding-block: var(--space-2xl); } .section-lg { padding-block: var(--space-4xl); } .section-label { display: inline-block; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; color: var(--color-teal); margin-bottom: var(--space-md); } .section-heading { font-family: var(--font-display); font-size: clamp(28px, 3.5vw, 46px); line-height: 1.1; letter-spacing: -0.02em; color: var(--color-navy); margin-bottom: var(--space-md); } .section-subheading { font-size: clamp(16px, 1.6vw, 19px); line-height: 1.65; color: var(--color-slate); max-width: 640px; } .centered { text-align: center; } .centered .section-subheading { margin-inline: auto; } /* ── Cards ────────────────────────────────────────────────── */ .card { background: var(--color-white); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--space-xl); box-shadow: var(--shadow-sm); transition: box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease); } .card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } /* ── Divider ──────────────────────────────────────────────── */ .divider { width: 48px; height: 3px; background: var(--color-teal); border-radius: 2px; margin-block: var(--space-lg); } .divider.centered { margin-inline: auto; } /* ── Badge / Tag ──────────────────────────────────────────── */ .badge { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; border-radius: 100px; font-size: 12px; font-weight: 600; } .badge-teal { background: var(--color-teal-light); color: var(--color-teal-dark); } .badge-navy { background: rgba(15,39,68,.08); color: var(--color-navy); } .badge-cricos { background: var(--color-cricos-light); color: var(--color-cricos); } .badge-elicos { background: var(--color-elicos-light); color: var(--color-elicos); } /* ── Responsive grid helpers ─────────────────────────────── */ .grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-xl); } .grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-xl); } .grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-xl); } @media (max-width: 1024px) { .grid-4 { grid-template-columns: repeat(2, 1fr); } .grid-3 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 640px) { .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; } .section { padding-block: var(--space-2xl); } .section-lg { padding-block: var(--space-3xl); } } /* ── Utility ──────────────────────────────────────────────── */ .mt-sm { margin-top: var(--space-sm); } .mt-md { margin-top: var(--space-md); } .mt-lg { margin-top: var(--space-lg); } .mt-xl { margin-top: var(--space-xl); } .mb-md { margin-bottom: var(--space-md); } .mb-lg { margin-bottom: var(--space-lg); } .mb-xl { margin-bottom: var(--space-xl); } .gap-sm { gap: var(--space-sm); } .gap-md { gap: var(--space-md); } .flex { display: flex; } .flex-center { display: flex; align-items: center; } .flex-between { display: flex; align-items: center; justify-content: space-between; } .font-semibold { font-weight: 600; } .font-bold { font-weight: 700; } .italic { font-style: italic; } .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }