@@ -299,6 +299,7 @@ nav.scrolled { box-shadow: 0 2px 20px rgba(0,0,0,.35); }
299299}
300300
301301. hero-title {
302+ position : relative;
302303 font-size : clamp ( 2.8rem , 6vw , 4.8rem ) ;
303304 color : var ( --white ) ;
304305 margin-bottom : 1.5rem ;
@@ -307,16 +308,43 @@ nav.scrolled { box-shadow: 0 2px 20px rgba(0,0,0,.35); }
307308}
308309. hero-title span { color : var ( --teal ) ; }
309310
311+ /* Typewriter animation layers.
312+ .hero-title span { color:teal } has specificity 0-1-1, so we need
313+ 0-2-0 here to keep the wrapper spans white while inner <span>s stay teal. */
314+ . hero-title . hero-title-ghost {
315+ display : block; /* sets the h1 height so layout never shifts */
316+ color : var ( --white ) ;
317+ opacity : 0.18 ;
318+ pointer-events : none;
319+ user-select : none;
320+ }
321+ . hero-title-ghost-teal { color : var ( --teal ) ; }
322+
323+ . hero-title . hero-title-typed {
324+ position : absolute;
325+ top : 0 ; left : 0 ;
326+ display : block;
327+ color : var ( --white ) ; /* text defaults to white; inner <span> gets teal via .hero-title span */
328+ }
329+ /* Blinking cursor - permanent after typing completes */
330+ . hero-title-typed . typing :: after {
331+ content : '|' ;
332+ color : rgba ( 255 , 255 , 255 , .55 ) ;
333+ animation : hero-caret-blink .7s step-end infinite;
334+ }
335+ @keyframes hero-caret-blink {
336+ 0% , 100% { opacity : 1 ; }
337+ 50% { opacity : 0 ; }
338+ }
339+
310340. hero-desc {
311341 font-size : 1.15rem ;
312342 color : rgba ( 255 , 255 , 255 , .65 ) ;
313343 max-width : 580px ;
314344 line-height : 1.8 ;
315- margin-bottom : 2 .5rem ;
345+ margin-bottom : 1 .5rem ;
316346}
317347
318- . hero-ctas { display : flex; flex-wrap : wrap; gap : 1rem ; }
319-
320348. hero-affiliations {
321349 position : relative; z-index : 1 ;
322350 margin-top : 5rem ;
@@ -1876,10 +1904,47 @@ footer {
18761904. rfilter-dot {
18771905 width : 8px ; height : 8px ; border-radius : 50% ; flex-shrink : 0 ;
18781906}
1879- . rfilter-dot . cancer { background : # fca5a5; }
1880- . rfilter-dot . neuro { background : # c4b5fd; }
1881- . rfilter-dot . bioinformatics { background : # 5eead4; }
1882- . rfilter-dot . biostatistics { background : # fcd34d; }
1907+ . rfilter-dot . cancer { background : # fca5a5; }
1908+ . rfilter-dot . neuro { background : # c4b5fd; }
1909+ . rfilter-dot . bioinformatics { background : # 5eead4; }
1910+ . rfilter-dot . biostatistics { background : # fcd34d; }
1911+ . rfilter-dot . evolutionary { background : # 86efac; }
1912+ . rfilter-dot . external { background : # 7dd3fc; }
1913+
1914+ /* Keyword search */
1915+ . research-keyword-search-wrap {
1916+ position : relative;
1917+ display : flex;
1918+ align-items : center;
1919+ max-width : 320px ;
1920+ margin-bottom : 2rem ;
1921+ }
1922+ . research-keyword-search-icon {
1923+ position : absolute;
1924+ left : .75rem ;
1925+ color : var ( --muted ) ;
1926+ pointer-events : none;
1927+ flex-shrink : 0 ;
1928+ }
1929+ . research-keyword-search {
1930+ width : 100% ;
1931+ padding : .5rem .9rem .5rem 2.25rem ;
1932+ border-radius : 999px ;
1933+ border : 1.5px solid var ( --border ) ;
1934+ background : var ( --white ) ;
1935+ color : var ( --navy ) ;
1936+ font-size : .84rem ;
1937+ font-family : var ( --font-body ) ;
1938+ transition : border-color var ( --transition ) , box-shadow var ( --transition ) ;
1939+ outline : none;
1940+ -webkit-appearance : none;
1941+ }
1942+ . research-keyword-search :: placeholder { color : var ( --muted ) ; }
1943+ . research-keyword-search : focus {
1944+ border-color : var ( --teal ) ;
1945+ box-shadow : 0 0 0 3px rgba ( 8 , 124 , 114 , .1 ) ;
1946+ }
1947+ . research-keyword-search :: -webkit-search-cancel-button { cursor : pointer; }
18831948
18841949/* Project card grid */
18851950. research-card-grid {
@@ -1939,6 +2004,8 @@ footer {
19392004. research-theme-pill . neuro { background : # f5f3ff; color : # 6d31cc; } /* was passing; darkened for consistency */
19402005. research-theme-pill . bioinformatics { background : # f0fdfa; color : # 087c72; } /* uses new --teal, passes 4.5:1 */
19412006. research-theme-pill . biostatistics { background : # fffbeb; color : # 92400e; } /* amber-800 ~7.5:1 on pill-bg, WCAG AA */
2007+ . research-theme-pill . evolutionary { background : # f0fdf4; color : # 166534; } /* green-800 ~7:1 on pill-bg, WCAG AA */
2008+ . research-theme-pill . external { background : # f0f9ff; color : # 0369a1; } /* sky-700 ~5.7:1 on pill-bg, WCAG AA */
19422009
19432010. research-card-title {
19442011 font-size : .9rem ;
@@ -2006,6 +2073,14 @@ footer {
20062073 border-color : # fcd34d;
20072074 background : # fffef5;
20082075}
2076+ . research-card [data-theme ~= "evolutionary" ]: hover {
2077+ border-color : # 86efac;
2078+ background : # f7fff9;
2079+ }
2080+ . research-card [data-theme ~= "external" ]: hover {
2081+ border-color : # 7dd3fc;
2082+ background : # f5faff;
2083+ }
20092084/* Stripe grows on hover */
20102085. research-card : hover . research-card-stripe { height : 6px ; }
20112086
@@ -2205,6 +2280,8 @@ footer {
22052280. research-pub-panel-summary . neuro { border-left : 4px solid # c4b5fd; }
22062281. research-pub-panel-summary . bioinformatics { border-left : 4px solid # 5eead4; }
22072282. research-pub-panel-summary . biostatistics { border-left : 4px solid # fcd34d; }
2283+ . research-pub-panel-summary . evolutionary { border-left : 4px solid # 86efac; }
2284+ . research-pub-panel-summary . external { border-left : 4px solid # 7dd3fc; }
22082285. research-pub-panel-chevron {
22092286 margin-left : auto;
22102287 flex-shrink : 0 ;
0 commit comments