@yewdiel21/motion-kit 0.9.1 → 0.10.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 (129) hide show
  1. package/README.md +93 -83
  2. package/dist/auto/index.d.ts +22 -3
  3. package/dist/auto/index.js +41 -3
  4. package/dist/auto/index.js.map +1 -1
  5. package/dist/{chunk-BFC27F2G.js → chunk-IKQ5FODN.js} +2 -2
  6. package/dist/{chunk-JQMJQSXD.js → chunk-TFNRIZHU.js} +1614 -11
  7. package/dist/chunk-TFNRIZHU.js.map +1 -0
  8. package/dist/{chunk-XDWBVFHQ.js → chunk-XAKC2QY7.js} +1202 -3
  9. package/dist/chunk-XAKC2QY7.js.map +1 -0
  10. package/dist/css/components/calendar.css +159 -0
  11. package/dist/css/components/hover-card.css +14 -0
  12. package/dist/css/components/input-otp.css +10 -0
  13. package/dist/css/components/pagination.css +11 -0
  14. package/dist/css/components/quantity.css +16 -0
  15. package/dist/css/components/slot-picker.css +126 -0
  16. package/dist/css/components/studio-dock.css +35 -0
  17. package/dist/css/components/trailer.css +37 -0
  18. package/dist/css/controls.css +65 -0
  19. package/dist/elements/index.d.ts +72 -4
  20. package/dist/elements/index.js +170 -4
  21. package/dist/elements/index.js.map +1 -1
  22. package/dist/index.css +1017 -0
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +45 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/react/index.d.ts +105 -6
  27. package/dist/react/index.js +350 -3
  28. package/dist/react/index.js.map +1 -1
  29. package/dist/{reduced-B98f8LPs.d.ts → reduced-BmBzKH94.d.ts} +199 -2
  30. package/dist/{reveal-C0hCDcB_.d.ts → reveal-jsX-uwUz.d.ts} +211 -1
  31. package/dist/{store-pHiUvxP8.d.ts → store-DYb3tTsZ.d.ts} +1 -1
  32. package/package.json +1 -1
  33. package/registry.json +178 -104
  34. package/skills/motion-kit/SKILL.md +209 -189
  35. package/src/auto/auto-init.ts +38 -0
  36. package/src/components/calendar/README.md +82 -0
  37. package/src/components/calendar/calendar.css +158 -0
  38. package/src/components/calendar/element.ts +27 -0
  39. package/src/components/calendar/engine.ts +412 -0
  40. package/src/components/calendar/react.tsx +69 -0
  41. package/src/components/hover-card/README.md +16 -0
  42. package/src/components/hover-card/element.ts +8 -0
  43. package/src/components/hover-card/engine.ts +69 -0
  44. package/src/components/hover-card/hover-card.css +13 -0
  45. package/src/components/hover-card/react.tsx +19 -0
  46. package/src/components/input-otp/README.md +18 -0
  47. package/src/components/input-otp/element.ts +14 -0
  48. package/src/components/input-otp/engine.ts +106 -0
  49. package/src/components/input-otp/input-otp.css +9 -0
  50. package/src/components/input-otp/react.tsx +21 -0
  51. package/src/components/pagination/README.md +17 -0
  52. package/src/components/pagination/element.ts +14 -0
  53. package/src/components/pagination/engine.ts +102 -0
  54. package/src/components/pagination/pagination.css +10 -0
  55. package/src/components/pagination/react.tsx +22 -0
  56. package/src/components/quantity/README.md +20 -0
  57. package/src/components/quantity/element.ts +14 -0
  58. package/src/components/quantity/engine.ts +85 -0
  59. package/src/components/quantity/quantity.css +15 -0
  60. package/src/components/quantity/react.tsx +21 -0
  61. package/src/components/slot-picker/README.md +68 -0
  62. package/src/components/slot-picker/element.ts +27 -0
  63. package/src/components/slot-picker/engine.ts +412 -0
  64. package/src/components/slot-picker/react.tsx +76 -0
  65. package/src/components/slot-picker/slot-picker.css +125 -0
  66. package/src/components/studio-dock/README.md +44 -0
  67. package/src/components/studio-dock/element.ts +11 -0
  68. package/src/components/studio-dock/engine.ts +212 -0
  69. package/src/components/studio-dock/react.tsx +23 -0
  70. package/src/components/studio-dock/studio-dock.css +34 -0
  71. package/src/components/trailer/README.md +28 -0
  72. package/src/components/trailer/element.ts +13 -0
  73. package/src/components/trailer/engine.ts +189 -0
  74. package/src/components/trailer/react.tsx +16 -0
  75. package/src/components/trailer/trailer.css +36 -0
  76. package/src/core/dates.ts +98 -0
  77. package/src/css/controls/README.md +14 -0
  78. package/src/css/controls/status.css +63 -0
  79. package/src/elements/index.ts +24 -0
  80. package/src/index.ts +25 -0
  81. package/src/react/index.ts +21 -0
  82. package/src/react/use-action-button.ts +6 -0
  83. package/src/react/use-editorial-reveal.ts +7 -0
  84. package/src/react/use-film-hero.ts +6 -0
  85. package/src/react/use-font-cycle.ts +7 -0
  86. package/src/react/use-image-zoom.ts +5 -0
  87. package/src/react/use-joined-cta.ts +5 -0
  88. package/src/react/use-local-clock.ts +5 -0
  89. package/src/react/use-scroll-dock.ts +5 -0
  90. package/src/react/use-sticker.ts +5 -0
  91. package/src/react/use-studio-dock.ts +8 -0
  92. package/src/react/use-thumbnail-nav.ts +7 -0
  93. package/src/react/use-trailer.ts +6 -0
  94. package/src/react/use-weight-hover.ts +5 -0
  95. package/src/recipes/action-button/README.md +31 -0
  96. package/src/recipes/action-button/action-button.css +113 -0
  97. package/src/recipes/action-button/create-action-button.ts +56 -0
  98. package/src/recipes/editorial-reveal/README.md +35 -0
  99. package/src/recipes/editorial-reveal/create-editorial-reveal.ts +91 -0
  100. package/src/recipes/editorial-reveal/editorial-reveal.css +17 -0
  101. package/src/recipes/film-hero/README.md +23 -0
  102. package/src/recipes/film-hero/create-film-hero.ts +65 -0
  103. package/src/recipes/film-hero/film-hero.css +29 -0
  104. package/src/recipes/font-cycle/README.md +11 -0
  105. package/src/recipes/font-cycle/create-font-cycle.ts +126 -0
  106. package/src/recipes/font-cycle/font-cycle.css +36 -0
  107. package/src/recipes/image-zoom/README.md +16 -0
  108. package/src/recipes/image-zoom/create-image-zoom.ts +27 -0
  109. package/src/recipes/image-zoom/image-zoom.css +7 -0
  110. package/src/recipes/joined-cta/README.md +13 -0
  111. package/src/recipes/joined-cta/create-joined-cta.ts +22 -0
  112. package/src/recipes/joined-cta/joined-cta.css +17 -0
  113. package/src/recipes/local-clock/README.md +31 -0
  114. package/src/recipes/local-clock/create-local-clock.ts +61 -0
  115. package/src/recipes/scroll-dock/README.md +46 -0
  116. package/src/recipes/scroll-dock/create-scroll-dock.ts +72 -0
  117. package/src/recipes/scroll-dock/scroll-dock.css +70 -0
  118. package/src/recipes/sticker/README.md +59 -0
  119. package/src/recipes/sticker/create-sticker.ts +490 -0
  120. package/src/recipes/sticker/sticker.css +112 -0
  121. package/src/recipes/thumbnail-nav/README.md +16 -0
  122. package/src/recipes/thumbnail-nav/create-thumbnail-nav.ts +165 -0
  123. package/src/recipes/thumbnail-nav/thumbnail-nav.css +108 -0
  124. package/src/recipes/weight-hover/README.md +37 -0
  125. package/src/recipes/weight-hover/create-weight-hover.ts +136 -0
  126. package/src/recipes/weight-hover/weight-hover.css +7 -0
  127. package/dist/chunk-JQMJQSXD.js.map +0 -1
  128. package/dist/chunk-XDWBVFHQ.js.map +0 -1
  129. /package/dist/{chunk-BFC27F2G.js.map → chunk-IKQ5FODN.js.map} +0 -0
package/dist/index.css CHANGED
@@ -1245,6 +1245,542 @@
1245
1245
  .mk-shader__canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
1246
1246
  .mk-shader__canvas[hidden] { display: none; }
1247
1247
 
1248
+ /* recipes/joined-cta/joined-cta.css */
1249
+ .mk-joined-cta { --mk-joined-duration: .5s; --mk-joined-bg: var(--mk-text); --mk-joined-color: var(--mk-bg); position: relative; display: inline-flex; align-items: center; justify-content: center; width: 17.7rem; height: 5.9rem; max-width: 100%; border: 0; padding: 0; background: transparent; text-decoration: none; color: var(--mk-joined-color); cursor: pointer; font: inherit; isolation: isolate; border-radius: var(--mk-radius-full); }
1250
+ .mk-joined-cta::before { content: ''; position: absolute; left: 0; width: 7.3rem; height: 5.9rem; border-radius: 100px; background: var(--mk-joined-bg); z-index: -1; transition: width var(--mk-joined-duration) ease-in-out; }
1251
+ .mk-joined-cta > span { position: relative; display: grid; place-items: center; flex-shrink: 0; background: var(--mk-joined-bg); border-radius: 100px; height: 5.9rem; transition: left var(--mk-joined-duration) ease-in-out, height var(--mk-joined-duration) ease-in-out, transform var(--mk-joined-duration) ease-in-out, background var(--mk-joined-duration); }
1252
+ .mk-joined-cta > span:nth-child(1) { width: 7.3rem; left: 0; }
1253
+ .mk-joined-cta > span:nth-child(2) { width: 4.5rem; left: 0; z-index: 2; }
1254
+ .mk-joined-cta > span:nth-child(3) { width: 5.9rem; height: 3.05rem; left: -1.45rem; transform: rotate(-90deg); }
1255
+ .mk-joined-cta:is(:hover,:focus-visible,[data-mk-expanded])::before { width: 17.7rem; }
1256
+ .mk-joined-cta:is(:hover,:focus-visible,[data-mk-expanded]) > span:nth-child(1) { left: 3.2rem; }
1257
+ .mk-joined-cta:is(:hover,:focus-visible,[data-mk-expanded]) > span:nth-child(2) { left: -.75rem; background: transparent; }
1258
+ .mk-joined-cta:is(:hover,:focus-visible,[data-mk-expanded]) > span:nth-child(3) { left: -3.65rem; height: 5.9rem; transform: rotate(0); }
1259
+ .mk-joined-cta:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 5px; }
1260
+ @media (hover: none), (max-width: 420px) {
1261
+ .mk-joined-cta { width: auto; height: auto; padding: 1.25rem 2rem; gap: .3em; background: var(--mk-joined-bg); }
1262
+ .mk-joined-cta::before { display: none; }
1263
+ .mk-joined-cta > span:nth-child(n) { width: auto; height: auto; left: 0; transform: none; background: transparent; }
1264
+ }
1265
+ @media (prefers-reduced-motion: reduce) { .mk-joined-cta::before, .mk-joined-cta > span { transition: none; } }
1266
+
1267
+ /* recipes/image-zoom/image-zoom.css */
1268
+ .mk-image-zoom { --mk-zoom-duration: 1s; --mk-zoom-frame-scale: 1.1; --mk-zoom-image-scale: 1.2; --mk-zoom-ease: cubic-bezier(.28,.71,0,.98); color: inherit; text-decoration: none; }
1269
+ .mk-image-zoom [data-mk-zoom-frame] { display: block; overflow: hidden; border-radius: inherit; transition: transform var(--mk-zoom-duration) var(--mk-zoom-ease); }
1270
+ .mk-image-zoom [data-mk-zoom-frame] > :is(img,video,picture), .mk-image-zoom [data-mk-zoom-image] { display: block; width: 100%; height: 100%; object-fit: cover; transform: scale(var(--mk-zoom-image-scale)); transition: transform var(--mk-zoom-duration) var(--mk-zoom-ease); }
1271
+ .mk-image-zoom:is(:hover,:focus-within,[data-mk-active]) [data-mk-zoom-frame] { transform: scale(var(--mk-zoom-frame-scale)); }
1272
+ .mk-image-zoom:is(:hover,:focus-within,[data-mk-active]) [data-mk-zoom-frame] > :is(img,video,picture), .mk-image-zoom:is(:hover,:focus-within,[data-mk-active]) [data-mk-zoom-image] { transform: scale(1); }
1273
+ .mk-image-zoom:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 5px; }
1274
+ @media (prefers-reduced-motion: reduce) { .mk-image-zoom [data-mk-zoom-frame], .mk-image-zoom [data-mk-zoom-frame] > :is(img,video,picture), .mk-image-zoom [data-mk-zoom-image] { transform: none !important; transition: none; } }
1275
+
1276
+ /* recipes/font-cycle/font-cycle.css */
1277
+ .mk-font-cycle {
1278
+ position: relative;
1279
+ display: inline-block;
1280
+ color: inherit;
1281
+ font-family: var(--mk-font, sans-serif);
1282
+ isolation: isolate;
1283
+ }
1284
+ .mk-font-cycle__accessible {
1285
+ position: absolute;
1286
+ width: 1px;
1287
+ height: 1px;
1288
+ padding: 0;
1289
+ overflow: hidden;
1290
+ clip-path: inset(50%);
1291
+ white-space: nowrap;
1292
+ }
1293
+ .mk-font-cycle__visual { display: inline-flex; white-space: pre; }
1294
+ .mk-font-cycle__char {
1295
+ position: relative;
1296
+ display: inline-grid;
1297
+ overflow: hidden;
1298
+ line-height: 1.12;
1299
+ vertical-align: bottom;
1300
+ }
1301
+ .mk-font-cycle__sizer { grid-area: 1 / 1; visibility: hidden; padding-inline: .035em; }
1302
+ .mk-font-cycle__track { position: absolute; inset: 0 0 auto; display: flex; flex-direction: column; will-change: transform; }
1303
+ .mk-font-cycle__face { display: block; flex: none; text-align: center; padding-inline: .035em; }
1304
+ .mk-font-cycle__overlay { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; pointer-events: none; opacity: 0; }
1305
+ .mk-font-cycle[data-mk-active][data-mk-font-overlay-ready] .mk-font-cycle__overlay { opacity: 1; }
1306
+ .mk-font-cycle[data-mk-active][data-mk-font-overlay-ready] .mk-font-cycle__visual { opacity: 0; }
1307
+ .mk-font-cycle:focus-visible { outline: 2px solid var(--mk-accent, currentColor); outline-offset: .15em; }
1308
+ @media (prefers-reduced-motion: reduce) {
1309
+ .mk-font-cycle__track { will-change: auto; }
1310
+ .mk-font-cycle[data-mk-active][data-mk-font-overlay-ready] .mk-font-cycle__visual { opacity: 1; }
1311
+ .mk-font-cycle[data-mk-active][data-mk-font-overlay-ready] .mk-font-cycle__overlay { display: none; }
1312
+ }
1313
+
1314
+ /* recipes/thumbnail-nav/thumbnail-nav.css */
1315
+ .mk-thumbnail-nav {
1316
+ --mk-thumbnail-nav-surface: #181716e6;
1317
+ --mk-thumbnail-nav-color: #fff;
1318
+ --mk-thumbnail-nav-duration: .5s;
1319
+ --mk-thumbnail-nav-ease: cubic-bezier(.165,.84,.44,1);
1320
+ position: relative;
1321
+ display: flex;
1322
+ align-items: end;
1323
+ justify-content: center;
1324
+ inline-size: min(100%, 18.0625rem);
1325
+ min-block-size: 4.25rem;
1326
+ margin-inline: auto;
1327
+ color: var(--mk-thumbnail-nav-color);
1328
+ font-family: var(--mk-font, sans-serif);
1329
+ isolation: isolate;
1330
+ }
1331
+ .mk-thumbnail-nav--fixed { position: fixed; z-index: 20; inset: auto auto max(1.25rem, env(safe-area-inset-bottom)) 50%; transform: translateX(-50%); }
1332
+ .mk-thumbnail-nav__toggle {
1333
+ position: relative;
1334
+ display: flex;
1335
+ align-items: center;
1336
+ flex: none;
1337
+ gap: .5rem;
1338
+ inline-size: 13.875rem;
1339
+ max-inline-size: 100%;
1340
+ min-block-size: 3.3125rem;
1341
+ padding: .40625rem .75rem;
1342
+ border: 0;
1343
+ border-radius: 3.3125rem;
1344
+ background: var(--mk-thumbnail-nav-surface);
1345
+ color: inherit;
1346
+ font: inherit;
1347
+ cursor: pointer;
1348
+ -webkit-backdrop-filter: blur(8px);
1349
+ backdrop-filter: blur(8px);
1350
+ transition: inline-size var(--mk-thumbnail-nav-duration) var(--mk-thumbnail-nav-ease), min-block-size var(--mk-thumbnail-nav-duration) var(--mk-thumbnail-nav-ease), border-radius var(--mk-thumbnail-nav-duration) var(--mk-thumbnail-nav-ease);
1351
+ }
1352
+ .mk-thumbnail-nav[data-mk-expanded] .mk-thumbnail-nav__toggle { inline-size: 18.0625rem; min-block-size: 4.25rem; border-radius: 4.25rem; }
1353
+ .mk-thumbnail-nav__preview { position: relative; display: block; flex: 0 0 4.25rem; block-size: 2.5rem; }
1354
+ .mk-thumbnail-nav__thumb {
1355
+ position: absolute;
1356
+ inset: 0 auto auto 0;
1357
+ display: grid;
1358
+ place-items: center;
1359
+ inline-size: 2.5rem;
1360
+ block-size: 2.5rem;
1361
+ overflow: hidden;
1362
+ border-radius: 100%;
1363
+ background: var(--mk-accent, #dda063);
1364
+ color: var(--mk-on-accent, #181716);
1365
+ font-size: .75rem;
1366
+ font-weight: 600;
1367
+ z-index: calc(3 - var(--mk-thumbnail-order));
1368
+ transform-origin: left center;
1369
+ transform: translateX(calc((2 - var(--mk-thumbnail-order)) * .625rem)) scale(.725);
1370
+ transition: transform var(--mk-thumbnail-nav-duration) var(--mk-thumbnail-nav-ease);
1371
+ }
1372
+ .mk-thumbnail-nav[data-mk-expanded] .mk-thumbnail-nav__thumb { transform: translateX(calc((2 - var(--mk-thumbnail-order)) * .5rem)) scale(1); }
1373
+ .mk-thumbnail-nav__thumb img { inline-size: 100%; block-size: 100%; object-fit: cover; }
1374
+ .mk-thumbnail-nav__copy { display: grid; flex: 1; min-inline-size: 0; gap: .125rem; text-align: start; }
1375
+ .mk-thumbnail-nav__kicker { display: none; font-size: .6875rem; opacity: .6; line-height: 1.1; }
1376
+ .mk-thumbnail-nav[data-mk-expanded] .mk-thumbnail-nav__kicker { display: block; }
1377
+ .mk-thumbnail-nav__label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .875rem; font-weight: 600; line-height: 1.3; }
1378
+ .mk-thumbnail-nav__chevron { display: grid; flex: 0 0 1.8125rem; place-items: center; block-size: 1.8125rem; border-radius: 50%; background: #ffffff1a; line-height: 1; transition: transform var(--mk-thumbnail-nav-duration) var(--mk-thumbnail-nav-ease); }
1379
+ .mk-thumbnail-nav[data-mk-expanded] .mk-thumbnail-nav__chevron { transform: rotate(180deg); }
1380
+ .mk-thumbnail-nav__panel {
1381
+ position: absolute;
1382
+ z-index: 2;
1383
+ inset: auto 0 calc(100% + .625rem);
1384
+ display: grid;
1385
+ gap: .25rem;
1386
+ max-block-size: min(20rem, 55vh);
1387
+ overflow: auto;
1388
+ padding: .5rem;
1389
+ border: 1px solid #ffffff1a;
1390
+ border-radius: 1.125rem;
1391
+ background: var(--mk-thumbnail-nav-surface);
1392
+ color: inherit;
1393
+ box-shadow: 0 1rem 3rem #0003;
1394
+ -webkit-backdrop-filter: blur(8px);
1395
+ backdrop-filter: blur(8px);
1396
+ transform-origin: center bottom;
1397
+ }
1398
+ .mk-thumbnail-nav__panel[hidden] { display: none; }
1399
+ .mk-thumbnail-nav__panel :is(ul, ol) { margin: 0; padding: 0; list-style: none; }
1400
+ .mk-thumbnail-nav__panel [data-mk-thumbnail-item] {
1401
+ box-sizing: border-box;
1402
+ display: flex;
1403
+ align-items: center;
1404
+ gap: .75rem;
1405
+ inline-size: 100%;
1406
+ min-block-size: 3rem;
1407
+ padding: .5rem .625rem;
1408
+ border: 0;
1409
+ border-radius: .75rem;
1410
+ background: transparent;
1411
+ color: inherit;
1412
+ font: inherit;
1413
+ text-decoration: none;
1414
+ cursor: pointer;
1415
+ }
1416
+ .mk-thumbnail-nav__panel [data-mk-thumbnail-item]:is(:hover, [aria-current='page']) { background: #ffffff1a; }
1417
+ .mk-thumbnail-nav__panel [data-mk-thumbnail-item]:is(:disabled, [aria-disabled='true']) { opacity: .4; cursor: default; }
1418
+ .mk-thumbnail-nav__panel [data-mk-thumbnail-item] img { inline-size: 2rem; block-size: 2rem; object-fit: cover; border-radius: 50%; }
1419
+ .mk-thumbnail-nav__toggle:focus-visible, .mk-thumbnail-nav__panel [data-mk-thumbnail-item]:focus-visible { outline: 2px solid var(--mk-accent, #dda063); outline-offset: 2px; }
1420
+ @media (prefers-reduced-motion: reduce) {
1421
+ .mk-thumbnail-nav *, .mk-thumbnail-nav *::before, .mk-thumbnail-nav *::after { transition: none !important; }
1422
+ }
1423
+
1424
+ /* recipes/action-button/action-button.css */
1425
+ .mk-action-button {
1426
+ --mk-action-ink: var(--mk-text, #171713);
1427
+ --mk-action-paper: var(--mk-surface, #f7f5ee);
1428
+ --mk-action-lift: 5px;
1429
+ --mk-action-tilt: -1.2deg;
1430
+ appearance: none;
1431
+ position: relative;
1432
+ display: inline-flex;
1433
+ align-items: center;
1434
+ justify-content: center;
1435
+ gap: .6em;
1436
+ min-height: 44px;
1437
+ padding: .65em 1.5em;
1438
+ border: 3px solid var(--mk-action-paper);
1439
+ border-radius: 24px 30px 22px 28px / 30px 22px 28px 24px;
1440
+ background: var(--mk-action-ink);
1441
+ color: var(--mk-action-paper);
1442
+ box-shadow: var(--mk-action-lift) calc(var(--mk-action-lift) + 1px) 0 var(--mk-action-ink);
1443
+ transform: rotate(var(--mk-action-tilt));
1444
+ font: 700 .85rem/1.15 var(--mk-font, sans-serif);
1445
+ letter-spacing: .045em;
1446
+ text-transform: uppercase;
1447
+ text-decoration: none;
1448
+ cursor: pointer;
1449
+ touch-action: manipulation;
1450
+ transition: transform 130ms ease-out, box-shadow 130ms ease-out, background-color 150ms ease, color 150ms ease, border-color 150ms ease;
1451
+ }
1452
+ .mk-action-button[data-mk-action-variant="secondary"],
1453
+ .mk-action-button[data-mk-action-variant="icon"] {
1454
+ --mk-action-tilt: 1.1deg;
1455
+ background: var(--mk-action-paper);
1456
+ border-color: var(--mk-action-ink);
1457
+ color: var(--mk-action-ink);
1458
+ }
1459
+ .mk-action-button[data-mk-action-variant="icon"] {
1460
+ width: 44px;
1461
+ padding: 8px;
1462
+ border-radius: 16px 20px 15px 19px / 20px 15px 19px 16px;
1463
+ }
1464
+ .mk-action-button svg { width: 1.25em; height: 1.25em; flex: none; }
1465
+ .mk-action-button[data-mk-action-variant="stepper"] {
1466
+ --mk-action-tilt: 0deg;
1467
+ min-width: 44px;
1468
+ padding: .5em;
1469
+ border: 2px solid var(--mk-action-ink);
1470
+ border-radius: 11px;
1471
+ background: var(--mk-action-paper);
1472
+ color: var(--mk-action-ink);
1473
+ box-shadow: none;
1474
+ }
1475
+ .mk-action-button[data-mk-action-variant="film"] {
1476
+ --mk-action-tilt: 0deg;
1477
+ border: 0;
1478
+ border-radius: 0;
1479
+ background: transparent;
1480
+ color: inherit;
1481
+ box-shadow: none;
1482
+ padding: .5em 0;
1483
+ font-family: var(--mk-film-font, Georgia, serif);
1484
+ font-size: 1.25rem;
1485
+ }
1486
+ .mk-action-button[data-mk-action-variant="film"]::before,
1487
+ .mk-action-button[data-mk-action-variant="film"]::after {
1488
+ content: "";
1489
+ position: absolute;
1490
+ inset: 0 0 auto;
1491
+ height: 1px;
1492
+ background: currentColor;
1493
+ transition: transform .4s cubic-bezier(.32,.72,0,1);
1494
+ }
1495
+ .mk-action-button[data-mk-action-variant="film"]::after { inset: auto 0 0; }
1496
+ [data-mk-action-label] { display: inline-grid; overflow: clip; }
1497
+ .mk-action-button__line, .mk-action-button__copy {
1498
+ grid-area: 1 / 1;
1499
+ transition: clip-path .4s cubic-bezier(.32,.72,0,1), translate .35s cubic-bezier(.32,.72,0,1), scale .3s cubic-bezier(.34,2.27,.64,1);
1500
+ }
1501
+ .mk-action-button__line { clip-path: inset(0); transform-origin: bottom; }
1502
+ .mk-action-button__copy { clip-path: inset(0 0 100%); translate: 0 -.25em; scale: 1.05; transform-origin: top; }
1503
+ @media (hover: hover) {
1504
+ .mk-action-button:not(:disabled):not([aria-disabled="true"]):hover {
1505
+ transform: rotate(var(--mk-action-tilt)) translate(3px, 3px);
1506
+ box-shadow: 2px 3px 0 var(--mk-action-ink);
1507
+ }
1508
+ .mk-action-button:is([data-mk-action-variant="secondary"], [data-mk-action-variant="icon"], [data-mk-action-variant="stepper"]):not(:disabled):not([aria-disabled="true"]):hover {
1509
+ background: var(--mk-action-ink);
1510
+ border-color: var(--mk-action-paper);
1511
+ color: var(--mk-action-paper);
1512
+ }
1513
+ .mk-action-button[data-mk-action-variant="stepper"]:not(:disabled):not([aria-disabled="true"]):hover { transform: none; box-shadow: none; }
1514
+ }
1515
+ .mk-action-button:not(:disabled):not([aria-disabled="true"]):active,
1516
+ .mk-action-button[aria-pressed="true"] {
1517
+ transform: rotate(var(--mk-action-tilt)) translate(var(--mk-action-lift), calc(var(--mk-action-lift) + 1px));
1518
+ box-shadow: 0 0 0 var(--mk-action-ink);
1519
+ }
1520
+ .mk-action-button[aria-pressed="true"] { background: var(--mk-action-ink); color: var(--mk-action-paper); }
1521
+ .mk-action-button[aria-pressed="true"]:not(:disabled):not([aria-disabled="true"]):hover { transform: rotate(var(--mk-action-tilt)) translate(var(--mk-action-lift), calc(var(--mk-action-lift) + 1px)); box-shadow: none; }
1522
+ .mk-action-button[data-mk-action-variant="stepper"]:not(:disabled):not([aria-disabled="true"]):active { transform: translateY(1px); box-shadow: none; }
1523
+ .mk-action-button[data-mk-action-variant="film"]:is(:hover, :focus-visible):not(:disabled):not([aria-disabled="true"]) {
1524
+ transform: scale(1.03) rotate(-.75deg);
1525
+ box-shadow: none;
1526
+ }
1527
+ .mk-action-button[data-mk-action-variant="film"]:is(:hover, :focus-visible):not(:disabled):not([aria-disabled="true"]) .mk-action-button__line { clip-path: inset(100% 0 0); translate: 0 .25em; scale: .95; }
1528
+ .mk-action-button[data-mk-action-variant="film"]:is(:hover, :focus-visible):not(:disabled):not([aria-disabled="true"]) .mk-action-button__copy { clip-path: inset(0); translate: 0; scale: 1; transition-delay: 75ms; }
1529
+ .mk-action-button[data-mk-action-variant="film"]:active:not(:disabled) { transform: scale(.97); }
1530
+ .mk-action-button:focus-visible { outline: 3px solid var(--mk-action-focus, #356bdf); outline-offset: 7px; }
1531
+ .mk-action-button:disabled, .mk-action-button[aria-disabled="true"] { opacity: .35; cursor: default; }
1532
+ @media (prefers-reduced-motion: reduce) {
1533
+ .mk-action-button, .mk-action-button *, .mk-action-button::before, .mk-action-button::after { transition: none; }
1534
+ .mk-action-button[data-mk-action-variant="film"]:is(:hover, :focus-visible):not(:disabled):not([aria-disabled="true"]) { transform: none; }
1535
+ .mk-action-button[data-mk-action-variant="film"]:is(:hover, :focus-visible):not(:disabled):not([aria-disabled="true"]) .mk-action-button__line { clip-path: none; translate: none; scale: 1; }
1536
+ .mk-action-button__copy { display: none; }
1537
+ }
1538
+
1539
+ /* recipes/film-hero/film-hero.css */
1540
+ .mk-film-hero {
1541
+ --mk-film-ink: var(--mk-text, #191b18);
1542
+ --mk-film-paper: var(--mk-surface, #f4f1e8);
1543
+ --mk-film-font: Georgia, 'Times New Roman', serif;
1544
+ position: relative;
1545
+ isolation: isolate;
1546
+ color: var(--mk-film-ink);
1547
+ background: var(--mk-film-paper);
1548
+ overflow: clip;
1549
+ }
1550
+ .mk-film-hero__credits { padding: clamp(20px, 5cqw, 64px); text-align: center; }
1551
+ .mk-film-hero__eyebrow { font: 500 .65rem/1.5 var(--mk-font-mono, monospace); text-transform: uppercase; letter-spacing: .18em; }
1552
+ .mk-film-hero__title { margin: .2em 0 .35em; font: 400 clamp(3.5rem, 10cqw, 8rem)/.82 var(--mk-film-font); letter-spacing: -.065em; text-transform: uppercase; }
1553
+ .mk-film-hero__mask { display: block; overflow: clip; padding-bottom: .08em; margin-bottom: -.08em; }
1554
+ [data-mk-film-line] { display: block; }
1555
+ [data-mk-film-rule] { display: block; height: 1px; border: 0; background: currentColor; margin: 16px 0; }
1556
+ .mk-film-hero__metadata { display: grid; gap: 0; margin: 24px 0 0; font: .8rem/1.5 var(--mk-font, sans-serif); }
1557
+ .mk-film-hero__metadata > div { display: flex; align-items: baseline; justify-content: space-between; gap: 20px; padding: 8px 0; border-top: 1px solid currentColor; }
1558
+ .mk-film-hero__metadata dt { font: .6rem/1.5 var(--mk-font-mono, monospace); text-transform: uppercase; letter-spacing: .14em; }
1559
+ .mk-film-hero__metadata dd { margin: 0; text-align: right; }
1560
+ .mk-film-hero__visual { position: relative; min-height: clamp(260px, 45cqw, 540px); display: grid; place-items: center; overflow: clip; color: #fffdf1; background: #243c36; }
1561
+ .mk-film-hero__media { position: absolute; inset: -8% 0; width: 100%; height: 116%; object-fit: cover; transform: translateY(var(--mk-film-shift, 0px)) scale(var(--mk-film-scale, 1)); transform-origin: center; }
1562
+ .mk-film-hero__visual::after { content: ''; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(transparent, #00120c66); }
1563
+ .mk-film-hero__caption { position: relative; z-index: 1; padding: 48px 24px; text-align: center; }
1564
+ .mk-film-hero__caption blockquote { font: 400 clamp(2.25rem, 6cqw, 5.5rem)/.95 var(--mk-film-font); letter-spacing: -.04em; margin: 0 0 24px; text-transform: uppercase; }
1565
+ .mk-film-hero[data-mk-film-edge="organic"] .mk-film-hero__visual {
1566
+ clip-path: polygon(0 7%, 9% 8%, 20% 5%, 32% 2%, 43% 0, 54% 2%, 68% 6%, 82% 8%, 93% 6%, 100% 4%, 100% 100%, 0 100%);
1567
+ }
1568
+ @media (prefers-reduced-motion: reduce) { .mk-film-hero__media { transform: none; } }
1569
+
1570
+ /* recipes/editorial-reveal/editorial-reveal.css */
1571
+ .mk-editorial-reveal { position: relative; isolation: isolate; color: var(--mk-text); }
1572
+ .mk-editorial-reveal [data-mk-editorial-image], .mk-editorial-reveal [data-mk-editorial-card] { overflow: clip; border-radius: 12px; }
1573
+ .mk-editorial-reveal [data-mk-editorial-image] > :is(img,video,picture) { display: block; width: 100%; height: 100%; object-fit: cover; }
1574
+ .mk-editorial-reveal [data-mk-editorial-card] { display: grid; gap: 20px; padding: 24px; background: var(--mk-surface-2); color: inherit; text-decoration: none; transition: background-color .5s cubic-bezier(.6, 0, 0, 1), color .5s cubic-bezier(.6, 0, 0, 1); }
1575
+ .mk-editorial-reveal [data-mk-editorial-card][data-mk-editorial-active] { background: var(--mk-accent); color: var(--mk-on-accent); }
1576
+ .mk-editorial-reveal [data-mk-editorial-card-image] { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 8px; }
1577
+ .mk-editorial-reveal [data-mk-editorial-button] { display: inline-flex; overflow: clip; align-items: center; padding: 12px 18px; border: 1px solid var(--mk-outline-soft); border-radius: 8px; background: var(--mk-text); color: var(--mk-surface); text-decoration: none; font: inherit; cursor: pointer; }
1578
+ .mk-editorial-reveal [data-mk-editorial-button-content] { position: relative; display: flex; align-items: center; gap: 1em; padding-inline-end: 2.25em; }
1579
+ .mk-editorial-reveal [data-mk-editorial-button-content]::before, .mk-editorial-reveal [data-mk-editorial-button-content]::after { content: '↗'; position: absolute; inset-block-start: 0; }
1580
+ .mk-editorial-reveal [data-mk-editorial-button-content]::before { inset-inline-start: -2.25em; }
1581
+ .mk-editorial-reveal [data-mk-editorial-button-content]::after { inset-inline-end: 0; }
1582
+ .mk-editorial-reveal [data-mk-editorial-cursor] { pointer-events: none; position: absolute; z-index: 3; inset: 0 auto auto 0; width: max-content; height: max-content; padding: 10px 14px; border-radius: 30px; background: var(--mk-text); color: var(--mk-surface); font-size: .75rem; }
1583
+ .mk-editorial-reveal [hidden] { display: none !important; }
1584
+ .mk-editorial-reveal [data-mk-editorial-header][data-mk-on='dark'] { color: var(--mk-surface); }
1585
+ .mk-editorial-reveal :is(a,button,input,textarea):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 4px; }
1586
+ .mk-editorial-reveal [data-mk-editorial-group] [data-mk-cascade='rise'] { position: relative; }
1587
+ @media (prefers-reduced-motion: reduce) { .mk-editorial-reveal *, .mk-editorial-reveal *::after, .mk-editorial-reveal *::before { animation: none !important; transition: none !important; } }
1588
+
1589
+ /* recipes/weight-hover/weight-hover.css */
1590
+ /* weight-hover — each letter carries its own axis value; the font must be variable. */
1591
+ .mk-weight-hover {
1592
+ font-kerning: none;
1593
+ }
1594
+ .mk-weight-hover__visual [data-mk-weight-char] {
1595
+ will-change: font-variation-settings;
1596
+ }
1597
+
1598
+ /* recipes/sticker/sticker.css */
1599
+ /* sticker — die-cut holographic sticker (DOVV Studio). Place it with position/left/top; tilt it with --mk-sticker-rot. */
1600
+ .mk-sticker {
1601
+ --mk-sticker-rot: 0deg;
1602
+ --mk-sticker-foil: linear-gradient(115deg, #ed4a1c, #ff6a3d 18%, #ff8f5e 34%, #ff4f7a 52%, #ed4a1c 68%, #ff7a3d 84%, #ed4a1c);
1603
+ --mk-sticker-ink: #fff;
1604
+ display: inline-block;
1605
+ cursor: grab;
1606
+ touch-action: none;
1607
+ user-select: none;
1608
+ -webkit-user-select: none;
1609
+ scale: var(--mk-sticker-scale, 1);
1610
+ transform: rotate(var(--mk-sticker-rot));
1611
+ filter: drop-shadow(0 8px 14px rgb(0 0 0 / 0.16));
1612
+ transition: transform 0.4s var(--mk-ease-slot), filter 0.3s;
1613
+ animation: mk-sticker-pop 0.7s var(--mk-ease-slot) backwards;
1614
+ animation-delay: var(--mk-sticker-delay, 0s);
1615
+ }
1616
+ @media (hover: hover) {
1617
+ .mk-sticker:hover { transform: rotate(calc(var(--mk-sticker-rot) * -0.6)) scale(1.08); }
1618
+ }
1619
+ /* The engine freezes the pose it had at the press (inline transform), so there is no snap here. */
1620
+ .mk-sticker[data-mk-peeling],
1621
+ .mk-sticker[data-mk-peeling]:hover {
1622
+ transition: none;
1623
+ cursor: grabbing;
1624
+ }
1625
+ .mk-sticker[data-mk-carried] { cursor: grabbing; }
1626
+ .mk-sticker[data-mk-away] { visibility: hidden; }
1627
+ @keyframes mk-sticker-pop {
1628
+ 0% { opacity: 0; scale: 0.4; }
1629
+ }
1630
+
1631
+ /* Peel layers: the top is clipped at the fold; the back is a reflected copy whose
1632
+ face is clipped (inner) while the shadow lives on the outer layer, outside the clip. */
1633
+ .mk-sticker__peel { position: relative; display: inline-block; vertical-align: top; }
1634
+ .mk-sticker__top { display: block; }
1635
+ .mk-sticker__back {
1636
+ position: absolute;
1637
+ left: 0;
1638
+ top: 0;
1639
+ width: 100%;
1640
+ height: 100%;
1641
+ transform-origin: 0 0;
1642
+ visibility: hidden;
1643
+ pointer-events: none;
1644
+ filter: drop-shadow(0 0 1.5px rgb(0 0 0 / 0.3)) drop-shadow(0 0 7px rgb(0 0 0 / 0.22));
1645
+ }
1646
+ .mk-sticker__back-face { width: 100%; height: 100%; }
1647
+ /* Paper backing: brightest along the fold, a little grey towards the lifted tip. */
1648
+ .mk-sticker:not([data-mk-sticker-back='silhouette']) .mk-sticker__back-face :is(.mk-sticker__art, .mk-sticker__pill, .mk-sticker__badge) {
1649
+ /* The gradient runs under the die-cut border too, so the back reads as one piece of paper. */
1650
+ background: linear-gradient(var(--mk-sticker-fold, 90deg), #fff 0%, #f6f6f4 40%, #e2e2de 100%) border-box !important;
1651
+ color: transparent !important;
1652
+ border-color: transparent !important;
1653
+ }
1654
+ .mk-sticker__back-face :is(.mk-sticker__art, .mk-sticker__pill, .mk-sticker__badge) * { visibility: hidden; }
1655
+ .mk-sticker__back-face :is(.mk-sticker__art, .mk-sticker__pill, .mk-sticker__badge)::after { display: none; }
1656
+ /* Free-form art (an <img> or <svg> shape): a white silhouette of it instead. */
1657
+ .mk-sticker[data-mk-sticker-back='silhouette'] .mk-sticker__back-face { filter: brightness(0) invert(0.95); }
1658
+
1659
+ /* Art: a pill, a round badge or any element with .mk-sticker__art. The white die-cut border is part of the art. */
1660
+ .mk-sticker__art,
1661
+ .mk-sticker__pill,
1662
+ .mk-sticker__badge {
1663
+ position: relative;
1664
+ display: block;
1665
+ overflow: hidden;
1666
+ isolation: isolate;
1667
+ color: var(--mk-sticker-ink);
1668
+ border: 4px solid #fff;
1669
+ }
1670
+ .mk-sticker__pill {
1671
+ padding: 0.6em 1.1em;
1672
+ border-radius: 999px;
1673
+ font-weight: 800;
1674
+ font-size: 1.15rem;
1675
+ letter-spacing: -0.02em;
1676
+ white-space: nowrap;
1677
+ }
1678
+ .mk-sticker__badge {
1679
+ display: grid;
1680
+ place-items: center;
1681
+ width: var(--mk-sticker-size, 7rem);
1682
+ aspect-ratio: 1;
1683
+ border-radius: 50%;
1684
+ font-weight: 800;
1685
+ text-align: center;
1686
+ }
1687
+ .mk-sticker__art { border-radius: var(--mk-sticker-radius, 24px); }
1688
+ .mk-sticker[data-mk-holo] :is(.mk-sticker__art, .mk-sticker__pill, .mk-sticker__badge) {
1689
+ background: var(--mk-sticker-foil);
1690
+ background-size: 220% 220%;
1691
+ background-position: calc(var(--mk-sticker-x, 0.5) * 100%) calc(var(--mk-sticker-y, 0.5) * 100%);
1692
+ }
1693
+ .mk-sticker[data-mk-holo] :is(.mk-sticker__art, .mk-sticker__pill, .mk-sticker__badge)::after {
1694
+ content: '';
1695
+ position: absolute;
1696
+ inset: 0;
1697
+ z-index: -1;
1698
+ pointer-events: none;
1699
+ background: radial-gradient(circle at calc(var(--mk-sticker-x, 0.5) * 100%) calc(var(--mk-sticker-y, 0.5) * 100%), rgb(255 255 255 / 0.7), transparent 65%);
1700
+ mix-blend-mode: soft-light;
1701
+ opacity: 0.9;
1702
+ }
1703
+ .mk-sticker--pink { --mk-sticker-foil: linear-gradient(115deg, #ff7ac6, #c084fc 22%, #ffb3e1 44%, #7dd3fc 66%, #ff7ac6 84%, #f0abfc); --mk-sticker-ink: #3d0a26; }
1704
+ .mk-sticker--blue { --mk-sticker-foil: linear-gradient(115deg, #2e90fa, #7c5cff 25%, #38bdf8 50%, #2e90fa 75%, #a78bfa); --mk-sticker-ink: #fff; }
1705
+ .mk-sticker--lime { --mk-sticker-foil: linear-gradient(115deg, #c6f432, #fef08a 25%, #5eead4 50%, #a3e635 75%, #c6f432); --mk-sticker-ink: #1d2a00; }
1706
+ .mk-sticker--gold { --mk-sticker-foil: linear-gradient(115deg, #facc15, #fde68a 25%, #f59e0b 50%, #fef3c7 70%, #eab308); --mk-sticker-ink: #1a1a1a; }
1707
+
1708
+ @media (prefers-reduced-motion: reduce) {
1709
+ .mk-sticker { animation: none; transition: none; }
1710
+ }
1711
+
1712
+ /* recipes/scroll-dock/scroll-dock.css */
1713
+ /* scroll-dock — inverted capsule at the bottom centre; rises with a soft overshoot. */
1714
+ .mk-scroll-dock {
1715
+ position: fixed;
1716
+ left: 50%;
1717
+ bottom: var(--mk-scroll-dock-bottom, 24px);
1718
+ z-index: 20;
1719
+ display: flex;
1720
+ gap: 4px;
1721
+ max-width: calc(100vw - 32px);
1722
+ padding: 6px;
1723
+ /* Too many items for the width: scroll inside the capsule, never overflow the page. */
1724
+ overflow-x: auto;
1725
+ scrollbar-width: none;
1726
+ border-radius: 100px;
1727
+ background: var(--mk-text);
1728
+ color: var(--mk-bg);
1729
+ box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--mk-bg) 20%, transparent), 0 12px 30px -10px rgb(0 0 0 / 0.5);
1730
+ opacity: 0;
1731
+ pointer-events: none;
1732
+ transform: translate(-50%, 140%);
1733
+ transition: transform 0.6s cubic-bezier(0.32, 1.25, 0.5, 1), opacity 0.3s;
1734
+ }
1735
+ .mk-scroll-dock[data-mk-visible],
1736
+ .mk-scroll-dock:focus-within {
1737
+ opacity: 1;
1738
+ pointer-events: auto;
1739
+ transform: translate(-50%, 0);
1740
+ }
1741
+ /* Inside a scrolling container: sticks to its bottom edge instead of the viewport's.
1742
+ Scrollable overflow counts the un-stuck box plus its transform, so the negative
1743
+ margin lifts that box by its height + bottom gap and the hide offset equals the
1744
+ gap: nothing reaches past the last section, no empty band at the end. */
1745
+ .mk-scroll-dock--sticky {
1746
+ position: sticky;
1747
+ left: auto;
1748
+ width: max-content;
1749
+ max-width: calc(100% - 16px);
1750
+ margin: calc(-1 * (var(--mk-scroll-dock-height, 58px) + var(--mk-scroll-dock-bottom, 24px))) auto 0;
1751
+ transform: translateY(var(--mk-scroll-dock-bottom, 24px)) scale(0.96);
1752
+ }
1753
+ .mk-scroll-dock--sticky:is([data-mk-visible], :focus-within) { transform: none; }
1754
+ .mk-scroll-dock > :is(a, button) {
1755
+ display: flex;
1756
+ align-items: center;
1757
+ gap: 8px;
1758
+ height: 46px;
1759
+ padding: 0 18px;
1760
+ border: 0;
1761
+ border-radius: 100px;
1762
+ background: transparent;
1763
+ color: inherit;
1764
+ font: inherit;
1765
+ font-size: 15px;
1766
+ font-weight: 500;
1767
+ white-space: nowrap;
1768
+ text-decoration: none;
1769
+ cursor: pointer;
1770
+ transition: background 0.25s;
1771
+ }
1772
+ .mk-scroll-dock > :is(a, button):hover { background: color-mix(in srgb, var(--mk-bg) 15%, transparent); }
1773
+ .mk-scroll-dock > :is(a, button):focus-visible { outline: 2px solid var(--mk-bg); outline-offset: -2px; }
1774
+ .mk-scroll-dock::-webkit-scrollbar { display: none; }
1775
+ /* Phones: a tab bar, icon over label, so four or five items fit in 360 px. */
1776
+ @media (max-width: 680px) {
1777
+ .mk-scroll-dock > :is(a, button) { flex-direction: column; justify-content: center; gap: 2px; height: 52px; padding: 0 12px; border-radius: 26px; font-size: 11px; }
1778
+ .mk-scroll-dock--sticky { margin-top: calc(-1 * (var(--mk-scroll-dock-height, 64px) + var(--mk-scroll-dock-bottom, 24px))); }
1779
+ }
1780
+ @media (prefers-reduced-motion: reduce) {
1781
+ .mk-scroll-dock { transition: opacity 0.2s; }
1782
+ }
1783
+
1248
1784
  /* css/controls/button.css */
1249
1785
  /* .mk-button — Capsule buttons. Filled buttons default to the tonal primary container. */
1250
1786
  .mk-button {
@@ -2196,6 +2732,71 @@
2196
2732
  }
2197
2733
  }
2198
2734
 
2735
+ /* css/controls/status.css */
2736
+ /* status — "Available for new projects" pill and a live dot whose halo pulses (DOVV Studio: 1.6 s ease-out, scale 1 → 2.6). */
2737
+ .mk-status {
2738
+ display: inline-flex;
2739
+ align-items: center;
2740
+ gap: 10px;
2741
+ height: 40px;
2742
+ padding: 0 16px 0 14px;
2743
+ border-radius: 100px;
2744
+ background: var(--mk-surface);
2745
+ color: var(--mk-text);
2746
+ font: inherit;
2747
+ font-size: 14px;
2748
+ font-weight: 500;
2749
+ letter-spacing: -0.01em;
2750
+ white-space: nowrap;
2751
+ text-decoration: none;
2752
+ box-shadow: 0 0 0 1px var(--mk-outline-soft), 0 6px 20px -8px rgb(0 0 0 / 0.18);
2753
+ transition: box-shadow 0.3s, transform 0.3s;
2754
+ }
2755
+ /* One line always: on phones the secondary half goes. */
2756
+ @media (max-width: 480px) {
2757
+ .mk-status > :is(.mk-status__sep, .mk-status__muted) { display: none; }
2758
+ }
2759
+ a.mk-status:hover,
2760
+ button.mk-status:hover {
2761
+ transform: translateY(-1px);
2762
+ box-shadow: 0 0 0 1px var(--mk-outline), 0 10px 24px -8px rgb(0 0 0 / 0.22);
2763
+ }
2764
+ .mk-status__sep { width: 1px; height: 14px; background: var(--mk-outline-soft); }
2765
+ .mk-status__muted { color: var(--mk-muted); }
2766
+ .mk-status > svg,
2767
+ .mk-status > .mk-icon { color: var(--mk-muted); transition: transform 0.3s; }
2768
+ .mk-status:hover > svg,
2769
+ .mk-status:hover > .mk-icon { transform: translateX(2px); }
2770
+ .mk-status__dot {
2771
+ --mk-status-color: #16c847;
2772
+ position: relative;
2773
+ display: inline-block;
2774
+ flex: none;
2775
+ width: 8px;
2776
+ height: 8px;
2777
+ border-radius: 50%;
2778
+ background: var(--mk-status-color);
2779
+ }
2780
+ .mk-status__dot::after {
2781
+ content: '';
2782
+ position: absolute;
2783
+ inset: 0;
2784
+ border-radius: inherit;
2785
+ background: inherit;
2786
+ animation: mk-status-pulse 1.6s ease-out infinite;
2787
+ }
2788
+ .mk-status__dot--busy { --mk-status-color: #f59e0b; }
2789
+ .mk-status__dot--off { --mk-status-color: var(--mk-muted); }
2790
+ .mk-status__dot--off::after { animation: none; }
2791
+ @keyframes mk-status-pulse {
2792
+ 0% { opacity: 0.6; transform: scale(1); }
2793
+ 100% { opacity: 0; transform: scale(2.6); }
2794
+ }
2795
+ @media (prefers-reduced-motion: reduce) {
2796
+ .mk-status { transition: none; }
2797
+ .mk-status__dot::after { animation: none; }
2798
+ }
2799
+
2199
2800
  /* css/effects/anim.css */
2200
2801
  /* utility animations (shared stylesheet) and strong shake. Replay them with animate(el, name). */
2201
2802
  .mk-anim-out {
@@ -5290,3 +5891,419 @@ mk-cursor {
5290
5891
  transition: none !important;
5291
5892
  }
5292
5893
  }
5894
+
5895
+ /* components/quantity/quantity.css */
5896
+ .mk-quantity, mk-quantity { display: inline-flex; align-items: center; gap: .5rem; --mk-quantity-size: 3rem; }
5897
+ .mk-quantity [data-mk-quantity-decrease], .mk-quantity [data-mk-quantity-increase], mk-quantity button {
5898
+ width: var(--mk-quantity-size); height: var(--mk-quantity-size); border: 0; border-radius: 50%;
5899
+ background: var(--mk-secondary-soft); color: var(--mk-on-secondary-soft); font: inherit; font-size: 1.65rem;
5900
+ cursor: pointer; transition: transform .4s cubic-bezier(.28,.71,0,.98), opacity .2s;
5901
+ }
5902
+ .mk-quantity [data-mk-quantity-increase], mk-quantity [data-mk-quantity-increase] { background: var(--mk-accent-soft); color: var(--mk-on-accent-soft); }
5903
+ .mk-quantity button:is(:hover,:focus-visible):not(:disabled), mk-quantity button:is(:hover,:focus-visible):not(:disabled) {
5904
+ transform: rotate(15deg); mask-image: radial-gradient(circle at 100% 0, transparent 22%, #000 23%);
5905
+ }
5906
+ .mk-quantity button:focus-visible, mk-quantity button:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 4px; }
5907
+ .mk-quantity button:disabled, mk-quantity button:disabled { opacity: .4; cursor: default; }
5908
+ .mk-quantity input, mk-quantity input { width: 3.5rem; padding: .4rem 0; border: 0; border-radius: var(--mk-radius-sm); text-align: center; font: inherit; font-variant-numeric: tabular-nums; background: transparent; color: var(--mk-text); appearance: textfield; }
5909
+ .mk-quantity input::-webkit-inner-spin-button, mk-quantity input::-webkit-inner-spin-button { appearance: none; }
5910
+ @media (prefers-reduced-motion: reduce) { .mk-quantity button, mk-quantity button { transition: none; transform: none !important; } }
5911
+
5912
+ /* components/pagination/pagination.css */
5913
+ .mk-pagination, mk-pagination { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: .35rem; }
5914
+ .mk-pagination [data-mk-pagination-pages], mk-pagination [data-mk-pagination-pages] { display: flex; align-items: center; gap: .25rem; }
5915
+ .mk-pagination button, mk-pagination button { min-width: 2.5rem; height: 2.5rem; border: 0; border-radius: var(--mk-radius-full); background: var(--mk-surface-2); color: var(--mk-text); font: inherit; cursor: pointer; transition: transform .3s, background .3s, color .3s; }
5916
+ .mk-pagination button[aria-current], mk-pagination button[aria-current] { background: var(--mk-accent); color: var(--mk-on-accent); }
5917
+ .mk-pagination button:hover:not(:disabled), mk-pagination button:hover:not(:disabled) { transform: translateY(-3px); }
5918
+ .mk-pagination button:active:not(:disabled), mk-pagination button:active:not(:disabled) { transform: scale(.9); }
5919
+ .mk-pagination button:focus-visible, mk-pagination button:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 3px; }
5920
+ .mk-pagination button:disabled, mk-pagination button:disabled { opacity: .35; cursor: default; }
5921
+ .mk-pagination__gap { padding: 0 .15rem; color: var(--mk-muted); }
5922
+ @media (prefers-reduced-motion: reduce) { .mk-pagination button, mk-pagination button { transition: none; transform: none !important; } }
5923
+
5924
+ /* components/hover-card/hover-card.css */
5925
+ .mk-hover-card, mk-hover-card { position: relative; display: inline-flex; }
5926
+ .mk-hover-card [data-mk-hover-panel], mk-hover-card [data-mk-hover-panel] {
5927
+ position: absolute; z-index: 10; bottom: calc(100% + .75rem); left: 0;
5928
+ width: min(19rem, calc(100vw - 3rem)); padding: 1.25rem; border-radius: var(--mk-radius-lg);
5929
+ color: var(--mk-text); background: var(--mk-surface-3); border: 1px solid var(--mk-outline-soft);
5930
+ box-shadow: 0 12px 40px color-mix(in srgb, var(--mk-shadow-color) 20%, transparent);
5931
+ animation: mk-hover-card-in .28s cubic-bezier(.2,.8,.2,1) both;
5932
+ }
5933
+ .mk-hover-card [data-mk-hover-panel]::after, mk-hover-card [data-mk-hover-panel]::after { content: ''; position: absolute; inset: -1rem 0; z-index: -1; }
5934
+ .mk-hover-card[data-mk-placement=bottom] [data-mk-hover-panel], mk-hover-card[data-mk-placement=bottom] [data-mk-hover-panel] { top: calc(100% + .75rem); bottom: auto; }
5935
+ .mk-hover-card [hidden], mk-hover-card [hidden] { display: none !important; }
5936
+ @keyframes mk-hover-card-in { from { opacity: 0; transform: translateY(7px) scale(.97); } to { opacity: 1; transform: none; } }
5937
+ @media (prefers-reduced-motion: reduce) { .mk-hover-card [data-mk-hover-panel], mk-hover-card [data-mk-hover-panel] { animation: none; } }
5938
+
5939
+ /* components/input-otp/input-otp.css */
5940
+ .mk-input-otp, mk-input-otp { --mk-otp-size: 2.75rem; --mk-otp-gap: .4rem; display: inline-block; position: relative; max-width: 100%; }
5941
+ .mk-input-otp [data-mk-otp-slots], mk-input-otp [data-mk-otp-slots] { display: flex; flex-wrap: wrap; gap: var(--mk-otp-gap); }
5942
+ .mk-input-otp__slot { box-sizing: border-box; width: var(--mk-otp-size); height: 3.5rem; display: grid; place-items: center; border: 1px solid var(--mk-outline-soft); border-radius: var(--mk-radius-sm); color: var(--mk-text); background: var(--mk-surface-1); font: 1.5rem var(--mk-font-mono, monospace); transition: border-color .2s, background .2s, transform .2s; }
5943
+ .mk-input-otp__slot[data-mk-active] { outline: 2px solid var(--mk-accent); outline-offset: 2px; background: var(--mk-accent-soft); color: var(--mk-on-accent-soft); transform: translateY(-2px); }
5944
+ .mk-input-otp [data-mk-otp-input], mk-input-otp [data-mk-otp-input] { position: absolute; inset: 0; box-sizing: border-box; width: 100%; height: 100%; border: 0; background: transparent; color: transparent; caret-color: transparent; outline: 0; font: 1.5rem var(--mk-font-mono, monospace); letter-spacing: calc(var(--mk-otp-size) + var(--mk-otp-gap) - 1ch); padding: 0 0 0 calc((var(--mk-otp-size) - 1ch) / 2); }
5945
+ .mk-input-otp:has([aria-invalid=true]) .mk-input-otp__slot, mk-input-otp:has([aria-invalid=true]) .mk-input-otp__slot { border-color: var(--mk-error); }
5946
+ .mk-input-otp:has(:disabled), mk-input-otp:has(:disabled) { opacity: .45; }
5947
+ @media (max-width: 420px) { .mk-input-otp, mk-input-otp { --mk-otp-size: 2.25rem; --mk-otp-gap: .3rem; } }
5948
+ @media (prefers-reduced-motion: reduce) { .mk-input-otp__slot { transition: none; transform: none !important; } }
5949
+
5950
+ /* components/studio-dock/studio-dock.css */
5951
+ .mk-studio-dock { position: relative; isolation: isolate; width: min(343px, 100%); color: var(--mk-text); font: inherit; }
5952
+ .mk-studio-dock--fixed { position: fixed; z-index: 70; inset-block-end: 24px; inset-inline-start: 50%; translate: -50% 0; width: min(343px, calc(100vw - 32px)); }
5953
+ .mk-studio-dock__bar { display: flex; align-items: center; gap: 16px; min-height: 64px; padding: 12px; border-radius: 18px; background: var(--mk-surface-2); }
5954
+ .mk-studio-dock__brand, .mk-studio-dock__toggle { display: grid; place-items: center; inline-size: 40px; block-size: 40px; flex: none; border: 0; border-radius: 10px; background: var(--mk-surface); color: inherit; text-decoration: none; font: inherit; }
5955
+ .mk-studio-dock__label { flex: 1; font-size: .9rem; }
5956
+ .mk-studio-dock__toggle { cursor: pointer; }
5957
+ .mk-studio-dock__toggle span { transition: transform .4s; }
5958
+ .mk-studio-dock[data-mk-studio-open] .mk-studio-dock__toggle span { transform: rotate(45deg); }
5959
+ .mk-studio-dock__panel { position: absolute; z-index: 2; inset-inline: 0; inset-block-end: var(--mk-studio-dock-offset, 76px); max-height: min(660px, 75dvh, var(--mk-studio-dock-space, 660px)); overflow: auto; overscroll-behavior: contain; padding: 12px; border: 1px solid var(--mk-outline-soft); border-radius: 18px; background: var(--mk-surface-2); box-shadow: 0 16px 60px #0002; }
5960
+ /* Not enough room above the bar: the engine opens the sheet below it. */
5961
+ .mk-studio-dock[data-mk-studio-below] .mk-studio-dock__panel { inset-block: var(--mk-studio-dock-offset, 76px) auto; }
5962
+ .mk-studio-dock [hidden] { display: none !important; }
5963
+ .mk-studio-dock__grid, .mk-studio-dock__page { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
5964
+ .mk-studio-dock__tile { min-height: 130px; display: flex; flex-direction: column; justify-content: flex-end; gap: 4px; padding: 12px; border-radius: 10px; background: var(--mk-surface); color: inherit; text-decoration: none; transition: transform .4s cubic-bezier(.2, 1.4, .4, 1); }
5965
+ .mk-studio-dock__tile small { color: var(--mk-muted); }
5966
+ .mk-studio-dock__tile:is(:hover, :focus-visible) { transform: scale(.94); }
5967
+ .mk-studio-dock__reel { display: flex; justify-content: space-between; align-items: end; min-height: 154px; margin-block: 12px; padding: 16px; border-radius: 10px; background: var(--mk-accent); color: var(--mk-on-accent); }
5968
+ .mk-studio-dock__reel button { border: 1px solid currentColor; border-radius: 50%; padding: 14px; background: transparent; color: inherit; font: inherit; cursor: pointer; }
5969
+ .mk-studio-dock__slide-track { position: relative; display: flex; align-items: center; height: 64px; padding: 4px; margin-block: 12px; border-radius: 48px; background: var(--mk-surface-3, var(--mk-surface)); }
5970
+ .mk-studio-dock__slide-track > span { position: absolute; inset-inline: 60px 12px; text-align: center; font-size: .75rem; pointer-events: none; }
5971
+ .mk-studio-dock [data-mk-studio-slide] { position: relative; display: grid; place-items: center; width: 56px; height: 56px; border: 0; border-radius: 50%; background: var(--mk-surface); color: inherit; font-size: 20px; cursor: pointer; touch-action: pan-y; transform: translateX(var(--mk-studio-drag, 0px)); }
5972
+ .mk-studio-dock__clock { position: relative; aspect-ratio: 1; display: grid; place-content: center; gap: 4px; text-align: center; border: 10px solid var(--mk-surface); border-radius: 50%; background: var(--mk-surface-2); }
5973
+ .mk-studio-dock__clock::after { content: ''; position: absolute; inset: 8px; border: 1px solid var(--mk-outline-soft); border-radius: 50%; }
5974
+ .mk-studio-dock__clock small { color: var(--mk-muted); }
5975
+ .mk-studio-dock__pages { margin-block-start: 12px; }
5976
+ .mk-studio-dock__pagination { display: flex; justify-content: center; gap: 8px; margin-block-start: 12px; }
5977
+ .mk-studio-dock__pagination button { width: 32px; height: 32px; padding: 0; border: 0; border-radius: 50%; background: var(--mk-surface); color: inherit; font: inherit; cursor: pointer; }
5978
+ .mk-studio-dock__pagination [aria-current] { background: var(--mk-accent); color: var(--mk-on-accent); }
5979
+ .mk-studio-dock__view { display: grid; gap: 16px; padding: 12px 0; }
5980
+ .mk-studio-dock__view input, .mk-studio-dock__view textarea { width: 100%; padding: 12px; border: 1px solid var(--mk-outline-soft); border-radius: 8px; background: var(--mk-surface); color: inherit; font: inherit; }
5981
+ .mk-studio-dock__view label { display: grid; gap: 6px; }
5982
+ .mk-studio-dock__view video { width: 100%; border-radius: 10px; }
5983
+ .mk-studio-dock :is(button,a,input,textarea):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 3px; }
5984
+ @media (prefers-reduced-motion: reduce) { .mk-studio-dock *, .mk-studio-dock *::after { transition: none !important; animation: none !important; } }
5985
+
5986
+ /* components/trailer/trailer.css */
5987
+ .mk-trailer {
5988
+ --mk-trailer-ink: #f6f3e8;
5989
+ --mk-trailer-paper: #131816;
5990
+ width: min(1100px, calc(100vw - 32px));
5991
+ max-width: none;
5992
+ max-height: calc(100dvh - 32px);
5993
+ padding: 0;
5994
+ border: 0;
5995
+ border-radius: 0;
5996
+ color: var(--mk-trailer-ink);
5997
+ background: var(--mk-trailer-paper);
5998
+ overflow: auto;
5999
+ margin: auto;
6000
+ }
6001
+ .mk-trailer::backdrop { background: rgb(4 10 7 / .8); }
6002
+ .mk-trailer__header { display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 16px 20px; }
6003
+ .mk-trailer__title { font: 500 .75rem/1.5 var(--mk-font-mono, monospace); text-transform: uppercase; letter-spacing: .16em; margin: 0; }
6004
+ .mk-trailer video { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: contain; background: #060b08; }
6005
+ .mk-trailer [data-mk-trailer-stage]:fullscreen { display: flex; flex-direction: column; justify-content: center; width: 100%; height: 100%; background: var(--mk-trailer-paper); color: var(--mk-trailer-ink); }
6006
+ .mk-trailer [data-mk-trailer-stage]:fullscreen video { max-height: calc(100dvh - 90px); }
6007
+ .mk-trailer__controls { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 10px 20px 16px; font: .7rem/1.5 var(--mk-font-mono, monospace); }
6008
+ .mk-trailer button { display: grid; place-items: center; min-width: 44px; min-height: 44px; border: 1px solid currentColor; color: inherit; background: transparent; cursor: pointer; font: inherit; }
6009
+ .mk-trailer button:hover { background: rgb(255 255 255 / .12); }
6010
+ .mk-trailer button:focus-visible, .mk-trailer input:focus-visible { outline: 2px solid #e5ff96; outline-offset: 4px; }
6011
+ .mk-trailer button svg { width: 18px; height: 18px; fill: currentColor; }
6012
+ .mk-trailer [data-mk-trailer-seek] { flex: 1; min-width: 70px; accent-color: #d6f2ac; }
6013
+ .mk-trailer [data-mk-trailer-volume] { width: 72px; accent-color: #d6f2ac; }
6014
+ .mk-trailer [data-mk-trailer-time] { white-space: nowrap; }
6015
+ .mk-trailer [data-mk-trailer-status] { padding: 0 20px; font: .8rem/1.5 var(--mk-font, sans-serif); }
6016
+ .mk-trailer [data-mk-trailer-status]:empty { display: none; }
6017
+ .mk-trailer__pause-icon, .mk-trailer__sound-off { display: none; }
6018
+ .mk-trailer [data-mk-trailer-play][aria-pressed="true"] .mk-trailer__play-icon,
6019
+ .mk-trailer [data-mk-trailer-mute][aria-pressed="true"] .mk-trailer__sound-on { display: none; }
6020
+ .mk-trailer [data-mk-trailer-play][aria-pressed="true"] .mk-trailer__pause-icon,
6021
+ .mk-trailer [data-mk-trailer-mute][aria-pressed="true"] .mk-trailer__sound-off { display: block; }
6022
+ @media (max-width: 540px) { .mk-trailer [data-mk-trailer-volume] { display: none; } .mk-trailer__controls { gap: 8px; padding-inline: 12px; } .mk-trailer [data-mk-trailer-seek] { flex-basis: 100%; order: -1; } }
6023
+
6024
+ /* components/calendar/calendar.css */
6025
+ /* calendar — Melon Mind's month/week grid on the --mk-* tokens; parts are .mk-calendar__*. */
6026
+ .mk-calendar,
6027
+ mk-calendar {
6028
+ --mk-calendar-gap: 6px;
6029
+ --mk-calendar-radius: var(--mk-radius-lg);
6030
+ --mk-calendar-day-height: 112px;
6031
+ display: flex;
6032
+ flex-direction: column;
6033
+ gap: var(--mk-space-3);
6034
+ color: var(--mk-text);
6035
+ }
6036
+ .mk-calendar__header {
6037
+ display: flex;
6038
+ flex-wrap: wrap;
6039
+ align-items: center;
6040
+ gap: var(--mk-space-2);
6041
+ }
6042
+ .mk-calendar__title { margin: 0 auto 0 0; font-size: clamp(1.4rem, 2.6vw, 2rem); font-weight: 400; letter-spacing: -0.01em; }
6043
+ .mk-calendar__views { display: inline-flex; padding: 4px; gap: 2px; border-radius: var(--mk-radius-full); background: var(--mk-surface-3); }
6044
+ .mk-calendar__views button,
6045
+ .mk-calendar__nav {
6046
+ display: inline-grid;
6047
+ place-items: center;
6048
+ min-width: 44px;
6049
+ height: 44px;
6050
+ padding: 0 12px;
6051
+ border: 0;
6052
+ border-radius: var(--mk-radius-full);
6053
+ background: transparent;
6054
+ color: var(--mk-muted);
6055
+ font: inherit;
6056
+ cursor: pointer;
6057
+ transition: background 0.2s, color 0.2s, transform 0.3s var(--mk-ease-nav-move);
6058
+ }
6059
+ .mk-calendar__views button[aria-pressed='true'] { background: var(--mk-surface-5); color: var(--mk-text); }
6060
+ .mk-calendar__nav { background: var(--mk-surface-3); color: var(--mk-text); }
6061
+ .mk-calendar__nav:active { transform: scale(0.92); }
6062
+ :is(.mk-calendar__views button, .mk-calendar__nav):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 2px; }
6063
+
6064
+ [data-mk-calendar-grid] { position: relative; display: flex; flex-direction: column; gap: var(--mk-calendar-gap); }
6065
+ .mk-calendar__head,
6066
+ .mk-calendar__week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: var(--mk-calendar-gap); }
6067
+ .mk-calendar__body { display: flex; flex-direction: column; gap: var(--mk-calendar-gap); }
6068
+ .mk-calendar__body--leaving { position: absolute; left: 0; right: 0; pointer-events: none; }
6069
+ .mk-calendar__weekday {
6070
+ padding: 8px 4px;
6071
+ border-radius: var(--mk-radius-md);
6072
+ background: var(--mk-surface-2);
6073
+ text-align: center;
6074
+ font-size: 0.95rem;
6075
+ }
6076
+ .mk-calendar__weekday-narrow { display: none; }
6077
+
6078
+ .mk-calendar__day {
6079
+ position: relative;
6080
+ display: flex;
6081
+ flex-direction: column;
6082
+ gap: 4px;
6083
+ min-width: 0;
6084
+ min-height: var(--mk-calendar-day-height);
6085
+ padding: 6px;
6086
+ border-radius: var(--mk-calendar-radius);
6087
+ background: var(--mk-surface-3);
6088
+ transition: background 0.3s, box-shadow 0.3s;
6089
+ container-type: inline-size;
6090
+ }
6091
+ .mk-calendar__body[data-view='week'] .mk-calendar__day { min-height: calc(var(--mk-calendar-day-height) * 3); }
6092
+ .mk-calendar__day[data-outside] { background: var(--mk-surface-1); color: var(--mk-muted); }
6093
+ .mk-calendar__day:hover { background: var(--mk-surface-4); }
6094
+ .mk-calendar__day[aria-selected='true'] { box-shadow: inset 0 0 0 2px var(--mk-accent); }
6095
+ .mk-calendar__number {
6096
+ align-self: flex-end;
6097
+ min-width: 2.2rem;
6098
+ height: 2.2rem;
6099
+ padding: 0 0.4rem;
6100
+ border: 0;
6101
+ border-radius: var(--mk-radius-full);
6102
+ background: transparent;
6103
+ color: inherit;
6104
+ font: inherit;
6105
+ font-size: 1.15rem;
6106
+ cursor: pointer;
6107
+ transition: background 0.3s, color 0.3s, border-radius 0.3s var(--mk-ease-nav-radius), transform 0.3s var(--mk-ease-nav-radius);
6108
+ }
6109
+ .mk-calendar__number:hover { background: var(--mk-surface-5); }
6110
+ .mk-calendar__number:active { transform: scale(0.9); }
6111
+ .mk-calendar__number:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 2px; }
6112
+ .mk-calendar__day[data-today] .mk-calendar__number { background: var(--mk-accent); color: var(--mk-on-accent); }
6113
+
6114
+ .mk-calendar__events { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
6115
+ .mk-calendar__event,
6116
+ .mk-calendar__more {
6117
+ --mk-calendar-event-color: var(--mk-accent);
6118
+ display: flex;
6119
+ align-items: center;
6120
+ gap: 6px;
6121
+ width: 100%;
6122
+ min-width: 0;
6123
+ padding: 5px 8px;
6124
+ border: 0;
6125
+ border-radius: 10px;
6126
+ background: var(--mk-surface-4);
6127
+ color: var(--mk-text);
6128
+ font: inherit;
6129
+ font-size: 0.85rem;
6130
+ text-align: left;
6131
+ cursor: pointer;
6132
+ transition: background 0.2s, transform 0.3s var(--mk-ease-nav-move);
6133
+ }
6134
+ .mk-calendar__event[data-state='pending'] {
6135
+ background: color-mix(in srgb, var(--mk-calendar-event-color) 30%, var(--mk-surface-3));
6136
+ }
6137
+ .mk-calendar__event:hover,
6138
+ .mk-calendar__more:hover { transform: translateY(-1px); background: var(--mk-surface-5); }
6139
+ .mk-calendar__event:focus-visible,
6140
+ .mk-calendar__more:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 1px; }
6141
+ .mk-calendar__status {
6142
+ flex: none;
6143
+ width: 0.8rem;
6144
+ height: 0.8rem;
6145
+ border: 2px solid currentColor;
6146
+ border-radius: 50%;
6147
+ }
6148
+ .mk-calendar__event[data-state='done'] .mk-calendar__status { background: currentColor; box-shadow: inset 0 0 0 2px var(--mk-surface-4); }
6149
+ .mk-calendar__event[data-state='cancelled'] .mk-calendar__event-title { text-decoration: line-through; opacity: 0.6; }
6150
+ .mk-calendar__event-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
6151
+ .mk-calendar__event-time { flex: none; font-variant-numeric: tabular-nums; opacity: 0.85; }
6152
+ .mk-calendar__more { justify-content: center; background: transparent; color: var(--mk-muted); }
6153
+
6154
+ /* Narrow day cells: the month keeps the title (the time stays in the label); the week stacks the time under it. */
6155
+ @container (max-width: 150px) {
6156
+ .mk-calendar__body[data-view='month'] .mk-calendar__event-time { display: none; }
6157
+ .mk-calendar__body[data-view='week'] .mk-calendar__event { flex-wrap: wrap; column-gap: 5px; row-gap: 1px; }
6158
+ .mk-calendar__body[data-view='week'] .mk-calendar__event-title { flex: 1 1 0; }
6159
+ .mk-calendar__body[data-view='week'] .mk-calendar__event-time { flex-basis: 100%; padding-left: calc(0.8rem + 5px); font-size: 0.72rem; }
6160
+ }
6161
+ @media (max-width: 680px) {
6162
+ .mk-calendar,
6163
+ mk-calendar { --mk-calendar-day-height: 64px; --mk-calendar-gap: 4px; --mk-calendar-radius: var(--mk-radius-sm); }
6164
+ .mk-calendar__weekday-long { display: none; }
6165
+ .mk-calendar__weekday-narrow { display: inline; }
6166
+ .mk-calendar__number { align-self: center; font-size: 0.95rem; }
6167
+ .mk-calendar__body[data-view='month'] .mk-calendar__events { flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 3px; }
6168
+ .mk-calendar__body[data-view='month'] :is(.mk-calendar__event, .mk-calendar__more) {
6169
+ width: 7px;
6170
+ height: 7px;
6171
+ padding: 0;
6172
+ border-radius: 50%;
6173
+ background: var(--mk-calendar-event-color);
6174
+ font-size: 0;
6175
+ }
6176
+ .mk-calendar__body[data-view='month'] .mk-calendar__status { display: none; }
6177
+ .mk-calendar__body[data-view='week'] .mk-calendar__event-time { display: none; }
6178
+ }
6179
+ @media (prefers-reduced-motion: reduce) {
6180
+ .mk-calendar *,
6181
+ mk-calendar * { transition: none !important; }
6182
+ }
6183
+
6184
+ /* components/slot-picker/slot-picker.css */
6185
+ /* slot-picker — Melon Mind's appointment picker on the --mk-* tokens; parts are .mk-slot-picker__*. */
6186
+ .mk-slot-picker,
6187
+ mk-slot-picker {
6188
+ --mk-slot-picker-radius: var(--mk-radius-md);
6189
+ display: grid;
6190
+ grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
6191
+ overflow: hidden;
6192
+ border-radius: var(--mk-radius-xl);
6193
+ background: var(--mk-surface);
6194
+ color: var(--mk-text);
6195
+ }
6196
+ .mk-slot-picker__calendar { padding: var(--mk-space-5); }
6197
+ .mk-slot-picker__panel {
6198
+ display: flex;
6199
+ flex-direction: column;
6200
+ gap: var(--mk-space-3);
6201
+ min-height: 100%;
6202
+ padding: var(--mk-space-5);
6203
+ background: var(--mk-surface-2);
6204
+ }
6205
+ .mk-slot-picker__month { display: flex; align-items: center; gap: var(--mk-space-2); margin-bottom: var(--mk-space-3); }
6206
+ .mk-slot-picker__title { margin: 0 auto 0 0; font-size: 1.35rem; font-weight: 400; }
6207
+ .mk-slot-picker__nav {
6208
+ display: grid;
6209
+ place-items: center;
6210
+ width: 42px;
6211
+ height: 42px;
6212
+ border: 0;
6213
+ border-radius: 50%;
6214
+ background: var(--mk-surface-2);
6215
+ color: var(--mk-text);
6216
+ font: inherit;
6217
+ cursor: pointer;
6218
+ transition: transform 0.3s var(--mk-ease-nav-move), opacity 0.2s;
6219
+ }
6220
+ .mk-slot-picker__nav:active { transform: scale(0.9); }
6221
+ .mk-slot-picker__nav:disabled { opacity: 0.35; cursor: default; }
6222
+ [data-mk-slot-days],
6223
+ [data-mk-slot-times] { position: relative; }
6224
+ .mk-slot-picker__days { display: flex; flex-direction: column; gap: 6px; }
6225
+ .mk-slot-picker__weekdays,
6226
+ .mk-slot-picker__week { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
6227
+ .mk-slot-picker__weekdays span {
6228
+ padding: 6px 0;
6229
+ border-radius: var(--mk-radius-sm);
6230
+ background: color-mix(in srgb, var(--mk-surface-2) 70%, transparent);
6231
+ text-align: center;
6232
+ font-size: 0.9rem;
6233
+ }
6234
+ .mk-slot-picker__week > [role='gridcell'] { display: grid; }
6235
+ .mk-slot-picker__day {
6236
+ aspect-ratio: 1.15;
6237
+ border: 0;
6238
+ border-radius: var(--mk-slot-picker-radius);
6239
+ background: var(--mk-surface-3);
6240
+ color: var(--mk-text);
6241
+ font: inherit;
6242
+ font-size: 0.95rem;
6243
+ cursor: pointer;
6244
+ transition: background 0.25s, color 0.25s, border-radius 0.3s var(--mk-ease-nav-radius), transform 0.3s var(--mk-ease-nav-radius);
6245
+ }
6246
+ .mk-slot-picker__day:hover:not(:disabled) { background: var(--mk-surface-5); border-radius: var(--mk-radius-full); }
6247
+ .mk-slot-picker__day:active:not(:disabled) { transform: scale(0.92); }
6248
+ .mk-slot-picker__day:disabled { opacity: 0.35; cursor: default; }
6249
+ .mk-slot-picker__day[aria-current='date'] { box-shadow: inset 0 0 0 1.5px var(--mk-outline); }
6250
+ [aria-selected='true'] > .mk-slot-picker__day,
6251
+ [aria-selected='true'] > .mk-slot-picker__day:hover:not(:disabled) { background: var(--mk-accent); color: var(--mk-on-accent); }
6252
+ :is(.mk-slot-picker__day, .mk-slot-picker__time, .mk-slot-picker__nav):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 2px; }
6253
+
6254
+ .mk-slot-picker__heading {
6255
+ margin: 0;
6256
+ padding: 8px;
6257
+ border-radius: var(--mk-radius-md);
6258
+ background: var(--mk-surface);
6259
+ font-weight: 600;
6260
+ }
6261
+ .mk-slot-picker__heading:not([data-mk-shown]) { display: none; }
6262
+ .mk-slot-picker__heading[data-mk-shown] { animation: mk-slot-heading-in 0.5s cubic-bezier(0.38, 0.49, 0, 1.4); }
6263
+ @keyframes mk-slot-heading-in {
6264
+ 0% { max-height: 0; min-height: 0; padding-block: 0; opacity: 0; }
6265
+ 100% { max-height: 56px; min-height: 40px; opacity: 1; }
6266
+ }
6267
+ .mk-slot-picker__list { display: grid; grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr)); gap: 8px; align-content: start; }
6268
+ .mk-slot-picker__leaving { position: absolute; left: 0; right: 0; pointer-events: none; }
6269
+ .mk-slot-picker__note { grid-column: 1 / -1; margin: 2rem 0; color: var(--mk-muted); text-align: center; }
6270
+ .mk-slot-picker__time {
6271
+ position: relative;
6272
+ isolation: isolate;
6273
+ height: 44px;
6274
+ border: 0;
6275
+ border-radius: var(--mk-radius-sm);
6276
+ background: var(--mk-surface-4);
6277
+ color: var(--mk-text);
6278
+ font: inherit;
6279
+ font-variant-numeric: tabular-nums;
6280
+ cursor: pointer;
6281
+ transition: background 0.2s, color 0.2s, transform 0.3s var(--mk-ease-nav-move);
6282
+ }
6283
+ .mk-slot-picker__time:hover { transform: translateY(-2px); }
6284
+ .mk-slot-picker__time[aria-checked='true'] { color: var(--mk-on-accent); }
6285
+ .mk-slot-picker__time[aria-checked='true']::before {
6286
+ content: '';
6287
+ position: absolute;
6288
+ inset: 0;
6289
+ z-index: -1;
6290
+ border-radius: inherit;
6291
+ background: var(--mk-accent);
6292
+ animation: mk-slot-highlight 0.7s cubic-bezier(0.38, 0.49, 0, 1.1);
6293
+ }
6294
+ @keyframes mk-slot-highlight {
6295
+ 0% { transform: scale(0.8); opacity: 0; filter: blur(16px); box-shadow: 0 0 0 1px var(--mk-surface-2); }
6296
+ 100% { transform: scale(1); opacity: 1; filter: blur(0); }
6297
+ }
6298
+ .mk-slot-picker__actions { margin-top: auto; display: flex; justify-content: flex-end; }
6299
+
6300
+ @media (max-width: 680px) {
6301
+ .mk-slot-picker,
6302
+ mk-slot-picker { grid-template-columns: 1fr; }
6303
+ .mk-slot-picker__calendar,
6304
+ .mk-slot-picker__panel { padding: var(--mk-space-4); }
6305
+ }
6306
+ @media (prefers-reduced-motion: reduce) {
6307
+ .mk-slot-picker *,
6308
+ mk-slot-picker * { transition: none !important; animation: none !important; }
6309
+ }