Skip to content

Commit be24efd

Browse files
Fix hero text animation: per-line masks, progressive-enhancement base styles, both fill mode
1 parent 09bb5fd commit be24efd

1 file changed

Lines changed: 38 additions & 30 deletions

File tree

docs/index.html

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -165,25 +165,33 @@
165165
opacity:0;
166166
}
167167
.kicker-rule{width:24px;height:2px;background:var(--blue)}
168-
.hero h1{
169-
margin:0 0 20px;
170-
font-size:clamp(48px,6vw,82px);
171-
line-height:.98;
172-
letter-spacing:-4px;
173-
font-weight:900;
174-
max-width:680px;
175-
overflow:hidden;
176-
}
177-
.hero h1 .line{
178-
display:block;
179-
transform:translateY(112%);
180-
}
181-
.hero h1 .blue{color:var(--blue)}
182-
.hero-copy{
183-
font-size:18px;color:var(--muted);max-width:620px;margin:0 0 28px;
184-
opacity:0;transform:translateY(16px);
185-
}
186-
.hero-actions{display:flex;gap:10px;flex-wrap:wrap;opacity:0;transform:translateY(14px)}
168+
.hero h1{
169+
margin:0 0 20px;
170+
font-size:clamp(48px,6vw,82px);
171+
line-height:1.02;
172+
letter-spacing:-3px;
173+
font-weight:900;
174+
max-width:680px;
175+
}
176+
.hero h1 .line{
177+
display:block;
178+
overflow:hidden;
179+
padding-bottom:.06em;
180+
}
181+
.hero h1 .line-inner{
182+
display:block;
183+
transform:translateY(0);
184+
}
185+
html.anim .hero h1 .line-inner{
186+
transform:translateY(112%);
187+
}
188+
.hero h1 .blue{color:var(--blue)}
189+
.hero-copy{
190+
font-size:18px;color:var(--muted);max-width:620px;margin:0 0 28px;
191+
}
192+
html.anim .hero-copy{opacity:0;transform:translateY(16px)}
193+
.hero-actions{display:flex;gap:10px;flex-wrap:wrap}
194+
html.anim .hero-actions{opacity:0;transform:translateY(14px)}
187195
.button{
188196
display:inline-flex;align-items:center;justify-content:center;
189197
min-height:50px;padding:0 20px;border-radius:var(--radius-sm);
@@ -354,14 +362,14 @@
354362
.footer-note{font-size:12px;color:#565d68;margin:18px 0 0}
355363

356364
/* Entrance choreography */
357-
html.anim .app-kicker{animation:quiet .62s var(--soft) .10s forwards}
358-
html.anim .hero h1 .line{animation:word 1.08s var(--ease) forwards}
359-
html.anim .hero h1 .line:nth-child(1){animation-delay:.25s}
360-
html.anim .hero h1 .line:nth-child(2){animation-delay:.34s}
361-
html.anim .hero-copy{animation:rise .72s var(--soft) .58s forwards}
362-
html.anim .hero-actions{animation:rise .72s var(--soft) .70s forwards}
363-
html.anim .hero-note{animation:quiet .62s var(--soft) .84s forwards}
364-
html.anim .hero-visual{animation:subject 1.08s var(--ease) .64s forwards}
365+
html.anim .app-kicker{animation:quiet .62s var(--soft) .10s both}
366+
html.anim .hero h1 .line-inner{animation:word 1s var(--ease) both}
367+
html.anim .hero h1 .line:nth-child(1) .line-inner{animation-delay:.25s}
368+
html.anim .hero h1 .line:nth-child(2) .line-inner{animation-delay:.34s}
369+
html.anim .hero-copy{animation:rise .72s var(--soft) .58s both}
370+
html.anim .hero-actions{animation:rise .72s var(--soft) .70s both}
371+
html.anim .hero-note{animation:quiet .62s var(--soft) .84s both}
372+
html.anim .hero-visual{animation:subject 1.08s var(--ease) .64s both}
365373
@keyframes word{from{transform:translateY(112%)}to{transform:translateY(0)}}
366374
@keyframes subject{from{opacity:0;transform:translateX(22px) translateY(16px)}to{opacity:1;transform:translateX(0) translateY(0)}}
367375
@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
@@ -441,7 +449,7 @@
441449
.footer-row{align-items:flex-start;flex-direction:column}
442450
}
443451
@media(prefers-reduced-motion:reduce){
444-
html.anim .app-kicker,html.anim .hero h1 .line,html.anim .hero-copy,html.anim .hero-actions,html.anim .hero-note,html.anim .hero-visual{
452+
html.anim .app-kicker,html.anim .hero h1 .line,html.anim .hero h1 .line-inner,html.anim .hero-copy,html.anim .hero-actions,html.anim .hero-note,html.anim .hero-visual{
445453
animation:none!important;opacity:1!important;transform:none!important;
446454
}
447455
html{scroll-behavior:auto}
@@ -532,8 +540,8 @@
532540
<div class="hero-copy-wrap">
533541
<div class="app-kicker"><span class="kicker-rule"></span>Android app · Open source</div>
534542
<h1>
535-
<span class="line">AI replies for</span>
536-
<span class="line">Instagram <span class="blue">DMs.</span></span>
543+
<span class="line"><span class="line-inner">AI replies for</span></span>
544+
<span class="line"><span class="line-inner">Instagram <span class="blue">DMs.</span></span></span>
537545
</h1>
538546
<p class="hero-copy">InstaReply Bot reads supported Instagram DM notifications, checks your rules, asks your selected AI provider for a response, and sends the reply through the available Android reply action.</p>
539547
<div class="hero-actions">

0 commit comments

Comments
 (0)