diff --git a/web/assets/brand/app-icon-1024.png b/web/assets/brand/app-icon-1024.png index 1cce1d4..3f35ce0 100644 Binary files a/web/assets/brand/app-icon-1024.png and b/web/assets/brand/app-icon-1024.png differ diff --git a/web/assets/brand/apple-touch-icon.png b/web/assets/brand/apple-touch-icon.png index 0d4cff6..214a794 100644 Binary files a/web/assets/brand/apple-touch-icon.png and b/web/assets/brand/apple-touch-icon.png differ diff --git a/web/assets/brand/favicon-16.png b/web/assets/brand/favicon-16.png index 1c0a124..74483c8 100644 Binary files a/web/assets/brand/favicon-16.png and b/web/assets/brand/favicon-16.png differ diff --git a/web/assets/brand/favicon-32.png b/web/assets/brand/favicon-32.png index 27d3b27..e14a9f9 100644 Binary files a/web/assets/brand/favicon-32.png and b/web/assets/brand/favicon-32.png differ diff --git a/web/assets/brand/icon.svg b/web/assets/brand/icon.svg index d72dcb0..95a4816 100644 --- a/web/assets/brand/icon.svg +++ b/web/assets/brand/icon.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/web/assets/brand/mark.svg b/web/assets/brand/mark.svg index 5e8532f..3975581 100644 --- a/web/assets/brand/mark.svg +++ b/web/assets/brand/mark.svg @@ -1 +1,17 @@ - \ No newline at end of file + diff --git a/web/assets/img/camera-plate.webp b/web/assets/img/camera-plate.webp index 05adc73..59ad46a 100644 Binary files a/web/assets/img/camera-plate.webp and b/web/assets/img/camera-plate.webp differ diff --git a/web/assets/img/char-a.webp b/web/assets/img/char-a.webp index 8f151fc..51aa848 100644 Binary files a/web/assets/img/char-a.webp and b/web/assets/img/char-a.webp differ diff --git a/web/assets/img/char-b.webp b/web/assets/img/char-b.webp index 4c611f9..a792c47 100644 Binary files a/web/assets/img/char-b.webp and b/web/assets/img/char-b.webp differ diff --git a/web/assets/img/char-c.webp b/web/assets/img/char-c.webp index 8698a15..a07a48e 100644 Binary files a/web/assets/img/char-c.webp and b/web/assets/img/char-c.webp differ diff --git a/web/assets/img/cmp-raw.jpg b/web/assets/img/cmp-raw.jpg new file mode 100644 index 0000000..45fe109 Binary files /dev/null and b/web/assets/img/cmp-raw.jpg differ diff --git a/web/assets/img/cmp-topaz.webp b/web/assets/img/cmp-topaz.webp new file mode 100644 index 0000000..b968fda Binary files /dev/null and b/web/assets/img/cmp-topaz.webp differ diff --git a/web/assets/img/final-stage.webp b/web/assets/img/final-stage.webp index f20243b..6286d97 100644 Binary files a/web/assets/img/final-stage.webp and b/web/assets/img/final-stage.webp differ diff --git a/web/assets/img/hero-atrium.jpg b/web/assets/img/hero-atrium.jpg index 0562f6c..bef2dad 100644 Binary files a/web/assets/img/hero-atrium.jpg and b/web/assets/img/hero-atrium.jpg differ diff --git a/web/assets/img/hero-dunes.jpg b/web/assets/img/hero-dunes.jpg index 01d783e..f04d5c6 100644 Binary files a/web/assets/img/hero-dunes.jpg and b/web/assets/img/hero-dunes.jpg differ diff --git a/web/assets/img/hero-lighthouse.jpg b/web/assets/img/hero-lighthouse.jpg index 503051e..11a413f 100644 Binary files a/web/assets/img/hero-lighthouse.jpg and b/web/assets/img/hero-lighthouse.jpg differ diff --git a/web/assets/img/hero-soundstage.jpg b/web/assets/img/hero-soundstage.jpg index 9fd6589..de5f06c 100644 Binary files a/web/assets/img/hero-soundstage.jpg and b/web/assets/img/hero-soundstage.jpg differ diff --git a/web/assets/img/reel-camera.webp b/web/assets/img/reel-camera.webp index 4efa10c..d7875e4 100644 Binary files a/web/assets/img/reel-camera.webp and b/web/assets/img/reel-camera.webp differ diff --git a/web/assets/img/reel-image.webp b/web/assets/img/reel-image.webp index 4f6711c..92d245a 100644 Binary files a/web/assets/img/reel-image.webp and b/web/assets/img/reel-image.webp differ diff --git a/web/assets/img/reel-lipsync.webp b/web/assets/img/reel-lipsync.webp index 3084007..10ccc7f 100644 Binary files a/web/assets/img/reel-lipsync.webp and b/web/assets/img/reel-lipsync.webp differ diff --git a/web/assets/img/reel-t2v.webp b/web/assets/img/reel-t2v.webp index eea40be..ecc64ec 100644 Binary files a/web/assets/img/reel-t2v.webp and b/web/assets/img/reel-t2v.webp differ diff --git a/web/assets/img/reel-upscale.webp b/web/assets/img/reel-upscale.webp index 6e5fc56..99d83d8 100644 Binary files a/web/assets/img/reel-upscale.webp and b/web/assets/img/reel-upscale.webp differ diff --git a/web/assets/img/ref-2.webp b/web/assets/img/ref-2.webp index 12529f9..84ae3a6 100644 Binary files a/web/assets/img/ref-2.webp and b/web/assets/img/ref-2.webp differ diff --git a/web/assets/img/ref-3.webp b/web/assets/img/ref-3.webp index a291965..a13a166 100644 Binary files a/web/assets/img/ref-3.webp and b/web/assets/img/ref-3.webp differ diff --git a/web/assets/img/showcase-dunes.webp b/web/assets/img/showcase-dunes.webp index 1ec0861..8f59133 100644 Binary files a/web/assets/img/showcase-dunes.webp and b/web/assets/img/showcase-dunes.webp differ diff --git a/web/assets/img/workspace-empty.webp b/web/assets/img/workspace-empty.webp index a7e8396..5a88daa 100644 Binary files a/web/assets/img/workspace-empty.webp and b/web/assets/img/workspace-empty.webp differ diff --git a/web/assets/video/card-camera.mp4 b/web/assets/video/card-camera.mp4 index 957fb89..9b67261 100644 Binary files a/web/assets/video/card-camera.mp4 and b/web/assets/video/card-camera.mp4 differ diff --git a/web/assets/video/card-character.mp4 b/web/assets/video/card-character.mp4 index 68f4c69..237ffd7 100644 Binary files a/web/assets/video/card-character.mp4 and b/web/assets/video/card-character.mp4 differ diff --git a/web/assets/video/card-image.mp4 b/web/assets/video/card-image.mp4 index c6bbad4..de582c7 100644 Binary files a/web/assets/video/card-image.mp4 and b/web/assets/video/card-image.mp4 differ diff --git a/web/assets/video/card-lipsync.mp4 b/web/assets/video/card-lipsync.mp4 index 6e6c7bd..1c36c7b 100644 Binary files a/web/assets/video/card-lipsync.mp4 and b/web/assets/video/card-lipsync.mp4 differ diff --git a/web/assets/video/card-upscale.mp4 b/web/assets/video/card-upscale.mp4 index d3a56a2..4f3a8a3 100644 Binary files a/web/assets/video/card-upscale.mp4 and b/web/assets/video/card-upscale.mp4 differ diff --git a/web/assets/video/hero-atrium.mp4 b/web/assets/video/hero-atrium.mp4 index be0fe20..617f4ba 100644 Binary files a/web/assets/video/hero-atrium.mp4 and b/web/assets/video/hero-atrium.mp4 differ diff --git a/web/assets/video/hero-dunes.mp4 b/web/assets/video/hero-dunes.mp4 index 3263692..a01211e 100644 Binary files a/web/assets/video/hero-dunes.mp4 and b/web/assets/video/hero-dunes.mp4 differ diff --git a/web/assets/video/hero-lighthouse-sm.mp4 b/web/assets/video/hero-lighthouse-sm.mp4 index 0b58060..ba69b84 100644 Binary files a/web/assets/video/hero-lighthouse-sm.mp4 and b/web/assets/video/hero-lighthouse-sm.mp4 differ diff --git a/web/assets/video/hero-lighthouse.mp4 b/web/assets/video/hero-lighthouse.mp4 index 2723934..5086bea 100644 Binary files a/web/assets/video/hero-lighthouse.mp4 and b/web/assets/video/hero-lighthouse.mp4 differ diff --git a/web/assets/video/hero-soundstage.mp4 b/web/assets/video/hero-soundstage.mp4 index 0e30456..be1b0db 100644 Binary files a/web/assets/video/hero-soundstage.mp4 and b/web/assets/video/hero-soundstage.mp4 differ diff --git a/web/css/home.css b/web/css/home.css index 3086db2..324a949 100644 --- a/web/css/home.css +++ b/web/css/home.css @@ -40,7 +40,7 @@ a { color: inherit; } .nav.solid { background: rgba(10,10,12,.82); border-color: var(--line); } .brand { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; flex: none; } .brand-logo { width: 30px; height: 30px; transition: transform .8s var(--ease-out); } -.brand:hover .brand-logo { transform: scale(1.06); } +.brand:hover .brand-logo { transform: rotate(-8deg) scale(1.06); } .brand-word { font-weight: 600; font-size: 17px; letter-spacing: -0.025em; white-space: nowrap; } .brand-word em { font: italic 400 19px var(--font-serif); color: var(--ink-2); letter-spacing: -0.01em; } .nav-links { display: flex; align-items: center; gap: 2px; flex: 1; } @@ -110,7 +110,7 @@ a { color: inherit; } .hero-title .word { display: inline-block; transform: translateY(110%); transition: transform 1.1s var(--ease-out); } .hero-title.in .word { transform: none; } .hero-title.out .word { transform: translateY(-110%); transition: transform .6s var(--ease-io); } -.hero-title .serif { font-weight: 400; font-style: italic; letter-spacing: -0.02em; padding-right: .06em; color: var(--silver-2); background: linear-gradient(100deg, var(--silver-1) 0%, var(--silver-2) 42%, var(--ember-2) 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; text-shadow: none; } +.hero-title .serif { font-weight: 400; letter-spacing: -0.03em; color: var(--silver-2); } .hero-sub { max-width: 520px; margin: 22px 0 0; font-size: clamp(15px, 1.4vw, 18px); color: #d8d4cd; line-height: 1.5; text-shadow: 0 1px 18px rgba(0,0,0,.9); transition: opacity .6s, transform .8s var(--ease-out); } .hero-sub.swap { opacity: 0; transform: translateY(8px); } .hero-actions { display: flex; align-items: center; gap: 14px; margin-top: 30px; flex-wrap: wrap; } @@ -123,13 +123,6 @@ a { color: inherit; } .hero.paused .dot-b.on i { animation-play-state: paused; } @keyframes dotfill { to { transform: scaleX(1); } } .dot-b:focus-visible { outline: 2px solid var(--silver-1); outline-offset: 3px; } -.hold-b { position: relative; width: 16px; height: 16px; margin-left: 4px; padding: 0; border: 0; background: none; cursor: pointer; color: rgba(242,239,233,.7); } -.hold-b::before, .hold-b::after { content: ""; position: absolute; top: 4px; width: 2px; height: 8px; border-radius: 1px; background: currentColor; } -.hold-b::before { left: 5px; } .hold-b::after { left: 9px; } -.hold-b.is-held::before { left: 5px; top: 4px; width: 0; height: 0; border-radius: 0; background: none; border-style: solid; border-width: 4px 0 4px 7px; border-color: transparent transparent transparent currentColor; } -.hold-b.is-held::after { display: none; } -.hold-b:hover { color: var(--silver-1); } -.hold-b:focus-visible { outline: 2px solid var(--silver-1); outline-offset: 3px; border-radius: 4px; } .prompt { position: absolute; right: max(16px, calc((100vw - 1320px) / 2)); bottom: 108px; width: 400px; padding: 14px 14px 12px; border-radius: 20px; text-align: left; background: rgba(16,16,19,.6); border: 1px solid var(--line-2); @@ -342,7 +335,6 @@ h2 { margin: 0; font-weight: 500; font-size: clamp(38px, 6vw, 84px); line-height .foot nav { display: flex; gap: 22px; } .foot a { text-decoration: none; } .foot a:hover { color: var(--ink); } .foot p { margin: 0; } -.foot .foot-note { flex-basis: 100%; font-size: 12.5px; } .brand.small .brand-word { color: var(--ink-2); } @keyframes fade { from { opacity: 0; } } @@ -476,66 +468,25 @@ h2 { margin: 0; font-weight: 500; font-size: clamp(38px, 6vw, 84px); line-height .sharp.playing img { opacity: 0; } .lb figcaption { z-index: 2; } -/* ---------- reframe ---------- */ +/* ---------- before / after compare ---------- */ .b-tall { grid-row: span 2; } +.compare { position: relative; margin-top: 22px; aspect-ratio: 4 / 3; border-radius: 16px; overflow: hidden; cursor: ew-resize; touch-action: pan-y; user-select: none; border: 1px solid var(--line); } +.compare img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scale(1.35); transform-origin: 62% 52%; pointer-events: none; } +.cmp-a { image-rendering: auto; } +.cmp-b { clip-path: inset(0 0 0 var(--p)); } +.cmp-line { position: absolute; top: 0; bottom: 0; left: var(--p); width: 2px; margin-left: -1px; background: var(--silver-1); box-shadow: 0 0 18px rgba(255,255,255,.6); } +.cmp-line i { position: absolute; top: 50%; left: 50%; width: 34px; height: 34px; margin: -17px 0 0 -17px; border-radius: 50%; background: rgba(20,20,24,.7); border: 1.5px solid var(--silver-1); backdrop-filter: blur(8px); } +.cmp-line i::before, .cmp-line i::after { content: ""; position: absolute; top: 12px; width: 7px; height: 7px; border-left: 1.5px solid var(--silver-1); border-bottom: 1.5px solid var(--silver-1); } +.cmp-line i::before { left: 8px; transform: rotate(45deg); } .cmp-line i::after { right: 8px; transform: rotate(-135deg); } .cmp-tag { position: absolute; top: 12px; padding: 5px 9px; border-radius: 999px; font: 500 11px/1 var(--font-mono); background: rgba(14,14,17,.6); border: 1px solid var(--line-2); } .cmp-tag.l { left: 12px; } .cmp-tag.r { right: 12px; color: var(--ember-2); } +.compare input { position: absolute; inset: auto 0 0; width: 100%; opacity: 0; height: 100%; margin: 0; cursor: ew-resize; } @media (max-width: 900px) { .b-tall { grid-row: auto; } } .b-tall { display: flex; flex-direction: column; } -.reframe { position: relative; flex: 1; min-height: 280px; margin-top: 22px; border-radius: 16px; overflow: hidden; border: 1px solid var(--line); } -.reframe img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; } -.rf-win { position: absolute; top: 10%; bottom: 10%; left: 50%; aspect-ratio: 9 / 16; border-radius: 10px; border: 1.5px solid var(--silver-1); box-shadow: 0 0 0 100vmax rgba(8, 8, 10, 0.62); transform: translateX(-50%); animation: rf 8s ease-in-out infinite alternate; } -@keyframes rf { from { left: 34%; } to { left: 64%; } } -@media (max-width: 900px) { .reframe { aspect-ratio: 4 / 3; min-height: 0; } } -@media (prefers-reduced-motion: reduce) { .rf-win { animation: none; } } +.b-tall .compare { flex: 1; aspect-ratio: auto; min-height: 280px; } +@media (max-width: 900px) { .b-tall .compare { aspect-ratio: 4 / 3; min-height: 0; } } /* ---------- Tier notes ---------- */ .tier .note { margin: 0 0 24px; font-size: 14px; color: var(--ink-2); display: grid; gap: 2px; } .tier .note em { font-style: normal; color: var(--ink); } .tier .note span { font-size: 12.5px; color: var(--ink-3); } - -/* ---------- design round: lit set, glass edges, depth, phone ergonomics ---------- */ -/* Hero: lens vignette + faint film-gate line. Sits above video/shade (z -2/-1), below the copy, dots and prompt. */ -.hero::before { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; - background: radial-gradient(120% 90% at 62% 44%, transparent 56%, rgba(0,0,0,.55) 100%); - box-shadow: inset 0 0 0 1px rgba(242,239,233,.06); } -/* Prompt card: warm rim light (1px masked ring) so it sits in the same lit scene. */ -.prompt::before { content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1px; pointer-events: none; - background: linear-gradient(135deg, rgba(255,179,107,.5), rgba(255,255,255,.04) 35%, rgba(255,255,255,0) 60%, rgba(255,107,61,.28)); - -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; - mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0); } -/* Bento cards: lit rim from top-left and a soft lift, same glass language as .pill. */ -.b::before { content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 1px; pointer-events: none; - background: linear-gradient(160deg, rgba(244,242,238,.32), rgba(244,242,238,.04) 35%, rgba(244,242,238,.02) 70%, rgba(244,242,238,.12)); - -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; - mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0); } -.b, .tier { box-shadow: inset 0 1px 0 rgba(255,255,255,.06), 0 40px 80px -50px rgba(0,0,0,.95); } -/* Depth: full-bleed photos drift against the scroll (translate is separate from the scale transform). */ -@supports (animation-timeline: view()) { - @media (prefers-reduced-motion: no-preference) { - @keyframes agv-drift { from { translate: 0 -1.5%; } to { translate: 0 1.5%; } } - .lb-banner img { animation: kb 22s var(--ease-io) infinite alternate, agv-drift linear both; animation-timeline: auto, view(); } - .final-bg img { animation: kb 24s var(--ease-io) infinite alternate, agv-drift linear both; animation-timeline: auto, view(); } - } -} -/* Keyboard focus everywhere; bigger hero-dot tap area without changing the look. */ -a:focus-visible, button:focus-visible { outline: 2px solid var(--silver-1); outline-offset: 3px; } -.dot-b { overflow: visible; } -.dot-b::after { content: ""; position: absolute; inset: -18px -4px; } -/* Phone: 44px targets and home-indicator safe area. */ -@media (max-width: 900px) { - .burger { width: 44px; height: 44px; } - .burger i { left: 12px; right: 12px; } - .burger i:first-child { top: 17px; } - .burger i:last-child { top: 25px; } - .burger[aria-expanded="true"] i:first-child, .burger[aria-expanded="true"] i:last-child { top: 21px; } - .foot nav a { display: inline-flex; align-items: center; min-height: 44px; } - .foot { padding-bottom: calc(48px + env(safe-area-inset-bottom)); } - .mnav { padding-bottom: calc(24px + env(safe-area-inset-bottom)); } -} -/* Models: two counter-moving rows of lit type (sans, then italic serif) instead of one ghosted outline row. */ -.marquee { margin-top: 56px; display: grid; gap: 10px; } -.marquee-row span { -webkit-text-stroke: 0; background: linear-gradient(180deg, rgba(244,242,238,.92), rgba(244,242,238,.22)); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; transition: filter .4s; } -.marquee-row span:hover { filter: drop-shadow(0 0 18px rgba(255,107,61,.35)); } -.marquee-row.rev { animation-direction: reverse; animation-duration: 52s; } -.marquee-row.rev span { font-family: var(--font-serif); font-style: italic; font-weight: 400; letter-spacing: -0.02em; background: linear-gradient(180deg, rgba(201,198,192,.5), rgba(255,179,107,.14)); -webkit-background-clip: text; background-clip: text; } diff --git a/web/css/tokens.css b/web/css/tokens.css index a9d1054..e08a56c 100644 --- a/web/css/tokens.css +++ b/web/css/tokens.css @@ -7,7 +7,7 @@ --line-2: rgba(235, 232, 226, 0.16); --ink: #f2efe9; --ink-2: #b9b5ad; - --ink-3: #8a867e; + --ink-3: #77736c; --silver-1: #f4f2ee; --silver-2: #c9c6c0; --silver-3: #8d8a85; diff --git a/web/favicon.ico b/web/favicon.ico index b1ce808..9ad9dde 100644 Binary files a/web/favicon.ico and b/web/favicon.ico differ diff --git a/web/index.html b/web/index.html index faf33af..60f55cd 100644 --- a/web/index.html +++ b/web/index.html @@ -4,20 +4,14 @@