@duskmoon-dev/core 1.18.6 → 1.19.1

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,5 +1,5 @@
1
1
  /**
2
- * @duskmoon-dev/core v1.18.6
2
+ * @duskmoon-dev/core v1.19.1
3
3
  * Built-in DuskMoonUI themes
4
4
  * https://github.com/duskmoon-dev/duskmoonui
5
5
  * @license MIT
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @duskmoon-dev/core v1.18.6
3
- * @duskmoon-dev/css-art v1.18.6
2
+ * @duskmoon-dev/core v1.19.1
3
+ * @duskmoon-dev/css-art v1.19.1
4
4
  * Complete standalone DuskMoonUI styles
5
5
  * https://github.com/duskmoon-dev/duskmoonui
6
6
  * @license MIT
@@ -2972,6 +2972,65 @@ html {
2972
2972
  gap: 0.25rem;
2973
2973
  }
2974
2974
 
2975
+ /* Native floating menu. Keep closed popovers hidden despite the base flex layout. */
2976
+ .menu[popover] {
2977
+ display: none;
2978
+ position: absolute;
2979
+ inset: auto;
2980
+ margin: 0.5rem;
2981
+ min-width: 12rem;
2982
+ max-width: calc(100vw - 1rem);
2983
+ max-height: calc(100dvh - 1rem);
2984
+ overflow: auto;
2985
+ color: var(--color-on-surface);
2986
+ background-color: var(--color-surface-container);
2987
+ border: 1px solid var(--color-outline-variant);
2988
+ border-radius: var(--radius-md);
2989
+ box-shadow: var(--shadow-lg);
2990
+ position-area: bottom;
2991
+ position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline;
2992
+ opacity: 0;
2993
+ transform: scale(0.95);
2994
+ transition:
2995
+ opacity 150ms ease-out,
2996
+ transform 150ms ease-out,
2997
+ overlay 150ms ease-out allow-discrete,
2998
+ display 150ms ease-out allow-discrete;
2999
+ }
3000
+
3001
+ .menu[popover]:popover-open {
3002
+ display: flex;
3003
+ opacity: 1;
3004
+ transform: scale(1);
3005
+ }
3006
+
3007
+ @starting-style {
3008
+ .menu[popover]:popover-open {
3009
+ opacity: 0;
3010
+ transform: scale(0.95);
3011
+ }
3012
+ }
3013
+
3014
+ .menu[popover]::backdrop {
3015
+ background-color: transparent;
3016
+ }
3017
+
3018
+ .menu-top[popover] {
3019
+ position-area: top;
3020
+ }
3021
+
3022
+ .menu-bottom[popover] {
3023
+ position-area: bottom;
3024
+ }
3025
+
3026
+ .menu-left[popover] {
3027
+ position-area: left;
3028
+ }
3029
+
3030
+ .menu-right[popover] {
3031
+ position-area: right;
3032
+ }
3033
+
2975
3034
  .menu li {
2976
3035
  display: flex;
2977
3036
  flex-shrink: 0;
@@ -3650,6 +3709,10 @@ html {
3650
3709
 
3651
3710
  /* Reduce Motion */
3652
3711
  @media (prefers-reduced-motion: reduce) {
3712
+ .menu li > a,
3713
+ .menu li > button,
3714
+ .menu-item,
3715
+ .menu[popover],
3653
3716
  .pagination-item,
3654
3717
  .pagination-prev,
3655
3718
  .pagination-next {
@@ -16147,6 +16210,185 @@ html {
16147
16210
  }
16148
16211
  }
16149
16212
 
16213
+ /**
16214
+ * Console Page Layout
16215
+ * Responsive application shell with expanded, icon-rail, and hidden sidebar states.
16216
+ */
16217
+
16218
+ @layer components {
16219
+ .console-page {
16220
+ --console-page-sidebar-width: 17.5rem;
16221
+ --console-page-sidebar-compact-width: 5rem;
16222
+ container-type: inline-size;
16223
+ container-name: console-page;
16224
+ width: 100%;
16225
+ min-width: 0;
16226
+ min-height: var(--console-page-min-height, 100dvh);
16227
+ background-color: var(--color-surface);
16228
+ color: var(--color-on-surface);
16229
+ }
16230
+
16231
+ .console-page-frame {
16232
+ display: grid;
16233
+ min-height: inherit;
16234
+ grid-template-areas:
16235
+ "appbar"
16236
+ "main";
16237
+ grid-template-columns: minmax(0, 1fr);
16238
+ grid-template-rows: auto minmax(0, 1fr);
16239
+ transition: grid-template-columns 240ms ease-out;
16240
+ }
16241
+
16242
+ .console-page-appbar {
16243
+ grid-area: appbar;
16244
+ z-index: 20;
16245
+ }
16246
+
16247
+ .console-page-sidebar {
16248
+ display: none;
16249
+ grid-area: sidebar;
16250
+ min-width: 0;
16251
+ overflow: hidden;
16252
+ background-color: var(--color-surface-container-low);
16253
+ border-inline-end: 1px solid var(--color-outline-variant);
16254
+ transition:
16255
+ opacity 160ms ease-out,
16256
+ visibility 160ms ease-out;
16257
+ }
16258
+
16259
+ .console-page-sidebar-header,
16260
+ .console-page-sidebar-footer {
16261
+ display: flex;
16262
+ align-items: center;
16263
+ gap: 0.75rem;
16264
+ min-height: 4rem;
16265
+ padding: 0.75rem 1rem;
16266
+ flex-shrink: 0;
16267
+ }
16268
+
16269
+ .console-page-sidebar-header {
16270
+ border-bottom: 1px solid var(--color-outline-variant);
16271
+ }
16272
+
16273
+ .console-page-sidebar-body {
16274
+ flex: 1;
16275
+ min-height: 0;
16276
+ overflow-y: auto;
16277
+ overflow-x: hidden;
16278
+ padding-block: 0.5rem;
16279
+ }
16280
+
16281
+ .console-page-sidebar-footer {
16282
+ border-top: 1px solid var(--color-outline-variant);
16283
+ }
16284
+
16285
+ .console-page-main {
16286
+ grid-area: main;
16287
+ min-width: 0;
16288
+ overflow: auto;
16289
+ padding: clamp(1rem, 4cqi, 2.5rem);
16290
+ background-color: var(--color-surface);
16291
+ }
16292
+
16293
+ .console-page-nav-label {
16294
+ overflow: hidden;
16295
+ text-overflow: ellipsis;
16296
+ white-space: nowrap;
16297
+ }
16298
+
16299
+ .console-page-sidebar-toggle {
16300
+ display: none;
16301
+ }
16302
+
16303
+ .console-page-menu-trigger {
16304
+ display: inline-flex;
16305
+ }
16306
+
16307
+ .console-page-mobile-menu {
16308
+ max-width: min(20rem, calc(100cqi - 2rem));
16309
+ }
16310
+
16311
+ @container console-page (min-width: 48rem) {
16312
+ .console-page-frame {
16313
+ grid-template-areas:
16314
+ "appbar appbar"
16315
+ "sidebar main";
16316
+ grid-template-columns: var(--console-page-sidebar-width) minmax(0, 1fr);
16317
+ }
16318
+
16319
+ .console-page-sidebar {
16320
+ display: flex;
16321
+ flex-direction: column;
16322
+ }
16323
+
16324
+ .console-page-sidebar-toggle {
16325
+ display: inline-flex;
16326
+ }
16327
+
16328
+ .console-page-menu-trigger {
16329
+ display: none;
16330
+ }
16331
+
16332
+ .console-page-mobile-menu {
16333
+ display: none;
16334
+ }
16335
+
16336
+ .console-page-sidebar-compact .console-page-frame {
16337
+ grid-template-columns: var(--console-page-sidebar-compact-width) minmax(0, 1fr);
16338
+ }
16339
+
16340
+ .console-page-sidebar-compact .console-page-nav-label {
16341
+ position: absolute;
16342
+ width: 1px;
16343
+ height: 1px;
16344
+ padding: 0;
16345
+ margin: -1px;
16346
+ overflow: hidden;
16347
+ clip: rect(0, 0, 0, 0);
16348
+ white-space: nowrap;
16349
+ border: 0;
16350
+ }
16351
+
16352
+ .console-page-sidebar-compact .console-page-sidebar-header,
16353
+ .console-page-sidebar-compact .console-page-sidebar-footer {
16354
+ justify-content: center;
16355
+ padding-inline: 0.75rem;
16356
+ }
16357
+
16358
+ .console-page-sidebar-compact .console-page-sidebar-body :is(.nested-menu li > a, .nested-menu li > button, .nested-menu summary) {
16359
+ justify-content: center;
16360
+ padding-inline: 0.75rem;
16361
+ }
16362
+
16363
+ .console-page-sidebar-compact .console-page-sidebar-body .drawer-item {
16364
+ justify-content: center;
16365
+ padding-inline: 0.75rem;
16366
+ }
16367
+
16368
+ .console-page-sidebar-compact .console-page-sidebar-body :is(.nested-menu-title, details > ul, summary::after) {
16369
+ display: none;
16370
+ }
16371
+
16372
+ .console-page-sidebar-hidden .console-page-frame {
16373
+ grid-template-areas:
16374
+ "appbar"
16375
+ "main";
16376
+ grid-template-columns: minmax(0, 1fr);
16377
+ }
16378
+
16379
+ .console-page-sidebar-hidden .console-page-sidebar {
16380
+ display: none;
16381
+ }
16382
+ }
16383
+
16384
+ @media (prefers-reduced-motion: reduce) {
16385
+ .console-page-frame,
16386
+ .console-page-sidebar {
16387
+ transition: none;
16388
+ }
16389
+ }
16390
+ }
16391
+
16150
16392
  /**
16151
16393
  * Divider Component Styles
16152
16394
  * DuskMoonUI - Material Design 3 inspired divider system
@@ -16522,6 +16764,182 @@ html {
16522
16764
  }
16523
16765
  }
16524
16766
 
16767
+ /**
16768
+ * Home Page Layout
16769
+ * App-bar-led public application shell driven by its containing width.
16770
+ */
16771
+
16772
+ @layer components {
16773
+ .home-page {
16774
+ container-type: inline-size;
16775
+ container-name: home-page;
16776
+ width: 100%;
16777
+ min-width: 0;
16778
+ min-height: var(--home-page-min-height, 100dvh);
16779
+ background-color: var(--color-surface);
16780
+ color: var(--color-on-surface);
16781
+ }
16782
+
16783
+ .home-page-frame {
16784
+ display: grid;
16785
+ min-height: inherit;
16786
+ grid-template-rows: auto minmax(0, 1fr) auto;
16787
+ }
16788
+
16789
+ .home-page-header {
16790
+ z-index: 10;
16791
+ }
16792
+
16793
+ .home-page-nav {
16794
+ display: none;
16795
+ align-items: center;
16796
+ gap: 0.25rem;
16797
+ }
16798
+
16799
+ .home-page-actions {
16800
+ display: none;
16801
+ align-items: center;
16802
+ gap: 0.25rem;
16803
+ }
16804
+
16805
+ .home-page-menu-trigger {
16806
+ display: inline-flex;
16807
+ }
16808
+
16809
+ .home-page-mobile-menu {
16810
+ max-width: min(20rem, calc(100cqi - 2rem));
16811
+ }
16812
+
16813
+ .home-page-main {
16814
+ min-width: 0;
16815
+ }
16816
+
16817
+ .home-page-content {
16818
+ width: min(100%, 80rem);
16819
+ margin-inline: auto;
16820
+ padding: clamp(1rem, 5cqi, 3rem);
16821
+ }
16822
+
16823
+ .home-page-hero {
16824
+ display: grid;
16825
+ align-items: center;
16826
+ grid-template-columns: minmax(0, 1fr);
16827
+ gap: clamp(2rem, 5cqi, 4rem);
16828
+ }
16829
+
16830
+ .home-page-footer {
16831
+ border-top: 1px solid var(--color-outline-variant);
16832
+ background-color: var(--color-surface-container-low);
16833
+ }
16834
+
16835
+ @container home-page (min-width: 48rem) {
16836
+ .home-page-nav {
16837
+ display: flex;
16838
+ }
16839
+
16840
+ .home-page-actions {
16841
+ display: flex;
16842
+ }
16843
+
16844
+ .home-page-menu-trigger {
16845
+ display: none;
16846
+ }
16847
+
16848
+ .home-page-mobile-menu {
16849
+ display: none;
16850
+ }
16851
+
16852
+ .home-page-content {
16853
+ padding-inline: clamp(2rem, 5cqi, 5rem);
16854
+ }
16855
+
16856
+ .home-page-hero {
16857
+ grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.8fr);
16858
+ }
16859
+ }
16860
+ }
16861
+
16862
+ /**
16863
+ * Sign Page Layout
16864
+ * Responsive authentication shell driven by its containing width.
16865
+ */
16866
+
16867
+ @layer components {
16868
+ .sign-page {
16869
+ container-type: inline-size;
16870
+ container-name: sign-page;
16871
+ width: 100%;
16872
+ min-width: 0;
16873
+ min-height: var(--sign-page-min-height, 100dvh);
16874
+ overflow: hidden;
16875
+ background-color: var(--color-surface);
16876
+ color: var(--color-on-surface);
16877
+ }
16878
+
16879
+ .sign-page-frame {
16880
+ display: grid;
16881
+ min-height: inherit;
16882
+ grid-template-columns: minmax(0, 1fr);
16883
+ }
16884
+
16885
+ .sign-page-aside {
16886
+ display: none;
16887
+ position: relative;
16888
+ isolation: isolate;
16889
+ overflow: hidden;
16890
+ padding: clamp(2rem, 6cqi, 5rem);
16891
+ background-color: var(--color-primary-container);
16892
+ color: var(--color-on-primary-container);
16893
+ }
16894
+
16895
+ .sign-page-aside::before,
16896
+ .sign-page-aside::after {
16897
+ content: "";
16898
+ position: absolute;
16899
+ z-index: -1;
16900
+ border-radius: var(--radius-full);
16901
+ background: color-mix(in oklch, var(--color-tertiary) 24%, transparent);
16902
+ filter: blur(1px);
16903
+ }
16904
+
16905
+ .sign-page-aside::before {
16906
+ width: 22rem;
16907
+ height: 22rem;
16908
+ inset: -8rem -6rem auto auto;
16909
+ }
16910
+
16911
+ .sign-page-aside::after {
16912
+ width: 15rem;
16913
+ height: 15rem;
16914
+ inset: auto auto -5rem -4rem;
16915
+ background: color-mix(in oklch, var(--color-secondary) 22%, transparent);
16916
+ }
16917
+
16918
+ .sign-page-main {
16919
+ display: grid;
16920
+ place-items: center;
16921
+ min-width: 0;
16922
+ padding: clamp(1rem, 6cqi, 4rem);
16923
+ background-color: var(--color-surface);
16924
+ }
16925
+
16926
+ .sign-page-content {
16927
+ width: min(100%, 30rem);
16928
+ }
16929
+
16930
+ @container sign-page (min-width: 48rem) {
16931
+ .sign-page-frame {
16932
+ grid-template-columns: minmax(20rem, 1.15fr) minmax(24rem, 0.85fr);
16933
+ }
16934
+
16935
+ .sign-page-aside {
16936
+ display: flex;
16937
+ flex-direction: column;
16938
+ justify-content: space-between;
16939
+ }
16940
+ }
16941
+ }
16942
+
16525
16943
 
16526
16944
  /* ============================================
16527
16945
  * NAVIGATION COMPONENTS
@@ -17161,6 +17579,26 @@ html {
17161
17579
  visibility: visible;
17162
17580
  }
17163
17581
 
17582
+ /* Native surfaces keep the browser's closed state and reset UA dialog/popover geometry. */
17583
+ :where(.drawer[popover], dialog.drawer) {
17584
+ inset: auto;
17585
+ margin: 0;
17586
+ width: auto;
17587
+ height: auto;
17588
+ padding: 0;
17589
+ border: 0;
17590
+ color: var(--color-on-surface);
17591
+ max-width: none;
17592
+ max-height: none;
17593
+ overflow: auto;
17594
+ box-sizing: border-box;
17595
+ }
17596
+
17597
+ .drawer[popover]:not(:popover-open),
17598
+ dialog.drawer:not([open]) {
17599
+ display: none;
17600
+ }
17601
+
17164
17602
  /* Base Drawer */
17165
17603
  .drawer {
17166
17604
  position: fixed;
@@ -17499,8 +17937,65 @@ html {
17499
17937
  border-radius: 0;
17500
17938
  }
17501
17939
 
17940
+ /* Native state overrides legacy transforms without requiring class toggles. */
17941
+ .drawer[popover],
17942
+ dialog.drawer {
17943
+ transition: transform 300ms ease-out, opacity 300ms ease-out,
17944
+ display 300ms allow-discrete, overlay 300ms allow-discrete;
17945
+ opacity: 0;
17946
+ }
17947
+
17948
+ .drawer[popover]:popover-open,
17949
+ dialog.drawer[open] {
17950
+ display: flex;
17951
+ transform: translate(0, 0);
17952
+ opacity: 1;
17953
+ }
17954
+
17955
+ dialog.drawer::backdrop {
17956
+ background-color: color-mix(in srgb, var(--color-scrim) 50%, transparent);
17957
+ opacity: 0;
17958
+ transition: opacity 300ms ease-out, display 300ms allow-discrete,
17959
+ overlay 300ms allow-discrete;
17960
+ }
17961
+
17962
+ dialog.drawer[open]::backdrop {
17963
+ opacity: 1;
17964
+ }
17965
+
17966
+ @starting-style {
17967
+ .drawer[popover]:popover-open,
17968
+ dialog.drawer[open],
17969
+ dialog.drawer[open]::backdrop {
17970
+ opacity: 0;
17971
+ }
17972
+
17973
+ .drawer-left[popover]:popover-open,
17974
+ dialog.drawer-left[open] {
17975
+ transform: translateX(-100%);
17976
+ }
17977
+
17978
+ .drawer-right[popover]:popover-open,
17979
+ dialog.drawer-right[open] {
17980
+ transform: translateX(100%);
17981
+ }
17982
+
17983
+ .drawer-top[popover]:popover-open,
17984
+ dialog.drawer-top[open] {
17985
+ transform: translateY(-100%);
17986
+ }
17987
+
17988
+ .drawer-bottom[popover]:popover-open,
17989
+ dialog.drawer-bottom[open] {
17990
+ transform: translateY(100%);
17991
+ }
17992
+ }
17993
+
17502
17994
  /* Reduce Motion */
17503
17995
  @media (prefers-reduced-motion: reduce) {
17996
+ .drawer[popover],
17997
+ dialog.drawer,
17998
+ dialog.drawer::backdrop,
17504
17999
  .drawer,
17505
18000
  .drawer-backdrop,
17506
18001
  .drawer-close,
@@ -18363,6 +18858,26 @@ html {
18363
18858
  visibility: visible;
18364
18859
  }
18365
18860
 
18861
+ /* Native surfaces keep the browser's closed state and reset UA dialog/popover geometry. */
18862
+ :where(.bottomsheet[popover], dialog.bottomsheet) {
18863
+ inset: auto;
18864
+ margin: 0;
18865
+ width: auto;
18866
+ height: auto;
18867
+ padding: 0;
18868
+ border: 0;
18869
+ color: var(--color-on-surface);
18870
+ max-width: none;
18871
+ max-height: none;
18872
+ overflow: auto;
18873
+ box-sizing: border-box;
18874
+ }
18875
+
18876
+ .bottomsheet[popover]:not(:popover-open),
18877
+ dialog.bottomsheet:not([open]) {
18878
+ display: none;
18879
+ }
18880
+
18366
18881
  /* Base Bottom Sheet */
18367
18882
  .bottomsheet {
18368
18883
  position: fixed;
@@ -18664,8 +19179,57 @@ html {
18664
19179
  }
18665
19180
  }
18666
19181
 
19182
+ /* Native state overrides legacy transforms without requiring class toggles. */
19183
+ .bottomsheet[popover],
19184
+ dialog.bottomsheet {
19185
+ transition: transform 300ms ease-out, opacity 300ms ease-out,
19186
+ display 300ms allow-discrete, overlay 300ms allow-discrete;
19187
+ opacity: 0;
19188
+ }
19189
+
19190
+ .bottomsheet[popover]:popover-open,
19191
+ dialog.bottomsheet[open] {
19192
+ display: flex;
19193
+ transform: translate(0, 0);
19194
+ opacity: 1;
19195
+ }
19196
+
19197
+ dialog.bottomsheet::backdrop {
19198
+ background-color: color-mix(in srgb, var(--color-scrim) 50%, transparent);
19199
+ opacity: 0;
19200
+ transition: opacity 300ms ease-out, display 300ms allow-discrete,
19201
+ overlay 300ms allow-discrete;
19202
+ }
19203
+
19204
+ dialog.bottomsheet[open]::backdrop {
19205
+ opacity: 1;
19206
+ }
19207
+
19208
+ @starting-style {
19209
+ .bottomsheet[popover]:popover-open,
19210
+ dialog.bottomsheet[open],
19211
+ dialog.bottomsheet[open]::backdrop {
19212
+ opacity: 0;
19213
+ }
19214
+
19215
+ .bottomsheet[popover]:popover-open,
19216
+ dialog.bottomsheet[open] {
19217
+ transform: translateY(100%);
19218
+ }
19219
+
19220
+ @media (min-width: 768px) {
19221
+ .bottomsheet-responsive[popover]:popover-open,
19222
+ dialog.bottomsheet-responsive[open] {
19223
+ transform: translateX(100%);
19224
+ }
19225
+ }
19226
+ }
19227
+
18667
19228
  /* Reduce Motion */
18668
19229
  @media (prefers-reduced-motion: reduce) {
19230
+ .bottomsheet[popover],
19231
+ dialog.bottomsheet,
19232
+ dialog.bottomsheet::backdrop,
18669
19233
  .bottomsheet,
18670
19234
  .bottomsheet-backdrop,
18671
19235
  .bottomsheet-close,