@tangle-network/brand 1.22.1 → 1.23.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,6 +1,6 @@
1
1
  /* GENERATED by scripts/gen-compat.mjs. Do not edit.
2
2
  * Source: tokens.css + named-themes.css
3
- * SHA-256: cf009734f12a6dcb94d31f9ee6c21583942f1b2b2be38454344d6c3403cd26b5
3
+ * SHA-256: d9f91f8d9c731a2b37749d49fcb621a42a5e4fe4a2d6e7157e6b4eef71a5f3b5
4
4
  * Light-default compatibility; all explicit modes remain canonical.
5
5
  */
6
6
  :where(:root),
@@ -644,6 +644,53 @@
644
644
  .light,
645
645
  [data-sandbox-ui],
646
646
  [data-sandbox-theme],
647
+ [data-theme] {
648
+ --hsl-raised: var(--hsl-card);
649
+ --hsl-raised-2: var(--hsl-card);
650
+ --well-page: var(--bg-input);
651
+ --well-card: var(--bg-input);
652
+ --well-raised: var(--bg-input);
653
+ --well-raised-2: var(--bg-input);
654
+ --well: var(--well-page);
655
+ --field-border: hsl(var(--hsl-border));
656
+ --shadow-raised: var(--shadow-card);
657
+ --shadow-well: 0 0 0 0 transparent;
658
+ --edge-highlight: 0 0 0 0 transparent;
659
+ --ix-hover: 0 0 0 1px hsl(var(--hsl-ring) / 0.45), 0 0 0 4px hsl(var(--hsl-ring) / 0.16);
660
+ --ix-hover-border: hsl(var(--hsl-ring) / 0.7);
661
+ --ix-press: 0 0 0 1px hsl(var(--hsl-ring) / 0.95), 0 0 0 4px hsl(var(--hsl-ring) / 0.3);
662
+ --ix-after: 0 0 0 1px hsl(var(--hsl-ring) / 0.6), 0 0 0 3px hsl(var(--hsl-ring) / 0.14);
663
+ --ix-sel-ring: hsl(var(--hsl-ring) / 0.85);
664
+ --ix-sel-bg: hsl(var(--hsl-ring) / 0.18);
665
+ --ix-hover-bg: hsl(var(--hsl-ring) / 0.08);
666
+ }
667
+ [data-sandbox-theme="vault"]:where(:not(.dark)),
668
+ [data-sandbox-theme="dawn"]:where(:not(.dark)),
669
+ [data-theme="hospitality"]:where(:not(.dark)),
670
+ [data-theme="website"]:where(:not(.dark)),
671
+ [data-theme="light"],
672
+ .light,
673
+ [data-theme$="-light"],
674
+ :where(:root) {
675
+ --ix-sel-bg: hsl(var(--hsl-ring) / 0.13);
676
+ --ix-hover-bg: hsl(var(--hsl-ring) / 0.07);
677
+ }
678
+ [data-slot="card"] :where(*) {
679
+ --card: var(--hsl-raised);
680
+ --well: var(--well-card);
681
+ }
682
+ [data-slot="card"] [data-slot="card"] :where(*) {
683
+ --card: var(--hsl-raised-2);
684
+ --well: var(--well-raised);
685
+ }
686
+ [data-slot="card"] [data-slot="card"] [data-slot="card"] :where(*) {
687
+ --well: var(--well-raised-2);
688
+ }
689
+ :where(:root),
690
+ .dark,
691
+ .light,
692
+ [data-sandbox-ui],
693
+ [data-sandbox-theme],
647
694
  [data-theme] {
648
695
  --chart-ink: var(--text-primary);
649
696
  --chart-ink-muted: var(--text-dim);
@@ -1258,7 +1305,7 @@
1258
1305
  --border-hover: rgba(120, 108, 158, 0.28);
1259
1306
  }
1260
1307
  [data-theme="hospitality"]:where(:not(.dark)) {
1261
- --hsl-background: 102 18% 92%;
1308
+ --hsl-background: 108 16.7% 88.2%;
1262
1309
  --hsl-foreground: 143 25% 12%;
1263
1310
  --hsl-card: 0 0% 100%;
1264
1311
  --hsl-card-foreground: 143 25% 12%;
@@ -1266,58 +1313,71 @@
1266
1313
  --hsl-popover-foreground: 143 25% 12%;
1267
1314
  --hsl-primary: 153 38% 25%;
1268
1315
  --hsl-primary-foreground: 0 0% 100%;
1269
- --hsl-secondary: 126 17% 94%;
1316
+ --hsl-secondary: 110 18.7% 93.7%;
1270
1317
  --hsl-secondary-foreground: 143 25% 12%;
1271
- --hsl-muted: 126 17% 94%;
1272
- --hsl-muted-foreground: 146 9% 39%;
1273
- --hsl-accent: 131 20% 91%;
1318
+ --hsl-muted: 110 18.7% 93.7%;
1319
+ --hsl-muted-foreground: 138 7.3% 35.5%;
1320
+ --hsl-accent: 133 38.4% 88%;
1274
1321
  --hsl-accent-foreground: 143 25% 12%;
1275
- --hsl-border: 130 15% 84%;
1276
- --hsl-input: 105 22% 97.5%;
1322
+ --hsl-border: 107 8.7% 79.8%;
1323
+ --hsl-input: 0 0% 100%;
1277
1324
  --hsl-ring: 148 28% 43%;
1278
- --sidebar-background: 0 0% 100%;
1325
+ --hsl-destructive: 0 72% 41%;
1326
+ --hsl-raised: 110 18.7% 93.7%;
1327
+ --hsl-raised-2: 0 0% 100%;
1328
+ --sidebar-background: 108 21.7% 95.5%;
1279
1329
  --sidebar-foreground: 143 25% 12%;
1280
1330
  --sidebar-primary: 153 38% 25%;
1281
1331
  --sidebar-primary-foreground: 0 0% 100%;
1282
- --sidebar-accent: 126 17% 94%;
1332
+ --sidebar-accent: 133 38.4% 88%;
1283
1333
  --sidebar-accent-foreground: 143 25% 12%;
1284
- --sidebar-border: 130 15% 84%;
1334
+ --sidebar-border: 107 8.7% 79.8%;
1285
1335
  --sidebar-ring: 148 28% 43%;
1286
- --md3-surface: #e9eee7;
1287
- --md3-surface-dim: #d5ded3;
1336
+ --md3-surface: #dee6dc;
1337
+ --md3-surface-dim: #d3dcd1;
1288
1338
  --md3-surface-bright: #ffffff;
1289
1339
  --md3-surface-container-lowest: #ffffff;
1290
- --md3-surface-container-low: #f8faf7;
1340
+ --md3-surface-container-low: #f2f6f1;
1291
1341
  --md3-surface-container: #ffffff;
1292
- --md3-surface-container-high: #edf2ee;
1342
+ --md3-surface-container-high: #edf2ec;
1293
1343
  --md3-surface-container-highest: #ffffff;
1294
- --md3-surface-variant: #edf2ee;
1344
+ --md3-surface-variant: #edf2ec;
1295
1345
  --md3-on-surface: #17261d;
1296
- --md3-on-surface-variant: #5a6c62;
1346
+ --md3-on-surface-variant: #546158;
1297
1347
  --md3-outline: #6d8376;
1298
- --md3-outline-variant: #d0dcd2;
1348
+ --md3-outline-variant: #c9d0c7;
1299
1349
  --md3-primary: #285842;
1300
1350
  --md3-primary-dim: #1f4735;
1301
1351
  --md3-primary-container: #1f4735;
1302
1352
  --md3-on-primary: #ffffff;
1303
1353
  --md3-surface-tint: #285842;
1304
- --depth-1: #e9eee7;
1354
+ --depth-1: #dee6dc;
1305
1355
  --depth-2: #ffffff;
1306
- --depth-3: #edf2ee;
1356
+ --depth-3: #edf2ec;
1307
1357
  --depth-4: #ffffff;
1308
- --bg-root: #e9eee7;
1309
- --bg-dark: #e9eee7;
1310
- --bg-section: #e9eee7;
1358
+ --bg-root: #dee6dc;
1359
+ --bg-dark: #dee6dc;
1360
+ --bg-section: #dee6dc;
1311
1361
  --bg-card: #ffffff;
1312
1362
  --bg-elevated: #ffffff;
1313
- --bg-input: #f8faf7;
1363
+ --bg-input: #ffffff;
1364
+ --well-page: #ffffff;
1365
+ --well-card: #ebf0e9;
1366
+ --well-raised: #ffffff;
1367
+ --well-raised-2: #ebf0e9;
1314
1368
  --bg-hover: rgba(40, 88, 66, 0.05);
1315
1369
  --bg-selection: rgba(40, 88, 66, 0.16);
1316
- --border-subtle: rgba(23, 38, 29, 0.10);
1317
- --border-default: rgba(23, 38, 29, 0.14);
1318
- --border-hover: rgba(23, 38, 29, 0.24);
1370
+ --border-subtle: rgba(23, 38, 29, 0.11);
1371
+ --border-default: rgba(23, 38, 29, 0.16);
1372
+ --border-hover: rgba(23, 38, 29, 0.28);
1373
+ --border-strong: #798479;
1374
+ --field-border: #798479;
1319
1375
  --border-accent: rgba(40, 88, 66, 0.20);
1320
1376
  --border-accent-hover: rgba(40, 88, 66, 0.36);
1377
+ --shadow-card: 0 1px 2px rgba(23, 38, 29, 0.07), 0 4px 14px -4px rgba(23, 38, 29, 0.10);
1378
+ --shadow-raised: 0 1px 1px rgba(23, 38, 29, 0.05), 0 2px 6px -2px rgba(23, 38, 29, 0.07);
1379
+ --shadow-well: inset 0 1px 2px rgba(23, 38, 29, 0.06);
1380
+ --edge-highlight: 0 0 0 0 transparent;
1321
1381
  --accent-text: #285842;
1322
1382
  --accent-surface-soft: rgba(40, 88, 66, 0.05);
1323
1383
  --accent-surface-strong: rgba(40, 88, 66, 0.13);
@@ -1331,71 +1391,96 @@
1331
1391
  --btn-primary-text: #ffffff;
1332
1392
  --text-primary: #17261d;
1333
1393
  --text-secondary: #36493e;
1334
- --text-muted: #5a6c62;
1335
- --text-dim: #5f6d65;
1394
+ --text-muted: #546158;
1395
+ --text-dim: #546158;
1396
+ --surface-success-bg: #c5edce;
1397
+ --surface-success-text: #1e5b34;
1398
+ --surface-success-border: #91c79e;
1399
+ --surface-warning-bg: #f4e3bf;
1400
+ --surface-warning-text: #804d0c;
1401
+ --surface-warning-border: #dcb87a;
1402
+ --surface-danger-bg: #fadad8;
1403
+ --surface-danger-text: #a5292b;
1404
+ --surface-danger-border: #e8acaa;
1405
+ --surface-neutral-bg: #e5e9e4;
1406
+ --surface-neutral-text: #576157;
1407
+ --surface-neutral-border: #c0c6bf;
1336
1408
  }
1337
1409
  .dark[data-theme="hospitality"] {
1338
- --hsl-background: 150 8% 8.6%;
1410
+ --hsl-background: 140 10.3% 5.7%;
1339
1411
  --hsl-foreground: 140 12% 90.2%;
1340
- --hsl-card: 150 6% 18.8%;
1412
+ --hsl-card: 132 5.3% 18.6%;
1341
1413
  --hsl-card-foreground: 140 12% 90.2%;
1342
- --hsl-popover: 150 6% 20.8%;
1414
+ --hsl-popover: 130 3.9% 29.8%;
1343
1415
  --hsl-popover-foreground: 140 12% 90.2%;
1344
1416
  --hsl-primary: 145 31% 59%;
1345
1417
  --hsl-primary-foreground: 153 35% 10%;
1346
- --hsl-secondary: 150 6% 20.8%;
1418
+ --hsl-secondary: 130 4.6% 25.5%;
1347
1419
  --hsl-secondary-foreground: 140 12% 90.2%;
1348
- --hsl-muted: 150 6% 20.8%;
1349
- --hsl-muted-foreground: 145 8% 71%;
1350
- --hsl-accent: 150 6% 20.8%;
1420
+ --hsl-muted: 130 4.6% 25.5%;
1421
+ --hsl-muted-foreground: 128 5.6% 73.9%;
1422
+ --hsl-accent: 140 18% 20%;
1351
1423
  --hsl-accent-foreground: 140 12% 90.2%;
1352
- --hsl-border: 150 5% 29.8%;
1353
- --hsl-input: 150 8% 12.2%;
1424
+ --hsl-border: 130 3.9% 29.8%;
1425
+ --hsl-input: 120 16.7% 2.4%;
1354
1426
  --hsl-ring: 145 31% 59%;
1355
- --sidebar-background: 150 9% 6.3%;
1427
+ --hsl-destructive: 0 80% 88%;
1428
+ --hsl-raised: 130 4.6% 25.5%;
1429
+ --hsl-raised-2: 130 3.7% 31.8%;
1430
+ --sidebar-background: 120 8% 9.8%;
1356
1431
  --sidebar-foreground: 140 12% 90.2%;
1357
1432
  --sidebar-primary: 145 31% 59%;
1358
1433
  --sidebar-primary-foreground: 153 35% 10%;
1359
- --sidebar-accent: 150 6% 20.8%;
1434
+ --sidebar-accent: 140 18% 20%;
1360
1435
  --sidebar-accent-foreground: 140 12% 90.2%;
1361
- --sidebar-border: 150 5% 29.8%;
1436
+ --sidebar-border: 130 3.9% 29.8%;
1362
1437
  --sidebar-ring: 145 31% 59%;
1363
- --md3-surface: #141816;
1364
- --md3-surface-dim: #0f1210;
1365
- --md3-surface-bright: #383e3b;
1366
- --md3-surface-container-lowest: #0f1210;
1367
- --md3-surface-container-low: #212624;
1368
- --md3-surface-container: #2d3330;
1369
- --md3-surface-container-high: #323835;
1370
- --md3-surface-container-highest: #383e3b;
1371
- --md3-surface-variant: #323835;
1438
+ --md3-surface: #0d100e;
1439
+ --md3-surface-dim: #050705;
1440
+ --md3-surface-bright: #494f4a;
1441
+ --md3-surface-container-lowest: #050705;
1442
+ --md3-surface-container-low: #171b17;
1443
+ --md3-surface-container: #2d322e;
1444
+ --md3-surface-container-high: #3e443f;
1445
+ --md3-surface-container-highest: #494f4a;
1446
+ --md3-surface-variant: #3e443f;
1372
1447
  --md3-on-surface: #e3e9e5;
1373
- --md3-on-surface-variant: #afbbb4;
1448
+ --md3-on-surface-variant: #b9c0ba;
1374
1449
  --md3-outline: #8a938e;
1375
- --md3-outline-variant: #48504c;
1450
+ --md3-outline-variant: #494f4a;
1376
1451
  --md3-primary: #99caad;
1377
1452
  --md3-primary-dim: #396a52;
1378
1453
  --md3-primary-container: #396a52;
1379
1454
  --md3-on-primary: #11221a;
1380
1455
  --md3-surface-tint: #76b791;
1381
- --depth-1: #141816;
1382
- --depth-2: #2d3330;
1383
- --depth-3: #323835;
1384
- --depth-4: #383e3b;
1385
- --bg-root: #141816;
1386
- --bg-dark: #141816;
1387
- --bg-section: #141816;
1388
- --bg-card: #2d3330;
1389
- --bg-elevated: #383e3b;
1390
- --bg-input: #1d221f;
1456
+ --depth-1: #0d100e;
1457
+ --depth-2: #2d322e;
1458
+ --depth-3: #3e443f;
1459
+ --depth-4: #494f4a;
1460
+ --bg-root: #0d100e;
1461
+ --bg-dark: #0d100e;
1462
+ --bg-section: #0d100e;
1463
+ --bg-card: #2d322e;
1464
+ --bg-elevated: #494f4a;
1465
+ --bg-input: #050705;
1466
+ --well-page: #050705;
1467
+ --well-card: #050705;
1468
+ --well-raised: #181c18;
1469
+ --well-raised-2: #181c18;
1391
1470
  --bg-hover: rgba(118, 183, 145, 0.07);
1392
1471
  --bg-selection: rgba(118, 183, 145, 0.28);
1393
1472
  --border-subtle: rgba(227, 233, 229, 0.10);
1394
1473
  --border-default: rgba(227, 233, 229, 0.16);
1395
1474
  --border-hover: rgba(227, 233, 229, 0.28);
1475
+ --border-strong: #868f87;
1476
+ --field-border: #868f87;
1396
1477
  --border-accent: rgba(118, 183, 145, 0.35);
1397
1478
  --border-accent-hover: rgba(118, 183, 145, 0.50);
1398
- --accent-text: #99caad;
1479
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.45), 0 10px 24px -14px rgba(0, 0, 0, 0.6);
1480
+ --shadow-raised: 0 1px 2px rgba(0, 0, 0, 0.35);
1481
+ --shadow-well: inset 0 1px 2px rgba(0, 0, 0, 0.5);
1482
+ --edge-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06);
1483
+ --accent-text: #b2dbc2;
1399
1484
  --accent-surface-soft: rgba(118, 183, 145, 0.07);
1400
1485
  --accent-surface-strong: rgba(57, 106, 82, 0.40);
1401
1486
  --accent-gradient-strong: linear-gradient(135deg, #396a52, #76b791);
@@ -1408,8 +1493,20 @@
1408
1493
  --btn-primary-text: #11221a;
1409
1494
  --text-primary: #e3e9e5;
1410
1495
  --text-secondary: #c5cec9;
1411
- --text-muted: #afbbb4;
1412
- --text-dim: #9ea9a2;
1496
+ --text-muted: #b9c0ba;
1497
+ --text-dim: #b9c0ba;
1498
+ --surface-success-bg: #254930;
1499
+ --surface-success-text: #9ce9b1;
1500
+ --surface-success-border: #437652;
1501
+ --surface-warning-bg: #513d21;
1502
+ --surface-warning-text: #fed081;
1503
+ --surface-warning-border: #8d6b39;
1504
+ --surface-danger-bg: #5c3231;
1505
+ --surface-danger-text: #f7b3b0;
1506
+ --surface-danger-border: #a45857;
1507
+ --surface-neutral-bg: #3e443f;
1508
+ --surface-neutral-text: #b9c0ba;
1509
+ --surface-neutral-border: #5f6560;
1413
1510
  }
1414
1511
  [data-theme="agents"] {
1415
1512
  --bg-card: #1a191b;
@@ -334,11 +334,33 @@
334
334
 
335
335
  /* ───────────────────── Hospitality — sage paper, forest accent ─────────────────
336
336
  * Hospitality's product identity: a sage-tinted surface ladder and a forest-green
337
- * accent in place of iris. It follows the canonical ladder's roles exactly (light
338
- * paper cards on a tinted canvas; dark planes rising in the same steps as the
339
- * neutral spine), so shared components keep their hierarchy and only the hue
340
- * changes. Status tones are deliberately NOT overridden: approval, overdue and
341
- * failure read the same in Hospitality as everywhere else.
337
+ * accent in place of iris. Green is reserved for interaction and status; the
338
+ * planes stay near-neutral (hue 108-150, low chroma).
339
+ *
340
+ * The ladder, in OKLCH L x100 (light / dark), each step at least 4.4 from its
341
+ * neighbour so a card, a card in a card and a field never sit flat on their
342
+ * parent:
343
+ * page 91.6 #dee6dc 16.9 #0d100e
344
+ * sidebar 96.9 #f2f6f1 21.6 #171b17
345
+ * card 100 #ffffff+shadow 31.1 #2d322e (1.46:1 on the page)
346
+ * raised 95.6 #edf2ec 37.9 #3e443f + 1px top highlight
347
+ * raised-2 100 #ffffff 43.9 #4e544f
348
+ * popover 100 #ffffff+shadow 42.0 #494f4a
349
+ * well (field fill) on page / in card / in raised / in raised-2:
350
+ * 100 / 94.9 / 100 / 94.9 12.4 / 12.4 / 22.1 / 22.1
351
+ * hairline 85.0 #c9d0c7 42.0 #494f4a
352
+ * field border 60.0 #798479 64.0 #868f87 (both 3.9:1 on the card)
353
+ * A well is always the opposite step from its parent in light and always
354
+ * deeper in dark; tokens.css carries the `--well` context that picks one.
355
+ *
356
+ * The dark inks that sit on those planes are lifted to keep 4.5:1: accent text
357
+ * and the destructive red (same hue, lighter; light keeps the canonical red).
358
+ *
359
+ * Status fills are retuned for these planes (ROOT-SPEC section c): light fills
360
+ * sit at L 91-93, at least 7 under the white card, dark fills at L 37-38, at
361
+ * least 6 over the card, so a status box never reads as a flat card. The
362
+ * MEANING is unchanged: success is green, warning is amber (pending only),
363
+ * danger is red, neutral is grey; info/running stay canonical.
342
364
  *
343
365
  * Apply `data-theme="hospitality"` on <html>. The mode comes from the `.dark`
344
366
  * class the shared theme control already toggles: without `.dark` the scope is
@@ -347,76 +369,104 @@
347
369
  * dark baseline and this file's dark ladder. A mode switch never needs a second
348
370
  * attribute, and the two blocks declare the same properties. */
349
371
  [data-theme="hospitality"]:where(:not(.dark)) {
350
- --hsl-background: 102 18% 92%; --hsl-foreground: 143 25% 12%;
372
+ --hsl-background: 108 16.7% 88.2%; --hsl-foreground: 143 25% 12%;
351
373
  --hsl-card: 0 0% 100%; --hsl-card-foreground: 143 25% 12%;
352
374
  --hsl-popover: 0 0% 100%; --hsl-popover-foreground: 143 25% 12%;
353
375
  --hsl-primary: 153 38% 25%; --hsl-primary-foreground: 0 0% 100%;
354
- --hsl-secondary: 126 17% 94%; --hsl-secondary-foreground: 143 25% 12%;
355
- --hsl-muted: 126 17% 94%; --hsl-muted-foreground: 146 9% 39%;
356
- --hsl-accent: 131 20% 91%; --hsl-accent-foreground: 143 25% 12%;
357
- --hsl-border: 130 15% 84%; --hsl-input: 105 22% 97.5%;
376
+ --hsl-secondary: 110 18.7% 93.7%; --hsl-secondary-foreground: 143 25% 12%;
377
+ --hsl-muted: 110 18.7% 93.7%; --hsl-muted-foreground: 138 7.3% 35.5%;
378
+ --hsl-accent: 133 38.4% 88%; --hsl-accent-foreground: 143 25% 12%;
379
+ --hsl-border: 107 8.7% 79.8%; --hsl-input: 0 0% 100%;
358
380
  --hsl-ring: 148 28% 43%;
359
- --sidebar-background: 0 0% 100%; --sidebar-foreground: 143 25% 12%;
381
+ --hsl-destructive: 0 72% 41%;
382
+ --hsl-raised: 110 18.7% 93.7%; --hsl-raised-2: 0 0% 100%;
383
+ --sidebar-background: 108 21.7% 95.5%; --sidebar-foreground: 143 25% 12%;
360
384
  --sidebar-primary: 153 38% 25%; --sidebar-primary-foreground: 0 0% 100%;
361
- --sidebar-accent: 126 17% 94%; --sidebar-accent-foreground: 143 25% 12%;
362
- --sidebar-border: 130 15% 84%; --sidebar-ring: 148 28% 43%;
363
- --md3-surface: #e9eee7; --md3-surface-dim: #d5ded3; --md3-surface-bright: #ffffff;
364
- --md3-surface-container-lowest: #ffffff; --md3-surface-container-low: #f8faf7;
365
- --md3-surface-container: #ffffff; --md3-surface-container-high: #edf2ee;
366
- --md3-surface-container-highest: #ffffff; --md3-surface-variant: #edf2ee;
367
- --md3-on-surface: #17261d; --md3-on-surface-variant: #5a6c62;
368
- --md3-outline: #6d8376; --md3-outline-variant: #d0dcd2;
385
+ --sidebar-accent: 133 38.4% 88%; --sidebar-accent-foreground: 143 25% 12%;
386
+ --sidebar-border: 107 8.7% 79.8%; --sidebar-ring: 148 28% 43%;
387
+ --md3-surface: #dee6dc; --md3-surface-dim: #d3dcd1; --md3-surface-bright: #ffffff;
388
+ --md3-surface-container-lowest: #ffffff; --md3-surface-container-low: #f2f6f1;
389
+ --md3-surface-container: #ffffff; --md3-surface-container-high: #edf2ec;
390
+ --md3-surface-container-highest: #ffffff; --md3-surface-variant: #edf2ec;
391
+ --md3-on-surface: #17261d; --md3-on-surface-variant: #546158;
392
+ --md3-outline: #6d8376; --md3-outline-variant: #c9d0c7;
369
393
  --md3-primary: #285842; --md3-primary-dim: #1f4735; --md3-primary-container: #1f4735;
370
394
  --md3-on-primary: #ffffff; --md3-surface-tint: #285842;
371
- --depth-1: #e9eee7; --depth-2: #ffffff; --depth-3: #edf2ee; --depth-4: #ffffff;
372
- --bg-root: #e9eee7; --bg-dark: #e9eee7; --bg-section: #e9eee7;
373
- --bg-card: #ffffff; --bg-elevated: #ffffff; --bg-input: #f8faf7;
395
+ --depth-1: #dee6dc; --depth-2: #ffffff; --depth-3: #edf2ec; --depth-4: #ffffff;
396
+ --bg-root: #dee6dc; --bg-dark: #dee6dc; --bg-section: #dee6dc;
397
+ --bg-card: #ffffff; --bg-elevated: #ffffff; --bg-input: #ffffff;
398
+ --well-page: #ffffff; --well-card: #ebf0e9; --well-raised: #ffffff; --well-raised-2: #ebf0e9;
374
399
  --bg-hover: rgba(40, 88, 66, 0.05); --bg-selection: rgba(40, 88, 66, 0.16);
375
- --border-subtle: rgba(23, 38, 29, 0.10); --border-default: rgba(23, 38, 29, 0.14);
376
- --border-hover: rgba(23, 38, 29, 0.24);
400
+ --border-subtle: rgba(23, 38, 29, 0.11); --border-default: rgba(23, 38, 29, 0.16);
401
+ --border-hover: rgba(23, 38, 29, 0.28); --border-strong: #798479;
402
+ --field-border: #798479;
377
403
  --border-accent: rgba(40, 88, 66, 0.20); --border-accent-hover: rgba(40, 88, 66, 0.36);
404
+ --shadow-card: 0 1px 2px rgba(23, 38, 29, 0.07), 0 4px 14px -4px rgba(23, 38, 29, 0.10);
405
+ --shadow-raised: 0 1px 1px rgba(23, 38, 29, 0.05), 0 2px 6px -2px rgba(23, 38, 29, 0.07);
406
+ --shadow-well: inset 0 1px 2px rgba(23, 38, 29, 0.06);
407
+ --edge-highlight: 0 0 0 0 transparent;
378
408
  --accent-text: #285842;
379
409
  --accent-surface-soft: rgba(40, 88, 66, 0.05); --accent-surface-strong: rgba(40, 88, 66, 0.13);
380
410
  --accent-gradient-strong: linear-gradient(135deg, #1f4735, #336c52);
381
411
  --brand-primary: #3d7b5f; --brand-cool: #4f8c6c; --brand-glow: #6cac8a; --brand-vibrant: #3d7b5f;
382
412
  --btn-primary-bg: #285842; --btn-primary-hover: #336c52; --btn-primary-text: #ffffff;
383
- --text-primary: #17261d; --text-secondary: #36493e; --text-muted: #5a6c62; --text-dim: #5f6d65;
413
+ --text-primary: #17261d; --text-secondary: #36493e; --text-muted: #546158; --text-dim: #546158;
414
+ --surface-success-bg: #c5edce; --surface-success-text: #1e5b34; --surface-success-border: #91c79e;
415
+ --surface-warning-bg: #f4e3bf; --surface-warning-text: #804d0c; --surface-warning-border: #dcb87a;
416
+ --surface-danger-bg: #fadad8; --surface-danger-text: #a5292b; --surface-danger-border: #e8acaa;
417
+ --surface-neutral-bg: #e5e9e4; --surface-neutral-text: #576157; --surface-neutral-border: #c0c6bf;
384
418
  }
385
419
  .dark[data-theme="hospitality"] {
386
- --hsl-background: 150 8% 8.6%; --hsl-foreground: 140 12% 90.2%;
387
- --hsl-card: 150 6% 18.8%; --hsl-card-foreground: 140 12% 90.2%;
388
- --hsl-popover: 150 6% 20.8%; --hsl-popover-foreground: 140 12% 90.2%;
420
+ --hsl-background: 140 10.3% 5.7%; --hsl-foreground: 140 12% 90.2%;
421
+ --hsl-card: 132 5.3% 18.6%; --hsl-card-foreground: 140 12% 90.2%;
422
+ --hsl-popover: 130 3.9% 29.8%; --hsl-popover-foreground: 140 12% 90.2%;
389
423
  --hsl-primary: 145 31% 59%; --hsl-primary-foreground: 153 35% 10%;
390
- --hsl-secondary: 150 6% 20.8%; --hsl-secondary-foreground: 140 12% 90.2%;
391
- --hsl-muted: 150 6% 20.8%; --hsl-muted-foreground: 145 8% 71%;
392
- --hsl-accent: 150 6% 20.8%; --hsl-accent-foreground: 140 12% 90.2%;
393
- --hsl-border: 150 5% 29.8%; --hsl-input: 150 8% 12.2%;
424
+ --hsl-secondary: 130 4.6% 25.5%; --hsl-secondary-foreground: 140 12% 90.2%;
425
+ --hsl-muted: 130 4.6% 25.5%; --hsl-muted-foreground: 128 5.6% 73.9%;
426
+ --hsl-accent: 140 18% 20%; --hsl-accent-foreground: 140 12% 90.2%;
427
+ --hsl-border: 130 3.9% 29.8%; --hsl-input: 120 16.7% 2.4%;
394
428
  --hsl-ring: 145 31% 59%;
395
- --sidebar-background: 150 9% 6.3%; --sidebar-foreground: 140 12% 90.2%;
429
+ /* The canonical dark red (0 90% 77%) is 3.8:1 on this popover (L 42); the
430
+ * same red, lighter, clears 4.5:1 as text on every plane and on its 10% tint. */
431
+ --hsl-destructive: 0 80% 88%;
432
+ --hsl-raised: 130 4.6% 25.5%; --hsl-raised-2: 130 3.7% 31.8%;
433
+ --sidebar-background: 120 8% 9.8%; --sidebar-foreground: 140 12% 90.2%;
396
434
  --sidebar-primary: 145 31% 59%; --sidebar-primary-foreground: 153 35% 10%;
397
- --sidebar-accent: 150 6% 20.8%; --sidebar-accent-foreground: 140 12% 90.2%;
398
- --sidebar-border: 150 5% 29.8%; --sidebar-ring: 145 31% 59%;
399
- --md3-surface: #141816; --md3-surface-dim: #0f1210; --md3-surface-bright: #383e3b;
400
- --md3-surface-container-lowest: #0f1210; --md3-surface-container-low: #212624;
401
- --md3-surface-container: #2d3330; --md3-surface-container-high: #323835;
402
- --md3-surface-container-highest: #383e3b; --md3-surface-variant: #323835;
403
- --md3-on-surface: #e3e9e5; --md3-on-surface-variant: #afbbb4;
404
- --md3-outline: #8a938e; --md3-outline-variant: #48504c;
435
+ --sidebar-accent: 140 18% 20%; --sidebar-accent-foreground: 140 12% 90.2%;
436
+ --sidebar-border: 130 3.9% 29.8%; --sidebar-ring: 145 31% 59%;
437
+ --md3-surface: #0d100e; --md3-surface-dim: #050705; --md3-surface-bright: #494f4a;
438
+ --md3-surface-container-lowest: #050705; --md3-surface-container-low: #171b17;
439
+ --md3-surface-container: #2d322e; --md3-surface-container-high: #3e443f;
440
+ --md3-surface-container-highest: #494f4a; --md3-surface-variant: #3e443f;
441
+ --md3-on-surface: #e3e9e5; --md3-on-surface-variant: #b9c0ba;
442
+ --md3-outline: #8a938e; --md3-outline-variant: #494f4a;
405
443
  --md3-primary: #99caad; --md3-primary-dim: #396a52; --md3-primary-container: #396a52;
406
444
  --md3-on-primary: #11221a; --md3-surface-tint: #76b791;
407
- --depth-1: #141816; --depth-2: #2d3330; --depth-3: #323835; --depth-4: #383e3b;
408
- --bg-root: #141816; --bg-dark: #141816; --bg-section: #141816;
409
- --bg-card: #2d3330; --bg-elevated: #383e3b; --bg-input: #1d221f;
445
+ --depth-1: #0d100e; --depth-2: #2d322e; --depth-3: #3e443f; --depth-4: #494f4a;
446
+ --bg-root: #0d100e; --bg-dark: #0d100e; --bg-section: #0d100e;
447
+ --bg-card: #2d322e; --bg-elevated: #494f4a; --bg-input: #050705;
448
+ --well-page: #050705; --well-card: #050705; --well-raised: #181c18; --well-raised-2: #181c18;
410
449
  --bg-hover: rgba(118, 183, 145, 0.07); --bg-selection: rgba(118, 183, 145, 0.28);
411
450
  --border-subtle: rgba(227, 233, 229, 0.10); --border-default: rgba(227, 233, 229, 0.16);
412
- --border-hover: rgba(227, 233, 229, 0.28);
451
+ --border-hover: rgba(227, 233, 229, 0.28); --border-strong: #868f87;
452
+ --field-border: #868f87;
413
453
  --border-accent: rgba(118, 183, 145, 0.35); --border-accent-hover: rgba(118, 183, 145, 0.50);
414
- --accent-text: #99caad;
454
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.45), 0 10px 24px -14px rgba(0, 0, 0, 0.6);
455
+ --shadow-raised: 0 1px 2px rgba(0, 0, 0, 0.35);
456
+ --shadow-well: inset 0 1px 2px rgba(0, 0, 0, 0.5);
457
+ --edge-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.06);
458
+ /* Lifted from #99caad so selected text on a primary tint still clears 4.5:1
459
+ * over the lighter raised plane (L 37.9). */
460
+ --accent-text: #b2dbc2;
415
461
  --accent-surface-soft: rgba(118, 183, 145, 0.07); --accent-surface-strong: rgba(57, 106, 82, 0.40);
416
462
  --accent-gradient-strong: linear-gradient(135deg, #396a52, #76b791);
417
463
  --brand-primary: #529873; --brand-cool: #76b791; --brand-glow: #94c7a9; --brand-vibrant: #529873;
418
464
  --btn-primary-bg: #76b791; --btn-primary-hover: #8dc3a4; --btn-primary-text: #11221a;
419
- --text-primary: #e3e9e5; --text-secondary: #c5cec9; --text-muted: #afbbb4; --text-dim: #9ea9a2;
465
+ --text-primary: #e3e9e5; --text-secondary: #c5cec9; --text-muted: #b9c0ba; --text-dim: #b9c0ba;
466
+ --surface-success-bg: #254930; --surface-success-text: #9ce9b1; --surface-success-border: #437652;
467
+ --surface-warning-bg: #513d21; --surface-warning-text: #fed081; --surface-warning-border: #8d6b39;
468
+ --surface-danger-bg: #5c3231; --surface-danger-text: #f7b3b0; --surface-danger-border: #a45857;
469
+ --surface-neutral-bg: #3e443f; --surface-neutral-text: #b9c0ba; --surface-neutral-border: #5f6560;
420
470
  }
421
471
  /* agents:begin — generated by scripts/gen-ladders.mjs from its MAP; edit there, not these lines.
422
472
  * Agents (Agent Builder): white light pages, cards separated by shadow, and a
@@ -35,6 +35,7 @@ const tokens = readFileSync(
35
35
  // header (`:root, [data-sandbox-ui], [data-theme="dark"], .dark {`) — the same
36
36
  // trick tokens.test.ts uses.
37
37
  const CANON = blockIn(tokens, ".dark");
38
+ const CANON_LIGHT = blockIn(tokens, ".light");
38
39
 
39
40
  function block(selector: string): string {
40
41
  return blockIn(themes, selector);
@@ -445,11 +446,17 @@ describe('named theme: [data-theme="hospitality"]', () => {
445
446
  });
446
447
 
447
448
  it("never redefines what a status or category color means", () => {
449
+ // The success/warning/danger/neutral surface triples are retuned for the
450
+ // sage planes (surface-ladder.test.ts holds their hue and contrast), and the
451
+ // dark destructive red is lightened to read on the lighter popover; it stays
452
+ // red. The other status hues, info and every category stay canonical.
448
453
  for (const css of [light, dark]) {
449
454
  expect(css).not.toMatch(
450
- /--(hsl-)?(success|warning|destructive|info|error)\b|--surface-(success|warning|danger|info|neutral)-|--status-|--tone-|--run-mix-|--syntax-/,
455
+ /--(hsl-)?(success|warning|info|error)\b|--destructive|--hsl-destructive-foreground|--surface-info-|--status-|--tone-|--run-mix-|--syntax-/,
451
456
  );
457
+ expect(hslIn(css, "hsl-destructive").h, "destructive stays red").toBe(0);
452
458
  }
459
+ expect(declIn(light, "hsl-destructive")).toBe(declIn(CANON_LIGHT, "hsl-destructive"));
453
460
  });
454
461
 
455
462
  it("keeps the canonical ladder roles: paper cards on a tinted canvas in light, rising planes in dark", () => {