@roottale/cms-renderer-next 0.43.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +4 -0
  3. package/dist/{chunk-FKDCPFYV.js → chunk-45KYMMDY.js} +156 -21
  4. package/dist/chunk-45KYMMDY.js.map +1 -0
  5. package/dist/{chunk-4LQPZDXZ.js → chunk-6MFHA555.js} +24 -6
  6. package/dist/chunk-6MFHA555.js.map +1 -0
  7. package/dist/chunk-FZK3EXYZ.js +103 -0
  8. package/dist/chunk-FZK3EXYZ.js.map +1 -0
  9. package/dist/{chunk-NUUTTSGT.js → chunk-GUV5WHD5.js} +37 -3
  10. package/dist/chunk-GUV5WHD5.js.map +1 -0
  11. package/dist/chunk-LEHHSI6G.js +64 -0
  12. package/dist/chunk-LEHHSI6G.js.map +1 -0
  13. package/dist/chunk-OMXEU4LS.js +414 -0
  14. package/dist/chunk-OMXEU4LS.js.map +1 -0
  15. package/dist/chunk-YLSQAT6B.js +59 -0
  16. package/dist/chunk-YLSQAT6B.js.map +1 -0
  17. package/dist/{chunk-WWS43XCT.js → chunk-Z3ZSCPG4.js} +82 -20
  18. package/dist/chunk-Z3ZSCPG4.js.map +1 -0
  19. package/dist/concerns-client.d.ts +1 -1
  20. package/dist/contact-map-client.d.ts +27 -0
  21. package/dist/contact-map-client.js +8 -0
  22. package/dist/contact-map-client.js.map +1 -0
  23. package/dist/expertise-client.d.ts +7 -1
  24. package/dist/expertise-client.js +2 -1
  25. package/dist/hero-carousel-client.d.ts +18 -2
  26. package/dist/hero-carousel-client.js +2 -1
  27. package/dist/routes.js +1 -1
  28. package/dist/server.d.ts +5 -0
  29. package/dist/server.js +8 -5
  30. package/dist/{site-config-DgYGGwu1.d.ts → site-config-kqurIH-k.d.ts} +42 -4
  31. package/dist/spaces-client.d.ts +1 -1
  32. package/dist/team-expanding-stage-client.d.ts +35 -0
  33. package/dist/team-expanding-stage-client.js +8 -0
  34. package/dist/team-expanding-stage-client.js.map +1 -0
  35. package/dist/templates.css +607 -5
  36. package/dist/templates.d.ts +30 -4
  37. package/dist/templates.js +13 -6
  38. package/dist/templates.js.map +1 -1
  39. package/dist/ui-react-motion-client.d.ts +1 -0
  40. package/dist/ui-react-motion-client.js +3 -1
  41. package/dist/validate.js +1 -1
  42. package/package.json +4 -4
  43. package/dist/chunk-4LQPZDXZ.js.map +0 -1
  44. package/dist/chunk-F3G6RVIR.js +0 -220
  45. package/dist/chunk-F3G6RVIR.js.map +0 -1
  46. package/dist/chunk-FKDCPFYV.js.map +0 -1
  47. package/dist/chunk-NUUTTSGT.js.map +0 -1
  48. package/dist/chunk-WWS43XCT.js.map +0 -1
@@ -1461,6 +1461,156 @@
1461
1461
  color: var(--muted-foreground);
1462
1462
  }
1463
1463
 
1464
+ /* ── testimonials: star-compact (W8-7 — 별점 중심 컴팩트 그리드) ──────────── */
1465
+
1466
+ /* 별점 = CSS 타이포 글리프(U+2605) 이중 레이어 — 이모지·이미지 금지(AI-slop
1467
+ * 10항 유지). 채움 폭은 데이터(rating/5)가 --rt-testimonials-star-fill 로
1468
+ * 주입, 색은 전부 토큰(variant×토큰 직교). */
1469
+ [data-roottale-tpl="testimonials"] :where(.rt-tpl-testimonials-stars) {
1470
+ position: relative;
1471
+ display: inline-block;
1472
+ font-size: var(--rt-testimonials-star-size, 1rem);
1473
+ line-height: 1;
1474
+ letter-spacing: 0.1em;
1475
+ white-space: nowrap;
1476
+ }
1477
+
1478
+ [data-roottale-tpl="testimonials"] :where(.rt-tpl-testimonials-stars-base) {
1479
+ color: color-mix(in srgb, var(--foreground) 22%, transparent);
1480
+ }
1481
+
1482
+ [data-roottale-tpl="testimonials"] :where(.rt-tpl-testimonials-stars-fill) {
1483
+ position: absolute;
1484
+ inset-block-start: 0;
1485
+ inset-inline-start: 0;
1486
+ inline-size: var(--rt-testimonials-star-fill, 100%);
1487
+ overflow: hidden;
1488
+ color: var(--accent);
1489
+ }
1490
+
1491
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1492
+ :where(.rt-tpl-testimonials-star-summary) {
1493
+ display: flex;
1494
+ flex-wrap: wrap;
1495
+ align-items: baseline;
1496
+ gap: var(--space-3);
1497
+ margin-block-start: var(--space-6);
1498
+ padding-block-end: var(--space-4);
1499
+ }
1500
+
1501
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1502
+ :where(.rt-tpl-testimonials-star-summary .rt-tpl-testimonials-stars) {
1503
+ font-size: var(--rt-testimonials-star-size-summary, 1.25rem);
1504
+ }
1505
+
1506
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1507
+ :where(.rt-tpl-testimonials-star-average) {
1508
+ font-family: var(--font-display);
1509
+ font-size: clamp(2rem, 6cqi, 2.75rem);
1510
+ font-weight: var(--font-weight-bold);
1511
+ line-height: var(--font-leading-tight);
1512
+ font-variant-numeric: tabular-nums;
1513
+ color: var(--foreground);
1514
+ }
1515
+
1516
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1517
+ :where(.rt-tpl-testimonials-star-count) {
1518
+ font-size: var(--font-size-sm);
1519
+ color: var(--muted-foreground);
1520
+ }
1521
+
1522
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1523
+ :where(.rt-tpl-testimonials-star-list) {
1524
+ display: grid;
1525
+ gap: 0 var(--rt-testimonials-star-list-gap, var(--space-8));
1526
+ padding: 0;
1527
+ margin: 0;
1528
+ list-style: none;
1529
+ }
1530
+
1531
+ @container (min-width: 44rem) {
1532
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1533
+ :where(.rt-tpl-testimonials-star-list) {
1534
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1535
+ }
1536
+ }
1537
+
1538
+ @container (min-width: 72rem) {
1539
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1540
+ :where(.rt-tpl-testimonials-star-list) {
1541
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1542
+ }
1543
+ }
1544
+
1545
+ /* 카드 아님 — hairline 상단 보더 행(균등 그림자 카드 금지, index-rows 계보). */
1546
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1547
+ :where(.rt-tpl-testimonials-star-item) {
1548
+ border-block-start: 1px solid var(--border);
1549
+ padding-block: var(--space-5);
1550
+ }
1551
+
1552
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1553
+ :where(.rt-tpl-testimonials-star-quote) {
1554
+ display: grid;
1555
+ gap: var(--space-2);
1556
+ margin: 0;
1557
+ }
1558
+
1559
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1560
+ :where(.rt-tpl-testimonials-star-head) {
1561
+ display: flex;
1562
+ align-items: center;
1563
+ gap: var(--space-2);
1564
+ }
1565
+
1566
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1567
+ :where(.rt-tpl-testimonials-star-value) {
1568
+ font-size: var(--font-size-sm);
1569
+ font-weight: var(--font-weight-semibold);
1570
+ font-variant-numeric: tabular-nums;
1571
+ color: var(--foreground);
1572
+ }
1573
+
1574
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1575
+ :where(.rt-tpl-testimonials-star-text) {
1576
+ margin: 0;
1577
+ font-size: var(--font-size-sm);
1578
+ line-height: var(--font-leading-normal);
1579
+ word-break: keep-all;
1580
+ color: var(--foreground);
1581
+ }
1582
+
1583
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1584
+ :where(.rt-tpl-testimonials-star-footer) {
1585
+ display: flex;
1586
+ flex-wrap: wrap;
1587
+ align-items: baseline;
1588
+ gap: var(--space-2);
1589
+ }
1590
+
1591
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1592
+ :where(.rt-tpl-testimonials-star-author) {
1593
+ font-style: normal;
1594
+ font-weight: var(--font-weight-semibold);
1595
+ font-size: var(--font-size-sm);
1596
+ color: var(--foreground);
1597
+ }
1598
+
1599
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1600
+ :where(.rt-tpl-testimonials-star-context) {
1601
+ font-size: var(--font-size-xs);
1602
+ color: var(--muted-foreground);
1603
+ }
1604
+
1605
+ [data-roottale-tpl="testimonials"][data-variant="star-compact"]
1606
+ :where(.rt-tpl-testimonials-star-meta) {
1607
+ display: inline-flex;
1608
+ flex-wrap: wrap;
1609
+ gap: var(--space-2);
1610
+ font-size: var(--font-size-xs);
1611
+ color: var(--muted-foreground);
1612
+ }
1613
+
1464
1614
  [data-roottale-tpl="team"] {
1465
1615
  container-type: inline-size;
1466
1616
  }
@@ -1766,6 +1916,12 @@
1766
1916
  color: var(--rt-color-primary);
1767
1917
  }
1768
1918
 
1919
+ [data-roottale-tpl="expertise"] :where(.rt-tpl-expertise-tab:focus-visible),
1920
+ [data-roottale-tpl="expertise"] :where(.rt-tpl-expertise-panel:focus-visible) {
1921
+ outline: 2px solid var(--rt-color-ring, var(--rt-color-primary));
1922
+ outline-offset: -2px;
1923
+ }
1924
+
1769
1925
  [data-roottale-tpl="expertise"] :where(.rt-tpl-expertise-tab-label),
1770
1926
  [data-roottale-tpl="expertise"] :where(.rt-tpl-expertise-kicker) {
1771
1927
  margin: 0;
@@ -2249,6 +2405,101 @@
2249
2405
  }
2250
2406
  }
2251
2407
 
2408
+ /* ---- curtain transition (ADR-0086 P2 D3, chambarun 이식) ----
2409
+ * 절대배치 스택 — 각 슬라이드가 clip-path 와이프로 스스로를 드러낸다(embla
2410
+ * 가로 스크롤 없음). 타이밍·이징·클립 경로는 원본
2411
+ * chambarun `assets/site.css` `@keyframes curtainReveal`/`.curtain-sheen` 값을
2412
+ * 그대로 유지, 색만 하드코딩 헥스 대신 --rt-* 토큰으로 치환했다. */
2413
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2414
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide) {
2415
+ position: absolute;
2416
+ inset: 0;
2417
+ flex: none;
2418
+ opacity: 0;
2419
+ z-index: 0;
2420
+ pointer-events: none;
2421
+ clip-path: inset(0 0 0 0);
2422
+ }
2423
+
2424
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2425
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide[data-leaving="true"]) {
2426
+ opacity: 1;
2427
+ z-index: 1;
2428
+ }
2429
+
2430
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2431
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide[data-active="true"]) {
2432
+ opacity: 1;
2433
+ z-index: 2;
2434
+ pointer-events: auto;
2435
+ }
2436
+
2437
+ @media (prefers-reduced-motion: no-preference) {
2438
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2439
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide[data-active="true"]) {
2440
+ animation: rt-hero-carousel-curtain-reveal 0.92s cubic-bezier(0.76, 0, 0.24, 1) both;
2441
+ }
2442
+ }
2443
+
2444
+ @keyframes rt-hero-carousel-curtain-reveal {
2445
+ from {
2446
+ clip-path: inset(0 100% 0 0);
2447
+ }
2448
+ to {
2449
+ clip-path: inset(0 0 0 0);
2450
+ }
2451
+ }
2452
+
2453
+ /* 신 스윕 — 활성 슬라이드 위를 가로지르는 얇은 하이라이트 밴드. chambarun 은
2454
+ * teal/green 2색 그라디언트였으나 고객사 테마마다 브랜드색이 달라 토큰
2455
+ * 하나(primary-foreground)의 color-mix 농도 변화로 대체(대면적 채도 배색
2456
+ * 하드코딩 금지 관행과 동일 이유). */
2457
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2458
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-sheen) {
2459
+ position: absolute;
2460
+ inset-block: 0;
2461
+ inset-inline-start: 0;
2462
+ z-index: 1;
2463
+ inline-size: clamp(82px, 10cqi, 150px);
2464
+ pointer-events: none;
2465
+ opacity: 0;
2466
+ transform: translate3d(-160px, 0, 0);
2467
+ background: linear-gradient(
2468
+ 90deg,
2469
+ transparent 0%,
2470
+ color-mix(in srgb, var(--rt-color-primary-foreground, #ffffff) 22%, transparent) 30%,
2471
+ color-mix(in srgb, var(--rt-color-primary-foreground, #ffffff) 58%, transparent) 48%,
2472
+ color-mix(in srgb, var(--rt-color-primary-foreground, #ffffff) 18%, transparent) 62%,
2473
+ transparent 100%
2474
+ );
2475
+ mix-blend-mode: screen;
2476
+ will-change: transform, opacity;
2477
+ }
2478
+
2479
+ @media (prefers-reduced-motion: no-preference) {
2480
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2481
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide[data-active="true"] .rt-tpl-hero-carousel-sheen) {
2482
+ animation: rt-hero-carousel-curtain-sheen 0.9s cubic-bezier(0.76, 0, 0.24, 1) both;
2483
+ }
2484
+ }
2485
+
2486
+ @keyframes rt-hero-carousel-curtain-sheen {
2487
+ 0% {
2488
+ opacity: 0;
2489
+ transform: translate3d(-160px, 0, 0);
2490
+ }
2491
+ 14% {
2492
+ opacity: 0.82;
2493
+ }
2494
+ 76% {
2495
+ opacity: 0.68;
2496
+ }
2497
+ 100% {
2498
+ opacity: 0;
2499
+ transform: translate3d(100cqi, 0, 0);
2500
+ }
2501
+ }
2502
+
2252
2503
  /* 오버레이 eyebrow — 스크림 위에서는 테마 primary(잉크/민트)가 아니라 밝은
2253
2504
  * 전경색이어야 읽힌다(미감 라운드 2 — 민트 eyebrow 소실 실측). */
2254
2505
  [data-roottale-tpl="hero"][data-variant="carousel"]
@@ -2400,6 +2651,42 @@
2400
2651
  letter-spacing: 0.06em;
2401
2652
  }
2402
2653
 
2654
+ /* D4 — autoplay pause/재생 버튼: 도트·카운터와 같은 우측 클러스터에 절제된
2655
+ * 크기로 둔다(화살표와 동일 언어이나 더 작게 — 보조 컨트롤이라는 위계). */
2656
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2657
+ :where(.rt-tpl-hero-carousel-controls-right) {
2658
+ display: flex;
2659
+ align-items: center;
2660
+ gap: 0.75rem;
2661
+ }
2662
+
2663
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2664
+ :where(.rt-tpl-hero-carousel-playpause) {
2665
+ display: inline-flex;
2666
+ align-items: center;
2667
+ justify-content: center;
2668
+ inline-size: 1.75rem;
2669
+ block-size: 1.75rem;
2670
+ border-radius: 999px;
2671
+ border: 1px solid color-mix(in srgb, var(--rt-color-primary-foreground, #ffffff) 28%, transparent);
2672
+ background: color-mix(in srgb, var(--rt-color-foreground, #06162f) 24%, transparent);
2673
+ color: var(--rt-color-primary-foreground, #ffffff);
2674
+ cursor: pointer;
2675
+ transition: background 180ms ease, border-color 180ms ease;
2676
+ }
2677
+
2678
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2679
+ :where(.rt-tpl-hero-carousel-playpause:hover) {
2680
+ background: color-mix(in srgb, var(--rt-color-foreground, #06162f) 48%, transparent);
2681
+ border-color: color-mix(in srgb, var(--rt-color-primary-foreground, #ffffff) 45%, transparent);
2682
+ }
2683
+
2684
+ [data-roottale-tpl="hero"][data-variant="carousel"]
2685
+ :where(.rt-tpl-hero-carousel-playpause svg) {
2686
+ inline-size: 0.85rem;
2687
+ block-size: 0.85rem;
2688
+ }
2689
+
2403
2690
  [data-roottale-tpl="hours"],
2404
2691
  [data-roottale-tpl="pricing"],
2405
2692
  [data-roottale-tpl="process"] {
@@ -3067,6 +3354,55 @@
3067
3354
  gap: 0.5rem;
3068
3355
  }
3069
3356
 
3357
+ /* 카피 스태거(chambarun `.hero-copy>*` 순차 등장, 타이밍 원본 유지) — curtain
3358
+ * 전환에서만, 슬라이드 전환마다 패널이 `key` 로 리마운트되어 매번 재생된다. */
3359
+ @media (prefers-reduced-motion: no-preference) {
3360
+ [data-roottale-tpl="hero"][data-variant="carousel"]
3361
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide-panel > *) {
3362
+ animation:
3363
+ rt-hero-carousel-copy-in-opacity 0.68s cubic-bezier(0.45, 0, 0.2, 1) both,
3364
+ rt-hero-carousel-copy-in-transform 0.72s cubic-bezier(0.2, 0.75, 0.25, 1) both;
3365
+ }
3366
+
3367
+ [data-roottale-tpl="hero"][data-variant="carousel"]
3368
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide-panel > *:nth-child(1)) {
3369
+ animation-delay: 0.34s;
3370
+ }
3371
+
3372
+ [data-roottale-tpl="hero"][data-variant="carousel"]
3373
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide-panel > *:nth-child(2)) {
3374
+ animation-delay: 0.44s;
3375
+ }
3376
+
3377
+ [data-roottale-tpl="hero"][data-variant="carousel"]
3378
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide-panel > *:nth-child(3)) {
3379
+ animation-delay: 0.54s;
3380
+ }
3381
+
3382
+ [data-roottale-tpl="hero"][data-variant="carousel"]
3383
+ :where(.rt-tpl-hero-carousel[data-transition="curtain"] .rt-tpl-hero-carousel-slide-panel > *:nth-child(n + 4)) {
3384
+ animation-delay: 0.64s;
3385
+ }
3386
+ }
3387
+
3388
+ @keyframes rt-hero-carousel-copy-in-opacity {
3389
+ from {
3390
+ opacity: 0;
3391
+ }
3392
+ to {
3393
+ opacity: 1;
3394
+ }
3395
+ }
3396
+
3397
+ @keyframes rt-hero-carousel-copy-in-transform {
3398
+ from {
3399
+ transform: translateY(18px);
3400
+ }
3401
+ to {
3402
+ transform: none;
3403
+ }
3404
+ }
3405
+
3070
3406
  [data-roottale-tpl="hero"][data-variant="carousel"]
3071
3407
  :where(.rt-tpl-hero-carousel-dots--tabs) {
3072
3408
  gap: 0.4rem;
@@ -3296,6 +3632,56 @@
3296
3632
  font-weight: 800;
3297
3633
  }
3298
3634
 
3635
+ /*
3636
+ * 지도 클릭-투-로드 프리뷰(ADR-0086 P2 D3, `map.mapLoad === "click"`) —
3637
+ * `.rt-tpl-contact-map` 와 같은 박스(aspect-ratio/border/radius)를 그대로
3638
+ * 쓰고, 여기서는 배경 이미지·버튼·바깥 링크 배치만 얹는다.
3639
+ */
3640
+ [data-roottale-tpl="contact"] :where(.rt-tpl-contact-map-click) {
3641
+ position: relative;
3642
+ display: grid;
3643
+ place-items: center;
3644
+ gap: 0.5rem;
3645
+ background: var(--muted);
3646
+ }
3647
+
3648
+ [data-roottale-tpl="contact"] :where(.rt-tpl-contact-map-click-bg) {
3649
+ position: absolute;
3650
+ inset: 0;
3651
+ inline-size: 100%;
3652
+ block-size: 100%;
3653
+ object-fit: cover;
3654
+ }
3655
+
3656
+ [data-roottale-tpl="contact"] :where(.rt-tpl-contact-map-click-btn) {
3657
+ position: relative;
3658
+ z-index: 1;
3659
+ display: inline-flex;
3660
+ align-items: center;
3661
+ gap: 0.4rem;
3662
+ padding: 0.55rem 1rem;
3663
+ border: 1px solid var(--rt-color-border);
3664
+ border-radius: var(--rt-radius-md);
3665
+ background: var(--card);
3666
+ color: var(--foreground);
3667
+ font-size: var(--font-size-sm);
3668
+ font-weight: var(--font-weight-semibold);
3669
+ cursor: pointer;
3670
+ }
3671
+
3672
+ [data-roottale-tpl="contact"] :where(.rt-tpl-contact-map-click-btn:hover) {
3673
+ background: color-mix(in srgb, var(--card) 85%, var(--rt-color-primary) 15%);
3674
+ }
3675
+
3676
+ [data-roottale-tpl="contact"] :where(.rt-tpl-contact-map-click-external) {
3677
+ position: relative;
3678
+ z-index: 1;
3679
+ font-size: 0.78rem;
3680
+ color: var(--accent-foreground);
3681
+ text-decoration: underline;
3682
+ text-underline-offset: var(--space-1);
3683
+ }
3684
+
3299
3685
  [data-roottale-tpl="contact"] :where(.rt-tpl-contact-actions) {
3300
3686
  display: flex;
3301
3687
  flex-wrap: wrap;
@@ -3350,22 +3736,238 @@
3350
3736
  text-decoration: none;
3351
3737
  }
3352
3738
 
3739
+ /* ============ team: expanding-stage — hover/focus/tap 확장 (D3, chambarun
3740
+ * `.staff-stage`/`.staff-panel` 이식, mockup/assets/site.js·site.css 원본
3741
+ * 참조). 접힌 패널은 이름 칩만, 활성 패널은 확장되며 자격정보 패널이 드러난다.
3742
+ * 전환(transition) 선언은 전부 `prefers-reduced-motion: no-preference` 안에만
3743
+ * 둔다 — reduce 시 애니메이션 없이 최종 상태로 즉시 전환(상태 자체는 그대로
3744
+ * 바뀐다, ADR-0073 K3 C1 과 동일 관행). ============ */
3745
+
3353
3746
  [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-stage) {
3354
- display: grid;
3355
- grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
3356
- gap: 0.75rem;
3747
+ display: flex;
3748
+ flex-direction: column;
3749
+ gap: 0.625rem;
3357
3750
  padding: 0;
3358
3751
  margin: 1.25rem 0 0;
3359
3752
  list-style: none;
3360
3753
  }
3361
3754
 
3755
+ @container (min-width: 46rem) {
3756
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-stage) {
3757
+ flex-direction: row;
3758
+ block-size: clamp(24rem, 46cqi, 38rem);
3759
+ }
3760
+ }
3761
+
3762
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-item) {
3763
+ position: relative;
3764
+ flex: none;
3765
+ block-size: 4.75rem;
3766
+ min-inline-size: 0;
3767
+ overflow: hidden;
3768
+ border-radius: var(--rt-radius-lg, 1.5rem);
3769
+ outline: none;
3770
+ cursor: pointer;
3771
+ background: var(--muted);
3772
+ box-shadow: 0 0.75rem 1.75rem -1rem color-mix(in srgb, var(--foreground) 45%, transparent);
3773
+ }
3774
+
3775
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-item[data-active="true"]) {
3776
+ block-size: 26rem;
3777
+ }
3778
+
3779
+ @container (min-width: 46rem) {
3780
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-item) {
3781
+ flex: 1 1 0;
3782
+ block-size: auto;
3783
+ }
3784
+
3785
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-item[data-active="true"]) {
3786
+ flex-grow: 2.7;
3787
+ block-size: auto;
3788
+ }
3789
+ }
3790
+
3791
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-item:focus-visible) {
3792
+ outline: 2px solid var(--primary);
3793
+ outline-offset: 3px;
3794
+ }
3795
+
3796
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-photo) {
3797
+ position: absolute;
3798
+ inset: 0;
3799
+ inline-size: 100%;
3800
+ block-size: 100%;
3801
+ object-fit: cover;
3802
+ object-position: center top;
3803
+ }
3804
+
3805
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-photo--initials) {
3806
+ display: grid;
3807
+ place-items: center;
3808
+ color: var(--primary);
3809
+ font-family: var(--rt-font-display, var(--rt-font-body, system-ui, sans-serif));
3810
+ font-size: clamp(1.5rem, 8cqi, 2.5rem);
3811
+ font-weight: 800;
3812
+ }
3813
+
3814
+ [data-roottale-tpl="team"]
3815
+ :where(.rt-tpl-team-expanding-item[data-active="true"] .rt-tpl-team-expanding-photo) {
3816
+ filter: saturate(1.04) brightness(1.01);
3817
+ }
3818
+
3819
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-name) {
3820
+ position: absolute;
3821
+ inset-inline: 0;
3822
+ inset-block-end: 0;
3823
+ z-index: 2;
3824
+ display: flex;
3825
+ align-items: center;
3826
+ gap: 0.625rem;
3827
+ padding: 0.75rem 0.9rem;
3828
+ background: linear-gradient(
3829
+ 0deg,
3830
+ color-mix(in srgb, var(--foreground) 78%, transparent),
3831
+ transparent
3832
+ );
3833
+ }
3834
+
3835
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-name b) {
3836
+ margin: 0;
3837
+ color: var(--background);
3838
+ font-family: var(--rt-font-display, var(--rt-font-body, system-ui, sans-serif));
3839
+ font-size: 0.95rem;
3840
+ font-weight: 800;
3841
+ }
3842
+
3843
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-name span) {
3844
+ color: color-mix(in srgb, var(--background) 78%, transparent);
3845
+ font-size: 0.75rem;
3846
+ font-weight: 700;
3847
+ white-space: nowrap;
3848
+ overflow: hidden;
3849
+ text-overflow: ellipsis;
3850
+ }
3851
+
3852
+ [data-roottale-tpl="team"]
3853
+ :where(.rt-tpl-team-expanding-item[data-active="true"] .rt-tpl-team-expanding-name) {
3854
+ opacity: 0;
3855
+ }
3856
+
3857
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-detail) {
3858
+ position: absolute;
3859
+ inset-inline: 0;
3860
+ inset-block-end: 0;
3861
+ z-index: 3;
3862
+ display: grid;
3863
+ gap: 0.5rem;
3864
+ padding: 1.75rem 1.25rem 1.25rem;
3865
+ background: linear-gradient(
3866
+ 0deg,
3867
+ color-mix(in srgb, var(--foreground) 92%, transparent) 0%,
3868
+ color-mix(in srgb, var(--foreground) 55%, transparent) 55%,
3869
+ transparent 100%
3870
+ );
3871
+ opacity: 0;
3872
+ transform: translateY(1rem);
3873
+ pointer-events: none;
3874
+ }
3875
+
3876
+ [data-roottale-tpl="team"]
3877
+ :where(.rt-tpl-team-expanding-item[data-active="true"] .rt-tpl-team-expanding-detail) {
3878
+ opacity: 1;
3879
+ transform: none;
3880
+ pointer-events: auto;
3881
+ }
3882
+
3883
+ [data-roottale-tpl="team"]
3884
+ :where(.rt-tpl-team-expanding-detail .rt-tpl-team-expanding-role) {
3885
+ margin: 0;
3886
+ color: color-mix(in srgb, var(--background) 70%, transparent);
3887
+ font-size: 0.75rem;
3888
+ font-weight: 800;
3889
+ letter-spacing: 0.08em;
3890
+ text-transform: uppercase;
3891
+ }
3892
+
3893
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-detail .rt-tpl-team-name) {
3894
+ margin: 0;
3895
+ color: var(--background);
3896
+ }
3897
+
3898
+ [data-roottale-tpl="team"]
3899
+ :where(.rt-tpl-team-expanding-detail .rt-tpl-team-specialties li) {
3900
+ color: var(--background);
3901
+ background: color-mix(in srgb, var(--background) 18%, transparent);
3902
+ }
3903
+
3904
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-detail .rt-tpl-team-credentials li),
3905
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-detail .rt-tpl-team-bio) {
3906
+ color: color-mix(in srgb, var(--background) 85%, transparent);
3907
+ }
3908
+
3909
+ [data-roottale-tpl="team"]
3910
+ :where(.rt-tpl-team-expanding-detail .rt-tpl-team-credentials li)::before {
3911
+ background: var(--primary);
3912
+ }
3913
+
3914
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-detail .rt-tpl-team-cta) {
3915
+ justify-self: start;
3916
+ margin-top: 0.25rem;
3917
+ padding: 0.55rem 0.9rem;
3918
+ border-radius: 999px;
3919
+ background: var(--primary);
3920
+ color: var(--primary-foreground, var(--background));
3921
+ }
3922
+
3923
+ [data-roottale-tpl="team"]
3924
+ :where(.rt-tpl-team-expanding-detail .rt-tpl-team-cta:focus-visible) {
3925
+ outline: 2px solid var(--background);
3926
+ outline-offset: 2px;
3927
+ }
3928
+
3362
3929
  [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-index) {
3363
- color: var(--rt-color-muted-foreground);
3930
+ position: absolute;
3931
+ inset-block-start: 0.75rem;
3932
+ inset-inline-start: 0.9rem;
3933
+ z-index: 2;
3934
+ color: color-mix(in srgb, var(--background) 85%, transparent);
3364
3935
  font-variant-numeric: tabular-nums;
3365
- font-size: 0.78rem;
3936
+ font-size: 0.75rem;
3366
3937
  font-weight: 800;
3367
3938
  }
3368
3939
 
3940
+ @media (prefers-reduced-motion: no-preference) {
3941
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-item) {
3942
+ transition:
3943
+ flex-grow 0.72s cubic-bezier(0.22, 0.9, 0.24, 1),
3944
+ block-size 0.6s cubic-bezier(0.22, 0.9, 0.24, 1),
3945
+ box-shadow 0.4s ease;
3946
+ }
3947
+
3948
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-photo) {
3949
+ transition: filter 0.55s ease;
3950
+ }
3951
+
3952
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-name) {
3953
+ transition: opacity 0.35s ease;
3954
+ }
3955
+
3956
+ [data-roottale-tpl="team"] :where(.rt-tpl-team-expanding-detail) {
3957
+ /* 접힐 때는 빠르게 사라져 패널 축소와 텍스트 잔상이 겹치지 않게. */
3958
+ transition:
3959
+ opacity 0.16s ease,
3960
+ transform 0.3s ease;
3961
+ }
3962
+
3963
+ [data-roottale-tpl="team"]
3964
+ :where(.rt-tpl-team-expanding-item[data-active="true"] .rt-tpl-team-expanding-detail) {
3965
+ transition:
3966
+ opacity 0.45s ease 0.18s,
3967
+ transform 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.18s;
3968
+ }
3969
+ }
3970
+
3369
3971
  [data-roottale-tpl="footer"] {
3370
3972
  background: color-mix(
3371
3973
  in srgb,