// home-mix.jsx — Direction D: the user's curated mix. // Foundation: A (Studio) — cream + sage + Instrument Serif italic. // Pulls in: B's hover-row index + verbatim testimonial cells, C's "designer + developer" about + winding-path process. const MIX_PALETTES = { "Bauhaus": ["#f5f1e8","#ffffff","#1a1a1a","#e63329","#1d4ed8","#fbbf24"], "Mondrian": ["#ffffff","#f5f5f0","#000000","#d40000","#0036b6","#ffd500"], "Pop Primary": ["#fff8e0","#ffffff","#0a0a0a","#ff2c2c","#1e40ff","#ffd60a"], "Citrus & Sky": ["#fff4d6","#fffaea","#1a3a5c","#ff6b3d","#4a90c2","#ffb8a8"], "Marigold & Pine": ["#ffe9b8","#fff3d4","#1f4d3a","#f57c2a","#2d7a52","#ff9a9a"], "Sunset Pop": ["#ffd9c4","#ffe8d8","#2b1f4a","#ff5e3a","#d63384","#ffc4a8"], "Lemon & Lavender": ["#fff5cc","#fffae0","#3d2a6e","#c850c8","#5a4ec4","#ffb0d4"], "Coral Garden": ["#ffd6cc","#ffe6dc","#1a4d4d","#ff5a5a","#2da89a","#ffd166"], "Tropical Cream": ["#fff4e0","#fff9ec","#2a1a3a","#ff3b8a","#6ac76a","#4a8eff"], }; const MIX_BANNERS = { "Sketch": "sketch", "Plants": "img/plants.jpg", "Desk": "img/desk.jpg", "Portrait": "img/maia.jpg", }; const MIX_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": ["#f5f1e8","#ffffff","#1a1a1a","#e63329","#1d4ed8","#fbbf24"], "banner": "sketch", "bannerHeight": 380 }/*EDITMODE-END*/; const MixCSS = ` .dirD{ --bg:#f5f1e8; --paper:#ffffff; --ink:#1a1a1a; --ink-soft:rgba(26,26,26,.65); --rule:rgba(26,26,26,.18); --terra:#e63329; --olive:#1d4ed8; --rose:#fbbf24; background:var(--bg); color:var(--ink); font-family:'Manrope',system-ui,sans-serif; font-size:17px; line-height:1.5; width:100%; max-width:1280px; min-height:9000px; position:relative; overflow:hidden; } .dirD .banner{ margin:0 56px; position:relative; border-radius:6px; overflow:hidden; } .dirD .banner img{ width:100%; height:100%; object-fit:cover; display:block; filter:saturate(.92) contrast(1.02); } .dirD .banner .b-tag{ position:absolute; left:24px; bottom:20px; font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:#fff; mix-blend-mode:difference; } .dirD .banner .b-corners{ position:absolute; inset:14px; border:1px solid rgba(255,255,255,.55); border-radius:3px; pointer-events:none; } .dirD .banner .b-stamp{ position:absolute; top:18px; right:22px; font-family:'Caveat',cursive; font-size:24px; color:#fff; transform:rotate(3deg); text-shadow:0 1px 2px rgba(0,0,0,.4); } .dirD .serif{ font-family:'Instrument Serif',serif; font-style:italic; font-weight:400; letter-spacing:-.01em; } .dirD .grot{ font-family:'Bricolage Grotesque',sans-serif; font-weight:300; letter-spacing:-.02em; } .dirD .mono{ font-family:'JetBrains Mono',monospace; } .dirD .hand{ font-family:'Caveat',cursive; } /* NAV — IDX-style */ .dirD .nav{ position:absolute; top:0; left:0; right:0; padding:24px 56px; display:flex; align-items:center; justify-content:space-between; z-index:5; } .dirD .nav .logo{ font-family:'JetBrains Mono',monospace; font-size:13px; letter-spacing:.06em; text-transform:uppercase; } .dirD .nav .logo .idx{ color:var(--terra); } .dirD .nav .links{ display:flex; gap:32px; align-items:center; font-size:14px; } .dirD .nav a{ color:var(--ink); text-decoration:none; padding:6px 0; } .dirD .nav a.on{ color:var(--terra); font-family:'Instrument Serif',serif; font-style:italic; font-size:18px; } .dirD .nav .group{ display:flex; align-items:center; gap:14px; } .dirD .nav .booking{ display:inline-flex; align-items:center; gap:10px; padding:9px 16px; border:1px solid var(--rule); border-radius:999px; font-family:'JetBrains Mono',monospace; font-size:11.5px; letter-spacing:.04em; } .dirD .nav .booking .dot{ width:8px; height:8px; border-radius:50%; background:var(--olive); box-shadow:0 0 0 3px color-mix(in srgb, var(--olive) 25%, transparent); } .dirD .nav .cta{ background:var(--ink); color:var(--bg); padding:11px 18px; border-radius:999px; border:0; font-family:'JetBrains Mono',monospace; font-size:11.5px; letter-spacing:.12em; text-transform:uppercase; cursor:pointer; } /* nav services dropdown */ .dirD .nav .has-drop{ position:relative; } .dirD .nav .drop-trigger{ display:inline-flex; align-items:center; gap:5px; cursor:pointer; } .dirD .nav .drop-trigger .caret{ font-size:8px; opacity:.6; transition:transform .2s; } .dirD .nav .has-drop:hover .drop-trigger .caret{ transform:rotate(180deg); } .dirD .nav .dropdown{ position:absolute; top:100%; left:50%; transform:translateX(-50%) translateY(8px); padding-top:14px; width:340px; opacity:0; visibility:hidden; pointer-events:none; transition:opacity .2s, transform .2s; z-index:30; } .dirD .nav .has-drop:hover .dropdown, .dirD .nav .dropdown:hover{ opacity:1; visibility:visible; pointer-events:auto; transform:translateX(-50%) translateY(0); } .dirD .nav .dropdown .panel{ background:var(--bg); border:1px solid var(--rule); border-radius:14px; box-shadow:0 30px 60px -28px rgba(0,0,0,.4); padding:10px; } .dirD .nav .dropdown a{ display:flex; align-items:baseline; justify-content:space-between; gap:12px; padding:11px 14px; border-radius:9px; text-decoration:none; color:var(--ink); transition:background .15s; } .dirD .nav .dropdown a:hover{ background:var(--paper); } .dirD .nav .dropdown a .nm{ font-family:'Instrument Serif',serif; font-style:italic; font-size:19px; line-height:1; display:flex; align-items:center; gap:8px; } .dirD .nav .dropdown a .nm .nw{ font-family:'JetBrains Mono',monospace; font-style:normal; font-size:8.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--terra); border:1px solid var(--terra); border-radius:999px; padding:2px 6px; } .dirD .nav .dropdown a .mt{ font-family:'JetBrains Mono',monospace; font-size:10.5px; letter-spacing:.04em; color:var(--ink-soft); white-space:nowrap; } .dirD .nav .dropdown .all{ margin-top:4px; border-top:1px solid var(--rule); } .dirD .nav .dropdown .all a .nm{ font-size:16px; color:var(--terra); } /* FILE TAG — left margin */ .dirD .filetag{ position:absolute; left:56px; top:280px; font-family:'JetBrains Mono',monospace; font-size:11.5px; letter-spacing:.04em; color:var(--ink-soft); line-height:1.7; max-width:160px; } .dirD .filetag .open, .dirD .filetag .close{ color:var(--ink-soft); } .dirD .filetag .row{ display:flex; gap:8px; } .dirD .filetag .row::before{ content:'·'; } /* HERO — IDX-style */ .dirD .hero{ padding:160px 56px 64px; position:relative; } .dirD .hero h1{ font-family:'Instrument Serif',serif; font-style:italic; font-weight:400; font-size:148px; line-height:.92; letter-spacing:-.02em; margin:0; max-width:1100px; text-wrap:balance; } .dirD .hero h1 .non-italic{ font-style:normal; font-family:'Bricolage Grotesque',sans-serif; font-weight:300; } .dirD .hero .sub{ display:flex; gap:64px; margin-top:64px; align-items:flex-end; justify-content:space-between; } .dirD .hero .sub p{ max-width:420px; font-size:18px; margin:0; } .dirD .hero .meta{ display:flex; gap:32px; font-size:13px; color:var(--ink-soft); } .dirD .hero .meta .dot{ display:inline-block; width:7px; height:7px; border-radius:50%; background:var(--olive); margin-right:8px; vertical-align:1px; } .dirD .hero-mark{ position:absolute; top:140px; right:80px; } .dirD .eyebrow{ font-family:'JetBrains Mono',monospace; font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-soft); display:flex; align-items:center; gap:14px; } .dirD .eyebrow::before{ content:''; width:24px; height:1px; background:var(--ink-soft); } .dirD .sec-title{ font-family:'Instrument Serif',serif; font-style:italic; font-size:80px; line-height:1; margin:14px 0 0; letter-spacing:-.01em; } /* MARQUEE — from A */ .dirD .marq{ border-top:1px solid var(--rule); border-bottom:1px solid var(--rule); padding:22px 0; overflow:hidden; } .dirD .marq-track{ display:flex; gap:64px; white-space:nowrap; animation:dirD-scroll 38s linear infinite; } .dirD .marq-track > span{ font-family:'Instrument Serif',serif; font-style:italic; font-size:48px; line-height:1; display:inline-flex; align-items:center; gap:64px; } .dirD .marq-track .star{ font-family:'Bricolage Grotesque',sans-serif; font-style:normal; font-weight:300; color:var(--terra); } @keyframes dirD-scroll{ from{transform:translateX(0)} to{transform:translateX(-50%)} } /* WORK — tabular hover-preview from B, re-skinned to A's cream palette */ .dirD .work{ padding:120px 56px 60px; position:relative; } .dirD .work .head{ display:flex; justify-content:space-between; align-items:end; margin-bottom:64px; } .dirD .filters{ display:flex; align-items:center; gap:8px; padding:24px 0; border-top:1px solid var(--rule); border-bottom:1px solid var(--rule); margin-bottom:0; } .dirD .filters .label{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-soft); margin-right:12px; } .dirD .filters .chip{ padding:7px 14px; border:1px solid var(--rule); border-radius:999px; font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.08em; text-transform:uppercase; cursor:pointer; } .dirD .filters .chip.on{ background:var(--ink); color:var(--bg); border-color:var(--ink); } .dirD .ihead{ display:grid; grid-template-columns: 60px 2.4fr 1fr 1.4fr .8fr 90px; padding:14px 0; border-bottom:1px solid var(--rule); font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-soft); } .dirD .irow{ display:grid; grid-template-columns: 60px 2.4fr 1fr 1.4fr .8fr 90px; padding:24px 0; border-bottom:1px solid var(--rule); align-items:center; transition:background .15s, padding .15s; cursor:pointer; position:relative; } .dirD .irow:hover{ background:var(--paper); padding-left:12px; padding-right:12px; } .dirD .irow .num{ font-family:'JetBrains Mono',monospace; font-size:12px; color:var(--ink-soft); } .dirD .irow .name{ font-family:'Instrument Serif',serif; font-style:italic; font-size:42px; line-height:1; letter-spacing:-.01em; } .dirD .irow .name em{ font-family:'Caveat',cursive; font-style:normal; font-size:22px; color:var(--terra); margin-left:14px; opacity:0; transform:translateX(-6px); transition:.18s; display:inline-block; } .dirD .irow:hover .name em{ opacity:1; transform:translateX(0); } .dirD .irow .platform{ font-family:'JetBrains Mono',monospace; font-size:12px; } .dirD .irow .platform .pdot{ display:inline-block; width:6px; height:6px; border-radius:50%; margin-right:8px; vertical-align:1px; } .dirD .irow .kind{ font-family:'JetBrains Mono',monospace; font-size:12px; color:var(--ink-soft); letter-spacing:.06em; } .dirD .irow .yr{ font-family:'JetBrains Mono',monospace; font-size:12px; color:var(--ink-soft); } .dirD .irow .arrow{ justify-self:end; font-family:'Instrument Serif',serif; font-style:italic; font-size:28px; } .dirD .irow .preview{ position:absolute; right:120px; top:50%; transform:translate(20px,-50%) rotate(-3deg) scale(.92); width:300px; aspect-ratio:4/3; pointer-events:none; opacity:0; transition:.22s; box-shadow:0 30px 60px -25px rgba(43,58,42,.4); border-radius:6px; overflow:hidden; z-index:2; } .dirD .irow .preview img{ width:100%; height:100%; object-fit:cover; display:block; } .dirD .irow:hover .preview{ opacity:1; transform:translate(0,-50%) rotate(-2deg) scale(1); } .dirD .all-work{ margin-top:60px; display:flex; justify-content:center; } .dirD .all-work a{ font-family:'Instrument Serif',serif; font-style:italic; font-size:34px; color:var(--ink); border-bottom:1px solid var(--ink); padding-bottom:6px; text-decoration:none; } /* SERVICES — from A */ .dirD .services{ background:var(--ink); color:var(--bg); padding:120px 56px; } .dirD .services .eyebrow{ color:rgba(236,234,216,.6); } .dirD .services .eyebrow::before{ background:rgba(236,234,216,.6); } .dirD .services .sec-title{ color:var(--bg); } .dirD .services-list{ margin-top:80px; } .dirD .srow{ display:grid; grid-template-columns: 90px 1fr 1.4fr; gap:48px; padding:32px 0; border-top:1px solid rgba(236,234,216,.18); align-items:baseline; } .dirD .srow:last-child{ border-bottom:1px solid rgba(236,234,216,.18); } .dirD .srow .num{ font-family:'JetBrains Mono',monospace; font-size:14px; color:rgba(236,234,216,.6); } .dirD .srow .name{ font-family:'Instrument Serif',serif; font-style:italic; font-size:42px; line-height:1; } .dirD .srow .desc{ font-size:16px; color:rgba(236,234,216,.85); } /* PACKAGES — three pricing cards (most-picked sticker on the middle one) */ .dirD .pkgs{ padding:140px 56px 80px; position:relative; } .dirD .pkgs .head{ display:grid; grid-template-columns: 1.4fr 1fr; gap:64px; margin-bottom:64px; align-items:end; } .dirD .pkgs h2{ font-family:'Instrument Serif',serif; font-style:italic; font-size:96px; line-height:.95; margin:14px 0 0; letter-spacing:-.02em; } .dirD .pkgs h2 .non{ font-family:'Bricolage Grotesque',sans-serif; font-style:normal; font-weight:300; } .dirD .pkgs h2 .terra{ color:var(--terra); } .dirD .pkgs .lede{ font-size:16px; color:var(--ink-soft); max-width:380px; } .dirD .pkgs-grid{ display:grid; grid-template-columns: repeat(3, 1fr); gap:18px; align-items:start; } .dirD .pkg{ background:var(--paper); border-radius:8px; padding:32px 28px 28px; position:relative; } .dirD .pkg.dark{ background:var(--ink); color:var(--bg); transform:translateY(-22px); padding:40px 28px 32px; box-shadow:0 30px 60px -25px rgba(0,0,0,.45); } .dirD .pkg .ribbon{ position:absolute; top:-18px; right:24px; background:var(--terra); color:#fff7ec; font-family:'Caveat',cursive; font-size:22px; padding:6px 18px; border-radius:999px; transform:rotate(4deg); } .dirD .pkg .for{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; opacity:.6; } .dirD .pkg.dark .for{ opacity:.55; } .dirD .pkg h3{ font-family:'Instrument Serif',serif; font-style:italic; font-size:46px; line-height:1; margin:14px 0 22px; letter-spacing:-.01em; } .dirD .pkg .price{ display:flex; align-items:baseline; gap:6px; margin-bottom:8px; } .dirD .pkg .price .from{ font-family:'Instrument Serif',serif; font-style:italic; font-size:18px; color:var(--terra); } .dirD .pkg .price .num{ font-family:'Bricolage Grotesque',sans-serif; font-weight:300; font-size:48px; letter-spacing:-.03em; } .dirD .pkg .price .ccy{ font-family:'Instrument Serif',serif; font-style:italic; font-size:18px; color:var(--terra); } .dirD .pkg .when{ font-family:'JetBrains Mono',monospace; font-size:11.5px; letter-spacing:.04em; opacity:.7; margin-bottom:24px; } .dirD .pkg ul{ list-style:none; padding:0; margin:0 0 28px; display:grid; gap:12px; } .dirD .pkg li{ display:flex; gap:10px; align-items:flex-start; font-size:14.5px; line-height:1.45; } .dirD .pkg li::before{ content:'✻'; color:var(--terra); font-size:14px; flex-shrink:0; line-height:1.45; } .dirD .pkg .btn{ display:flex; align-items:center; justify-content:center; padding:14px 18px; border-radius:999px; border:1px solid currentColor; font-size:13.5px; cursor:pointer; background:transparent; color:inherit; width:100%; text-decoration:none; box-sizing:border-box; } .dirD .pkg.dark .btn{ background:var(--rose); color:var(--ink); border-color:var(--rose); } .dirD .pkgs .also{ margin-top:60px; text-align:center; font-family:'JetBrains Mono',monospace; font-size:11.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--ink-soft); } .dirD .pkgs .also a{ color:var(--ink); text-decoration:underline; text-underline-offset:4px; margin-left:8px; } /* PROCESS — C's winding path, re-skinned cream */ .dirD .process{ padding:140px 56px; position:relative; background:var(--paper); } .dirD .process h2{ font-family:'Instrument Serif',serif; font-style:italic; font-size:88px; line-height:.95; margin:14px 0 64px; letter-spacing:-.02em; max-width:900px; } .dirD .process h2 .non{ font-family:'Bricolage Grotesque',sans-serif; font-style:normal; font-weight:300; color:var(--terra); } .dirD .ppath{ display:grid; grid-template-columns: repeat(5, 1fr); gap:18px; position:relative; } .dirD .ppath::before{ content:''; position:absolute; left:5%; right:5%; top:24px; height:2px; background:repeating-linear-gradient(90deg, var(--terra) 0 6px, transparent 6px 12px); } .dirD .pstep{ position:relative; } .dirD .pstep .dot{ width:48px; height:48px; border-radius:50%; background:var(--terra); color:#fff7ec; font-family:'Instrument Serif',serif; font-style:italic; font-size:22px; display:flex; align-items:center; justify-content:center; margin:0 auto 28px; position:relative; z-index:2; box-shadow:0 8px 18px -6px rgba(201,132,85,.5); } .dirD .pstep:nth-child(2) .dot{ background:var(--olive); } .dirD .pstep:nth-child(3) .dot{ background:var(--ink); } .dirD .pstep:nth-child(4) .dot{ background:var(--rose); color:var(--ink); } .dirD .pstep:nth-child(5) .dot{ background:var(--terra); } .dirD .pstep h4{ font-family:'Instrument Serif',serif; font-style:italic; font-size:32px; line-height:1; margin:0 0 10px; text-align:center; } .dirD .pstep p{ font-size:14.5px; text-align:center; max-width:200px; margin:0 auto; color:var(--ink-soft); } /* ABOUT — C's "designer AND developer in one tab", re-skinned cream */ .dirD .about{ padding:140px 56px; position:relative; } .dirD .about-row{ display:grid; grid-template-columns: 1fr 1.1fr; gap:80px; align-items:center; } .dirD .about-portrait{ position:relative; } .dirD .about-portrait .frame{ aspect-ratio:4/5; background:var(--paper); border-radius:8px; overflow:hidden; transform:rotate(-2deg); box-shadow:0 30px 80px -30px rgba(43,58,42,.35); } .dirD .about-portrait .frame img{ width:100%; height:100%; object-fit:cover; } .dirD .about-portrait .stamp{ position:absolute; bottom:-44px; right:-44px; transform:rotate(8deg); z-index:4; } .dirD .about-portrait .corner{ position:absolute; top:-22px; left:-22px; width:80px; height:80px; background:var(--rose); border-radius:50% 0 50% 50%; transform:rotate(-30deg); z-index:-1; } .dirD .about-portrait .annot{ font-family:'Caveat',cursive; font-size:24px; color:var(--terra); position:absolute; top:-20px; left:30px; transform:rotate(-8deg); z-index:5; background:var(--bg); padding:2px 8px; } .dirD .about-portrait .tape{ position:absolute; width:120px; height:28px; background:color-mix(in srgb, var(--rose) 70%, transparent); border:1px dashed color-mix(in srgb, var(--ink) 25%, transparent); z-index:3; pointer-events:none; } .dirD .about-portrait .tape.t1{ top:-10px; left:30px; transform:rotate(-6deg); } .dirD .about-portrait .tape.t2{ bottom:-10px; left:50px; transform:rotate(4deg); width:90px; background:color-mix(in srgb, var(--olive) 60%, transparent); } .dirD .about h2{ font-family:'Instrument Serif',serif; font-style:italic; font-size:84px; line-height:.95; margin:14px 0 28px; letter-spacing:-.02em; } .dirD .about h2 .non{ font-family:'Bricolage Grotesque',sans-serif; font-style:normal; font-weight:300; } .dirD .about h2 em{ color:var(--terra); } .dirD .about p{ font-size:17px; max-width:520px; margin:0 0 16px; } .dirD .about .pills{ display:flex; flex-wrap:wrap; gap:10px; margin-top:28px; } .dirD .about .pills > span{ padding:9px 16px; border:1.5px solid var(--ink); border-radius:999px; font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.06em; background:var(--paper); cursor:default; transform-origin:center; transition:transform .25s cubic-bezier(.2,.8,.2,1), background .25s, color .25s, border-color .25s; animation:dirD-pill-float 6s ease-in-out infinite; } .dirD .about .pills > span:nth-child(1){ animation-delay:0s; } .dirD .about .pills > span:nth-child(2){ animation-delay:.6s; } .dirD .about .pills > span:nth-child(3){ animation-delay:1.2s; } .dirD .about .pills > span:nth-child(4){ animation-delay:1.8s; } .dirD .about .pills > span:nth-child(5){ animation-delay:2.4s; } .dirD .about .pills > span:hover{ transform:translateY(-3px) rotate(-3deg) scale(1.06); background:var(--terra); color:var(--bg); border-color:var(--terra); } .dirD .about .pills > span:nth-child(2):hover{ background:var(--olive); border-color:var(--olive); transform:translateY(-3px) rotate(3deg) scale(1.06); } .dirD .about .pills > span:nth-child(3):hover{ background:var(--rose); color:var(--ink); border-color:var(--rose); transform:translateY(-3px) rotate(-2deg) scale(1.06); } .dirD .about .pills > span:nth-child(4):hover{ background:var(--ink); color:var(--bg); border-color:var(--ink); transform:translateY(-3px) rotate(2deg) scale(1.06); } @keyframes dirD-pill-float{ 0%,100%{ transform:translateY(0) rotate(0deg) } 50%{ transform:translateY(-2px) rotate(.5deg) } } .dirD .about .more{ display:inline-block; margin-top:32px; padding:14px 24px; border-radius:999px; background:var(--ink); color:var(--bg); font-size:13.5px; text-decoration:none; } /* TESTIMONIALS — B's verbatim mono-dark cells */ .dirD .testi{ padding:120px 56px; background:var(--ink); color:var(--bg); position:relative; } .dirD .testi .eyebrow{ color:rgba(236,234,216,.55); } .dirD .testi .eyebrow::before{ background:rgba(236,234,216,.55); } .dirD .testi h2{ font-family:'Instrument Serif',serif; font-style:italic; font-size:80px; line-height:.95; margin:14px 0 64px; letter-spacing:-.02em; max-width:1000px; color:var(--bg); } .dirD .testi h2 .non{ font-family:'Bricolage Grotesque',sans-serif; font-style:normal; font-weight:300; color:var(--rose); } .dirD .testi-grid{ display:grid; grid-template-columns: repeat(2, 1fr); gap:0; border-top:1px solid rgba(236,234,216,.18); border-left:1px solid rgba(236,234,216,.18); } .dirD .testi-cell{ border-right:1px solid rgba(236,234,216,.18); border-bottom:1px solid rgba(236,234,216,.18); padding:40px 36px; } .dirD .testi-cell q{ font-family:'Bricolage Grotesque',sans-serif; font-weight:300; font-size:24px; line-height:1.35; quotes:none; letter-spacing:-.01em; } .dirD .testi-cell .who{ margin-top:24px; font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:rgba(236,234,216,.6); } /* CTA — from A */ .dirD .cta{ padding:160px 56px; text-align:center; position:relative; } .dirD .cta h2{ font-family:'Instrument Serif',serif; font-style:italic; font-size:140px; line-height:.95; margin:0; letter-spacing:-.02em; } .dirD .cta .terra{ color:var(--terra); } .dirD .cta p{ max-width:540px; margin:32px auto 40px; font-size:18px; } .dirD .cta .btn{ background:var(--ink); color:var(--bg); border:0; padding:20px 36px; border-radius:999px; font-size:16px; cursor:pointer; } /* INTERACTIONS — funky additions */ .dirD .pkg{ transition:transform .35s cubic-bezier(.2,.8,.2,1), box-shadow .35s; } .dirD .pkg:not(.dark):hover{ transform:translateY(-6px) rotate(-.6deg); box-shadow:0 30px 60px -30px color-mix(in srgb, var(--ink) 40%, transparent); } .dirD .pkg.dark:hover{ transform:translateY(-30px) rotate(.6deg); } .dirD .pkg .ribbon{ animation:dirD-wobble 4.2s ease-in-out infinite; transform-origin:center; } @keyframes dirD-wobble{ 0%,100%{transform:rotate(4deg)} 25%{transform:rotate(-3deg) translateY(-2px)} 50%{transform:rotate(6deg)} 75%{transform:rotate(-1deg) translateY(-1px)} } .dirD .hero h1 span[style*="--terra"], .dirD .hero h1 > span:nth-child(7){ display:inline-block; transition:transform .25s, color .25s; } .dirD .hero h1:hover span[style*="--terra"]{ transform:rotate(-2deg) scale(1.02); } .dirD .booking .dot{ animation:dirD-pulse 2.4s ease-in-out infinite; } @keyframes dirD-pulse{ 0%,100%{ box-shadow:0 0 0 3px color-mix(in srgb, var(--olive) 25%, transparent) } 50%{ box-shadow:0 0 0 6px color-mix(in srgb, var(--olive) 18%, transparent) } } /* PROCESS — lively animated steps */ .dirD .ppath::before{ background-size:12px 2px; animation:dirD-dash 3.6s linear infinite; } @keyframes dirD-dash{ from{ background-position:0 0 } to{ background-position:24px 0 } } .dirD .pstep{ animation:dirD-pstep-bob 4.6s ease-in-out infinite; } .dirD .pstep:nth-child(1){ animation-delay:.0s; } .dirD .pstep:nth-child(2){ animation-delay:.35s; } .dirD .pstep:nth-child(3){ animation-delay:.7s; } .dirD .pstep:nth-child(4){ animation-delay:1.05s; } .dirD .pstep:nth-child(5){ animation-delay:1.4s; } @keyframes dirD-pstep-bob{ 0%,100%{ transform:translateY(0) rotate(0) } 50%{ transform:translateY(-6px) rotate(.6deg) } } .dirD .pstep .dot{ transition:transform .4s cubic-bezier(.2,.8,.2,1), box-shadow .4s; animation:dirD-dot-spin 8s ease-in-out infinite; } .dirD .pstep:nth-child(odd) .dot{ animation-direction:reverse; } @keyframes dirD-dot-spin{ 0%,100%{ transform:rotate(-6deg) } 50%{ transform:rotate(6deg) } } .dirD .pstep:hover{ animation-play-state:paused; } .dirD .pstep:hover .dot{ animation:none; transform:rotate(-14deg) scale(1.22); box-shadow:0 8px 24px -6px rgba(43,58,42,.35); } .dirD .pstep::after{ content:''; position:absolute; left:50%; top:18px; width:14px; height:14px; border-top:2px solid var(--terra); border-right:2px solid var(--terra); transform:translate(40%,-2px) rotate(45deg); opacity:0; transition:opacity .3s, transform .3s; } .dirD .pstep:nth-child(5)::after{ display:none; } .dirD .pstep:hover::after{ opacity:1; transform:translate(60%,-2px) rotate(45deg); } .dirD .pstep h4{ transition:transform .3s, color .3s; } .dirD .pstep:hover h4{ transform:translateY(-2px); color:var(--terra); } .dirD .srow{ transition:padding-left .25s, background .25s; } .dirD .srow:hover{ padding-left:18px; background:rgba(255,255,255,.04); } .dirD .srow .num{ transition:color .25s; } .dirD .srow:hover .num{ color:var(--terra); } .dirD .all-work a{ position:relative; transition:letter-spacing .25s, color .25s; } .dirD .all-work a:hover{ letter-spacing:.04em; color:var(--terra); border-color:var(--terra); } .dirD .testi-cell{ transition:background .25s; cursor:default; } .dirD .testi-cell:hover{ background:rgba(255,255,255,.04); } .dirD .nav .cta{ transition:transform .25s, box-shadow .25s; } .dirD .nav .cta:hover{ transform:translateY(-2px) rotate(-1deg); box-shadow:0 10px 24px -10px var(--ink); } .dirD .pkg .btn{ transition:transform .2s; } .dirD .pkg .btn:hover{ transform:scale(1.03); } .dirD .about-portrait .frame{ transition:transform .5s cubic-bezier(.2,.8,.2,1); } .dirD .about-portrait:hover .frame{ transform:rotate(2deg) scale(1.02); } .dirD .about-portrait .stamp{ transition:transform .5s; animation:dirD-spin 22s linear infinite; } @keyframes dirD-spin{ to{ transform:rotate(360deg) } } .dirD .about-portrait .annot{ animation:dirD-bobble 5s ease-in-out infinite; } @keyframes dirD-bobble{ 0%,100%{ transform:rotate(-12deg) translateY(0) } 50%{ transform:rotate(-8deg) translateY(-4px) } } .dirD .hero{ cursor:default; } .dirD .blob{ position:fixed; pointer-events:none; transform:translate(-50%,-50%) rotate(-6deg); z-index:9999; font-family:'Caveat',cursive; font-size:22px; color:var(--terra); white-space:nowrap; padding:6px 14px; background:var(--paper); border:1px solid var(--ink); border-radius:999px; box-shadow:3px 3px 0 var(--ink); transition:transform .12s ease-out, opacity .2s; opacity:0; } .dirD .blob.show{ opacity:1; } .dirD .marq:hover .marq-track{ animation-duration:8s; } .dirD .marq-track{ transition:none; } .dirD .hero h1 .ltr{ display:inline-block; transition:transform .25s, color .25s; } .dirD .hero h1:hover .ltr{ animation:dirD-wave .8s ease-in-out; animation-delay:calc(var(--i,0) * 30ms); } @keyframes dirD-wave{ 0%,100%{transform:translateY(0)} 50%{transform:translateY(-12px) rotate(-4deg)} } .dirD .doodle{ position:absolute; pointer-events:none; font-family:'Caveat',cursive; color:var(--terra); } .dirD .doodle.d1{ top:18%; right:9%; transform:rotate(8deg); font-size:28px; animation:dirD-bobble 6s ease-in-out infinite; } .dirD .doodle.d2{ top:42%; left:4%; transform:rotate(-12deg); font-size:24px; animation:dirD-bobble 7s ease-in-out infinite reverse; } .dirD .sticker{ position:absolute; width:90px; height:90px; border-radius:50%; background:var(--rose); color:var(--ink); font-family:'Caveat',cursive; font-size:20px; display:flex; align-items:center; justify-content:center; text-align:center; line-height:1.1; transform:rotate(-8deg); cursor:grab; user-select:none; box-shadow:0 8px 18px -8px rgba(0,0,0,.3); animation:dirD-spin 30s linear infinite; } .dirD .sticker:active{ cursor:grabbing; animation-play-state:paused; } .dirD .sk1{ top:760px; right:80px; background:var(--paper); color:var(--terra); border:2px dashed var(--terra); width:104px; height:104px; box-shadow:4px 4px 0 var(--ink); } .dirD .sk2{ top:5400px; left:80px; background:var(--paper); color:var(--ink); border:2px dashed var(--ink); } .dirD .testi-cell q{ transition:transform .35s; display:inline-block; } .dirD .testi-cell:hover q{ transform:translateY(-3px); } .dirD .pkg h3{ transition:transform .3s; } .dirD .pkg:hover h3{ transform:translateX(4px); } .dirD .ihead, .dirD .filters{ transition:background .3s; } .dirD .work:hover .ihead{ background:color-mix(in srgb, var(--terra) 8%, transparent); } .dirD .nav .booking{ transition:transform .3s; } .dirD .nav .booking:hover{ transform:scale(1.04) rotate(-1.5deg); } .dirD .hero h1{ transition:letter-spacing .4s; } .dirD .hero h1:hover{ letter-spacing:-.025em; } .dirD .marq{ position:relative; } .dirD .marq::before{ content:'→ hover me'; position:absolute; top:50%; left:14px; transform:translateY(-50%); font-family:'Caveat',cursive; font-size:18px; color:var(--terra); pointer-events:none; opacity:.7; z-index:2; background:var(--bg); padding:4px 10px; } /* HANDWRITTEN NOTES — sprinkled throughout */ .dirD .note{ font-family:'Caveat',cursive; color:var(--terra); font-size:22px; line-height:1.1; pointer-events:none; } .dirD .note.abs{ position:absolute; } .dirD .note.n-hero{ top:230px; right:160px; transform:rotate(11deg); font-size:26px; } .dirD .note.n-marq{ position:relative; display:inline-block; transform:rotate(-7deg); margin-left:8px; } .dirD .note.n-work{ top:60px; right:140px; transform:rotate(-13deg); font-size:24px; } .dirD .note.n-srvc{ top:80px; right:240px; transform:rotate(8deg); color:var(--ink); font-size:24px; } .dirD .note.n-pkg{ top:120px; left:48%; transform:rotate(-14deg); font-size:24px; } .dirD .note.n-proc{ top:96px; right:120px; transform:rotate(9deg); font-size:24px; } .dirD .note.n-about{ top:90px; right:80px; transform:rotate(-12deg); font-size:26px; } .dirD .note.n-test{ top:90px; right:80px; transform:rotate(13deg); color:var(--ink); font-size:26px; } .dirD .note.n-cta{ top:80px; right:160px; transform:rotate(-9deg); font-size:26px; } .dirD .note.bobble{ animation:none; } .dirD .note.n-hero.bobble{ animation:dirD-note-a 6.4s ease-in-out infinite; } .dirD .note.n-work.bobble{ animation:dirD-note-b 7.1s ease-in-out infinite; } .dirD .note.n-srvc.bobble{ animation:dirD-note-c 5.9s ease-in-out infinite; } .dirD .note.n-pkg.bobble{ animation:dirD-note-d 6.7s ease-in-out infinite; } .dirD .note.n-proc.bobble{ animation:dirD-note-e 5.6s ease-in-out infinite; } .dirD .note.n-about.bobble{ animation:dirD-note-f 7.3s ease-in-out infinite; } .dirD .note.n-test.bobble{ animation:dirD-note-g 6.1s ease-in-out infinite; } .dirD .note.n-cta.bobble{ animation:dirD-note-h 6.8s ease-in-out infinite; } @keyframes dirD-note-a{ 0%,100%{transform:rotate(11deg) translateY(0)} 50%{transform:rotate(14deg) translateY(-3px)} } @keyframes dirD-note-b{ 0%,100%{transform:rotate(-13deg) translateY(0)} 50%{transform:rotate(-10deg) translateY(-4px)} } @keyframes dirD-note-c{ 0%,100%{transform:rotate(8deg) translateY(0)} 50%{transform:rotate(5deg) translateY(-3px)} } @keyframes dirD-note-d{ 0%,100%{transform:rotate(-14deg) translateY(0)} 50%{transform:rotate(-11deg) translateY(-4px)} } @keyframes dirD-note-e{ 0%,100%{transform:rotate(9deg) translateY(0)} 50%{transform:rotate(12deg) translateY(-3px)} } @keyframes dirD-note-f{ 0%,100%{transform:rotate(-12deg) translateY(0)} 50%{transform:rotate(-9deg) translateY(-4px)} } @keyframes dirD-note-g{ 0%,100%{transform:rotate(13deg) translateY(0)} 50%{transform:rotate(16deg) translateY(-3px)} } @keyframes dirD-note-h{ 0%,100%{transform:rotate(-9deg) translateY(0)} 50%{transform:rotate(-6deg) translateY(-4px)} } /* FOOTER — from A */ .dirD footer{ background:var(--ink); color:var(--bg); padding:80px 56px 40px; } .dirD footer .top{ display:grid; grid-template-columns: 1.4fr 1fr 1fr; gap:48px; padding-bottom:64px; border-bottom:1px solid rgba(236,234,216,.18); } .dirD footer h5{ font-family:'JetBrains Mono',monospace; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:rgba(236,234,216,.55); margin:0 0 18px; font-weight:500; } .dirD footer ul{ list-style:none; padding:0; margin:0; display:grid; gap:10px; } .dirD footer a{ color:var(--bg); text-decoration:none; font-size:15px; } .dirD footer .word{ font-family:'Instrument Serif',serif; font-style:italic; font-size:160px; line-height:1; margin:48px 0 24px; letter-spacing:-.02em; opacity:.92; } .dirD footer .word .terra{ color:var(--terra); } .dirD footer .legal{ display:flex; justify-content:space-between; font-family:'JetBrains Mono',monospace; font-size:12px; letter-spacing:.06em; color:rgba(236,234,216,.5); } @media (max-width:1200px){ .dirD .note.abs{ display:none !important; } .dirD .sk1, .dirD .sk2{ display:none !important; } } `; function SketchBanner(){ // Hand-drawn studio scene — chaotic and joyful: laptop with site preview, plants, mug, post-its, // calendar, pencil, scissors, paperclip, paper plane, stars, coffee rings, scribbles, smiley sun. return ( ); } function HomeMix(){ const [t, setTweak] = useTweaks(MIX_DEFAULTS); const [filter, setFilter] = React.useState('All'); const blobRef = React.useRef(null); const [blobText, setBlobText] = React.useState('hi ✎'); React.useEffect(()=>{ const move = (e)=>{ if(!blobRef.current) return; blobRef.current.style.left = (e.clientX+18)+'px'; blobRef.current.style.top = (e.clientY+18)+'px'; blobRef.current.classList.add('show'); }; const over = (e)=>{ const tg = e.target; if (!tg || !tg.closest) return; if (tg.closest('a,button')) setBlobText('click ↗'); else if (tg.closest('.irow')) setBlobText('peek →'); else if (tg.closest('.pkg')) setBlobText('pick this!'); else if (tg.closest('.sticker')) setBlobText('drag me ✋'); else if (tg.closest('.testi-cell')) setBlobText('xo'); else if (tg.closest('.pstep')) setBlobText('step →'); else if (tg.closest('h1, h2')) setBlobText('hello ✨'); else setBlobText('hi ✎'); }; const leave = ()=>{ if(blobRef.current) blobRef.current.classList.remove('show'); }; window.addEventListener('mousemove', move); window.addEventListener('mouseover', over); document.addEventListener('mouseleave', leave); return ()=>{ window.removeEventListener('mousemove', move); window.removeEventListener('mouseover', over); document.removeEventListener('mouseleave', leave); }; },[]); const filters = ['All','Squarespace','Shopify','WordPress']; const filtered = filter==='All' ? PROJECTS : PROJECTS.filter(p=>p.platform===filter); const p = Array.isArray(t.palette) ? t.palette : MIX_DEFAULTS.palette; const platDot = (pl) => ({ Squarespace:p[4], Shopify:p[3], WordPress:p[2], Apps:'#6366f1' }[pl] || p[2]); const inkR = parseInt(p[2].slice(1,3),16), inkG = parseInt(p[2].slice(3,5),16), inkB = parseInt(p[2].slice(5,7),16); const paletteVars = { '--bg': p[0], '--paper': p[1], '--ink': p[2], '--ink-soft': `rgba(${inkR},${inkG},${inkB},.65)`, '--rule': `rgba(${inkR},${inkG},${inkB},.18)`, '--terra': p[3], '--olive': p[4], '--rose': p[5], }; return (
Independent web design & development for small businesses, studios, and the people behind them. Squarespace, Shopify, WordPress, and apps.
Hover any row to peek at the site. Click to read the full case study.
Fixed-price packages so you know exactly what you're getting before we start. No surprise invoices, no scope creep, no late-night emails about “one more thing.”
{s.d}
{e.currentTarget.style.display='none'}}/>I'm Maia, a one-person web studio in Los Angeles. I've spent the last 11 years quietly building beautiful, considered websites for small businesses and creative brands.
Because I do both the design and the build, you get a site that's pixel-tight on every breakpoint, and you only have one inbox to email when something needs fixing. (You'll like my inbox. I reply.)
I'm also somehow very organized — colour-coded Notion, named layers, tidy version history, briefs that come back when I said they would. Your project won't fall through the cracks.
“{t.q}”
Free 30-minute intro call, no pitch deck required. We'll figure out whether we're a fit and what your project might actually look like.
Book an intro call →