Skip to content

Commit 7409b28

Browse files
committed
Polish the banner links, book cards, and Builders tab
Banner - Make the open-source links a little smaller, rename the experiment entry and tag it as course material, and give every tag one width. - Hide star counts under 10. On phones, let titles and descriptions wrap instead of cutting them off. - Book and lecture cards: smaller, muted covers, a short lecture title, a paid chip, and "커리큘럼 L2에서 보기" so the jump is stated. - Jumping to a card now centres the shelf and starts the highlight once the scroll ends; the card keeps an outline afterwards. Builders tab - Top three cards drop the cohort strip and share one colour. - Roster: legend above the table, latest three projects with a link to the rest, totals labelled with units. The rail is hidden on phones. - History dialog: full term names, one colour per role, "레포 보기". - Avatars show the initial until the photo loads; tab counts get a title.
1 parent c6b479a commit 7409b28

5 files changed

Lines changed: 57 additions & 45 deletions

File tree

‎assets/css/hub.css‎

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -117,17 +117,17 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
117117
.pill.solid { background: #fff; color: #23276A; border-color: #fff; }
118118
.pill.solid:hover { background: rgba(255, 255, 255, .9); }
119119
.pill:focus-visible { outline: 3px solid #fff; outline-offset: 3px; }
120-
.banner-side { display: flex; flex-direction: column; align-items: center; gap: 14px; width: 400px; }
120+
.banner-side { display: flex; flex-direction: column; align-items: center; gap: 14px; width: 372px; }
121121
.banner-mark { width: 92px; height: 92px; filter: drop-shadow(0 10px 24px rgba(10, 10, 40, .35)); }
122122
.featured { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; width: 100%; }
123123
.featured li { min-width: 0; }
124-
.featured a { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-radius: 14px; background: rgba(255, 255, 255, .12); border: 1px solid rgba(255, 255, 255, .26); color: #fff; text-decoration: none; }
124+
.featured a { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 12px; background: rgba(255, 255, 255, .12); border: 1px solid rgba(255, 255, 255, .26); color: #fff; text-decoration: none; }
125125
.featured a:hover { background: rgba(255, 255, 255, .2); border-color: rgba(255, 255, 255, .5); }
126126
.featured a:focus-visible { outline: 3px solid #fff; outline-offset: 2px; }
127-
.featured .tag { flex-shrink: 0; min-width: 58px; text-align: center; font-size: 12px; font-weight: 800; color: #23276A; background: #fff; border-radius: 7px; padding: 3px 7px; white-space: nowrap; }
127+
.featured .tag { flex-shrink: 0; width: 64px; box-sizing: border-box; text-align: center; font-size: 11.5px; font-weight: 800; color: #23276A; background: #fff; border-radius: 6px; padding: 2px 6px; white-space: nowrap; }
128128
.featured .tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
129-
.featured .t { font-weight: 700; font-size: 16px; letter-spacing: -.01em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
130-
.featured .d { font-size: 12.5px; color: rgba(255, 255, 255, .74); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
129+
.featured .t { font-weight: 700; font-size: 15px; letter-spacing: -.01em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
130+
.featured .d { font-size: 12px; color: rgba(255, 255, 255, .74); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
131131
.featured .st { flex-shrink: 0; display: inline-flex; align-items: center; gap: 3px; font-size: 12.5px; font-weight: 600; color: rgba(255, 255, 255, .85); font-variant-numeric: tabular-nums; }
132132
.featured .st svg { width: 12px; height: 12px; color: #FFD54A; }
133133
.featured .out { width: 14px; height: 14px; opacity: .8; flex-shrink: 0; }
@@ -140,17 +140,20 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
140140
.pt-card:hover { background: rgba(255, 255, 255, .13); }
141141
.pt-main { all: unset; box-sizing: border-box; cursor: pointer; display: flex; align-items: center; gap: 10px; padding: 7px 10px; flex: 1; min-width: 0; color: #fff; border-radius: 12px 0 0 12px; }
142142
.pt-main:focus-visible, .pt-out:focus-visible { outline: 3px solid #fff; outline-offset: 2px; }
143-
.pt-img { flex-shrink: 0; height: 40px; object-fit: cover; border-radius: 2px; box-shadow: 0 3px 8px rgba(0, 0, 0, .28); }
144-
.pt-img.book { width: 30px; }
145-
.pt-img.wide { width: 60px; border-radius: 5px; object-position: 70% 30%; }
143+
.pt-img { flex-shrink: 0; height: 34px; object-fit: cover; border-radius: 2px; box-shadow: 0 3px 8px rgba(0, 0, 0, .28); filter: saturate(.7); opacity: .9; transition: filter .15s ease, opacity .15s ease; }
144+
.pt-card:hover .pt-img { filter: none; opacity: 1; }
145+
.pt-img.book { width: 26px; }
146+
.pt-img.wide { width: 48px; border-radius: 4px; object-position: 70% 30%; }
146147
.pt-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
147-
.pt-text b { font-size: 13px; font-weight: 600; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
148+
.pt-text b { font-size: 13px; font-weight: 500; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
148149
.pt-lv { display: flex; align-items: center; gap: 6px; font-size: 11.5px; color: rgba(255, 255, 255, .72); white-space: nowrap; }
149150
.pt-type { font-size: 10.5px; font-weight: 800; color: #23276A; background: rgba(255, 255, 255, .9); border-radius: 4px; padding: 0 5px; }
151+
.pt-paid { font-size: 10.5px; font-weight: 700; color: rgba(255, 255, 255, .85); border: 1px solid rgba(255, 255, 255, .4); border-radius: 4px; padding: 0 4px; margin-left: -2px; }
150152
.pt-out { display: grid; place-items: center; width: 34px; flex-shrink: 0; color: #fff; border-left: 1px solid rgba(255, 255, 255, .14); border-radius: 0 12px 12px 0; }
151153
.pt-out:hover { background: rgba(255, 255, 255, .1); }
152154
.pt-out svg { width: 12px; height: 12px; }
153-
@media (max-width: 1160px) { .featured .tag { min-width: 0; } .featured .t { white-space: normal; line-height: 1.25; } }
155+
@media (max-width: 1160px) { .featured .t { white-space: normal; line-height: 1.25; } }
156+
@media (max-width: 640px) { .featured .d { white-space: normal; line-height: 1.35; } .featured .tag { width: auto; min-width: 40px; padding: 2px 6px; } .featured a { gap: 9px; } }
154157
@media (max-width: 1160px) and (min-width: 861px) { .banner-side { width: 340px; } .featured .d { display: none; } .partner-list { grid-template-columns: minmax(0, 1fr); } }
155158
@media (max-width: 640px) { .partner-list { grid-template-columns: minmax(0, 1fr); } .partner { margin-top: 20px; } }
156159
@media (max-width: 860px) {
@@ -353,7 +356,8 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
353356
.ep-art.book { right: 18px; top: 30px; width: 58px; border-radius: 3px; box-shadow: 0 6px 14px rgba(20, 22, 43, .25); transform: rotate(-4deg); }
354357
.ep-art.wide { right: 0; top: 0; height: 100%; width: 58%; object-fit: cover; object-position: 70% 30%; -webkit-mask-image: linear-gradient(90deg, transparent, #000 45%); mask-image: linear-gradient(90deg, transparent, #000 45%); }
355358
.ep-cover.has-art .ep-repo { font-family: var(--f-body); right: auto; max-width: 42%; }
356-
.ep.flash > button { animation: ep-flash 1.8s ease-out; }
359+
.ep.picked > button { border-color: var(--c); }
360+
.ep.flash > button { animation: ep-flash 2.6s ease-out; }
357361
@keyframes ep-flash { 0%, 55% { border-color: var(--c); box-shadow: 0 0 0 4px color-mix(in srgb, var(--c) 35%, transparent); } 100% { box-shadow: 0 0 0 0 transparent; } }
358362

359363
/* Contribution tab: top 3, sliding rail, roster */
@@ -364,6 +368,7 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
364368
.contrib-sub { color: var(--muted); font-size: 14.5px; margin: -4px 0 12px; }
365369

366370
.top3 { list-style: none; margin: 0 0 32px; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
371+
.tcard { --c: var(--accent); }
367372
.tcard > button { all: unset; box-sizing: border-box; cursor: pointer; position: relative; display: flex; flex-direction: column; gap: 14px; width: 100%; height: 100%; padding: 20px; border-radius: 18px; background: color-mix(in srgb, var(--c) 8%, var(--surface)); border: 1.5px solid color-mix(in srgb, var(--c) 24%, var(--rule)); transition: transform .15s ease, border-color .15s ease; }
368373
.tcard > button:hover { border-color: var(--c); transform: translateY(-2px); }
369374
.tcard > button:focus-visible { outline: 3px solid var(--focus); outline-offset: 2px; }
@@ -389,7 +394,7 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
389394
.sh { width: 22px; text-align: center; font-size: 11px; font-variant-numeric: tabular-nums; }
390395

391396
/* sliding rail */
392-
.people-rail { overflow: hidden; margin: 0 0 32px; -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent); mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent); }
397+
.people-rail { overflow: hidden; margin: 0 0 32px; -webkit-mask-image: linear-gradient(90deg, transparent, #000 20px, #000 calc(100% - 40px), transparent); mask-image: linear-gradient(90deg, transparent, #000 20px, #000 calc(100% - 40px), transparent); }
393398
.people-move { display: flex; gap: 12px; width: max-content; animation: people-slide var(--dur, 60s) linear infinite; }
394399
.people-rail:hover .people-move, .people-rail:focus-within .people-move { animation-play-state: paused; }
395400
@keyframes people-slide { from { transform: translateX(0); } to { transform: translateX(calc(-50% - 6px)); } }
@@ -411,7 +416,7 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
411416

412417
/* roster */
413418
.roster { background: var(--surface); border: 1px solid var(--rule); border-radius: 16px; overflow: hidden; }
414-
.ro-head, .ro { display: grid; grid-template-columns: 210px auto minmax(0, 1fr) 72px; gap: 20px; align-items: center; padding: 12px 18px; }
419+
.ro-head, .ro { display: grid; grid-template-columns: 210px auto minmax(0, 1fr) 96px; gap: 20px; align-items: center; padding: 12px 18px; }
415420
.ro-head { font-size: 12px; font-weight: 700; color: var(--muted); padding-block: 10px; border-bottom: 1px solid var(--rule); background: var(--surface-2); }
416421
.ro-list { list-style: none; margin: 0; padding: 0; }
417422
.ro + .ro { border-top: 1px solid var(--rule); }
@@ -429,13 +434,17 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
429434
.ro-projects button:hover, .ro-projects a:hover { text-decoration: underline; }
430435
.ro-projects button:focus-visible { outline: 3px solid var(--focus); outline-offset: 2px; border-radius: 4px; }
431436
.ro-projects a { color: var(--ink); text-decoration: none; }
437+
.ro-projects .ro-more { all: unset; cursor: pointer; font-size: 12.5px; font-weight: 600; color: var(--accent); }
438+
.ro-more:hover { text-decoration: underline; }
439+
.ro-more:focus-visible { outline: 3px solid var(--focus); outline-offset: 2px; border-radius: 4px; }
432440
.live-dot { flex-shrink: 0; font-size: 11.5px; font-weight: 700; color: var(--live); }
433441
.tot { text-align: right; }
434-
.ro-total b { display: block; font-family: var(--f-display); font-size: 19px; font-weight: 800; line-height: 1.2; font-variant-numeric: tabular-nums; }
442+
.ro-total b { display: block; font-family: var(--f-display); font-size: 16px; white-space: nowrap; font-weight: 800; line-height: 1.2; font-variant-numeric: tabular-nums; }
435443
.ro-total span { font-size: 12px; color: var(--muted); white-space: nowrap; }
436-
.roster-legend { list-style: none; margin: 12px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 13px; color: var(--muted); }
444+
.roster-legend { list-style: none; margin: 0 0 10px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: 13px; color: var(--muted); }
437445
.roster-legend li { display: flex; align-items: center; gap: 6px; }
438446
.roster-legend .sc { width: 14px; height: 14px; border-radius: 4px; }
447+
@media (max-width: 600px) { .rail-head, .people-rail { display: none; } }
439448
@media (max-width: 760px) {
440449
.ro-head { display: none; }
441450
.ro { grid-template-columns: minmax(0, 1fr) auto; gap: 10px 12px; padding: 14px 16px; }
@@ -444,7 +453,8 @@ body::before { content: ""; position: fixed; inset: 0 0 auto; height: env(safe-a
444453
}
445454

446455
.avatar { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; font-family: var(--f-display); font-weight: 800; letter-spacing: -.02em; font-size: 18px; color: var(--on-line); background: var(--c, var(--l-main)); flex-shrink: 0; overflow: hidden; }
447-
.avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
456+
.avatar { position: relative; }
457+
.avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
448458
.avatar.lg { width: 64px; height: 64px; font-size: 26px; }
449459

450460
.linkish { all: unset; cursor: pointer; text-decoration: underline; text-decoration-color: var(--rule); text-underline-offset: 3px; }
@@ -610,7 +620,7 @@ dialog.station::backdrop { background: rgba(10, 14, 20, .55); }
610620
.tl-c b { display: block; font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; }
611621
.tl-c span { font-size: 11.5px; color: var(--muted); }
612622
.tl-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-size: 14px; }
613-
.tl-role { font-size: 11.5px; font-weight: 700; color: var(--c); }
623+
.tl-role { font-size: 11.5px; font-weight: 700; color: var(--accent); }
614624
.p-timeline li.r .tl-role { color: var(--muted); }
615625
.tl-name { font-weight: 600; }
616626
.tl-note { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 6px; }

0 commit comments

Comments
 (0)