Project title placeholder
Use this card for your strongest piece. Keep the description grounded: what it was, what you built, and what problem or feeling it was designed to solve.
Case study coming soonA creative outlet for AV, lighting, interactive visuals, projection, generative systems, and experiments where analogue energy meets digital structure. This first version is a foundation: calm, alive, and ready to expand into a living portfolio.
Start with a few sharp pieces rather than trying to show everything. Replace the placeholders below with projects that reveal how you think: one technical, one visual, one experiential.
Use this card for your strongest piece. Keep the description grounded: what it was, what you built, and what problem or feeling it was designed to solve.
Case study coming soonA concise proof of your technical side: prep, programming, integration, or live support.
Add linkShow something reactive or procedural. Even a compact experiment is enough if it .site-shell { position: relative; z-index: 1; } .topbar { position: sticky; top: 0; z-index: 20; backdrop-filter: blur(14px); background: rgba(7, 7, 12, 0.55); border-bottom: 1px solid rgba(255, 255, 255, 0.06); } .topbar-inner, .section-inner, .footer-inner { width: min(var(--maxw), calc(100% - 2rem)); margin: 0 auto; } .topbar-inner { min-height: 72px; display: flex; align-items: center; justify-content: space-between; gap: 1rem; } .brand { display: inline-flex; align-items: center; gap: 0.85rem; text-decoration: none; color: var(--text); } .brand-mark { width: 38px; height: 38px; flex: 0 0 38px; filter: drop-shadow(0 0 16px rgba(0, 220, 255, 0.2)); } .brand-label { letter-spacing: 0.2em; font-size: 0.84rem; text-transform: uppercase; } .nav { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; } .nav a, .button, button { appearance: none; border: 0; text-decoration: none; color: var(--text); font: inherit; cursor: pointer; } .nav a { padding: 0.75rem 0.95rem; border-radius: 999px; color: var(--muted); transition: background 180ms ease, color 180ms ease, transform 180ms ease; } .nav a:hover, .nav a:focus-visible { color: var(--text); background: rgba(255, 255, 255, 0.06); transform: translateY(-1px); } .hero { min-height: calc(100vh - 72px); display: grid; place-items: center; padding: 5rem 0 3rem; } .hero-inner { width: min(var(--maxw), calc(100% - 2rem)); display: grid; grid-template-columns: 1.1fr 0.9fr; align-items: center; gap: 2rem; } .hero-copy { max-width: 42rem; } .eyebrow { display: inline-flex; align-items: center; gap: 0.7rem; padding: 0.55rem 0.85rem; border: 1px solid var(--line); border-radius: 999px; color: var(--muted); background: rgba(255, 255, 255, 0.03); box-shadow: var(--shadow); } .eyebrow-dot { width: 10px; height: 10px; border-radius: 999px; background: radial-gradient(circle at 35% 35%, white 0 10%, var(--c3) 24%, var(--c2) 54%, transparent 70%); box-shadow: 0 0 22px rgba(0, 220, 255, 0.6); } h1 { margin: 1rem 0 0.85rem; font-size: clamp(3rem, 8vw, 6.8rem); line-height: 0.94; letter-spacing: -0.04em; text-wrap: balance; } .hero-copy p { margin: 0; max-width: 42rem; font-size: clamp(1rem, 1.6vw, 1.18rem); line-height: 1.75; color: var(--muted); } .hero-actions { display: flex; flex-wrap: wrap; gap: 0.9rem; margin-top: 1.6rem; } .button { display: inline-flex; align-items: center; justify-content: center; gap: 0.6rem; min-height: 48px; padding: 0 1rem; border-radius: 999px; border: 1px solid var(--line); background: rgba(255, 255, 255, 0.04); transition: transform 180ms ease, border-color 180ms ease, background 180ms ease, box-shadow 180ms ease; } .button:hover, .button:focus-visible, button:hover, button:focus-visible { transform: translateY(-2px); border-color: rgba(255, 255, 255, 0.18); background: rgba(255, 255, 255, 0.08); box-shadow: 0 12px 36px rgba(0, 0, 0, 0.28); } .button.primary { background: linear-gradient(135deg, rgba(106, 0, 255, 0.22), rgba(0, 220, 255, 0.18)); border-color: rgba(0, 220, 255, 0.2); } .hero-stage { display: grid; place-items: center; } .hero-card { position: relative; width: min(100%, 560px); aspect-ratio: 1 / 1; border-radius: 36px; background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.025)); border: 1px solid rgba(255, 255, 255, 0.08); box-shadow: var(--shadow); overflow: hidden; transform: translate3d(calc(var(--hero-shift-x) * 0.18), calc(var(--hero-shift-y) * 0.18), 0); } .hero-card::before { content: ""; position: absolute; inset: -25%; background: conic-gradient(from 180deg at 50% 50%, rgba(106,0,255,0.2), rgba(0,220,255,0.18), rgba(255,59,212,0.2), rgba(106,0,255,0.2)); filter: blur(80px); opacity: 0.52; animation: rotateGlow 20s linear infinite; } @keyframes rotateGlow { to { transform: rotate(360deg); } } .hero-grid { position: absolute; inset: 0; background: linear-gradient(rgba(255, 255, 255, 0.045) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.045) 1px, transparent 1px); background-size: 28px 28px; mask-image: radial-gradient(circle at center, black 38%, transparent 88%); opacity: 0.26; } .hero-logo-wrap { position: absolute; inset: 0; display: grid; place-items: center; } .hero-logo { width: min(78%, 420px); transform: scale(calc(var(--logo-scale) + (var(--audio-level) * 0.02))) translate3d(calc(var(--hero-shift-x) * 0.08), calc(var(--hero-shift-y) * 0.08), 0); filter: drop-shadow(0 0 26px rgba(0, 220, 255, 0.18)) drop-shadow(0 0 54px rgba(106, 0, 255, 0.18)); animation: breathe 6.8s ease-in-out infinite; } .hero-logo path { stroke-linecap: round; stroke-linejoin: round; } @keyframes breathe { 0%, 100% { transform: scale(1) translateY(0); } 50% { transform: scale(1.03) translateY(-4px); } } .hero-meta { position: absolute; left: 1rem; right: 1rem; bottom: 1rem; display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap; } .meta-chip { padding: 0.55rem 0.75rem; border-radius: 999px; background: rgba(8, 8, 12, 0.55); border: 1px solid rgba(255, 255, 255, 0.08); color: var(--muted); font-size: 0.9rem; } .section { padding: 4.5rem 0; } .section h2 { font-size: clamp(1.75rem, 3vw, 2.8rem); letter-spacing: -0.035em; margin: 0 0 0.85rem; } .section-intro { max-width: 40rem; color: var(--muted); line-height: 1.8; margin: 0 0 1.8rem; } .card-grid { display: grid; gap: 1rem; grid-template-columns: repeat(12, 1fr); } .card { grid-column: span 4; min-height: 280px; border-radius: var(--radius); padding: 1.2rem; position: relative; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.08); background: linear-gradient(180deg, rgba(255,255,255,0.055), rgba(255,255,255,0.03)); box-shadow: var(--shadow); transition: transform 220ms ease, border-color 220ms ease; } .card:hover, .card:focus-within { transform: translateY(-4px); border-color: rgba(255, 255, 255, 0.14); } .card::before { content: ""; position: absolute; inset: -40% auto auto -20%; width: 70%; aspect-ratio: 1; border-radius: 50%; background: linear-gradient(135deg, rgba(0,220,255,0.22), rgba(106,0,255,0.16)); filter: blur(44px); opacity: 0.85; } .card-tag { position: relative; display: inline-flex; padding: 0.38rem 0.6rem; border-radius: 999px; background: rgba(0, 0, 0, 0.22); border: 1px solid rgba(255,255,255,0.08); color: var(--muted); font-size: 0.78rem; letter-spacing: 0.06em; text-transform: uppercase; } .card h3 { position: relative; margin: 1rem 0 0.6rem; font-size: 1.25rem; } .card p { position: relative; margin: 0 0 1rem; color: var(--muted); line-height: 1.7; } .card a { position: relative; color: var(--text); text-decoration: none; } .card a:hover, .card a:focus-visible { text-decoration: underline; } .wide { grid-column: span 6; } .tool-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; } .tool-card { border-radius: var(--radius); padding: 1.1rem; border: 1px solid rgba(255,255,255,0.08); background: linear-gradient(180deg, rgba(255,255,255,0.055), rgba(255,255,255,0.03)); } .tool-card h3 { margin: 0 0 0.4rem; } .tool-card p { margin: 0; color: var(--muted); line-height: 1.7; } .lab { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 1rem; align-items: stretch; } .lab-visual, .lab-controls { border-radius: 28px; border: 1px solid rgba(255, 255, 255, 0.08); background: linear-gradient(180deg, rgba(255,255,255,0.055), rgba(255,255,255,0.03)); box-shadow: var(--shadow); } .lab-visual { position: relative; min-height: 460px; overflow: hidden; } #labCanvas { width: 100%; height: 100%; display: block; } .lab-overlay { position: absolute; left: 1rem; right: 1rem; bottom: 1rem; display: flex; justify-content: space-between; gap: 0.8rem; flex-wrap: wrap; } .lab-controls { padding: 1.2rem; } .controls-head { margin-bottom: 1rem; } .controls-head p { color: var(--muted); line-height: 1.7; margin: 0.4rem 0 0; } .control-group { display: grid; gap: 0.75rem; margin-bottom: 1rem; } .control-row { display: grid; gap: 0.45rem; } .control-row label { color: var(--muted); font-size: 0.95rem; } .control-row input[type="range"], .control-row select, .control-row input[type="file"] { width: 100%; accent-color: #00dcff; } .tiny { font-size: 0.85rem; color: var(--muted); line-height: 1.6; } .socials { display: flex; flex-wrap: wrap; gap: 0.75rem; } .socials a { display: inline-flex; align-items: center; justify-content: center; min-height: 46px; padding: 0 0.95rem; border-radius: 999px; border: 1px solid rgba(255,255,255,0.1); color: var(--text); text-decoration: none; background: rgba(255,255,255,0.03); transition: transform 180ms ease, background 180ms ease; } .socials a:hover, .socials a:focus-visible { transform: translateY(-2px); background: rgba(255,255,255,0.08); } footer { padding: 1.2rem 0 2rem; } .footer-inner { display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap; color: var(--muted); border-top: 1px solid rgba(255,255,255,0.08); padding-top: 1rem; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @media (max-width: 980px) { .hero-inner, .lab, .tool-grid { grid-template-columns: 1fr; } .hero-stage { order: -1; } .card, .wide { grid-column: span 12; } } @media (max-width: 640px) { .topbar-inner { min-height: 64px; } .brand-label { display: none; } h1 { font-size: clamp(2.8rem, 15vw, 4.4rem); } .hero { padding-top: 2rem; } .hero-card { border-radius: 26px; aspect-ratio: 0.95 / 1; } .nav { gap: 0.2rem; } .nav a { padding: 0.6rem 0.75rem; font-size: 0.92rem; } }
A creative outlet for AV, lighting, interactive visuals, projection, generative systems, and experiments where analogue energy meets digital structure. This first version is a foundation: calm, alive, and ready to expand into a living portfolio.
Start with a few sharp pieces rather than trying to show everything. Replace the placeholders below with projects that reveal how you think: one technical, one visual, one experiential.
Use this card for your strongest piece. Keep the description grounded: what it was, what you built, and what problem or feeling it was designed to solve.
Case study coming soonA concise proof of your technical side: prep, programming, integration, or live support.
Add linkShow something reactive or procedural. Even a compact experiment is enough if it