44 edits here will be overwritten on the next build.
55
66 How to make changes:
7- - WORDS (titles, subtitle, CTA, footer, captions, character dialogue,
8- terminal commands, chapter list): edit visual-quickstart/content.yaml
7+ - WORDS (page/tab titles, nav labels, site chrome, subtitle, CTA, footer,
8+ captions, character dialogue, terminal commands, chapter list): edit
9+ visual-quickstart/content.yaml (see its top-level `site:` section)
910 - STYLES (CSS): edit the CSS block in build_site.py
1011 - HTML STRUCTURE / layout: edit the page templates in build_site.py
1112 (index_page / chapter_page / banner / nav / panel)
@@ -73,12 +74,20 @@ a{color:var(--teal)}
7374.cell {position : relative;margin : 0 ;background : var (--card );border-radius : 22px ;
7475 padding : 14px ;box-shadow : var (--shadow )}
7576.cell .panel {display : block;width : 100% ;height : auto;border-radius : 12px }
76- .cap {font-weight : 700 ;font-size : 1.06 rem ;color : var (--ink );margin : 2px 4px 12px ;
77+ .cap {font-weight : 700 ;font-size : 1.325 rem ;color : var (--ink );margin : 2px 4px 12px ;
7778 padding-left : 24px ;line-height : 1.25 }
7879.badge {position : absolute;top : -14px ;left : -14px ;z-index : 2 ;width : 46px ;height : 46px ;
7980 display : grid;place-items : center;border-radius : 50% ;background : var (--orange );
8081 color : # fff ;font-weight : 800 ;font-size : 1.25rem ;border : 4px solid # fff ;
8182 box-shadow : 0 6px 14px rgba (232 , 112 , 42 , .4 )}
83+ /* book-icon link to the matching course section, top-right of each frame */
84+ .frame-link {position : absolute;top : -14px ;right : -14px ;z-index : 2 ;width : 46px ;height : 46px ;
85+ display : grid;place-items : center;border-radius : 50% ;background : var (--teal );
86+ color : # fff ;border : 4px solid # fff ;box-shadow : 0 6px 14px rgba (15 , 138 , 138 , .4 );
87+ text-decoration : none;transition : transform .15s ease, filter .15s ease}
88+ .frame-link : hover {transform : translateY (-2px ) scale (1.05 );filter : brightness (1.08 )}
89+ .frame-link : focus-visible {outline : 3px solid # 58a6ff ;outline-offset : 2px }
90+ .frame-link svg {width : 24px ;height : 24px }
8291.foot {text-align : center;color : # 6c6657 ;font-size : .92rem ;padding : 26px 18px 46px }
8392/* home */
8493body .home {display : flex;flex-direction : column;min-height : 100vh }
@@ -98,7 +107,7 @@ body.home{display:flex;flex-direction:column;min-height:100vh}
98107.home-main {flex : 1 ;width : 100% ;max-width : 920px ;margin : 0 auto;padding : 20px 20px 40px ;
99108 display : flex;flex-direction : column}
100109.home-intro {margin : 6px 0 0 }
101- .home-intro .cap {text-align : center;padding-left : 0 ;font-size : 1.12 rem }
110+ .home-intro .cap {text-align : center;padding-left : 0 ;font-size : 1.40 rem }
102111.intro-cta {text-align : center;margin : 24px auto 0 }
103112.intro-cta .cta {border : 3px solid # fff ;box-shadow : 0 10px 24px rgba (0 , 0 , 0 , .40 )}
104113.intro-cta .cta : hover {transform : translateY (-2px )}
@@ -131,7 +140,68 @@ body.home{display:flex;flex-direction:column;min-height:100vh}
131140@media (max-width : 600px ){
132141 .strip {padding : 4px 8px 28px ;gap : 20px }
133142 .cell {padding : 8px ;border-radius : 16px }
134- .cap {font-size : .98 rem ;padding-left : 28px ;margin : 2px 4px 8px }
143+ .cap {font-size : 1.225 rem ;padding-left : 28px ;margin : 2px 4px 8px }
135144 .home-main {padding : 14px 8px 32px }
136145 .badge {width : 38px ;height : 38px ;font-size : 1.05rem ;top : -12px ;left : -8px }
146+ .frame-link {width : 38px ;height : 38px ;top : -12px ;right : -8px }
147+ .frame-link svg {width : 20px ;height : 20px }
148+ }
149+ /* ===== starter engagement layer: scroll reveal - typewriter - copy ===== */
150+ /* Hidden initial state is only armed once JS adds .anim-ready, so no-JS and
151+ reduced-motion users still see every frame fully rendered. */
152+ .anim-ready main .strip .cell {opacity : 0 ;transform : translateY (26px );
153+ will-change : opacity, transform;
154+ transition : opacity .6s cubic-bezier (.22 , .61 , .36 , 1 ), transform .6s cubic-bezier (.22 , .61 , .36 , 1 )}
155+ .anim-ready main .strip .cell .in-view {opacity : 1 ;transform : none}
156+ .anim-ready main .strip .cell .badge {transform : scale (.2 );opacity : 0 ;
157+ transition : transform .5s cubic-bezier (.34 , 1.56 , .64 , 1 ) .14s , opacity .3s ease .14s }
158+ .anim-ready main .strip .cell .in-view .badge {transform : scale (1 );opacity : 1 }
159+ /* per-command copy buttons: real HTML <button>s overlaid on the terminal bar
160+ (kept OUTSIDE the role="img" panel SVG so they stay keyboard/AT accessible).
161+ Positioned by % over .panel-wrap, which exactly bounds the fixed-ratio SVG. */
162+ .panel-wrap {position : relative;display : block}
163+ .term-copy {position : absolute;margin : 0 ;padding : 0 1.2% 0 0 ;border : 0 ;background : transparent;
164+ display : flex;align-items : center;justify-content : flex-end;cursor : pointer;
165+ -webkit-tap-highlight-color : transparent}
166+ .term-copy .tc-box {position : relative;height : 74% ;aspect-ratio : 1 ;display : grid;
167+ place-items : center;border-radius : 22% ;border : 1px solid # 30363d ;background : # 21262d ;
168+ opacity : 0 ;transition : opacity .15s ease, background .15s ease}
169+ .term-copy : hover .tc-box , .term-copy : focus-visible .tc-box {opacity : 1 }
170+ .term-copy : hover .tc-box {background : # 30363d }
171+ .term-copy : focus {outline : none}
172+ .term-copy : focus-visible .tc-box {outline : 2px solid # 58a6ff ;outline-offset : 2px }
173+ .term-copy .tc-box svg {position : absolute;width : 62% ;height : 62% ;transition : opacity .15s ease}
174+ .term-copy .tc-ico {color : # 8b949e }
175+ .term-copy : hover .tc-ico {color : # c9d1d9 }
176+ .term-copy .tc-chk {color : # 3fb950 ;opacity : 0 }
177+ .term-copy .copied .tc-ico {opacity : 0 }
178+ .term-copy .copied .tc-chk {opacity : 1 }
179+ .term-copy .copied .tc-box {border-color : # 3fb950 }
180+ /* touch devices have no hover: keep the copy icons visible there */
181+ @media (hover : none){.term-copy .tc-box {opacity : 1 }}
182+ /* ===== homepage entrance: the opening panel comes alive on load ===== */
183+ /* Pure CSS (runs on first paint, no JS). Fill-mode 'both' supplies the hidden
184+ start state, so removing the animation (reduced motion) leaves things visible. */
185+ @keyframes home-rise{from {opacity : 0 ;transform : translateY (-18px )}to {opacity : 1 ;transform : none}}
186+ @keyframes home-fade-up{from {opacity : 0 ;transform : translateY (20px )}to {opacity : 1 ;transform : none}}
187+ @keyframes home-panel-in{from {opacity : 0 ;transform : scale (.97 )}to {opacity : 1 ;transform : none}}
188+ @keyframes home-bubble-pop{0% {opacity : 0 ;transform : scale (.5 )}70% {opacity : 1 ;transform : scale (1.06 )}100% {opacity : 1 ;transform : scale (1 )}}
189+ @keyframes home-av-wave{0% {opacity : 0 ;transform : scale (.6 ) rotate (-12deg )}55% {opacity : 1 ;transform : scale (1.05 ) rotate (9deg )}72% {transform : rotate (-5deg )}86% {transform : rotate (3deg )}100% {opacity : 1 ;transform : scale (1 ) rotate (0 )}}
190+ body .home .banner-wrap {animation : home-rise .6s ease both}
191+ body .home .home-av {transform-origin : 62% 88% ;animation : home-av-wave 1s cubic-bezier (.34 , 1.56 , .64 , 1 ) .1s both}
192+ body .home .home-intro {animation : home-panel-in .6s ease .15s both}
193+ body .home .home-intro .cap {animation : home-fade-up .55s ease .3s both}
194+ body .home .home-intro .panel > g {transform-box : fill-box;transform-origin : center;
195+ animation : home-bubble-pop .55s cubic-bezier (.34 , 1.56 , .64 , 1 ) both}
196+ body .home .home-intro .panel > g : nth-of-type (1 ){animation-delay : .6s }
197+ body .home .home-intro .panel > g : nth-of-type (2 ){animation-delay : 2.6s }
198+ body .home .home-intro .panel > g : nth-of-type (3 ){animation-delay : 4.6s }
199+ /* CTA and chapter selector are NOT animated: they must be clickable immediately. */
200+ @media (prefers-reduced-motion : reduce){
201+ .anim-ready main .strip .cell ,
202+ .anim-ready main .strip .cell .badge {opacity : 1 ;transform : none;transition : none}
203+ .term-copy .tc-box , .term-copy .tc-box svg {transition : none}
204+ .frame-link {transition : none}
205+ body .home .banner-wrap , body .home .home-av , body .home .home-intro ,
206+ body .home .home-intro .cap , body .home .home-intro .panel > g {animation : none}
137207}
0 commit comments