Files
alwisp/www/css/style.css
Claude 04bf20c14e Fix hero card sizing and heading overflow clipping
Previous card attempt used padding: 3rem 3.5rem which overrode the
container's padding-inline and shrank the text area from 652px to 568px,
making the heading clip worse and the card look too narrow to read.

Two fixes:
- max-width: 780px + padding: 3rem 2.5rem gives 730px text area,
  comfortably containing the heading at any viewport size
- heading clamp changed from (2.4rem, 6vw, 4rem) to (2.2rem, 4.5vw, 3.25rem)
  so the max rendered size stays well within the card width

https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
2026-03-01 02:43:48 +00:00

714 lines
20 KiB
CSS
Raw Permalink 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: 780px;
padding: 3rem 2.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: 3rem;
}
.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.2rem, 4.5vw, 3.25rem);
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%; }
}