@digiko-npm/designsystem 0.8.3 → 0.9.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.
@@ -1,4 +1,4 @@
1
- /* @ds/designsystem v0.8.3 */
1
+ /* @ds/designsystem v0.9.0 */
2
2
  /* ==========================================================================
3
3
  @digiko-npm/designsystem
4
4
 
@@ -9479,6 +9479,244 @@ button.ds-tag:focus-visible {
9479
9479
  }
9480
9480
 
9481
9481
 
9482
+ /* ==========================================================================
9483
+ Component: Hero
9484
+ Full-width hero section with background image, gradient overlay,
9485
+ and optional frosted glass backdrop.
9486
+
9487
+ Intentionally uses theme-independent colors for text on photo backgrounds.
9488
+ The overlay uses color-mix() with --ds-color-bg for theme-aware darkening
9489
+ while title/subtitle stay white for readability on any photo.
9490
+
9491
+ Usage:
9492
+ <section class="ds-hero" style="background-image: url(...)">
9493
+ <div class="ds-hero__overlay"></div>
9494
+ <div class="ds-hero__content ds-container">
9495
+ <div class="ds-hero__backdrop">
9496
+ <h1 class="ds-hero__title ds-hero-title">Heading</h1>
9497
+ <p class="ds-hero__subtitle">Subheading</p>
9498
+ </div>
9499
+ </div>
9500
+ </section>
9501
+
9502
+ Variants:
9503
+ ds-hero--full Generous padding, auto height (no min-height)
9504
+ ds-hero__overlay--subtle Lighter overlay, photo shows through more
9505
+
9506
+ ARIA: role="banner" or within <header>. Background images are decorative
9507
+ — add meaningful content in the markup, not in CSS.
9508
+ ========================================================================== */
9509
+
9510
+ .ds-hero {
9511
+ position: relative;
9512
+ min-height: 28rem;
9513
+ display: flex;
9514
+ align-items: center;
9515
+ justify-content: center;
9516
+ text-align: center;
9517
+ background-size: cover;
9518
+ background-position: center;
9519
+ }
9520
+
9521
+ /* --- Full variant (generous padding, no min-height) --- */
9522
+ .ds-hero--full {
9523
+ min-height: auto;
9524
+ padding-block: var(--ds-space-16);
9525
+ }
9526
+
9527
+ @media (min-width: 768px) {
9528
+
9529
+ .ds-hero--full {
9530
+ padding-block: var(--ds-space-20);
9531
+ }
9532
+ }
9533
+
9534
+
9535
+ /* --- Gradient overlay (theme-aware darkening) --- */
9536
+ .ds-hero__overlay {
9537
+ position: absolute;
9538
+ inset: 0;
9539
+ background: linear-gradient(
9540
+ to bottom,
9541
+ color-mix(in srgb, var(--ds-color-bg) 70%, transparent),
9542
+ color-mix(in srgb, var(--ds-color-bg) 92%, transparent)
9543
+ );
9544
+ }
9545
+
9546
+ .ds-hero__overlay--subtle {
9547
+ background: linear-gradient(
9548
+ to bottom,
9549
+ color-mix(in srgb, var(--ds-color-bg) 20%, transparent),
9550
+ color-mix(in srgb, var(--ds-color-bg) 40%, transparent)
9551
+ );
9552
+ }
9553
+
9554
+ [data-theme="dark"] .ds-hero__overlay {
9555
+ background: linear-gradient(
9556
+ to bottom,
9557
+ color-mix(in srgb, var(--ds-color-bg) 80%, transparent),
9558
+ color-mix(in srgb, var(--ds-color-bg) 95%, transparent)
9559
+ );
9560
+ }
9561
+
9562
+ [data-theme="dark"] .ds-hero__overlay--subtle {
9563
+ background: linear-gradient(
9564
+ to bottom,
9565
+ color-mix(in srgb, var(--ds-color-bg) 30%, transparent),
9566
+ color-mix(in srgb, var(--ds-color-bg) 50%, transparent)
9567
+ );
9568
+ }
9569
+
9570
+ /* --- Content wrapper (above overlay) --- */
9571
+ .ds-hero__content {
9572
+ position: relative;
9573
+ z-index: 1;
9574
+ width: 100%;
9575
+ }
9576
+
9577
+ /* --- Frosted glass backdrop --- */
9578
+ .ds-hero__backdrop {
9579
+ display: block;
9580
+ padding: var(--ds-space-8);
9581
+ border-radius: var(--ds-radius-2xl);
9582
+ background: rgba(0, 0, 0, 0.35);
9583
+ backdrop-filter: blur(32px) saturate(1.6);
9584
+ -webkit-backdrop-filter: blur(32px) saturate(1.6);
9585
+ max-width: 40rem;
9586
+ margin-inline: auto;
9587
+ }
9588
+
9589
+ /* --- Title & subtitle (theme-independent white for photo readability) --- */
9590
+ .ds-hero__title {
9591
+ color: #fff;
9592
+ }
9593
+
9594
+ .ds-hero__subtitle {
9595
+ color: rgba(255, 255, 255, 0.85);
9596
+ }
9597
+
9598
+
9599
+ /* === Content — Rich text and prose === */
9600
+ /* ==========================================================================
9601
+ Component: Prose Block
9602
+ Full markdown-rendered content styling. Use for CMS output, blog posts,
9603
+ documentation, or any container with user-generated rich text.
9604
+
9605
+ Note: The lighter `.ds-prose` in base/typography.css handles simple
9606
+ inline rich text (p + p spacing, links, lists). This component is for
9607
+ comprehensive markdown rendering with headings, code blocks, blockquotes,
9608
+ images, and horizontal rules.
9609
+
9610
+ Usage:
9611
+ <div class="ds-prose-block">
9612
+ <h2>Title</h2>
9613
+ <p>Paragraph with <a href="#">link</a> and <code>code</code>.</p>
9614
+ <pre><code>code block</code></pre>
9615
+ <blockquote>Quote</blockquote>
9616
+ </div>
9617
+ ========================================================================== */
9618
+
9619
+ .ds-prose-block {
9620
+ line-height: var(--ds-leading-relaxed);
9621
+ }
9622
+
9623
+ .ds-prose-block :is(h1, h2, h3, h4, h5, h6) {
9624
+ font-family: var(--ds-font-display);
9625
+ font-weight: var(--ds-font-display-weight);
9626
+ letter-spacing: var(--ds-tracking-tight);
9627
+ color: var(--ds-color-text);
9628
+ margin-block-start: 1.5em;
9629
+ margin-block-end: 0.5em;
9630
+ }
9631
+
9632
+ .ds-prose-block :is(h1, h2, h3, h4, h5, h6):first-child {
9633
+ margin-block-start: 0;
9634
+ }
9635
+
9636
+ .ds-prose-block p {
9637
+ color: var(--ds-color-text-secondary);
9638
+ margin-block-end: 1em;
9639
+ }
9640
+
9641
+ .ds-prose-block p:last-child {
9642
+ margin-block-end: 0;
9643
+ }
9644
+
9645
+ .ds-prose-block a {
9646
+ color: var(--ds-color-interactive);
9647
+ text-decoration: none;
9648
+ }
9649
+
9650
+ .ds-prose-block a:hover {
9651
+ text-decoration: underline;
9652
+ }
9653
+
9654
+ .ds-prose-block strong {
9655
+ color: var(--ds-color-text);
9656
+ font-weight: var(--ds-weight-semibold);
9657
+ }
9658
+
9659
+ .ds-prose-block code {
9660
+ font-family: var(--ds-font-mono);
9661
+ font-size: var(--ds-text-sm);
9662
+ background-color: var(--ds-color-bg-elevated);
9663
+ padding: 0.125em 0.375em;
9664
+ border-radius: var(--ds-radius-sm);
9665
+ }
9666
+
9667
+ .ds-prose-block pre {
9668
+ background-color: var(--ds-color-bg-elevated);
9669
+ padding: var(--ds-space-4);
9670
+ border-radius: var(--ds-radius-lg);
9671
+ overflow-x: auto;
9672
+ margin-block-end: 1em;
9673
+ }
9674
+
9675
+ .ds-prose-block pre code {
9676
+ background: none;
9677
+ padding: 0;
9678
+ border-radius: 0;
9679
+ }
9680
+
9681
+ .ds-prose-block ul,
9682
+ .ds-prose-block ol {
9683
+ padding-inline-start: 1.5em;
9684
+ margin-block-end: 1em;
9685
+ color: var(--ds-color-text-secondary);
9686
+ }
9687
+
9688
+ .ds-prose-block li {
9689
+ margin-block-end: 0.25em;
9690
+ }
9691
+
9692
+ .ds-prose-block ul {
9693
+ list-style-type: disc;
9694
+ }
9695
+
9696
+ .ds-prose-block ol {
9697
+ list-style-type: decimal;
9698
+ }
9699
+
9700
+ .ds-prose-block blockquote {
9701
+ border-inline-start: 3px solid var(--ds-color-border);
9702
+ padding-inline-start: var(--ds-space-4);
9703
+ color: var(--ds-color-text-secondary);
9704
+ font-style: italic;
9705
+ margin-block-end: 1em;
9706
+ }
9707
+
9708
+ .ds-prose-block hr {
9709
+ border: none;
9710
+ border-block-start: 1px solid var(--ds-color-border);
9711
+ margin-block: var(--ds-space-6);
9712
+ }
9713
+
9714
+ .ds-prose-block img {
9715
+ max-width: 100%;
9716
+ border-radius: var(--ds-radius-lg);
9717
+ margin-block-end: 1em;
9718
+ }
9719
+
9482
9720
 
9483
9721
  /* === Action — Trigger operations and commands === */
9484
9722
  /* ==========================================================================
@@ -10710,6 +10948,33 @@ tr:hover .ds-sortable__handle,
10710
10948
  }
10711
10949
 
10712
10950
 
10951
+ /* --- Responsive: Flex (extended) --- */
10952
+ @media (min-width: 640px) {
10953
+
10954
+ .ds-sm\:flex-none { flex: none; }
10955
+ .ds-sm\:items-center { align-items: center; }
10956
+ .ds-sm\:justify-between { justify-content: space-between; }
10957
+ .ds-sm\:gap-4 { gap: var(--ds-space-4); }
10958
+ .ds-sm\:gap-8 { gap: var(--ds-space-8); }
10959
+ .ds-sm\:inline { display: inline; }
10960
+ }
10961
+
10962
+
10963
+ @media (min-width: 768px) {
10964
+
10965
+ .ds-md\:grid-cols-5 { grid-template-columns: repeat(5, 1fr); }
10966
+ }
10967
+
10968
+
10969
+ @media (min-width: 1024px) /* --ds-breakpoint-lg */ {
10970
+
10971
+ .ds-lg\:flex-row { flex-direction: row; }
10972
+ .ds-lg\:gap-4 { gap: var(--ds-space-4); }
10973
+ .ds-lg\:gap-6 { gap: var(--ds-space-6); }
10974
+ .ds-lg\:gap-8 { gap: var(--ds-space-8); }
10975
+ }
10976
+
10977
+
10713
10978
  /* --- Aspect Ratio --- */
10714
10979
  .ds-aspect-square { aspect-ratio: 1; }
10715
10980
  .ds-aspect-video { aspect-ratio: 16/9; }
@@ -10802,8 +11067,15 @@ tr:hover .ds-sortable__handle,
10802
11067
 
10803
11068
  .ds-mt-0\.5 { margin-block-start: var(--ds-space-0-5); }
10804
11069
  .ds-mt-3 { margin-block-start: var(--ds-space-3); }
11070
+ .ds-mt-10 { margin-block-start: var(--ds-space-10); }
11071
+ .ds-mt-12 { margin-block-start: var(--ds-space-12); }
11072
+ .ds-mt-16 { margin-block-start: var(--ds-space-16); }
10805
11073
  .ds-mb-0\.5 { margin-block-end: var(--ds-space-0-5); }
10806
11074
  .ds-mb-3 { margin-block-end: var(--ds-space-3); }
11075
+ .ds-mb-10 { margin-block-end: var(--ds-space-10); }
11076
+ .ds-mb-12 { margin-block-end: var(--ds-space-12); }
11077
+ .ds-mb-16 { margin-block-end: var(--ds-space-16); }
11078
+ .ds-mb-20 { margin-block-end: var(--ds-space-20); }
10807
11079
 
10808
11080
  /* --- Padding (granular) --- */
10809
11081
  .ds-p-0\.5 { padding: var(--ds-space-0-5); }
@@ -10840,7 +11112,21 @@ tr:hover .ds-sortable__handle,
10840
11112
  .ds-space-y-6 > * + * { margin-block-start: var(--ds-space-6); }
10841
11113
  .ds-space-y-8 > * + * { margin-block-start: var(--ds-space-8); }
10842
11114
 
11115
+ /* --- Space-Y (fractional) --- */
11116
+ .ds-space-y-1\.5 > * + * { margin-block-start: var(--ds-space-1-5); }
11117
+
10843
11118
  /* --- Responsive: Padding --- */
11119
+ @media (min-width: 640px) {
11120
+
11121
+ .ds-sm\:p-6 { padding: var(--ds-space-6); }
11122
+ .ds-sm\:px-0 { padding-inline: var(--ds-space-0); }
11123
+ .ds-sm\:px-3 { padding-inline: var(--ds-space-3); }
11124
+ .ds-sm\:px-4 { padding-inline: var(--ds-space-4); }
11125
+ .ds-sm\:px-6 { padding-inline: var(--ds-space-6); }
11126
+ .ds-sm\:py-3 { padding-block: var(--ds-space-3); }
11127
+ }
11128
+
11129
+
10844
11130
  @media (min-width: 768px) {
10845
11131
 
10846
11132
  .ds-md\:px-4 { padding-inline: var(--ds-space-4); }
@@ -10862,6 +11148,80 @@ tr:hover .ds-sortable__handle,
10862
11148
  }
10863
11149
 
10864
11150
 
11151
+ /* ==========================================================================
11152
+ Utilities: Sizing
11153
+ Width, height, min/max constraints.
11154
+ Extends the base sizing in layout.css with the full spacing scale.
11155
+ ========================================================================== */
11156
+
11157
+ /* --- Width (values not already in layout.css) --- */
11158
+ .ds-w-0 { width: var(--ds-space-0); }
11159
+ .ds-w-1 { width: var(--ds-space-1); }
11160
+ .ds-w-1\.5 { width: var(--ds-space-1-5); }
11161
+ .ds-w-2 { width: var(--ds-space-2); }
11162
+ .ds-w-3\.5 { width: 0.875rem; }
11163
+ .ds-w-6 { width: var(--ds-space-6); }
11164
+ .ds-w-12 { width: var(--ds-space-12); }
11165
+ .ds-w-16 { width: var(--ds-space-16); }
11166
+ .ds-w-20 { width: var(--ds-space-20); }
11167
+ .ds-w-24 { width: var(--ds-space-24); }
11168
+ .ds-w-28 { width: 7rem; }
11169
+ .ds-w-32 { width: var(--ds-space-32); }
11170
+ .ds-w-48 { width: 12rem; }
11171
+ .ds-w-56 { width: 14rem; }
11172
+ .ds-w-64 { width: 16rem; }
11173
+ .ds-w-80 { width: 20rem; }
11174
+ .ds-w-96 { width: 24rem; }
11175
+ .ds-w-auto { width: auto; }
11176
+ .ds-w-screen { width: 100vw; }
11177
+
11178
+ /* --- Height (values not already in layout.css) --- */
11179
+ .ds-h-0 { height: var(--ds-space-0); }
11180
+ .ds-h-0\.5 { height: var(--ds-space-0-5); }
11181
+ .ds-h-1 { height: var(--ds-space-1); }
11182
+ .ds-h-1\.5 { height: var(--ds-space-1-5); }
11183
+ .ds-h-2 { height: var(--ds-space-2); }
11184
+ .ds-h-3\.5 { height: 0.875rem; }
11185
+ .ds-h-6 { height: var(--ds-space-6); }
11186
+ .ds-h-12 { height: var(--ds-space-12); }
11187
+ .ds-h-14 { height: 3.5rem; }
11188
+ .ds-h-20 { height: var(--ds-space-20); }
11189
+ .ds-h-24 { height: var(--ds-space-24); }
11190
+ .ds-h-28 { height: 7rem; }
11191
+ .ds-h-32 { height: var(--ds-space-32); }
11192
+ .ds-h-48 { height: 12rem; }
11193
+ .ds-h-64 { height: 16rem; }
11194
+ .ds-h-96 { height: 24rem; }
11195
+ .ds-h-auto { height: auto; }
11196
+ .ds-h-px { height: 1px; }
11197
+
11198
+ /* --- Max Width (extended) --- */
11199
+ .ds-max-w-4xl { max-width: 56rem; }
11200
+ .ds-max-w-5xl { max-width: 64rem; }
11201
+ .ds-max-w-6xl { max-width: 72rem; }
11202
+ .ds-max-w-7xl { max-width: 80rem; }
11203
+ .ds-max-w-full { max-width: 100%; }
11204
+
11205
+ /* --- Max Height --- */
11206
+ .ds-max-h-64 { max-height: 16rem; }
11207
+ .ds-max-h-80 { max-height: 20rem; }
11208
+ .ds-max-h-96 { max-height: 24rem; }
11209
+ .ds-max-h-screen { max-height: 100dvh; }
11210
+
11211
+ /* --- Responsive: Sizing --- */
11212
+ @media (min-width: 640px) {
11213
+
11214
+ .ds-sm\:w-12 { width: var(--ds-space-12); }
11215
+ .ds-sm\:w-16 { width: var(--ds-space-16); }
11216
+ .ds-sm\:w-32 { width: var(--ds-space-32); }
11217
+ .ds-sm\:w-64 { width: 16rem; }
11218
+ .ds-sm\:w-96 { width: 24rem; }
11219
+ .ds-sm\:w-auto { width: auto; }
11220
+ .ds-sm\:h-12 { height: var(--ds-space-12); }
11221
+ .ds-sm\:h-32 { height: var(--ds-space-32); }
11222
+ }
11223
+
11224
+
10865
11225
  /* ==========================================================================
10866
11226
  Utilities: Text, Visual & style helpers
10867
11227
  ========================================================================== */
@@ -11021,6 +11381,13 @@ tr:hover .ds-sortable__handle,
11021
11381
  overflow: hidden;
11022
11382
  }
11023
11383
 
11384
+ .ds-line-clamp-1 {
11385
+ display: -webkit-box;
11386
+ -webkit-line-clamp: 1;
11387
+ -webkit-box-orient: vertical;
11388
+ overflow: hidden;
11389
+ }
11390
+
11024
11391
  .ds-line-clamp-3 {
11025
11392
  display: -webkit-box;
11026
11393
  -webkit-line-clamp: 3;
@@ -11028,6 +11395,12 @@ tr:hover .ds-sortable__handle,
11028
11395
  overflow: hidden;
11029
11396
  }
11030
11397
 
11398
+ /* --- Text Extras --- */
11399
+ .ds-line-through { text-decoration: line-through; }
11400
+ .ds-break-all { word-break: break-all; }
11401
+ .ds-list-disc { list-style-type: disc; }
11402
+ .ds-list-inside { list-style-position: inside; }
11403
+
11031
11404
  /* --- Font Family --- */
11032
11405
  .ds-font-mono { font-family: var(--ds-font-mono); }
11033
11406
  .ds-font-sans { font-family: var(--ds-font-sans); }
@@ -11038,6 +11411,7 @@ tr:hover .ds-sortable__handle,
11038
11411
  .ds-border-b { border-block-end: 1px solid var(--ds-color-border); }
11039
11412
  .ds-border-l { border-inline-start: 1px solid var(--ds-color-border); }
11040
11413
  .ds-border-r { border-inline-end: 1px solid var(--ds-color-border); }
11414
+ .ds-border-y { border-block-start: 1px solid var(--ds-color-border); border-block-end: 1px solid var(--ds-color-border); }
11041
11415
  .ds-border-none { border: none; }
11042
11416
 
11043
11417
  /* --- Border Color --- */
@@ -11058,8 +11432,15 @@ tr:hover .ds-sortable__handle,
11058
11432
  .ds-rounded-lg { border-radius: var(--ds-radius-lg); }
11059
11433
  .ds-rounded-xl { border-radius: var(--ds-radius-xl); }
11060
11434
  .ds-rounded-2xl { border-radius: var(--ds-radius-2xl); }
11435
+ .ds-rounded-3xl { border-radius: 1.5rem; }
11061
11436
  .ds-rounded-full { border-radius: var(--ds-radius-full); }
11062
11437
 
11438
+ /* --- Border Radius (directional) --- */
11439
+ .ds-rounded-t { border-start-start-radius: var(--ds-radius-md); border-start-end-radius: var(--ds-radius-md); }
11440
+ .ds-rounded-b { border-end-start-radius: var(--ds-radius-md); border-end-end-radius: var(--ds-radius-md); }
11441
+ .ds-rounded-t-2xl { border-start-start-radius: var(--ds-radius-2xl); border-start-end-radius: var(--ds-radius-2xl); }
11442
+ .ds-rounded-b-2xl { border-end-start-radius: var(--ds-radius-2xl); border-end-end-radius: var(--ds-radius-2xl); }
11443
+
11063
11444
  /* --- Shadow --- */
11064
11445
  .ds-shadow-sm { box-shadow: var(--ds-shadow-sm); }
11065
11446
  .ds-shadow { box-shadow: var(--ds-shadow-md); }
@@ -11068,7 +11449,11 @@ tr:hover .ds-sortable__handle,
11068
11449
 
11069
11450
  /* --- Opacity --- */
11070
11451
  .ds-opacity-0 { opacity: 0; }
11452
+ .ds-opacity-25 { opacity: 0.25; }
11071
11453
  .ds-opacity-50 { opacity: 0.5; }
11454
+ .ds-opacity-60 { opacity: 0.6; }
11455
+ .ds-opacity-70 { opacity: 0.7; }
11456
+ .ds-opacity-75 { opacity: 0.75; }
11072
11457
  .ds-opacity-100 { opacity: 1; }
11073
11458
 
11074
11459
  /* --- Cursor --- */
@@ -11082,6 +11467,7 @@ tr:hover .ds-sortable__handle,
11082
11467
  .ds-pointer-events-none { pointer-events: none; }
11083
11468
  .ds-select-none { user-select: none; }
11084
11469
  .ds-whitespace-nowrap { white-space: nowrap; }
11470
+ .ds-whitespace-pre-wrap { white-space: pre-wrap; }
11085
11471
 
11086
11472
  /* --- Backdrop --- */
11087
11473
  .ds-backdrop-blur {
@@ -11089,6 +11475,14 @@ tr:hover .ds-sortable__handle,
11089
11475
  -webkit-backdrop-filter: blur(20px) saturate(1.5);
11090
11476
  }
11091
11477
 
11478
+ .ds-backdrop-blur-sm {
11479
+ backdrop-filter: blur(4px);
11480
+ -webkit-backdrop-filter: blur(4px);
11481
+ }
11482
+
11483
+ /* --- Outline --- */
11484
+ .ds-outline-none { outline: none; }
11485
+
11092
11486
  /* --- Transform --- */
11093
11487
  .-ds-translate-y-1\/2 { transform: translateY(-50%); }
11094
11488
  .-ds-translate-x-1\/2 { transform: translateX(-50%); }
@@ -11119,6 +11513,17 @@ tr:hover .ds-sortable__handle,
11119
11513
  transition: transform var(--ds-duration-normal) var(--ds-ease-default);
11120
11514
  }
11121
11515
 
11516
+ /* --- Duration --- */
11517
+ .ds-duration-fast { transition-duration: var(--ds-duration-fast); }
11518
+ .ds-duration-normal { transition-duration: var(--ds-duration-normal); }
11519
+ .ds-duration-slow { transition-duration: var(--ds-duration-slow); }
11520
+ .ds-duration-slower { transition-duration: var(--ds-duration-slower); }
11521
+
11522
+ /* --- Easing --- */
11523
+ .ds-ease-default { transition-timing-function: var(--ds-ease-default); }
11524
+ .ds-ease-out { transition-timing-function: var(--ds-ease-out); }
11525
+ .ds-ease-out-expo { transition-timing-function: var(--ds-ease-out-expo); }
11526
+
11122
11527
  /* --- Animations --- */
11123
11528
  @keyframes ds-fade-in {
11124
11529
  from { opacity: 0; }
@@ -11310,6 +11715,81 @@ tr:hover .ds-sortable__handle,
11310
11715
  color: var(--ds-color-text);
11311
11716
  }
11312
11717
 
11718
+ /* ==========================================================================
11719
+ Utilities: State Variants
11720
+ Hover, focus, active, focus-within, placeholder, and group-hover
11721
+ modifiers for DS utility classes.
11722
+ ========================================================================== */
11723
+
11724
+ /* --- Group Marker (enables group-hover on descendants) ---
11725
+ Supports both .group and .ds-group for compatibility. */
11726
+ .ds-group { /* marker — no styles */ }
11727
+
11728
+ /* --- Hover: Background --- */
11729
+ .hover\:ds-bg-base:hover { background-color: var(--ds-color-bg); }
11730
+ .hover\:ds-bg-elevated:hover { background-color: var(--ds-color-bg-elevated); }
11731
+ .hover\:ds-bg-muted:hover { background-color: var(--ds-color-bg-muted); }
11732
+ .hover\:ds-bg-subtle:hover { background-color: var(--ds-color-bg-subtle); }
11733
+ .hover\:ds-bg-surface:hover { background-color: var(--ds-color-surface); }
11734
+ .hover\:ds-bg-inverted:hover { background-color: var(--ds-color-inverted); }
11735
+ .hover\:ds-bg-info:hover { background-color: var(--ds-color-info); }
11736
+
11737
+ /* --- Hover: Text --- */
11738
+ .hover\:ds-text-primary:hover { color: var(--ds-color-text); }
11739
+ .hover\:ds-text-secondary:hover { color: var(--ds-color-text-secondary); }
11740
+ .hover\:ds-text-interactive:hover { color: var(--ds-color-interactive); }
11741
+
11742
+ /* --- Hover: Border --- */
11743
+ .hover\:ds-border-hover:hover { border-color: var(--ds-color-border-hover); }
11744
+ .hover\:ds-border-interactive:hover { border-color: var(--ds-color-interactive); }
11745
+
11746
+ /* --- Hover: Decoration --- */
11747
+ .hover\:ds-underline:hover { text-decoration: underline; text-underline-offset: 2px; }
11748
+
11749
+ /* --- Focus --- */
11750
+ .focus\:ds-outline-none:focus { outline: none; }
11751
+ .focus\:ds-ring-0:focus { box-shadow: none; }
11752
+ .focus\:ds-ring-2:focus { box-shadow: 0 0 0 var(--ds-ring-width) var(--ds-color-interactive); }
11753
+
11754
+ /* --- Focus-Within --- */
11755
+ .focus-within\:ds-border-interactive:focus-within { border-color: var(--ds-color-interactive); }
11756
+
11757
+ /* --- Active --- */
11758
+ .active\:ds-bg-elevated:active { background-color: var(--ds-color-bg-elevated); }
11759
+ .active\:ds-text-secondary:active { color: var(--ds-color-text-secondary); }
11760
+
11761
+ /* --- Placeholder --- */
11762
+ .placeholder\:ds-text-tertiary::placeholder { color: var(--ds-color-text-tertiary); }
11763
+
11764
+ /* --- Group Hover (descendants of .group or .ds-group on hover) --- */
11765
+ .group:hover > .group-hover\:ds-text-interactive,
11766
+ .group:hover .group-hover\:ds-text-interactive,
11767
+ .ds-group:hover > .group-hover\:ds-text-interactive,
11768
+ .ds-group:hover .group-hover\:ds-text-interactive {
11769
+ color: var(--ds-color-interactive);
11770
+ }
11771
+
11772
+ .group:hover > .group-hover\:ds-scale-110,
11773
+ .group:hover .group-hover\:ds-scale-110,
11774
+ .ds-group:hover > .group-hover\:ds-scale-110,
11775
+ .ds-group:hover .group-hover\:ds-scale-110 {
11776
+ transform: scale(1.1);
11777
+ }
11778
+
11779
+ .group:hover > .group-hover\:ds-translate-x-1,
11780
+ .group:hover .group-hover\:ds-translate-x-1,
11781
+ .ds-group:hover > .group-hover\:ds-translate-x-1,
11782
+ .ds-group:hover .group-hover\:ds-translate-x-1 {
11783
+ transform: translateX(0.25rem);
11784
+ }
11785
+
11786
+ .group:hover > .group-hover\:ds-opacity-100,
11787
+ .group:hover .group-hover\:ds-opacity-100,
11788
+ .ds-group:hover > .group-hover\:ds-opacity-100,
11789
+ .ds-group:hover .group-hover\:ds-opacity-100 {
11790
+ opacity: 1;
11791
+ }
11792
+
11313
11793
  /* ==========================================================================
11314
11794
  Utilities: Accessibility
11315
11795
  Screen-reader helpers, skip links, focus utilities, and motion control.