biohazard-web-old/css/styles.css
2025-10-02 16:01:12 -06:00

935 lines
21 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.

/* ───────── css/styles.css ───────── */
:root{
--gutter-x: 24px; /* (adjusts margins) */
--vh:1vh;
/* Safety net for JS-less browsers */
--header-h: 64px;
font-family:'Roboto Condensed',sans-serif;
color-scheme:dark;
--acid:#ffffff;
--slate:#000000;
--graphite:#0e0e0e;
--hot:#ffffff;
--ghost:#777;
/* ====== THEME ====== */
--accent:#dbdbdb; /* neon-cyan accent */
--glass:rgba(14,14,14,.55);/* translucent card surface */
--blur:12px; /* backdrop blur strength */
}
*{box-sizing:border-box;margin:0;padding:0}
@media (max-width: 767px){
:root{ --gutter-x: 12px; } /* tighter on phones */
}
@font-face{
font-family:"BiohazardHead";
src:url("../fonts/BebasNeue-Regular.woff2") format("woff2"),
url("../fonts/BebasNeue-Regular.woff") format("woff");
font-weight:400; font-style:normal;
}
@font-face{
font-family:"Machina";
src:url("../fonts/Bebas_Neue/BebasNeue-Regular.ttf") format("opentype");
font-weight:700;
}
@font-face{
font-family:"ArchiveCond";
src:url("..//fonts/JetBrainsMono-2.304/fonts/webfonts/JetBrainsMono-Bold.woff2") format("woff2");
font-weight:500;
}
@font-face{
font-family:"SpaceMono";
src:url("../fonts/Space_Mono/SpaceMono-Regular.ttf") format("opentype");
font-weight:400;
}
body{
background:var(--slate);color:var(--acid);
padding-top: calc(var(--header-h) + 2vh);
}
/* Add horizontal padding only to main content blocks, not header */
.content-block, .section, main.grid {
padding-left: var(--gutter-x);
padding-right: var(--gutter-x);
}
a{text-decoration:none;color:inherit}
img{max-width:100%;display:block}
/* Fix 100 vh on mobile */
@media(max-width:767px){
body,html{height:calc(var(--vh)*100)}
}
header.nav{
position:fixed;top:0;left:0;width:100vw;/* Ensure full viewport width */
z-index:100;
display:flex;flex-direction:column;align-items:center;
background:linear-gradient(to bottom, rgba(11,11,12,0.6) 0%, rgba(11,11,12,0) 100%);
text-shadow:0 0 4px var(--acid);
mix-blend-mode:normal;
font-size:clamp(14px,1.1vw,20px);
margin:0;
box-sizing:border-box;
padding: 8px 0;
}
header.nav nav{
display:flex; gap:24px;
font-family:'ArchiveCond',sans-serif;
}
header.nav .logo{
font-family:"Machina",sans-serif;
font-weight:700; /* bold blocky */
font-size:clamp(40.5px,5.6vw,72px); /* 1.125× larger */
color:var(--acid);
transform:scale(.95);
transition:transform .3s, filter .1s;
letter-spacing:.07em;
text-transform:uppercase;
margin-bottom:2px;
position:relative; /* for underline */
}
header.nav .logo:hover{
transform:scale(1);
}
/* Fancy underline animation for logo */
header.nav .logo::after{
content:"";
position:absolute;left:0;right:0;bottom:0;
height:3px;
background:var(--accent);
transform:scaleX(0);
transform-origin:center center;
transition:transform .25s;
}
header.nav .logo:hover::after{
transform:scaleX(1);
}
header.social{
display:flex; gap:24px;
font-family:'ArchiveCond',sans-serif;
text-shadow:0 0 2px var(--acid);
top:0; left:0; width:100%;
z-index:100; padding:8px 0 0;
display:flex; flex-direction:column; /* stack logo + nav */
align-items:center; /* center horizontally */
mix-blend-mode:normal;
font-size:clamp(14px,1.1vw,20px);
}
footer{
text-align:center;
padding:3rem 1rem;
font-size:.95rem;
opacity:.7;
font-family:"SpaceMono",monospace;
}
#contact {
font-family:"SpaceMono",monospace;
max-width:1300px;
margin:0 auto;
padding:9vh var(--gutter-x) 4vh;
line-height:1.4;
color:var(--acid);
text-shadow:0 0 2px var(--acid);
border-bottom:1px solid var(--graphite);
}
#contact form{
font-family:"SpaceMono",monospace;
max-width:520px;
margin:0 auto;
display:flex;flex-direction:column;gap:1.5rem;
color:var(--acid);
background:var(--glass);
border:1px solid rgba(255,255,255,.06);
box-shadow:0 4px 18px rgba(0,0,0,.4);
backdrop-filter:blur(var(--blur));
-webkit-backdrop-filter:blur(var(--blur));
padding:2rem 1.5rem 1.5rem;
border-radius:10px;
}
#contact label{
font-family:"ArchiveCond",sans-serif;
margin-bottom:.4rem;
font-weight:500;
font-size:1rem;
text-align:left;
color:var(--accent);
letter-spacing:.04em;
text-transform:uppercase;
}
#contact input,
#contact textarea{
font-family:"SpaceMono",monospace;
padding:.75rem 1rem;
margin-bottom:.5rem;
border:1px solid rgba(255,255,255,.12);
background:rgba(0,0,0,.35);
color:var(--acid);
border-radius:4px;
font-size:1rem;
transition:border-color .2s, box-shadow .2s;
resize:vertical;
}
#contact input:focus,
#contact textarea:focus{
border-color:var(--accent);
box-shadow:0 0 6px var(--accent);
outline:none;
}
#contact input[type="submit"]{
font-family:"ArchiveCond",sans-serif;
cursor:pointer;
background:var(--accent);
color:var(--slate);
font-weight:700;
text-transform:uppercase;
letter-spacing:.07em;
border:none;
border-radius:4px;
padding:.85rem 1.5rem;
transition:background .2s,color .2s,box-shadow .2s;
margin-top:.5rem;
}
#contact input[type="submit"]:hover{
background:var(--acid);
color:var(--graphite);
box-shadow:0 2px 12px rgba(0,0,0,.25);
}
#contact button[type="submit"]{
font-family:"ArchiveCond",sans-serif;
cursor:pointer;
background:var(--accent);
color:var(--slate);
font-weight:700;
text-transform:uppercase;
letter-spacing:.07em;
border:none;
border-radius:4px;
padding:.85rem 1.5rem;
transition:background .2s,color .2s,box-shadow .2s;
margin-top:.5rem;
}
#contact button[type="submit"]:hover{
background:var(--acid);
color:var(--graphite);
box-shadow:0 2px 12px rgba(0,0,0,.25);
}
header.nav a{
transition:opacity .3s
}
header.nav a:hover{
opacity:.8
}
/* underline kicker */
header.nav nav a::after{
content:"";
display:block;
height:2px;
background:var(--accent);
transform:scaleX(0);transition:transform .25s;
}
header.nav nav a:hover::after{transform:scaleX(1);}
@media(max-width:767px){
header.nav{top:8px;justify-content:space-between;padding:0 var(--gutter);font-size:12px}
header.nav .logo{margin:0;font-weight:bold}
header.nav nav{gap:16px}
}
/* GRID */
.grid{
--cols:4;
display:grid;
grid-template-columns:repeat(var(--cols),1fr);
gap:24px;
padding-top: calc(var(--header-h)*.5 + 2vh);
counter-reset: item; /* Reset Project counter */
}
@media(max-width:1024px){.grid{--cols:3}}
@media(max-width:767px){.grid{--cols:2;gap:12px;padding:calc(var(--vh)*5) var(--gutter)}}
.item:not(.hidden) h2::before{ /* only real cards */
counter-increment:item;
}
.item{
position:relative;
counter-increment:item;
overflow:hidden;cursor:pointer;
opacity:0;transform:translateY(40px);
transition:opacity .6s,transform .6s;
}
.item.loaded{opacity:1;transform:none}
/* Item Spans */
.item[data-span="banner"] { grid-column: span 3; }
.item[data-span="portrait-xl"]{ grid-row: span 3; }
.item[data-span="wide"] { grid-column: span 2; }
.item[data-span="tall"] { grid-row: span 2; }
.item[data-span="big"] { grid-column: span 2; grid-row: span 2; }
@media(max-width:767px){
.item[data-span="wide"],
.item[data-span="tall"],
.item[data-span="big"]{ grid-column: span 2; grid-row: span 1; }
}
small,code,.mono{font-family:"SpaceMono",monospace}
.item h2{
font-family:"ArchiveCond",sans-serif;
letter-spacing:.04em;
font-size:clamp(12px,.9vw,18px);
text-transform:uppercase;
margin-bottom:8px;
line-height:1.1;
display:inline-block; /* so the counter sits inline */
position:relative;
transition:opacity .5s; /* Only opacity transitions */
}
.item h2::before{
counter-increment:item;
content: counter(item,decimal-leading-zero) " ";
font-family:'Roboto Mono',monospace;
margin-right:.75em;
}
/* Underline kicker for item h2, styled like nav */
.item h2::after {
content: "";
display: block;
height: 2px;
background: var(--accent);
transform: scaleX(0);
transition: transform .25s;
margin-top: 3px;
}
.item:hover h2::after {
transform: scaleX(1);
}
.thumb{
background-size:cover;background-position:center;
padding-bottom:62.5%;
transition:opacity .5s,transform .5s
}
.item:hover .thumb {
opacity:.8;
transform:scale(1.04);
}
.item:hover h2{
opacity:.8;
}
.content-block{
max-width:800px;
margin:0 auto;
padding:20vh var(--gutter);
font-family:'Roboto Mono',monospace;
line-height:1.5;
}
#about{
font-family:"ArchiveCond",sans-serif;
max-width:1300px;
margin:0 auto;
padding:4vh var(--gutter-x) 1vh;
line-height:1.2;
color:var(--acid);
text-shadow:0 0 2px var(--acid);
border-bottom:1px solid var(--graphite);
}
#crew{
font-family:"ArchiveCond",sans-serif;
max-width:1300px;
margin:0 auto;
padding:4vh var(--gutter-x) 4vh;
line-height:1.2;
color:var(--acid);
text-shadow:0 0 2px var(--acid);
border-bottom:1px solid var(--graphite);
}
/* PIPELINE SECTION */
.section h2{
font-family:"ArchiveCond",sans-serif;
font-size:clamp(1.1rem,1.5vw + .5rem,2rem);
text-transform:uppercase;
letter-spacing:.05em;
color:var(--accent);
margin:0 0 2.2rem;
position:relative;
}
.section h2::after{
content:"";
position:absolute;left:0;bottom:-6px;
width:40px;height:2px;
background:var(--accent);
}
#pipeline{
font-family:"ArchiveCond",sans-serif;
padding:4vh var(--gutter-x) 1vh;
line-height:1.2;
}
.pipeline-steps{
gap:var(--gutter-x);
}
.pipeline-step{
border-radius:10px;
}
.pipeline-step {
background: var(--glass);
color: var(--acid);
border-radius: 8px;
box-shadow: 0 4px 18px rgba(0,0,0,.4);
padding: 2rem 1.5rem 1.5rem;
min-width: 220px;
max-width: 320px;
flex: 1 1 220px;
display: flex;
flex-direction: column;
align-items: center;
opacity: 0.97;
transition: transform .25s, box-shadow .25s, opacity .25s;
text-align: center;
}
.pipeline-step:hover {
transform: translateY(-4px) scale(1.028);
box-shadow: 0 10px 32px rgba(0,0,0,.55);
opacity: 1;
}
.pipeline-step h3 {
font-family: "ArchiveCond", sans-serif;
font-size: 1.05rem;
text-transform: uppercase;
letter-spacing: 0.04em;
margin-bottom: 0.5rem;
margin-top: 0;
color: var(--hot);
text-shadow: 0 0 2px var(--acid);
font-weight: 500;
}
.pipeline-step p,
.pipeline-step small {
font-family: "SpaceMono", monospace;
font-size: 0.92rem;
color: var(--acid);
opacity: 0.85;
margin: 0;
line-height: 1.4;
}
@media (max-width: 1024px) {
.pipeline-steps {
gap: 1.2rem;
}
.pipeline-step {
padding: 1.2rem 0.7rem 1rem;
min-width: 160px;
max-width: 240px;
}
}
@media (max-width: 767px) {
#pipeline {
padding: 6vh var(--gutter-x) 2vh;
}
.pipeline-steps {
gap: 0.7rem;
flex-direction: column;
align-items: center;
}
.pipeline-step {
min-width: 0;
max-width: 320px;
width: 100%;
margin: 0 auto;
padding: 1rem 0.5rem 1rem;
}
}
/* TEAM SECTION */
#team {
font-family:"ArchiveCond",sans-serif;
max-width: 1300px;
margin: 0 auto;
padding: 4vh var(--gutter-x) 2.5vh; /* ↓ tighter bottom gap */
line-height: 1.2;
color: var(--acid);
text-shadow: 0 0 2px var(--acid);
border-bottom: 1px solid var(--graphite);
}
.team-container {
display: flex;
gap: var(--gutter-x);
margin: 3rem 0; /* slightly more spacing between heading and founder images */
padding: 0;
justify-content: center;
flex-wrap: wrap;
}
.portrait {
width: clamp(200px, 22vw, 300px);
padding: 0 0 1.25rem;
overflow: hidden; /* allow image to bleed */
background:var(--glass);
color: var(--acid);
border-radius: 10px;
/* glass-card behaviour */
/* duplicate here to avoid extra class */
border:1px solid rgba(255,255,255,.06);
box-shadow:0 4px 18px rgba(0,0,0,.35);
backdrop-filter:blur(var(--blur));
-webkit-backdrop-filter:blur(var(--blur));
transition:transform .25s, box-shadow .25s, opacity .25s;
text-decoration: none;
display: flex;
flex-direction: column;
align-items: center;
opacity: 0.96;
}
.portrait:hover {
transform:translateY(-4px) scale(1.03);
box-shadow:0 10px 32px rgba(0,0,0,.55);
opacity: 1;
}
.portrait img {
width: 100%;
height: auto;
border-radius: 0;
object-fit: cover;
margin: 0;
box-shadow: 0 2px 8px rgba(0,0,0,0.18);
background: var(--slate);
display: block;
}
.portrait h3 {
font-family: "ArchiveCond", sans-serif;
font-size: 1.3rem;
text-transform: uppercase;
letter-spacing: 0.04em;
margin-bottom: 0.25rem;
margin-top: 0;
color: var(--hot);
text-shadow: 0 0 2px var(--acid);
font-weight: 500;
text-align: center;
}
.portrait p {
font-family:"ArchiveCond",sans-serif;
font-size: 1rem;
color: var(--acid);
opacity: 0.85;
text-align: center;
margin: 0;
line-height: 1.4;
}
@media (max-width: 1024px) {
.team-container {
gap: 1.5rem;
}
.portrait {
width: 180px;
padding: 1rem 0.5rem 1rem;
}
.portrait img {
width: 120px;
height: 120px;
}
}
@media (max-width: 767px) {
#team {
padding: 6vh var(--gutter-x) 2vh;
}
.team-container {
gap: 1rem;
}
.portrait {
width: 100%;
max-width: 320px;
margin: 0 auto;
padding: 1rem 0.5rem 1rem;
}
.portrait img {
width: 100px;
height: 100px;
}
}
header.social social a {
position: relative;
display: inline-block;
transition: opacity .3s;
}
header.social social a::after {
content: "";
display: block;
height: 2px;
background: var(--acid);
transform: scaleX(0);
transition: transform 0.25s cubic-bezier(.4,0,.2,1);
margin-top: 2px;
}
header.social social a:hover::after {
transform: scaleX(1);
}
/* -------- GLOBAL GLASS CARD -------- */
.glass-card{
background:var(--glass);
border:1px solid rgba(255,255,255,.06);
box-shadow:0 4px 18px rgba(0,0,0,.4);
backdrop-filter:blur(var(--blur));
-webkit-backdrop-filter:blur(var(--blur));
transition:transform .25s, box-shadow .25s, opacity .25s;
}
.glass-card:hover{
transform:translateY(-4px) scale(1.025);
box-shadow:0 10px 32px rgba(0,0,0,.55);
}
/* -------- SECTION HEADING -------- */
.content-block h2{
font-family:"ArchiveCond",sans-serif;
font-size:clamp(1.1rem,1.5vw + .5rem,2rem);
text-transform:uppercase;
letter-spacing:.05em;
color:var(--accent);
margin:0 0 2.2rem;
position:relative;
}
.content-block h2::after{
content:"";
position:absolute;left:0;bottom:-6px;
width:40px;height:2px;
background:var(--accent);
}
/* ===== NAV accent underline ===== */
header.nav nav a::after{
background:var(--accent);
}
/* ===== GRID card underline ===== */
.item h2::after {
background: var(--accent);
}
/* ===== PORTRAITS ===== */
.portrait {
width: clamp(200px, 22vw, 300px);
padding: 0 0 1.25rem;
overflow: hidden; /* allow image to bleed */
background:var(--glass);
color: var(--acid);
border-radius: 10px;
/* glass-card behaviour */
/* duplicate here to avoid extra class */
border:1px solid rgba(255,255,255,.06);
box-shadow:0 4px 18px rgba(0,0,0,.35);
backdrop-filter:blur(var(--blur));
-webkit-backdrop-filter:blur(var(--blur));
transition:transform .25s, box-shadow .25s, opacity .25s;
text-decoration: none;
display: flex;
flex-direction: column;
align-items: center;
opacity: 0.96;
}
.portrait:hover {
transform:translateY(-4px) scale(1.03);
box-shadow:0 10px 32px rgba(0,0,0,.55);
opacity: 1;
}
.portrait img {
width: 100%;
height: auto;
border-radius: 0;
object-fit: cover;
margin: 0;
box-shadow: 0 2px 8px rgba(0,0,0,0.18);
background: var(--slate);
display: block;
}
.portrait h3 {
font-family: "ArchiveCond", sans-serif;
font-size: 1.3rem;
text-transform: uppercase;
letter-spacing: 0.04em;
margin-bottom: 0.25rem;
margin-top: 0;
color: var(--hot);
text-shadow: 0 0 2px var(--acid);
font-weight: 500;
text-align: center;
}
.portrait p {
font-family:"ArchiveCond",sans-serif;
font-size: 1rem;
color: var(--acid);
opacity: 0.85;
text-align: center;
margin: 0;
line-height: 1.4;
}
@media (max-width: 1024px) {
.team-container {
gap: 1.5rem;
}
.portrait {
width: 180px;
padding: 1rem 0.5rem 1rem;
}
.portrait img {
width: 120px;
height: 120px;
}
}
@media (max-width: 767px) {
#team {
padding: 6vh var(--gutter-x) 2vh;
}
.team-container {
gap: 1rem;
}
.portrait {
width: 100%;
max-width: 320px;
margin: 0 auto;
padding: 1rem 0.5rem 1rem;
}
.portrait img {
width: 100px;
height: 100px;
}
}
header.social social a {
position: relative;
display: inline-block;
transition: opacity .3s;
}
header.social social a::after {
content: "";
display: block;
height: 2px;
background: var(--acid);
transform: scaleX(0);
transition: transform 0.25s cubic-bezier(.4,0,.2,1);
margin-top: 2px;
}
header.social social a:hover::after {
transform: scaleX(1);
}
/* ===== PIPELINE, FAQ, PROJECT GLASS ===== */
.faq-list details,
.project-section{
background:var(--glass);
border:1px solid rgba(255,255,255,.06);
box-shadow:0 4px 18px rgba(0,0,0,.38);
backdrop-filter:blur(var(--blur));
-webkit-backdrop-filter:blur(var(--blur));
}
/* Contact info */
.contact-info{
margin:2em 0 4vh;text-align:center;font-size:1rem;opacity:.7;
font-family:"SpaceMono",monospace;
}
.contact-info a{color:var(--accent);}
/* === BACK TO TOP BUTTON === */
.back-to-top {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 50px;
height: 50px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
z-index: 1000;
opacity: 0;
pointer-events: none;
transform: translateY(20px);
transition: opacity .3s, transform .3s, background .3s;
/* Glass card style */
background: var(--glass);
border: 1px solid rgba(255,255,255,.06);
backdrop-filter: blur(var(--blur));
-webkit-backdrop-filter: blur(var(--blur));
}
.back-to-top.visible {
opacity: .8;
pointer-events: auto;
transform: translateY(0);
}
.back-to-top:hover {
opacity: 1;
background: var(--accent);
}
.back-to-top svg {
width: 24px;
height: 24px;
stroke: var(--accent);
transition: stroke .3s;
}
.back-to-top:hover svg {
stroke: var(--slate);
}
/* === PAGE LOADER === */
#loader-overlay{
position:fixed;inset:0;
background:rgba(0,0,0,.85);
backdrop-filter:blur(6px);
display:flex;align-items:center;justify-content:center;
z-index:9999;
transition:opacity .6s;
}
#loader-overlay.hide{opacity:0;pointer-events:none;}
.spinner{
width:72px;height:72px;
border:6px solid rgba(255,255,255,.15);
border-top-color:var(--accent);
border-radius:50%;
animation:spin 1s linear infinite;
}
@keyframes spin{to{transform:rotate(360deg);}}
/* ===== HERO PARALLAX REFINEMENT ===== */
.hero{
position:relative;
height:100vh;
margin-top:-15vh; /* Remove negative margin to bring video to top */
overflow:hidden;
z-index:1;
}
/* Video as moveable box that behaves as background */
.hero video{
position:absolute;
top:0;
left:0;
width:100%;
height:120vh;
object-fit:cover;
z-index:-2;
pointer-events:none;
transform:translateY(-100vh);
transition:transform 0.1s ease-out;
}
/* Gradient overlay - separate from video, controlled by scroll */
.hero::after{
content:"";
position:absolute;
top:0;
left:0;
width:100%;
height:200vh; /* further extend to mask bottom edge even during video movement */
pointer-events:none;
background:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgba(0,0,0,0.5) 50%,rgba(0,0,0,1) 100%);
z-index:-1;
opacity:var(--gradient-opacity,100%);
transition:opacity 0.3s;
}
/* Dynamic about section padding */
#about.content-block {
margin-top: 15vh; /* Start with large padding */
max-width: 2000px;
margin-left: auto;
margin-right: auto;
transition: margin-top 0.5s ease-out;
}
/* When about reaches top, reduce padding */
#about.content-block.reduced-padding {
margin-top: -50rem;
}
/* Projects grid spacing */
#projects.grid {
margin-bottom: 4.5rem;
transition: margin-top 0.5s ease-out;
}
/* Content that scrolls over the video */
.content-wrapper {
position: relative;
z-index: 2;
background: transparent;
}
/* Remove black background from content sections */
.content-block, .section, main.grid {
background: transparent;
position: relative;
z-index: 2;
}
/* ===== CONTACT FORM REFINEMENTS ===== */
.form-message{
margin-top:1em;
padding:1em;
border-radius:6px;
font-family:"SpaceMono",monospace;
font-size:1.1em;
text-align:center;
display:none; /* initially hidden */
}
.form-message.success{background:#1a3d1a;color:#b6ffb6;border:1px solid #3c6;}
.form-message.error {background:#3d1a1a;color:#ffb6b6;border:1px solid #c66;}
.honeypot{display:none;}
/* Form layout helpers */
.form-row{display:flex;gap:1em;flex-wrap:wrap;}
.form-col{flex:1 1 120px;min-width:120px;}
@media(max-width:600px){
#contact{padding:4vh 8px 2vh;font-size:1rem;}
#contact form label,
#contact form input,
#contact form textarea{font-size:1em;}
}