===FILE: styles.css=== :root { --space-4: 4px; --space-8: 8px; --space-12: 12px; --space-16: 16px; --space-24: 24px; --space-40: 40px; --space-64: 64px; --color-bg: #f4f1ec; --color-surface: #fffcf8; --color-panel: rgba(255, 252, 248, 0.88); --color-text: #2c2b33; --color-muted: #5a5866; --color-accent: #5c6bc0; --color-accent-hover: #4a58a8; --color-accent-soft: #dfe3f5; --color-pastel-a: #e4dcf0; --color-pastel-b: #d5e8df; --color-pastel-c: #f0e2d4; --color-pastel-d: #dce4f2; --color-pastel-e: #e8ddd4; --color-border: #e3ddd4; --color-error: #9b2c2c; --color-footer: #2c2b33; --color-footer-text: #e8e4dc; --color-footer-muted: #b0aaa0; --radius-sm: 10px; --radius-md: 16px; --radius-lg: 24px; --shadow-micro: 0 2px 8px rgba(44, 43, 51, 0.06); --shadow-soft: 0 8px 28px rgba(44, 43, 51, 0.08); --font-sans: "Segoe UI", system-ui, -apple-system, sans-serif; --header-h: 56px; --max: 1120px; } *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; font-family: var(--font-sans); font-size: 1rem; line-height: 1.65; color: var(--color-text); background-color: var(--color-bg); background-image: linear-gradient(165deg, #f7f3ee 0%, #eef0f6 48%, #f4efe8 100%); min-height: 100vh; } body.nav-open { overflow: hidden; } img { max-width: 100%; height: auto; display: block; } a { color: var(--color-accent); text-decoration-thickness: 1px; text-underline-offset: 3px; } a:hover { color: var(--color-accent-hover); } h1, h2, h3, h4 { line-height: 1.25; overflow-wrap: anywhere; font-weight: 650; color: var(--color-text); } p, li, label, td, th { overflow-wrap: anywhere; } .skip-link { position: absolute; left: var(--space-16); top: -100px; z-index: 1000; background-color: var(--color-accent); color: #fff; padding: var(--space-8) var(--space-16); border-radius: var(--radius-sm); font-weight: 600; } .skip-link:focus { top: var(--space-16); color: #fff; } :focus-visible { outline: 3px solid var(--color-accent); outline-offset: 3px; } .btn:focus-visible, .header-cta:focus-visible, .cookie-banner button:focus-visible { outline-color: #fff; outline-offset: 3px; box-shadow: 0 0 0 5px rgba(92, 107, 192, 0.55); } .site-header { height: var(--header-h); background-color: var(--color-surface); border-bottom: 1px solid var(--color-border); box-shadow: var(--shadow-micro); } .header-inner { max-width: var(--max); margin: 0 auto; padding: 0 var(--space-16); height: 100%; display: flex; align-items: center; gap: var(--space-16); } .brand { display: flex; align-items: center; gap: var(--space-8); color: var(--color-text); text-decoration: none; flex-shrink: 0; white-space: nowrap; font-weight: 700; font-size: 0.95rem; letter-spacing: -0.02em; } .brand-mark { width: 28px; height: 28px; flex-shrink: 0; } .brand:hover { color: var(--color-accent); } .desktop-nav { display: none; flex: 1; justify-content: center; gap: var(--space-4); min-width: 0; } .desktop-nav a { color: var(--color-muted); text-decoration: none; font-size: 0.8125rem; font-weight: 600; padding: var(--space-8) var(--space-8); border-radius: var(--radius-sm); white-space: nowrap; } .desktop-nav a:hover, .desktop-nav a[aria-current="page"] { color: var(--color-accent); background-color: var(--color-accent-soft); } .header-cta { display: none; margin-left: auto; background-color: var(--color-accent); color: #fff; text-decoration: none; font-size: 0.8125rem; font-weight: 650; padding: var(--space-8) var(--space-16); border-radius: 999px; box-shadow: var(--shadow-micro); white-space: nowrap; flex-shrink: 0; } .header-cta:hover { background-color: var(--color-accent-hover); color: #fff; } .nav-toggle { margin-left: auto; width: 44px; height: 44px; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background-color: var(--color-surface); color: var(--color-text); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; padding: 0; } .nav-toggle svg { width: 22px; height: 22px; } .nav-overlay { position: fixed; inset: 0; z-index: 900; background-color: rgba(44, 43, 51, 0.42); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); display: flex; flex-direction: column; justify-content: flex-start; padding: var(--space-16); overflow-y: auto; opacity: 0; pointer-events: none; transition: opacity 0.2s ease; } .nav-overlay.is-open { opacity: 1; pointer-events: auto; } .nav-overlay-panel { background-color: var(--color-surface); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); padding: var(--space-24); margin-block: auto; width: 100%; max-width: 420px; margin-inline: auto; display: flex; flex-direction: column; gap: var(--space-8); } .nav-overlay-panel a { display: block; color: var(--color-text); text-decoration: none; font-weight: 600; padding: var(--space-16); border-radius: var(--radius-sm); background-color: var(--color-bg); } .nav-overlay-panel a:hover, .nav-overlay-panel a[aria-current="page"] { background-color: var(--color-accent-soft); color: var(--color-accent); } .nav-overlay-cta { background-color: var(--color-accent) !important; color: #fff !important; text-align: center; margin-top: var(--space-8); } .nav-overlay-close { align-self: flex-end; border: 1px solid var(--color-border); background-color: var(--color-surface); color: var(--color-text); border-radius: var(--radius-sm); padding: var(--space-8) var(--space-16); font-weight: 600; cursor: pointer; margin-bottom: var(--space-8); } main { display: block; } .hero { max-width: var(--max); margin: 0 auto; padding: var(--space-64) var(--space-16) var(--space-40); } .hero-card { background-color: var(--color-surface); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); padding: var(--space-40) var(--space-24); border: 1px solid var(--color-border); position: relative; overflow: hidden; } .hero-card::before { content: ""; position: absolute; inset: 0 auto auto 0; width: 100%; height: 6px; background-image: linear-gradient(90deg, var(--color-pastel-a), var(--color-pastel-b), var(--color-pastel-c)); border-radius: var(--radius-lg) var(--radius-lg) 0 0; } .hero-eyebrow { display: inline-block; font-size: 0.8125rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--color-accent); margin: 0 0 var(--space-12); } .hero h1 { margin: 0 0 var(--space-16); font-size: clamp(1.75rem, 4vw, 2.5rem); letter-spacing: -0.03em; max-width: 18ch; } .hero-lead { margin: 0 0 var(--space-24); color: var(--color-muted); font-size: 1.0625rem; max-width: 42rem; } .hero-actions { display: flex; flex-wrap: wrap; gap: var(--space-12); } .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-8); padding: var(--space-12) var(--space-24); border-radius: 999px; font-weight: 650; font-size: 0.9375rem; text-decoration: none; border: none; cursor: pointer; font-family: inherit; } .btn-primary { background-color: var(--color-accent); color: #fff; box-shadow: var(--shadow-micro); } .btn-primary:hover { background-color: var(--color-accent-hover); color: #fff; } .btn-secondary { background-color: var(--color-accent-soft); color: var(--color-accent); } .btn-secondary:hover { background-color: #cfd5ee; color: var(--color-accent-hover); } .section { max-width: var(--max); margin: 0 auto; padding: 0 var(--space-16) var(--space-64); } .section-head { margin-bottom: var(--space-24); } .section-head h2 { margin: 0 0 var(--space-8); font-size: clamp(1.35rem, 2.5vw, 1.75rem); letter-spacing: -0.02em; } .section-head p { margin: 0; color: var(--color-muted); max-width: 40rem; } .tile-grid { display: grid; grid-template-columns: 1fr; gap: var(--space-24); } .tile { position: relative; min-height: 280px; border-radius: var(--radius-lg); overflow: hidden; box-shadow: var(--shadow-soft); isolation: isolate; } .tile-media { position: absolute; inset: 0; z-index: 0; } .tile-media svg { width: 100%; height: 100%; display: block; } .tile-panel { position: absolute; left: 0; right: 0; bottom: 0; z-index: 1; padding: var(--space-24); background-color: var(--color-panel); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border-top: 1px solid rgba(255, 255, 255, 0.55); min-height: 38%; display: flex; flex-direction: column; gap: var(--space-8); } .tile-panel h3 { margin: 0; font-size: 1.125rem; } .tile-panel h3 a { color: var(--color-text); text-decoration: none; } .tile-panel h3 a:hover { color: var(--color-accent); } .tile-panel p { margin: 0; color: var(--color-muted); font-size: 0.9375rem; flex: 1; } .tile-link { font-weight: 650; font-size: 0.875rem; text-decoration: none; color: var(--color-accent); align-self: flex-start; } .tile-link:hover { color: var(--color-accent-hover); } .support-card { background-color: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-micro); padding: var(--space-40) var(--space-24); display: grid; gap: var(--space-24); } .support-card h2 { margin: 0 0 var(--space-8); font-size: 1.35rem; } .support-card > p { margin: 0; color: var(--color-muted); } .support-points { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-16); } .support-points li { background-color: var(--color-bg); border-radius: var(--radius-md); padding: var(--space-24); border: 1px solid var(--color-border); min-width: 0; } .support-points strong { display: block; margin-bottom: var(--space-8); color: var(--color-text); } .support-points span { color: var(--color-muted); font-size: 0.9375rem; } .page-hero { max-width: var(--max); margin: 0 auto; padding: var(--space-40) var(--space-16) var(--space-24); } .page-hero-inner { background-color: var(--color-surface); border-radius: var(--radius-lg); border: 1px solid var(--color-border); box-shadow: var(--shadow-soft); padding: var(--space-40) var(--space-24); overflow: hidden; position: relative; } .page-hero-inner::after { content: ""; position: absolute; right: -40px; top: -40px; width: 180px; height: 180px; border-radius: 50%; background-image: radial-gradient(circle, var(--color-pastel-a) 0%, transparent 70%); pointer-events: none; } .page-hero .eyebrow { margin: 0 0 var(--space-12); font-size: 0.8125rem; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--color-accent); } .page-hero h1 { margin: 0 0 var(--space-16); font-size: clamp(1.6rem, 3.5vw, 2.15rem); letter-spacing: -0.02em; max-width: 22ch; } .page-hero .lead { margin: 0; color: var(--color-muted); max-width: 42rem; font-size: 1.0625rem; } .lead-art { margin-top: var(--space-24); border-radius: var(--radius-md); overflow: hidden; min-height: 160px; border: 1px solid var(--color-border); } .lead-art svg { width: 100%; height: 180px; display: block; } .content { max-width: var(--max); margin: 0 auto; padding: 0 var(--space-16) var(--space-64); } .content-grid { display: grid; gap: var(--space-40); } .prose { background-color: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-micro); padding: var(--space-40) var(--space-24); min-width: 0; } .prose h2 { margin: var(--space-40) 0 var(--space-16); font-size: 1.25rem; } .prose h2:first-child { margin-top: 0; } .prose h3 { margin: var(--space-24) 0 var(--space-8); font-size: 1.05rem; } .prose p { margin: 0 0 var(--space-16); color: var(--color-text); } .prose ul, .prose ol { margin: 0 0 var(--space-16); padding-left: var(--space-24); color: var(--color-text); } .prose li { margin-bottom: var(--space-8); } .prose li:last-child { margin-bottom: 0; } .callout { background-color: var(--color-bg); border-left: 4px solid var(--color-accent); border-radius: 0 var(--radius-md) var(--radius-md) 0; padding: var(--space-24); margin: var(--space-24) 0; } .callout p { margin: 0; color: var(--color-muted); } .aside-card { background-color: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--space-24); box-shadow: var(--shadow-micro); height: fit-content; } .aside-card h2 { margin: 0 0 var(--space-16); font-size: 1.05rem; } .aside-card ul { margin: 0; padding: 0; list-style: none; display: grid; gap: var(--space-12); } .aside-card a { text-decoration: none; font-weight: 600; color: var(--color-text); display: block; padding: var(--space-12); border-radius: var(--radius-sm); background-color: var(--color-bg); } .aside-card a:hover { background-color: var(--color-accent-soft); color: var(--color-accent); } .site-footer { background-color: var(--color-footer); color: var(--color-footer-text); padding: var(--space-64) var(--space-16) var(--space-40); } .footer-inner { max-width: var(--max); margin: 0 auto; display: grid; gap: var(--space-40); } .footer-brand { font-weight: 700; font-size: 1.05rem; margin: 0 0 var(--space-8); color: #fff; } .footer-meta, .footer-independence { margin: 0; color: var(--color-footer-muted); font-size: 0.9rem; max-width: 36rem; } .footer-meta + .footer-meta { margin-top: var(--space-8); } .footer-independence { margin-top: var(--space-16); } .footer-cols { display: grid; gap: var(--space-24); } .footer-cols h2 { margin: 0 0 var(--space-12); font-size: 0.8125rem; letter-spacing: 0.05em; text-transform: uppercase; color: #fff; } .footer-cols ul { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-8); } .footer-cols a { color: var(--color-footer-muted); text-decoration: none; font-size: 0.9375rem; } .footer-cols a:hover { color: #fff; } .footer-cols a:focus-visible { outline-color: #fff; } .footer-bottom { border-top: 1px solid rgba(255, 255, 255, 0.12); padding-top: var(--space-24); color: var(--color-footer-muted); font-size: 0.875rem; } .cookie-banner { position: fixed; left: 0; right: 0; bottom: 0; z-index: 950; padding: var(--space-16); pointer-events: none; } .cookie-banner[hidden] { display: none; } .cookie-inner { pointer-events: auto; max-width: var(--max); margin: 0 auto; background-color: var(--color-footer); color: var(--color-footer-text); border-radius: var(--radius-lg); box-shadow: var(--shadow-soft); padding: var(--space-24); display: grid; gap: var(--space-16); } .cookie-inner p { margin: 0; font-size: 0.9375rem; color: var(--color-footer-muted); } .cookie-inner a { color: #fff; } .cookie-inner a:focus-visible { outline-color: #fff; } .cookie-actions { display: flex; flex-direction: column; gap: var(--space-8); } .cookie-actions button { appearance: none; border: 1px solid rgba(255, 255, 255, 0.2); background-color: transparent; color: #fff; font-family: inherit; font-weight: 650; font-size: 0.875rem; padding: var(--space-12) var(--space-16); border-radius: 999px; cursor: pointer; width: 100%; } .cookie-actions button[data-cookie-choice="accept"] { background-color: var(--color-accent); border-color: var(--color-accent); color: #fff; } .cookie-actions button:hover { background-color: rgba(255, 255, 255, 0.08); } .cookie-actions button[data-cookie-choice="accept"]:hover { background-color: var(--color-accent-hover); } .cookie-prefs { border-top: 1px solid rgba(255, 255, 255, 0.12); padding-top: var(--space-16); display: grid; gap: var(--space-12); } .cookie-prefs[hidden] { display: none; } .cookie-prefs label { display: flex; gap: var(--space-12); align-items: flex-start; font-size: 0.9rem; color: var(--color-footer-muted); } .cookie-prefs input { margin-top: 4px; flex-shrink: 0; } .contact-layout { display: grid; gap: var(--space-24); } .contact-card, .form-card { background-color: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-micro); padding: var(--space-24); min-width: 0; } .contact-card h2, .form-card h2 { margin: 0 0 var(--space-16); font-size: 1.15rem; } .contact-card p { margin: 0 0 var(--space-8); color: var(--color-muted); } .contact-card a { font-weight: 600; } .map-block { margin-top: var(--space-24); border-radius: var(--radius-md); overflow: hidden; border: 1px solid var(--color-border); background-color: var(--color-bg); min-height: 220px; } .map-block svg { width: 100%; height: 240px; display: block; } .form-group { margin-bottom: var(--space-16); } .form-group label { display: block; font-weight: 650; font-size: 0.9rem; margin-bottom: var(--space-8); color: var(--color-text); } .form-group input, .form-group textarea, .form-group select { width: 100%; padding: var(--space-12) var(--space-16); border: 1px solid var(--color-border); border-radius: var(--radius-sm); font: inherit; color: var(--color-text); background-color: var(--color-bg); min-width: 0; } .form-group textarea { min-height: 140px; resize: vertical; } .form-group input.is-invalid, .form-group textarea.is-invalid, .form-group select.is-invalid { border-color: var(--color-error); background-color: #fdf2f2; } .field-error { display: none; color: var(--color-error); font-size: 0.8125rem; font-weight: 600; margin-top: var(--space-8); } .form-group.is-invalid .field-error { display: block; } .form-success { display: none; background-color: var(--color-pastel-b); color: var(--color-text); border-radius: var(--radius-md); padding: var(--space-16); margin-bottom: var(--space-16); font-weight: 600; } .form-success.is-visible { display: block; } .table-wrap { overflow-x: auto; margin: var(--space-16) 0 var(--space-24); border-radius: var(--radius-md); border: 1px solid var(--color-border); } table { width: 100%; border-collapse: collapse; font-size: 0.9rem; min-width: 520px; } th, td { text-align: left; padding: var(--space-12) var(--space-16); border-bottom: 1px solid var(--color-border); vertical-align: top; } th { background-color: var(--color-bg); font-weight: 700; color: var(--color-text); } tr:last-child td { border-bottom: none; } @media (min-width: 480px) { .cookie-actions { flex-direction: row; flex-wrap: wrap; } .cookie-actions button { flex: 1 1 auto; width: auto; } } @media (min-width: 768px) { :root { --header-h: 60px; } .hero-card, .page-hero-inner, .prose { padding: var(--space-40); } .tile-grid { grid-template-columns: 1fr 1fr; } .tile:first-child { grid-column: 1 / -1; min-height: 320px; } .support-card { padding: var(--space-40); } .support-points { grid-template-columns: repeat(3, 1fr); } .footer-cols { grid-template-columns: repeat(2, 1fr); } .footer-inner { grid-template-columns: 1.4fr 1fr; } .contact-layout { grid-template-columns: 1fr 1.2fr; } .content-grid.with-aside { grid-template-columns: 1fr 280px; align-items: start; } .cookie-actions { justify-content: flex-end; } .cookie-actions button { flex: 0 1 auto; min-width: 140px; } .cookie-inner { grid-template-columns: 1fr auto; align-items: center; } .cookie-prefs { grid-column: 1 / -1; } } @media (min-width: 1024px) { .nav-toggle { display: none; } .desktop-nav { display: flex; } .header-cta { display: inline-flex; } .brand { flex-shrink: 0; white-space: nowrap; } .tile-grid { grid-template-columns: repeat(6, 1fr); } .tile:first-child { grid-column: span 3; min-height: 340px; } .tile:nth-child(2) { grid-column: span 3; min-height: 340px; } .tile:nth-child(n+3) { grid-column: span 2; min-height: 300px; } .footer-cols { grid-template-columns: repeat(2, max-content); justify-content: end; gap: var(--space-64); } } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; } } ===ENDFILE=== ===FILE: script.js=== (function () { var storageKey = "cookie_choice"; var prefKey = "cookie_prefs"; function qs(sel, root) { return (root || document).querySelector(sel); } function qsa(sel, root) { return Array.prototype.slice.call((root || document).querySelectorAll(sel)); } function initNav() { var toggle = qs(".nav-toggle"); var overlay = qs(".nav-overlay"); var closeBtn = qs(".nav-overlay-close"); if (!toggle || !overlay) return; function openNav() { overlay.classList.add("is-open"); overlay.setAttribute("aria-hidden", "false"); toggle.setAttribute("aria-expanded", "true"); document.body.classList.add("nav-open"); if (closeBtn) closeBtn.focus(); } function closeNav() { overlay.classList.remove("is-open"); overlay.setAttribute("aria-hidden", "true"); toggle.setAttribute("aria-expanded", "false"); document.body.classList.remove("nav-open"); toggle.focus(); } toggle.addEventListener("click", openNav); if (closeBtn) closeBtn.addEventListener("click", closeNav); overlay.addEventListener("click", function (e) { if (e.target === overlay) closeNav(); }); qsa("a", overlay).forEach(function (link) { link.addEventListener("click", closeNav); }); document.addEventListener("keydown", function (e) { if (e.key === "Escape" && overlay.classList.contains("is-open")) { closeNav(); } }); } function initCookies() { var banner = qs(".cookie-banner"); if (!banner) return; var prefsPanel = qs(".cookie-prefs", banner); var analyticsToggle = qs("#pref-analytics", banner); var functionalToggle = qs("#pref-functional", banner); function hideBanner() { banner.hidden = true; } function showBanner() { banner.hidden = false; } try { if (localStorage.getItem(storageKey)) { hideBanner(); } else { showBanner(); } } catch (err) { showBanner(); } function saveChoice(choice) { try { localStorage.setItem(storageKey, choice); if (choice === "accept") { localStorage.setItem( prefKey, JSON.stringify({ analytics: true, functional: true }) ); } else if (choice === "reject") { localStorage.setItem( prefKey, JSON.stringify({ analytics: false, functional: false }) ); } else if (choice === "save-prefs") { localStorage.setItem( prefKey, JSON.stringify({ analytics: !!(analyticsToggle && analyticsToggle.checked), functional: !!(functionalToggle && functionalToggle.checked) }) ); localStorage.setItem(storageKey, "preferences"); } } catch (err) {} hideBanner(); } qsa("[data-cookie-choice]", banner).forEach(function (btn) { btn.addEventListener("click", function () { var choice = btn.getAttribute("data-cookie-choice"); if (choice === "preferences") { if (prefsPanel) { prefsPanel.hidden = !prefsPanel.hidden; } return; } if (choice === "save-prefs") { saveChoice("save-prefs"); return; } saveChoice(choice); }); }); } function initForm() { var form = qs("#contact-form"); if (!form) return; var success = qs(".form-success", form); function setInvalid(group, invalid) { if (!group) return; var field = qs("input, textarea, select", group); if (invalid) { group.classList.add("is-invalid"); if (field) { field.classList.add("is-invalid"); field.setAttribute("aria-invalid", "true"); } } else { group.classList.remove("is-invalid"); if (field) { field.classList.remove("is-invalid"); field.removeAttribute("aria-invalid"); } } } function validateEmail(value) { return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value); } form.addEventListener("submit", function (e) { e.preventDefault(); var valid = true; var nameGroup = qs('[data-field="name"]', form); var emailGroup = qs('[data-field="email"]', form); var messageGroup = qs('[data-field="message"]', form); var topicGroup = qs('[data-field="topic"]', form); var name = qs("#name", form); var email = qs("#email", form); var message = qs("#message", form); var topic = qs("#topic", form); setInvalid(nameGroup, !(name && name.value.trim().length > 1)); if (!(name && name.value.trim().length > 1)) valid = false; setInvalid(emailGroup, !(email && validateEmail(email.value.trim()))); if (!(email && validateEmail(email.value.trim()))) valid = false; setInvalid(messageGroup, !(message && message.value.trim().length > 10)); if (!(message && message.value.trim().length > 10)) valid = false; setInvalid(topicGroup, !(topic && topic.value)); if (!(topic && topic.value)) valid = false; if (!valid) { var firstInvalid = qs(".form-group.is-invalid input, .form-group.is-invalid textarea, .form-group.is-invalid select", form); if (firstInvalid) firstInvalid.focus(); return; } form.reset(); qsa(".form-group", form).forEach(function (g) { setInvalid(g, false); }); if (success) { success.classList.add("is-visible"); success.focus(); } }); qsa("input, textarea, select", form).forEach(function (field) { field.addEventListener("input", function () { var group = field.closest(".form-group"); setInvalid(group, false); }); }); } initNav(); initCookies(); initForm(); })(); ===ENDFILE=== ===FILE: index.html===