Files
alwisp/www/css/style.css
Claude c4193eea59 Fix hero text contrast with dark glass card and gradient text color
The hero gradient (navy→blue→teal) used the same colors as the gradient
text (teal→blue), making the heading dissolve into the background.

Two fixes:
- hero__content now has a dark semi-transparent card (rgba 72% opacity)
  with blur backdrop, keeping the animated gradient background visible
  around it while text sits on a dark, readable surface
- --grad-text changed from teal→blue to orange→teal so the gradient
  heading contrasts against the card and visually pops

https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
2026-03-01 02:29:58 +00:00

714 lines
20 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ============================================================
ALWISP Mesh Network Solutions
Brand palette extracted from logo:
--navy: #0d1b3e (darkest bg)
--blue: #1565c0 (primary mid)
--teal: #00bcd4 (accent highlight)
--orange: #f57c00 (mesh node accent)
--white: #ffffff
============================================================ */
/* ── RESET & BASE ──────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
/* Brand */
--navy: #0d1b3e;
--navy-mid: #132145;
--blue: #1565c0;
--blue-light:#1e88e5;
--teal: #00bcd4;
--teal-dark: #00acc1;
--orange: #f57c00;
--orange-lt: #ffb74d;
/* Neutrals */
--white: #ffffff;
--off-white: #f0f4f8;
--gray-100: #e8edf3;
--gray-300: #b0bec5;
--gray-500: #607d8b;
--gray-700: #37474f;
--gray-900: #1a2332;
/* Gradients */
--grad-hero: linear-gradient(135deg, #0d1b3e 0%, #1565c0 60%, #00bcd4 100%);
--grad-text: linear-gradient(90deg, #f57c00, #00bcd4);
--grad-cta: linear-gradient(135deg, #1565c0, #00bcd4);
/* Typography */
--font-body: 'Inter', system-ui, sans-serif;
--font-heading: 'Space Grotesk', system-ui, sans-serif;
/* Layout */
--max-width: 1200px;
--section-py: 5rem;
--nav-h: 70px;
/* Radius */
--r-sm: 6px;
--r-md: 12px;
--r-lg: 20px;
--r-full: 9999px;
/* Shadow */
--shadow-sm: 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.08);
--shadow-md: 0 4px 16px rgba(0,0,0,.18);
--shadow-lg: 0 10px 40px rgba(0,0,0,.28);
/* Transition */
--t-fast: 0.18s ease;
--t-base: 0.28s ease;
}
html { scroll-behavior: smooth; font-size: 16px; }
body {
font-family: var(--font-body);
background: var(--navy);
color: var(--white);
line-height: 1.65;
-webkit-font-smoothing: antialiased;
}
a { color: var(--teal); text-decoration: none; transition: color var(--t-fast); }
a:hover { color: var(--orange-lt); }
img { max-width: 100%; display: block; }
ul { list-style: none; }
/* ── UTILITIES ──────────────────────────────────────────────── */
.container {
width: 100%;
max-width: var(--max-width);
margin-inline: auto;
padding-inline: 1.5rem;
}
.gradient-text {
background: var(--grad-text);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.accent { color: var(--teal); }
.section { padding-block: var(--section-py); }
.section--alt { background: var(--navy-mid); }
.section__header { text-align: center; margin-bottom: 3rem; }
.section__eyebrow {
font-size: .8rem;
font-weight: 600;
letter-spacing: .12em;
text-transform: uppercase;
color: var(--teal);
display: block;
margin-bottom: .5rem;
}
.section__heading {
font-family: var(--font-heading);
font-size: clamp(1.75rem, 3.5vw, 2.75rem);
font-weight: 700;
line-height: 1.2;
color: var(--white);
}
.section__sub {
margin-top: .75rem;
color: var(--gray-300);
font-size: 1.05rem;
max-width: 600px;
margin-inline: auto;
}
.placeholder-block {
background: rgba(255,255,255,.05);
border: 1px dashed rgba(255,255,255,.15);
border-radius: var(--r-md);
padding: 3rem 2rem;
text-align: center;
color: var(--gray-300);
font-size: .95rem;
}
/* ── BUTTONS ────────────────────────────────────────────────── */
.btn {
display: inline-flex;
align-items: center;
gap: .5rem;
padding: .75rem 1.75rem;
border-radius: var(--r-full);
font-family: var(--font-heading);
font-size: .95rem;
font-weight: 600;
cursor: pointer;
border: 2px solid transparent;
transition: all var(--t-base);
white-space: nowrap;
}
.btn--primary {
background: var(--grad-cta);
color: var(--white);
box-shadow: 0 4px 20px rgba(0,188,212,.3);
}
.btn--primary:hover {
color: var(--white);
transform: translateY(-2px);
box-shadow: 0 8px 28px rgba(0,188,212,.45);
}
.btn--ghost {
background: transparent;
border-color: rgba(255,255,255,.35);
color: var(--white);
}
.btn--ghost:hover {
border-color: var(--teal);
color: var(--teal);
background: rgba(0,188,212,.08);
}
/* ── NAV ────────────────────────────────────────────────────── */
.site-header {
position: fixed;
top: 0; left: 0; right: 0;
z-index: 100;
height: var(--nav-h);
background: rgba(13,27,62,.85);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid rgba(255,255,255,.07);
transition: background var(--t-base), box-shadow var(--t-base);
}
.site-header.scrolled {
background: rgba(13,27,62,.97);
box-shadow: var(--shadow-md);
}
.nav {
display: flex;
align-items: center;
justify-content: space-between;
height: 100%;
}
.nav__logo {
display: flex;
align-items: center;
gap: .6rem;
text-decoration: none;
}
.nav__logo-img { height: 38px; width: auto; }
.nav__logo-text {
font-family: var(--font-heading);
font-size: 1.35rem;
font-weight: 700;
color: var(--white);
letter-spacing: .04em;
}
.nav__menu {
display: flex;
align-items: center;
gap: .25rem;
}
.nav__link {
display: block;
padding: .5rem .9rem;
border-radius: var(--r-full);
font-size: .9rem;
font-weight: 500;
color: rgba(255,255,255,.8);
transition: color var(--t-fast), background var(--t-fast);
}
.nav__link:hover { color: var(--white); background: rgba(255,255,255,.08); }
.nav__link--cta {
background: var(--grad-cta);
color: var(--white) !important;
padding: .5rem 1.2rem;
font-weight: 600;
}
.nav__link--cta:hover {
transform: translateY(-1px);
box-shadow: 0 4px 16px rgba(0,188,212,.4);
background: var(--grad-cta);
}
/* Hamburger */
.nav__toggle {
display: none;
flex-direction: column;
gap: 5px;
background: none;
border: none;
cursor: pointer;
padding: .5rem;
}
.nav__toggle-bar {
display: block;
width: 24px;
height: 2px;
background: var(--white);
border-radius: 2px;
transition: transform var(--t-base), opacity var(--t-base);
}
/* ── HERO ───────────────────────────────────────────────────── */
.hero {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
overflow: hidden;
padding-top: var(--nav-h);
background: var(--grad-hero);
}
.hero__mesh-bg {
position: absolute;
inset: 0;
background-image:
radial-gradient(circle at 20% 50%, rgba(0,188,212,.12) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(21,101,192,.18) 0%, transparent 45%),
radial-gradient(circle at 60% 80%, rgba(245,124,0,.07) 0%, transparent 40%);
/* Mesh dot pattern */
background-image:
radial-gradient(circle at 20% 50%, rgba(0,188,212,.12) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(21,101,192,.18) 0%, transparent 45%),
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='60'%3E%3Ccircle cx='30' cy='30' r='1' fill='rgba(255,255,255,0.06)'/%3E%3C/svg%3E");
background-repeat: no-repeat, no-repeat, repeat;
animation: meshPulse 8s ease-in-out infinite alternate;
}
@keyframes meshPulse {
from { opacity: .7; }
to { opacity: 1; }
}
.hero__content {
position: relative;
z-index: 1;
max-width: 680px;
padding: 3rem 3.5rem;
background: rgba(8, 14, 38, 0.72);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255,255,255,.1);
border-radius: var(--r-lg);
margin-block: 4rem;
}
.hero__eyebrow {
font-size: .8rem;
font-weight: 600;
letter-spacing: .15em;
text-transform: uppercase;
color: var(--teal);
margin-bottom: 1rem;
}
.hero__heading {
font-family: var(--font-heading);
font-size: clamp(2.4rem, 6vw, 4rem);
font-weight: 700;
line-height: 1.1;
margin-bottom: 1.25rem;
}
.hero__sub {
font-size: clamp(1rem, 2vw, 1.2rem);
color: rgba(255,255,255,.78);
max-width: 560px;
margin-bottom: 2rem;
}
.hero__actions {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.hero__scroll-hint {
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
display: flex;
flex-direction: column;
align-items: center;
gap: .4rem;
}
.hero__scroll-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--teal);
animation: scrollBounce 1.8s ease-in-out infinite;
opacity: .6;
}
@keyframes scrollBounce {
0%, 100% { transform: translateY(0); opacity: .6; }
50% { transform: translateY(8px); opacity: 1; }
}
/* ── STATS BAR ──────────────────────────────────────────────── */
.stats-bar {
background: rgba(255,255,255,.04);
border-top: 1px solid rgba(255,255,255,.07);
border-bottom: 1px solid rgba(255,255,255,.07);
padding-block: 2.5rem;
}
.stats-bar__grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1rem;
text-align: center;
}
.stat__value {
font-family: var(--font-heading);
font-size: 2.5rem;
font-weight: 700;
color: var(--teal);
}
.stat__unit {
font-family: var(--font-heading);
font-size: 1.2rem;
font-weight: 600;
color: var(--teal);
}
.stat__label {
display: block;
font-size: .82rem;
color: var(--gray-300);
text-transform: uppercase;
letter-spacing: .08em;
margin-top: .25rem;
}
/* ── CARDS ──────────────────────────────────────────────────── */
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 1.5rem;
}
.card {
background: rgba(255,255,255,.04);
border: 1px solid rgba(255,255,255,.08);
border-radius: var(--r-lg);
padding: 2rem 1.75rem;
transition: transform var(--t-base), box-shadow var(--t-base), border-color var(--t-base);
}
.card--hover:hover {
transform: translateY(-5px);
box-shadow: 0 16px 40px rgba(0,0,0,.35);
border-color: rgba(0,188,212,.3);
}
.card__icon {
width: 48px;
height: 48px;
margin-bottom: 1.25rem;
color: var(--teal);
}
.card__icon svg { width: 100%; height: 100%; }
.card__title {
font-family: var(--font-heading);
font-size: 1.1rem;
font-weight: 600;
margin-bottom: .6rem;
}
.card__body {
color: var(--gray-300);
font-size: .93rem;
line-height: 1.6;
margin-bottom: 1.25rem;
}
.card__link {
font-weight: 600;
font-size: .88rem;
color: var(--teal);
letter-spacing: .03em;
}
.card__link:hover { color: var(--orange-lt); }
/* ── WHY ALWISP ─────────────────────────────────────────────── */
.why__grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.why__text .section__heading { text-align: left; }
.why__text p {
color: var(--gray-300);
margin-block: 1rem 1.5rem;
max-width: 480px;
}
.why__list {
display: flex;
flex-direction: column;
gap: .6rem;
}
.why__list li {
display: flex;
align-items: center;
gap: .75rem;
font-size: .95rem;
color: rgba(255,255,255,.85);
}
.why__check {
color: var(--teal);
font-weight: 700;
font-size: 1rem;
flex-shrink: 0;
}
/* Mesh SVG diagram */
.why__visual { display: flex; justify-content: center; }
.mesh-diagram { width: 100%; max-width: 380px; }
.mesh-svg { width: 100%; height: auto; }
.mesh-node {
filter: drop-shadow(0 0 6px currentColor);
}
.mesh-node--tower {
filter: drop-shadow(0 0 10px rgba(245,124,0,.8));
animation: nodePulse 2.5s ease-in-out infinite;
}
@keyframes nodePulse {
0%, 100% { r: 12; opacity: .9; }
50% { r: 14; opacity: 1; }
}
/* ── CTA BAND ───────────────────────────────────────────────── */
.cta-band {
background: linear-gradient(135deg, rgba(21,101,192,.25), rgba(0,188,212,.15));
border-top: 1px solid rgba(0,188,212,.2);
border-bottom: 1px solid rgba(0,188,212,.2);
}
.cta-band__content { text-align: center; }
.cta-band__heading {
font-family: var(--font-heading);
font-size: clamp(1.5rem, 3vw, 2.2rem);
font-weight: 700;
margin-bottom: .6rem;
}
.cta-band__sub { color: var(--gray-300); margin-bottom: 1.75rem; }
.cta-band__form {
display: flex;
gap: .75rem;
justify-content: center;
flex-wrap: wrap;
max-width: 560px;
margin-inline: auto;
}
.cta-band__input {
flex: 1;
min-width: 240px;
padding: .75rem 1.25rem;
border-radius: var(--r-full);
border: 1px solid rgba(255,255,255,.2);
background: rgba(255,255,255,.07);
color: var(--white);
font-size: .95rem;
outline: none;
transition: border-color var(--t-fast), background var(--t-fast);
}
.cta-band__input::placeholder { color: var(--gray-300); }
.cta-band__input:focus {
border-color: var(--teal);
background: rgba(255,255,255,.12);
}
/* ── PAGE HERO ──────────────────────────────────────────────── */
.page-hero {
padding-top: calc(var(--nav-h) + 3rem);
padding-bottom: 3rem;
background: linear-gradient(135deg, #0d1b3e 0%, #132145 100%);
border-bottom: 1px solid rgba(255,255,255,.06);
text-align: center;
}
/* ── CONTACT ────────────────────────────────────────────────── */
.contact__grid {
display: grid;
grid-template-columns: 280px 1fr;
gap: 4rem;
align-items: start;
}
.contact__heading {
font-family: var(--font-heading);
font-size: 1.4rem;
font-weight: 700;
margin-bottom: 1.25rem;
}
.contact__details {
display: flex;
flex-direction: column;
gap: 1rem;
color: var(--gray-300);
font-size: .95rem;
line-height: 1.7;
}
.contact__details a { color: var(--teal); }
/* ── FORM ───────────────────────────────────────────────────── */
.form { display: flex; flex-direction: column; gap: 1.25rem; }
.form__row { display: flex; gap: 1rem; }
.form__row--2 > * { flex: 1; }
.form__group { display: flex; flex-direction: column; gap: .4rem; }
.form__label {
font-size: .85rem;
font-weight: 500;
color: var(--gray-300);
}
.form__label span { color: var(--teal); }
.form__input {
padding: .7rem 1rem;
border-radius: var(--r-sm);
border: 1px solid rgba(255,255,255,.15);
background: rgba(255,255,255,.06);
color: var(--white);
font-size: .95rem;
font-family: var(--font-body);
outline: none;
transition: border-color var(--t-fast);
}
.form__input:focus { border-color: var(--teal); background: rgba(255,255,255,.1); }
.form__textarea { resize: vertical; min-height: 130px; }
select.form__input option { background: var(--navy); }
/* ── ALERTS ─────────────────────────────────────────────────── */
.alert {
padding: 1rem 1.25rem;
border-radius: var(--r-sm);
font-size: .93rem;
margin-bottom: 1.25rem;
}
.alert--success { background: rgba(0,188,212,.15); border: 1px solid rgba(0,188,212,.4); color: #b2ebf2; }
.alert--error { background: rgba(229,57,53,.15); border: 1px solid rgba(229,57,53,.4); color: #ffcdd2; }
.alert ul { list-style: disc; padding-left: 1.25rem; }
/* ── FOOTER ─────────────────────────────────────────────────── */
.site-footer {
background: #080f1f;
border-top: 1px solid rgba(255,255,255,.07);
padding-top: 3.5rem;
}
.footer__grid {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr 1.2fr;
gap: 2.5rem;
padding-bottom: 3rem;
}
.footer__tagline {
color: var(--gray-300);
font-size: .9rem;
line-height: 1.7;
margin-top: .75rem;
}
.footer__heading {
font-family: var(--font-heading);
font-size: .8rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: .1em;
color: var(--teal);
margin-bottom: 1rem;
}
.footer__links ul { display: flex; flex-direction: column; gap: .5rem; }
.footer__links a {
color: var(--gray-300);
font-size: .9rem;
}
.footer__links a:hover { color: var(--white); }
.footer__contact p {
color: var(--gray-300);
font-size: .9rem;
margin-bottom: .5rem;
}
.footer__contact a { color: var(--gray-300); }
.footer__contact a:hover { color: var(--teal); }
.footer__social {
display: flex;
gap: .5rem;
margin-top: 1rem;
}
.footer__social-link {
display: inline-flex;
align-items: center;
justify-content: center;
width: 34px;
height: 34px;
border-radius: var(--r-sm);
background: rgba(255,255,255,.07);
font-size: .72rem;
font-weight: 700;
color: var(--gray-300);
transition: background var(--t-fast), color var(--t-fast);
}
.footer__social-link:hover { background: var(--teal); color: var(--white); }
.footer__bottom {
padding-block: 1.25rem;
border-top: 1px solid rgba(255,255,255,.06);
text-align: center;
color: var(--gray-500);
font-size: .82rem;
}
/* ── RESPONSIVE ─────────────────────────────────────────────── */
@media (max-width: 1024px) {
.why__grid { grid-template-columns: 1fr; gap: 2.5rem; }
.why__visual { display: none; }
.footer__grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 768px) {
:root { --section-py: 3.5rem; }
/* Mobile nav */
.nav__toggle { display: flex; }
.nav__menu {
position: fixed;
top: var(--nav-h);
left: 0; right: 0;
background: rgba(13,27,62,.98);
flex-direction: column;
align-items: stretch;
padding: 1rem 1.5rem 2rem;
gap: .25rem;
border-bottom: 1px solid rgba(255,255,255,.1);
transform: translateY(-110%);
opacity: 0;
transition: transform var(--t-base), opacity var(--t-base);
pointer-events: none;
}
.nav__menu.is-open {
transform: translateY(0);
opacity: 1;
pointer-events: auto;
}
.nav__link { padding: .75rem 1rem; border-radius: var(--r-sm); }
.nav__link--cta { text-align: center; margin-top: .5rem; }
.stats-bar__grid { grid-template-columns: repeat(2, 1fr); gap: 1.5rem; }
.contact__grid { grid-template-columns: 1fr; gap: 2rem; }
.form__row--2 { flex-direction: column; }
.footer__grid { grid-template-columns: 1fr; gap: 2rem; }
}
@media (max-width: 480px) {
.hero__actions { flex-direction: column; }
.hero__actions .btn { text-align: center; justify-content: center; }
.stats-bar__grid { grid-template-columns: 1fr 1fr; }
.cta-band__form { flex-direction: column; }
.cta-band__input { min-width: 100%; }
}