@@ -3963,13 +3963,67 @@ html:not(.theme-loaded) *::after {
39633963 body [data-page = " index" ] .column-margin {
39643964 grid-column : body- end / page- end !important ;
39653965 }
3966+
3967+ /* In dark mode every container gets an opaque --gd-bg-primary background
3968+ that hides the fixed starfield canvas (z-index: -1). On the homepage
3969+ we punch all those layers transparent so the canvas shows through.
3970+ body/html keep their backgrounds — they sit BELOW the canvas in the
3971+ root stacking context and provide the base dark colour where the
3972+ canvas mask fades out. */
3973+ body .gd-homepage.quarto-dark #quarto-content ,
3974+ body .gd-homepage.quarto-dark main .content ,
3975+ body .gd-homepage.quarto-dark #quarto-document-content ,
3976+ body .gd-homepage.quarto-dark .quarto-body-content ,
3977+ body .gd-homepage.quarto-dark .page-columns ,
3978+ body .gd-homepage.quarto-dark .page-rows-contents ,
3979+ body .gd-homepage.quarto-dark .column-body ,
3980+ body .gd-homepage.quarto-dark article ,
3981+ body .gd-homepage.quarto-dark section {
3982+ background-color : transparent ;
3983+ }
39663984}
39673985
39683986/* ── Hero Section ─────────────────────────────────────── */
39693987
3988+ /* Prevent horizontal scrollbar from the 100vw starfield canvas */
3989+ .gd-homepage {
3990+ overflow-x : clip ;
3991+ }
3992+
39703993.gd-hero {
39713994 text-align : center ;
39723995 padding : 2.5rem 1rem 2rem ;
3996+ position : relative ;
3997+ overflow : visible ;
3998+ }
3999+
4000+ /* Starfield canvas: breaks out of the hero to cover the full viewport width
4001+ and extends above into the navbar area and below into body content.
4002+ Uses fixed positioning relative to the viewport so Quarto's grid layout
4003+ doesn't clip or offset it. */
4004+ #gd-starfield {
4005+ position : fixed ;
4006+ top : 0 ;
4007+ left : 0 ;
4008+ width : 100vw ;
4009+ height : 100vh ;
4010+ pointer-events : none ; /* let clicks pass through to page content */
4011+ z-index : 0 ;
4012+ transition : opacity 0.15s ease-out ;
4013+ mask-image : linear-gradient (to bottom , black 35% , transparent 85% );
4014+ -webkit-mask-image : linear-gradient (to bottom , black 35% , transparent 85% );
4015+ }
4016+
4017+ /* Re-enable pointer events only on the homepage hero area so the
4018+ dark-mode starfield can track the cursor there. */
4019+ .gd-hero #gd-starfield {
4020+ pointer-events : auto ;
4021+ }
4022+
4023+ /* Everything in the hero except the canvas must sit above it */
4024+ .gd-hero > * :not (#gd-starfield ) {
4025+ position : relative ;
4026+ z-index : 1 ;
39734027}
39744028
39754029/* When a column-margin sidebar is present, Quarto adds page-full to <main>
@@ -4047,6 +4101,217 @@ html[data-bs-theme="dark"] .navbar-logo.dark-content { display: inline !importa
40474101 margin-top : 0.5rem !important ;
40484102}
40494103
4104+ /* ── CTA Cards ("Go Further" section) ─────────────────── */
4105+
4106+ .gd-cta-grid {
4107+ display : grid ;
4108+ grid-template-columns : repeat (3 , 1fr );
4109+ gap : 1.25rem ;
4110+ margin : 1.5rem 0 2rem ;
4111+ }
4112+
4113+ .gd-cta-card {
4114+ display : flex ;
4115+ flex-direction : column ;
4116+ align-items : flex-start ;
4117+ padding : 1.5rem ;
4118+ border-radius : 12px ;
4119+ border : 1px solid rgba (0 , 0 , 0 , 0.08 );
4120+ background : linear-gradient (135deg , rgba (255 , 255 , 255 , 0.9 ), rgba (248 , 249 , 250 , 0.7 ));
4121+ text-decoration : none !important ;
4122+ color : inherit !important ;
4123+ transition : transform 0.2s ease , box-shadow 0.2s ease , border-color 0.2s ease ;
4124+ position : relative ;
4125+ overflow : hidden ;
4126+
4127+ & :hover {
4128+ transform : translateY (-3px );
4129+ box-shadow : 0 8px 24px rgba (0 , 0 , 0 , 0.1 );
4130+ border-color : rgba (0 , 0 , 0 , 0.15 );
4131+ }
4132+
4133+ & :hover .gd-cta-arrow {
4134+ transform : translateX (4px );
4135+ opacity : 1 ;
4136+ }
4137+ }
4138+
4139+ .gd-cta-icon {
4140+ font-size : 2rem ;
4141+ margin-bottom : 0.75rem ;
4142+ line-height : 1 ;
4143+ }
4144+
4145+ .gd-cta-title {
4146+ font-size : 1.15rem ;
4147+ font-weight : 600 ;
4148+ margin-bottom : 0.4rem ;
4149+ line-height : 1.3 ;
4150+ }
4151+
4152+ .gd-cta-desc {
4153+ font-size : 0.9rem ;
4154+ line-height : 1.5 ;
4155+ color : #6c757d ;
4156+ flex-grow : 1 ;
4157+ }
4158+
4159+ .gd-cta-arrow {
4160+ font-size : 1.25rem ;
4161+ margin-top : 0.75rem ;
4162+ opacity : 0.4 ;
4163+ transition : transform 0.2s ease , opacity 0.2s ease ;
4164+ font-weight : 600 ;
4165+ }
4166+
4167+ /* Dark mode CTA cards */
4168+ body .quarto-dark .gd-cta-card {
4169+ border-color : rgba (255 , 255 , 255 , 0.1 );
4170+ background : linear-gradient (135deg , rgba (255 , 255 , 255 , 0.06 ), rgba (255 , 255 , 255 , 0.02 ));
4171+
4172+ & :hover {
4173+ border-color : rgba (255 , 255 , 255 , 0.2 );
4174+ box-shadow : 0 8px 24px rgba (0 , 0 , 0 , 0.3 );
4175+ }
4176+ }
4177+
4178+ body .quarto-dark .gd-cta-desc {
4179+ color : #adb5bd ;
4180+ }
4181+
4182+ @media (max-width : 768px ) {
4183+ .gd-cta-grid {
4184+ grid-template-columns : 1fr ;
4185+ gap : 1rem ;
4186+ }
4187+ }
4188+
4189+ /* ── Feature Wall ("And So Much More") ────────────────── */
4190+
4191+ .gd-feature-wall {
4192+ margin : 3rem 0 2rem ;
4193+ hyphens : auto ;
4194+ -webkit-hyphens : auto ;
4195+ overflow-wrap : break-word ;
4196+ }
4197+
4198+ .gd-fw-heading {
4199+ text-align : center ;
4200+ font-weight : 700 ;
4201+ margin-bottom : 1.5rem ;
4202+ letter-spacing : -0.01em ;
4203+ }
4204+
4205+ .gd-fw-large ,
4206+ .gd-fw-medium ,
4207+ .gd-fw-small {
4208+ text-align : justify ;
4209+ text-justify : inter-word ;
4210+ }
4211+
4212+ .gd-fw-large {
4213+ font-size : 1.65rem ;
4214+ line-height : 1.45 ;
4215+ margin-bottom : 0.6rem ;
4216+ letter-spacing : -0.01em ;
4217+ }
4218+
4219+ .gd-fw-medium {
4220+ font-size : 1.15rem ;
4221+ line-height : 1.55 ;
4222+ margin-bottom : 0.5rem ;
4223+ }
4224+
4225+ .gd-fw-small {
4226+ font-size : 0.88rem ;
4227+ line-height : 1.65 ;
4228+ }
4229+
4230+ /* Dim the middle-dot separators slightly */
4231+ .gd-feature-wall b {
4232+ font-weight : 650 ;
4233+ }
4234+
4235+ @media (max-width : 768px ) {
4236+ .gd-fw-large {
4237+ font-size : 1.35rem ;
4238+ }
4239+ .gd-fw-medium {
4240+ font-size : 1.05rem ;
4241+ }
4242+ .gd-fw-small {
4243+ font-size : 0.82rem ;
4244+ }
4245+ }
4246+
4247+ /* ── Feature Wall Closing ─────────────────────────────── */
4248+
4249+ .gd-fw-rule {
4250+ border : none ;
4251+ height : 2px ;
4252+ margin : 3rem auto 2rem ;
4253+ max-width : 30rem ;
4254+ background : linear-gradient (
4255+ 90deg ,
4256+ transparent ,
4257+ var (--gd-accent , #6366f1 ) 25% ,
4258+ var (--gd-accent-secondary , #a855f7 ) 50% ,
4259+ var (--gd-accent , #6366f1 ) 75% ,
4260+ transparent
4261+ );
4262+ background-size : 200% 100% ;
4263+ animation : gd- rule- shimmer 4s ease-in-out infinite ;
4264+ opacity : 0.7 ;
4265+ }
4266+
4267+ @keyframes gd-rule-shimmer {
4268+ 0% { background-position : 100% 0 ; }
4269+ 50% { background-position : 0% 0 ; }
4270+ 100% { background-position : 100% 0 ; }
4271+ }
4272+
4273+ .gd-fw-closing {
4274+ text-align : center ;
4275+ padding : 0 1.5rem 2.5rem ;
4276+ max-width : 38rem ;
4277+ margin : 0 auto ;
4278+ position : relative ;
4279+ z-index : 1 ;
4280+ }
4281+
4282+ .gd-fw-closing p {
4283+ font-size : 1.05rem ;
4284+ line-height : 1.7 ;
4285+ color : #6b7280 ;
4286+ margin : 0 ;
4287+ }
4288+
4289+ body .quarto-dark .gd-fw-closing p {
4290+ color : #9ca3af ;
4291+ }
4292+
4293+ .gd-fw-closing a {
4294+ color : var (--gd-accent , #6366f1 );
4295+ text-decoration : none ;
4296+ font-weight : 600 ;
4297+ border-bottom : 1px solid transparent ;
4298+ transition : border-color 0.2s ease ;
4299+ }
4300+
4301+ .gd-fw-closing a :hover {
4302+ border-bottom-color : var (--gd-accent , #6366f1 );
4303+ }
4304+
4305+ @media (max-width : 768px ) {
4306+ .gd-fw-rule {
4307+ max-width : 80% ;
4308+ margin : 2rem auto 1.5rem ;
4309+ }
4310+ .gd-fw-closing p {
4311+ font-size : 0.95rem ;
4312+ }
4313+ }
4314+
40504315/* ── Hero Responsive ──────────────────────────────────── */
40514316
40524317@media (max-width : 768px ) {
0 commit comments