Skip to content

Commit aaaf97f

Browse files
authored
Improve Aliki visuals (#1505)
- Added smooth expand/collapse animations for source code toggle - Styled "Source" button with hover/click feedback - Added custom scrollbar styling for nav sidebar and source code blocks - Added text truncation with ellipsis for long class/method names in sidebar - Minor polish: theme toggle hover animation, nav link hover indent
1 parent e14946f commit aaaf97f

File tree

1 file changed

+164
-10
lines changed
  • lib/rdoc/generator/template/aliki/css

1 file changed

+164
-10
lines changed

lib/rdoc/generator/template/aliki/css/rdoc.css

Lines changed: 164 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142

143143
/* Shadows */
144144
--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px -1px rgb(0 0 0 / 10%);
145+
--shadow-md: 0 2px 8px rgb(0 0 0 / 10%);
145146
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 10%);
146147
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 10%), 0 8px 10px -6px rgb(0 0 0 / 10%);
147148

@@ -158,6 +159,13 @@
158159
/* Transitions */
159160
--transition-fast: 150ms ease-in-out;
160161
--transition-base: 200ms ease-in-out;
162+
--transition-slow: 350ms ease-in-out;
163+
--ease-out-smooth: cubic-bezier(0.4, 0, 0.2, 1);
164+
165+
/* Animation Durations */
166+
--duration-fast: 250ms;
167+
--duration-base: 300ms;
168+
--duration-medium: 350ms;
161169

162170
/* Z-Index Scale */
163171
--z-fixed: 300;
@@ -202,6 +210,7 @@
202210
--color-accent-primary: var(--color-primary-500);
203211
--color-accent-hover: var(--color-primary-400);
204212
--color-accent-subtle: rgb(235 84 79 / 10%);
213+
--color-accent-subtle-hover: rgb(235 84 79 / 20%);
205214
--color-code-bg: var(--color-neutral-800);
206215
--color-code-border: var(--color-neutral-700);
207216
--color-nav-bg: var(--color-neutral-900);
@@ -211,6 +220,7 @@
211220

212221
/* Dark theme shadows (slightly more subtle) */
213222
--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 40%), 0 1px 2px -1px rgb(0 0 0 / 40%);
223+
--shadow-md: 0 2px 8px rgb(0 0 0 / 40%);
214224
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 40%), 0 4px 6px -4px rgb(0 0 0 / 40%);
215225
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 40%), 0 8px 10px -6px rgb(0 0 0 / 40%);
216226

@@ -291,7 +301,12 @@ pre {
291301
border-radius: var(--radius-sm);
292302
cursor: pointer;
293303
opacity: 0.6;
294-
transition: opacity var(--transition-fast), background var(--transition-fast), border-color var(--transition-fast), transform var(--transition-fast);
304+
transition:
305+
opacity var(--transition-fast),
306+
background var(--transition-fast),
307+
border-color var(--transition-fast),
308+
transform var(--transition-fast),
309+
box-shadow var(--transition-fast);
295310
display: flex;
296311
align-items: center;
297312
justify-content: center;
@@ -305,10 +320,18 @@ pre {
305320
opacity: 1;
306321
background: var(--color-background-tertiary);
307322
border-color: var(--color-border-emphasis);
323+
transform: translateY(-1px);
324+
box-shadow: var(--shadow-md);
325+
}
326+
327+
.copy-code-button:focus {
328+
outline: none;
329+
box-shadow: 0 0 0 3px var(--color-accent-subtle);
308330
}
309331

310332
.copy-code-button:active {
311-
transform: scale(0.95);
333+
transform: scale(0.92);
334+
box-shadow: none;
312335
}
313336

314337
.copy-code-button svg {
@@ -320,7 +343,7 @@ pre {
320343
stroke-linecap: round;
321344
stroke-linejoin: round;
322345
color: var(--color-text-secondary);
323-
transition: color var(--transition-fast);
346+
transition: color var(--transition-fast), transform var(--transition-base);
324347
}
325348

326349
.copy-code-button:hover svg {
@@ -457,7 +480,11 @@ header.top-navbar .navbar-search form {
457480
border-radius: var(--radius-md);
458481
color: var(--color-text-primary);
459482
cursor: pointer;
460-
transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);
483+
transition:
484+
background var(--transition-fast),
485+
border-color var(--transition-fast),
486+
color var(--transition-fast),
487+
transform var(--transition-fast);
461488
font-size: var(--font-size-lg);
462489
line-height: 1;
463490
width: 2.5rem;
@@ -468,6 +495,7 @@ header.top-navbar .navbar-search form {
468495
background: var(--color-background-secondary);
469496
border-color: var(--color-accent-primary);
470497
color: var(--color-accent-primary);
498+
transform: scale(1.05);
471499
}
472500

473501
.theme-toggle:focus {
@@ -476,13 +504,17 @@ header.top-navbar .navbar-search form {
476504
box-shadow: 0 0 0 3px var(--color-accent-subtle);
477505
}
478506

507+
.theme-toggle:active {
508+
transform: scale(0.95);
509+
}
510+
479511
.theme-toggle-icon {
480512
display: inline-block;
481-
transition: transform var(--transition-base);
513+
transition: transform var(--duration-base) var(--ease-out-smooth);
482514
}
483515

484516
.theme-toggle:hover .theme-toggle-icon {
485-
transform: rotate(20deg);
517+
transform: rotate(15deg) scale(1.1);
486518
}
487519

488520
/* Mobile navbar */
@@ -537,11 +569,33 @@ nav {
537569
background: var(--color-nav-bg);
538570
color: var(--color-nav-text);
539571
overflow: hidden auto;
572+
overscroll-behavior: contain;
540573
display: flex;
541574
flex-direction: column;
542575
position: sticky;
543576
top: var(--layout-header-height);
544577
height: calc(100vh - var(--layout-header-height));
578+
scrollbar-width: thin;
579+
scrollbar-color: var(--color-border-default) transparent;
580+
}
581+
582+
/* Custom scrollbar for WebKit browsers */
583+
nav::-webkit-scrollbar {
584+
width: 6px;
585+
}
586+
587+
nav::-webkit-scrollbar-track {
588+
background: transparent;
589+
}
590+
591+
nav::-webkit-scrollbar-thumb {
592+
background: var(--color-border-default);
593+
border-radius: var(--radius-sm);
594+
transition: background var(--transition-fast);
595+
}
596+
597+
nav::-webkit-scrollbar-thumb:hover {
598+
background: var(--color-border-emphasis);
545599
}
546600

547601
/* Mobile navigation */
@@ -615,6 +669,18 @@ nav ul li {
615669
line-height: var(--line-height-relaxed);
616670
}
617671

672+
nav ul li a {
673+
padding: var(--space-1) 0;
674+
transition:
675+
color var(--transition-fast),
676+
transform var(--transition-fast),
677+
padding var(--transition-fast);
678+
}
679+
680+
nav ul li a:hover {
681+
padding-left: var(--space-1);
682+
}
683+
618684
nav ul ul {
619685
padding-left: var(--space-5);
620686
margin-top: var(--space-2);
@@ -632,6 +698,17 @@ nav a {
632698
text-decoration: none;
633699
}
634700

701+
/* Truncation for direct nav links (not links inside code tags) */
702+
nav .nav-list > li > a,
703+
nav .nav-section > ul > li > a,
704+
nav .nav-section > dl > dd > a {
705+
display: block;
706+
max-width: 100%;
707+
overflow: hidden;
708+
text-overflow: ellipsis;
709+
white-space: nowrap;
710+
}
711+
635712
nav footer {
636713
padding: var(--space-4);
637714
border-top: 1px solid var(--color-border-default);
@@ -735,6 +812,11 @@ nav .nav-section-title {
735812
font-size: var(--font-size-base);
736813
font-weight: var(--font-weight-semibold);
737814
color: inherit;
815+
flex: 1;
816+
min-width: 0;
817+
overflow: hidden;
818+
text-overflow: ellipsis;
819+
white-space: nowrap;
738820
}
739821

740822
nav .nav-section-chevron {
@@ -1113,19 +1195,54 @@ main .anchor-link:target {
11131195
main .method-source-code {
11141196
visibility: hidden;
11151197
max-height: 0;
1116-
overflow: auto;
1117-
transition: max-height var(--transition-base), visibility var(--transition-base);
1198+
overflow: hidden;
1199+
opacity: 0;
1200+
transform: translateY(-8px);
1201+
transition:
1202+
max-height var(--duration-medium) var(--ease-out-smooth),
1203+
visibility var(--duration-medium),
1204+
opacity var(--duration-fast) ease-out,
1205+
transform var(--duration-fast) ease-out;
11181206
}
11191207

11201208
main .method-source-code pre {
11211209
border-color: var(--color-accent-hover);
1210+
border-left: 3px solid var(--color-accent-primary);
11221211
width: 100%;
11231212
box-sizing: border-box;
1213+
transition: border-color var(--transition-fast);
1214+
scrollbar-width: thin;
1215+
scrollbar-color: var(--color-border-default) transparent;
1216+
}
1217+
1218+
main .method-source-code pre::-webkit-scrollbar {
1219+
width: 6px;
1220+
height: 6px;
1221+
}
1222+
1223+
main .method-source-code pre::-webkit-scrollbar-track {
1224+
background: transparent;
1225+
}
1226+
1227+
main .method-source-code pre::-webkit-scrollbar-thumb {
1228+
background: var(--color-border-default);
1229+
border-radius: var(--radius-sm);
1230+
}
1231+
1232+
main .method-source-code pre::-webkit-scrollbar-thumb:hover {
1233+
background: var(--color-border-emphasis);
1234+
}
1235+
1236+
main .method-source-code pre::-webkit-scrollbar-corner {
1237+
background: transparent;
11241238
}
11251239

11261240
main .method-source-code.active-menu {
11271241
visibility: visible;
11281242
max-height: 100vh;
1243+
overflow: auto;
1244+
opacity: 1;
1245+
transform: translateY(0);
11291246
}
11301247

11311248
main .method-description .method-calls-super {
@@ -1165,10 +1282,47 @@ main .method-heading .method-args {
11651282
}
11661283

11671284
main .method-controls {
1168-
line-height: 20px;
11691285
float: right;
1170-
color: var(--color-accent-hover);
1286+
}
1287+
1288+
main .method-controls summary {
1289+
display: inline-block;
1290+
line-height: 20px;
1291+
color: var(--color-accent-primary);
11711292
cursor: pointer;
1293+
padding: var(--space-1) var(--space-3);
1294+
border-radius: var(--radius-sm);
1295+
font-size: var(--font-size-sm);
1296+
font-weight: var(--font-weight-medium);
1297+
background: var(--color-accent-subtle);
1298+
border: 1px solid transparent;
1299+
transition:
1300+
color var(--transition-fast),
1301+
background var(--transition-fast),
1302+
border-color var(--transition-fast),
1303+
transform var(--transition-fast);
1304+
user-select: none;
1305+
-webkit-user-select: none;
1306+
list-style: none;
1307+
}
1308+
1309+
main .method-controls summary::-webkit-details-marker {
1310+
display: none;
1311+
}
1312+
1313+
main .method-controls summary:hover {
1314+
background: var(--color-primary-100);
1315+
border-color: var(--color-primary-300);
1316+
transform: translateY(-1px);
1317+
}
1318+
1319+
main .method-controls summary:active {
1320+
transform: scale(0.96);
1321+
}
1322+
1323+
[data-theme="dark"] main .method-controls summary:hover {
1324+
background: var(--color-accent-subtle-hover);
1325+
border-color: var(--color-primary-500);
11721326
}
11731327

11741328
main .method-description,

0 commit comments

Comments
 (0)