synabun 2.0.0-beta → 2.0.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 (70) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/THIRD-PARTY-LICENSES.md +5 -0
  3. package/launcher.mjs +40 -0
  4. package/lib/claude-hooks.js +61 -8
  5. package/lib/client-config-repair.js +4 -3
  6. package/lib/data-home-migration.js +4 -0
  7. package/lib/desktop-pwa.js +206 -0
  8. package/lib/external-tools.js +221 -0
  9. package/lib/first-launch-protection.js +5 -0
  10. package/lib/packaged-runtime.js +110 -0
  11. package/lib/start-launcher.js +1309 -0
  12. package/neural-interface/i18n/en.json +41 -2
  13. package/neural-interface/i18n/pt-BR.json +41 -2
  14. package/neural-interface/lib/assistant-envelope.js +9 -6
  15. package/neural-interface/lib/augmented-path.js +23 -3
  16. package/neural-interface/lib/browser-language.js +83 -0
  17. package/neural-interface/lib/claude-agent-bridge.js +54 -147
  18. package/neural-interface/lib/claude-executable.js +241 -0
  19. package/neural-interface/lib/claude-model-catalog.js +52 -91
  20. package/neural-interface/lib/native-binary-runtime.js +69 -337
  21. package/neural-interface/lib/native-loop-providers.js +30 -44
  22. package/neural-interface/lib/offline-page.js +54 -0
  23. package/neural-interface/lib/session-title-generator.js +5 -0
  24. package/neural-interface/lib/synabun-update-plan.js +19 -0
  25. package/neural-interface/package-lock.json +0 -251
  26. package/neural-interface/public/install-app.html +31 -0
  27. package/neural-interface/public/manifest.json +2 -0
  28. package/neural-interface/public/offline.html +401 -66
  29. package/neural-interface/public/onboarding.html +252 -146
  30. package/neural-interface/public/shared/assistant/asst-mascot.js +12 -10
  31. package/neural-interface/public/shared/assistant/asst-rack-styles.js +0 -3
  32. package/neural-interface/public/shared/assistant/asst-render.js +58 -49
  33. package/neural-interface/public/shared/assistant/asst-styles.js +4 -2
  34. package/neural-interface/public/shared/command-runner-model.js +30 -0
  35. package/neural-interface/public/shared/html-shell.js +9 -5
  36. package/neural-interface/public/shared/pwa-install-page.js +34 -0
  37. package/neural-interface/public/shared/pwa-install.css +12 -0
  38. package/neural-interface/public/shared/pwa-install.js +28 -0
  39. package/neural-interface/public/shared/settings/settings-rules.js +160 -0
  40. package/neural-interface/public/shared/start-bridge.js +583 -0
  41. package/neural-interface/public/shared/styleguide/sg-colors.js +5 -2
  42. package/neural-interface/public/shared/styleguide/sg-import-export.js +4 -3
  43. package/neural-interface/public/shared/styleguide/sg-kit.js +4 -1
  44. package/neural-interface/public/shared/styleguide/sg-panel.js +9 -1
  45. package/neural-interface/public/shared/styleguide/sg-typography.js +1 -0
  46. package/neural-interface/public/shared/styles.css +801 -392
  47. package/neural-interface/public/shared/term-ready.js +307 -0
  48. package/neural-interface/public/shared/ui-claude-panel.js +3 -3
  49. package/neural-interface/public/shared/ui-command-runner.js +251 -468
  50. package/neural-interface/public/shared/ui-judgments.js +1 -1
  51. package/neural-interface/public/shared/ui-loading.js +221 -10
  52. package/neural-interface/public/shared/ui-menubar.js +11 -27
  53. package/neural-interface/public/shared/ui-settings.js +36 -59
  54. package/neural-interface/public/shared/ui-terminal.js +130 -144
  55. package/neural-interface/public/sw.js +3 -1
  56. package/neural-interface/public/variant/2d/main.js +2 -1
  57. package/neural-interface/public/variant/3d/main.js +2 -1
  58. package/neural-interface/scripts/rebuild-pty.js +15 -12
  59. package/neural-interface/server.js +220 -185
  60. package/package.json +13 -1
  61. package/postinstall.js +11 -81
  62. package/setup.js +72 -4
  63. package/docs/browser-v2.md +0 -109
  64. package/docs/hook-integrity.md +0 -89
  65. package/docs/judgments.md +0 -182
  66. package/docs/style-guide.md +0 -246
  67. package/scripts/audit-claude-hook-usage.mjs +0 -12
  68. package/scripts/audit-memory-duplicates.mjs +0 -44
  69. package/scripts/measure-claude-hook-overhead.mjs +0 -77
  70. package/scripts/recover-user-config.mjs +0 -254
@@ -2197,6 +2197,9 @@
2197
2197
  gap: 0;
2198
2198
  }
2199
2199
 
2200
+ /* an entry the shell marks [hidden] stays out of the menu whatever else sets display */
2201
+ .menu-item[hidden] { display: none !important; }
2202
+
2200
2203
  .menu-item:hover,
2201
2204
  .menu-item.focused {
2202
2205
  background: rgba(255,255,255,0.06);
@@ -13483,7 +13486,9 @@
13483
13486
  a plain page head, and every section card drawn as a grouped inset list — the title above the box,
13484
13487
  rows inside it separated by hairlines, the label on the left and the control on the right.
13485
13488
  ═══════════════════════════════════════════ */
13486
- .settings-panel {
13489
+ .settings-panel,
13490
+ .command-runner-panel,
13491
+ .styleguide-panel {
13487
13492
  /* Text roles for the dark panel. Each clears WCAG AA (4.5:1) on the panel and inside a group. */
13488
13493
  --stg-text: rgba(255,255,255,0.92);
13489
13494
  --stg-body: rgba(255,255,255,0.84);
@@ -13516,7 +13521,9 @@
13516
13521
  }
13517
13522
  /* Perceptual lightness keeps white text readable on the fill whatever hue the user picks (a yellow accent too) */
13518
13523
  @supports (color: oklch(from red l c h)) {
13519
- .settings-panel {
13524
+ .settings-panel,
13525
+ .command-runner-panel,
13526
+ .styleguide-panel {
13520
13527
  --stg-accent-fill: oklch(from var(--accent-blue) 0.5 c h);
13521
13528
  --stg-accent-fill-hover: oklch(from var(--accent-blue) 0.55 c h);
13522
13529
  }
@@ -13914,17 +13921,25 @@
13914
13921
  (markup: the build*Tab functions in ui-settings.js, ui-judgments.js, ui-whatsapp.js)
13915
13922
  ═══════════════════════════════════════════ */
13916
13923
 
13917
- /* A pane's own save bar stays in view while its page scrolls.
13924
+ /* A pane's own save bar is the foot of the content column: it sits on the column's bottom edge while its page scrolls,
13925
+ and stays there when the page is shorter than the column.
13918
13926
  The page itself never scrolls (.settings-content does), so it must not be a scroll container for sticky. */
13919
13927
  .settings-panel .settings-content > .stg-page { overflow: visible; }
13928
+ /* A page with a save bar fills the column, and so does its pane: the bar takes the free space above it (margin-top: auto)
13929
+ instead of trailing the last section. The column gives up its bottom padding there, so the bar ends on the panel's edge. */
13930
+ .stg-main > .settings-content:has(> .stg-page.active > .stg-pane > .stg-pane-actions) { display: flex; flex-direction: column; padding-bottom: 0; }
13931
+ .settings-panel .settings-content > .stg-page.active:has(> .stg-pane > .stg-pane-actions),
13932
+ .settings-panel .settings-content > .stg-page.active > .stg-pane:has(> .stg-pane-actions) { display: flex; flex-direction: column; flex: 1 0 auto; }
13933
+ /* margins do not collapse in a flex column: the last section keeps the bar's 12px by itself */
13934
+ .settings-panel .settings-content > .stg-page > .stg-pane > :has(+ .stg-pane-actions) { margin-bottom: 12px; }
13920
13935
  /* One row: what the buttons do on the left, the result of the last save, then the buttons. It wraps when the panel is narrow.
13921
13936
  The background is opaque: rows scroll under the bar, and nothing may show through it. The shell tells the scroller how
13922
13937
  tall the bar is (scroll-padding-bottom), so a control that takes focus or a deep link never lands under it. */
13923
13938
  .settings-panel .stg-pane-actions {
13924
13939
  position: sticky; bottom: 0; z-index: 3;
13925
13940
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px;
13926
- margin-top: 12px; padding: 10px 14px;
13927
- background: #16161b; border: 1px solid var(--stg-line); border-radius: 10px 10px 0 0;
13941
+ margin-top: auto; padding: 10px 14px;
13942
+ background: #16161b; border: 1px solid var(--stg-line); border-bottom: 0; border-radius: 10px 10px 0 0;
13928
13943
  }
13929
13944
  .settings-panel .stg-pane-actions .bc-actions { order: 3; display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 0 auto; padding-top: 0; border-top: 0; }
13930
13945
  .settings-panel .stg-pane-actions .bc-action-btn { padding: 0 16px; }
@@ -13985,7 +14000,8 @@
13985
14000
  font-family: var(--ff-mono, monospace); font-size: 12px; line-height: 1.5;
13986
14001
  color: var(--stg-text); background: rgba(0,0,0,0.28); border: 1px solid var(--stg-line); border-radius: 6px;
13987
14002
  }
13988
- .settings-panel .stg-help a { color: var(--stg-focus); text-decoration: underline; }
14003
+ .settings-panel .stg-help a,
14004
+ .settings-panel .settings-hint a { color: var(--stg-focus); text-decoration: underline; }
13989
14005
 
13990
14006
  /* ── Tool access, social, YouTube ── */
13991
14007
  .settings-panel .stg-card .cc-tool-category:first-child { margin-top: 0; }
@@ -14124,9 +14140,6 @@
14124
14140
  .settings-panel .settings-content :is(.stg-provider-subname, .stg-provider-note) { font-size: 12px; }
14125
14141
  /* A field in an input row had its own, fainter focus style (a 2px glow at 8% and no outline): it takes the ring too. */
14126
14142
  .settings-panel .stg-inline-field .stg-input-row :is(input, select):focus-visible { outline: 2px solid var(--stg-focus); outline-offset: 2px; }
14127
- /* the save bar sticks above the page's bottom padding: this fills the strip under it (a little taller than the padding:
14128
- the scroll area clips the rest, and no line of text shows between the strip and the panel's edge) */
14129
- .settings-panel .stg-pane-actions::after { content: ''; position: absolute; left: -1px; right: -1px; top: 100%; height: 32px; background: inherit; pointer-events: none; }
14130
14143
  /* <<< settings-redesign:panes */
14131
14144
  /* ── Settings panel container queries — responsive at any panel width ── */
14132
14145
 
@@ -14813,7 +14826,9 @@
14813
14826
  Push button 22px · text-weight action · 22px fields and popups · 26×15 switch · 14px checkbox ·
14814
14827
  regular-weight row labels · lighter secondary text · no box inside a box.
14815
14828
  ═══════════════════════════════════════════ */
14816
- .settings-panel {
14829
+ .settings-panel,
14830
+ .command-runner-panel,
14831
+ .styleguide-panel {
14817
14832
  --stg-help: rgba(255,255,255,0.55);
14818
14833
  --stg-line: rgba(255,255,255,0.07);
14819
14834
  --stg-sep: rgba(255,255,255,0.06);
@@ -15358,7 +15373,8 @@
15358
15373
  @container stg (max-width: 480px) {
15359
15374
  .settings-panel .stg-action-row { flex-direction: row; flex-wrap: wrap; align-items: center; }
15360
15375
  .settings-panel .stg-action-btn { width: auto; }
15361
- .settings-panel .stg-pane-actions .bc-actions { flex: 0 1 auto; margin-left: auto; }
15376
+ /* two long labels (a translation) stack at the right instead of running past the bar's edge */
15377
+ .settings-panel .stg-pane-actions .bc-actions { flex: 0 1 auto; margin-left: auto; flex-wrap: wrap; justify-content: flex-end; }
15362
15378
  .settings-panel .stg-pane-actions .bc-action-btn { flex: 0 0 auto; min-height: 22px; height: 22px; padding: 0 10px; white-space: nowrap; }
15363
15379
  .settings-panel .ocp-history-clear-btn { width: auto; }
15364
15380
  }
@@ -15439,7 +15455,7 @@
15439
15455
  /* ═══════════════════════════════════════════
15440
15456
  SETTINGS — search
15441
15457
  (markup: buildSearchHTML in ui-settings.js · behaviour: wireSettingsSearch in settings/settings-shell.js)
15442
- The sidebar holds a 22px search field above the page list. While the field holds a query the page list
15458
+ The sidebar holds a 34px search field above the page list. While the field holds a query the page list
15443
15459
  gives way to the results: one row per hit, the page's icon tile, the setting's name and its path under it.
15444
15460
  The field is the provider search of AI connections at the small-control scale: same glyph, fill and hairline.
15445
15461
  Colours are the panel's --stg-* roles. Three literals are the page list's own, restated because a result row
@@ -15447,29 +15463,29 @@
15447
15463
  writes on the accent fill (.settings-nav-item.active), the white glyph of an icon tile (.settings-nav-item svg).
15448
15464
  ═══════════════════════════════════════════ */
15449
15465
  .settings-panel .stg-sidebar {
15450
- display: flex; flex-direction: column; flex-shrink: 0; width: 216px; min-height: 0;
15466
+ display: flex; flex-direction: column; flex-shrink: 0; width: 240px; min-height: 0;
15451
15467
  background: rgba(0,0,0,0.14); border-right: 1px solid var(--stg-line);
15452
15468
  }
15453
15469
  .settings-panel .stg-sidebar > .settings-nav { flex: 1 1 auto; width: auto; min-height: 0; padding-top: 2px; background: none; border-right: 0; }
15454
15470
  .settings-panel .stg-sidebar.stg-searching > .settings-nav { display: none; }
15455
15471
 
15456
- .settings-panel .stg-search { position: relative; flex-shrink: 0; padding: 10px 10px 6px; }
15472
+ .settings-panel .stg-search { position: relative; flex-shrink: 0; padding: 12px 12px 6px; }
15457
15473
  .settings-panel .stg-search-input {
15458
- display: block; width: 100%; height: 22px; min-height: 22px; box-sizing: border-box; margin: 0; padding: 0 22px 0 25px;
15459
- font-family: var(--stg-font); font-size: 12px; line-height: 20px; color: var(--stg-text);
15474
+ display: block; width: 100%; height: 34px; min-height: 34px; box-sizing: border-box; margin: 0; padding: 0 30px 0 36px;
15475
+ font-family: var(--stg-font); font-size: 13.5px; line-height: 32px; color: var(--stg-text);
15460
15476
  background: var(--stg-field-bg);
15461
- border: 1px solid var(--stg-field-line); border-radius: 5px; box-shadow: none;
15477
+ border: 1px solid var(--stg-field-line); border-radius: 9px; box-shadow: none;
15462
15478
  -webkit-appearance: none; appearance: none;
15463
15479
  }
15464
15480
  /* the magnifier: drawn in the colour of the placeholder it sits beside */
15465
15481
  .settings-panel .stg-search-glyph {
15466
- position: absolute; top: 15px; left: 17px; width: 12px; height: 12px; pointer-events: none;
15467
- color: var(--stg-help); fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round;
15482
+ position: absolute; top: 22px; left: 24px; width: 15px; height: 15px; pointer-events: none;
15483
+ color: var(--stg-help); fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round;
15468
15484
  }
15469
15485
  .settings-panel .stg-search-input::placeholder { color: var(--stg-help); opacity: 1; }
15470
- .settings-panel .stg-search-input:focus-visible { outline: 2px solid var(--stg-focus); outline-offset: 1px; border-radius: 5px; }
15486
+ .settings-panel .stg-search-input:focus-visible { outline: 2px solid var(--stg-focus); outline-offset: 1px; border-radius: 9px; }
15471
15487
  .settings-panel .stg-search-clear {
15472
- position: absolute; top: 10px; right: 12px; display: grid; place-items: center; width: 18px; height: 22px; padding: 0;
15488
+ position: absolute; top: 12px; right: 16px; display: grid; place-items: center; width: 22px; height: 34px; padding: 0;
15473
15489
  color: var(--stg-help); background: none; border: 0; border-radius: 4px; cursor: pointer;
15474
15490
  }
15475
15491
  .settings-panel .stg-search-clear svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; }
@@ -15514,18 +15530,63 @@
15514
15530
  }
15515
15531
 
15516
15532
  @container stg (max-width: 760px) {
15517
- .settings-panel .stg-sidebar { width: 196px; }
15533
+ .settings-panel .stg-sidebar { width: 212px; }
15518
15534
  }
15519
15535
  @container stg (max-width: 560px) {
15520
15536
  /* the field sits above the page picker; the results open under it and step aside once one is chosen */
15521
15537
  .settings-panel .stg-sidebar { width: auto; max-height: 60%; background: none; border-right: 0; }
15522
- .settings-panel .stg-search { padding: 8px 12px 0; }
15523
- .settings-panel .stg-search-glyph { top: 13px; left: 19px; }
15524
- .settings-panel .stg-search-clear { top: 8px; right: 14px; }
15538
+ .settings-panel .stg-search { padding: 10px 12px 0; }
15539
+ .settings-panel .stg-search-glyph { top: 20px; left: 24px; }
15540
+ .settings-panel .stg-search-clear { top: 10px; right: 16px; }
15525
15541
  .settings-panel .stg-search-results { padding: 6px 12px 8px; border-bottom: 1px solid var(--stg-line); }
15526
15542
  .settings-panel .stg-sidebar.stg-search-dismissed .stg-search-results { display: none; }
15527
15543
  }
15528
15544
  /* <<< settings-redesign:search */
15545
+ /* >>> settings-redesign:nav-polish */
15546
+ /* Sidebar rows: roomier, a 26px tile with a 15px glyph, and a calmer palette. Each tile is one hue pulled to the
15547
+ same lightness and a low chroma, lit from above with a soft gradient and a hairline edge, so the column reads
15548
+ as one set instead of a box of crayons. Loaded last, so it beats the 18px sizing above. */
15549
+ /* The search field: lifted off the sidebar with a lighter fill, a brighter edge and a soft shadow, so it reads as the
15550
+ first thing in the column; a focus ring in the focus colour replaces the plain outline. */
15551
+ .settings-panel .stg-search-input {
15552
+ background: rgba(255,255,255,0.07);
15553
+ border-color: rgba(255,255,255,0.18);
15554
+ box-shadow: 0 1px 2px rgba(0,0,0,0.28), inset 0 1px 0 rgba(255,255,255,0.05);
15555
+ transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
15556
+ }
15557
+ .settings-panel .stg-search-input:hover { background: rgba(255,255,255,0.09); border-color: rgba(255,255,255,0.26); }
15558
+ .settings-panel .stg-search-input:focus { background: rgba(255,255,255,0.1); border-color: var(--stg-focus); box-shadow: 0 0 0 3px color-mix(in srgb, var(--stg-focus) 28%, transparent); }
15559
+ .settings-panel .stg-search-input:focus-visible { outline: none; }
15560
+ .settings-panel .stg-search-input::placeholder { color: rgba(255,255,255,0.62); }
15561
+ .settings-panel .stg-search-glyph { color: rgba(255,255,255,0.7); }
15562
+ .settings-panel .settings-nav { gap: 2px; padding: 4px 12px 14px; }
15563
+ .settings-panel .stg-nav-group-label { padding: 12px 10px 4px; font-size: 11.5px; letter-spacing: 0.02em; }
15564
+ .settings-panel .stg-nav-group-label:first-child { padding-top: 4px; }
15565
+ .settings-panel .settings-nav-item { min-height: 33px; padding: 3px 10px 3px 7px; gap: 10px; font-size: 13.5px; border-radius: 8px; }
15566
+ .settings-panel .stg-nav-icon,
15567
+ .settings-panel .settings-nav-item:hover .stg-nav-icon,
15568
+ .settings-panel .settings-nav-item.active .stg-nav-icon {
15569
+ width: 26px; height: 26px; border-radius: 7.5px;
15570
+ background: linear-gradient(180deg, color-mix(in oklab, var(--stg-tile, #6b7078) 84%, #fff) 0%, var(--stg-tile, #6b7078) 100%);
15571
+ box-shadow: inset 0 0 0 0.5px rgba(255,255,255,0.22), inset 0 1px 0 rgba(255,255,255,0.18), 0 1px 2px rgba(0,0,0,0.3);
15572
+ }
15573
+ .settings-panel .settings-nav-item svg,
15574
+ .settings-panel .settings-nav-item:hover svg,
15575
+ .settings-panel .settings-nav-item.active svg { width: 16px; height: 16px; stroke: rgba(255,255,255,0.96); stroke-width: 1.8; }
15576
+ .settings-panel .stg-search-result .stg-nav-icon { width: 24px; height: 24px; border-radius: 7px; }
15577
+ .settings-panel .stg-search-result .stg-nav-icon svg { width: 13px; height: 13px; stroke-width: 1.9; }
15578
+ .settings-nav-item[data-tab="ai-connections"] { --stg-tile: #6168c9; }
15579
+ .settings-nav-item[data-tab="memory-backups"] { --stg-tile: #4079bd; }
15580
+ .settings-nav-item[data-tab="ai-decisions"] { --stg-tile: #8562bd; }
15581
+ .settings-nav-item[data-tab="projects"] { --stg-tile: #3a8f9b; }
15582
+ .settings-nav-item[data-tab="browser"] { --stg-tile: #c07b48; }
15583
+ .settings-nav-item[data-tab="connected-tools"] { --stg-tile: #9a7e60; }
15584
+ .settings-nav-item[data-tab="tool-access"] { --stg-tile: #b4607e; }
15585
+ .settings-nav-item[data-tab="automations"] { --stg-tile: #b4953f; }
15586
+ .settings-nav-item[data-tab="messages"] { --stg-tile: #4f9b63; }
15587
+ .settings-nav-item[data-tab="notifications"] { --stg-tile: #bd5a52; }
15588
+ .settings-nav-item[data-tab="appearance"] { --stg-tile: #6c717a; }
15589
+ /* <<< settings-redesign:nav-polish */
15529
15590
  .tag-add-input {
15530
15591
  font-size: var(--fs-sm);
15531
15592
  font-weight: 500;
@@ -17471,6 +17532,8 @@
17471
17532
  flex-direction: column;
17472
17533
  align-items: center;
17473
17534
  justify-content: center;
17535
+ padding: 0 16px;
17536
+ box-sizing: border-box;
17474
17537
  background: #000000;
17475
17538
  transition: opacity 0.8s;
17476
17539
  }
@@ -17543,12 +17606,71 @@
17543
17606
  cursor: wait;
17544
17607
  }
17545
17608
  #loading-action-btn svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; }
17609
+ /* A start under way: the sentence (what is known), the page's own clock, a
17610
+ quieter second sentence, then the steps the launcher reported with the
17611
+ time each one happened (ui-loading.js renderStart). */
17546
17612
  #loading-action-status {
17547
- margin-top: 10px;
17613
+ margin-top: 12px;
17614
+ max-width: 420px;
17615
+ margin-left: auto;
17616
+ margin-right: auto;
17617
+ font-size: 12px;
17618
+ line-height: 1.5;
17619
+ color: rgba(255,255,255,0.6);
17620
+ letter-spacing: 0.03em;
17621
+ }
17622
+ #loading-action-elapsed {
17623
+ margin-top: 4px;
17624
+ font-family: 'JetBrains Mono', monospace;
17548
17625
  font-size: 11px;
17626
+ font-variant-numeric: tabular-nums;
17627
+ color: rgba(255,255,255,0.45);
17628
+ }
17629
+ #loading-action-hint {
17630
+ margin-top: 4px;
17631
+ max-width: 420px;
17632
+ margin-left: auto;
17633
+ margin-right: auto;
17634
+ font-size: 11px;
17635
+ line-height: 1.5;
17549
17636
  color: rgba(255,255,255,0.25);
17550
17637
  letter-spacing: 0.05em;
17551
17638
  }
17639
+ #loading-action-trail {
17640
+ list-style: none;
17641
+ margin: 12px auto 0;
17642
+ padding: 0;
17643
+ max-width: 260px;
17644
+ font-size: 11px;
17645
+ line-height: 1.7;
17646
+ color: rgba(255,255,255,0.25);
17647
+ }
17648
+ #loading-action-trail li {
17649
+ display: flex;
17650
+ justify-content: space-between;
17651
+ gap: 12px;
17652
+ }
17653
+ #loading-action-trail .at {
17654
+ font-family: 'JetBrains Mono', monospace;
17655
+ font-variant-numeric: tabular-nums;
17656
+ color: rgba(255,255,255,0.45);
17657
+ }
17658
+ #loading-action-log {
17659
+ margin-top: 10px;
17660
+ max-width: 420px;
17661
+ margin-left: auto;
17662
+ margin-right: auto;
17663
+ font-family: 'JetBrains Mono', monospace;
17664
+ font-size: 10.5px;
17665
+ line-height: 1.5;
17666
+ color: rgba(255,255,255,0.25);
17667
+ overflow-wrap: anywhere;
17668
+ user-select: all;
17669
+ }
17670
+ #loading-action-elapsed:empty,
17671
+ #loading-action-hint:empty,
17672
+ #loading-action-trail:empty,
17673
+ #loading-action-log:empty { display: none; }
17552
17674
 
17553
17675
  /* Server offline — mascot + start command */
17554
17676
  #loading-mascot {
@@ -17558,6 +17680,15 @@
17558
17680
  animation: mascot-sleep 4s ease-in-out infinite;
17559
17681
  }
17560
17682
  #loading-overlay.server-offline #loading-mascot { display: block; }
17683
+ /* The rig (shared/synabun-mascot.js) draws in currentColor. Asleep, the bob
17684
+ and the z below carry it; in every other state the rig plays its own pose. */
17685
+ #loading-mascot .synabun-mascot { color: #ffffff; }
17686
+ #loading-mascot:is([data-state="waking"], [data-state="working"], [data-state="ready"], [data-state="failed"], [data-state="stalled"]) { animation: none; }
17687
+ #loading-mascot:is([data-state="waking"], [data-state="working"], [data-state="ready"], [data-state="failed"], [data-state="stalled"]) #loading-zzz { display: none; }
17688
+ @media (prefers-reduced-motion: reduce) {
17689
+ #loading-mascot, #loading-zzz { animation: none; }
17690
+ #loading-zzz { opacity: 0.3; }
17691
+ }
17561
17692
  @keyframes mascot-sleep {
17562
17693
  0%, 100% { transform: translateY(0); }
17563
17694
  50% { transform: translateY(-4px); }
@@ -25494,270 +25625,486 @@
25494
25625
 
25495
25626
 
25496
25627
  /* ═══════════════════════════════════════════
25497
- COMMAND RUNNER PANEL
25628
+ FLOATING WINDOW CHROME
25629
+ Shared roles reuse the workspace palette and user appearance settings.
25630
+ Terminal output stays opaque; glass is confined to its title bar.
25498
25631
  ═══════════════════════════════════════════ */
25499
-
25500
- /* ── Panel container ── */
25501
- .command-runner-panel {
25502
- position: fixed; z-index: 50100;
25503
- width: 420px; max-width: 90vw; min-width: 320px;
25504
- height: 500px; max-height: 85vh; min-height: 280px;
25505
- display: flex; flex-direction: column;
25506
- overflow: hidden;
25507
- opacity: 0; transform: scale(0.97);
25508
- transition: opacity 0.15s ease, transform 0.15s ease;
25509
- }
25510
- .command-runner-panel.open { opacity: 1; transform: scale(1); }
25511
-
25512
- /* ── Header ── */
25513
- .cr-header {
25514
- display: flex; align-items: center; gap: 10px;
25515
- padding: 10px 14px;
25516
- border-bottom: 1px solid var(--b-subtle);
25517
- flex-shrink: 0; user-select: none;
25518
- }
25519
- .cr-header-left {
25520
- display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0;
25521
- }
25522
- .cr-header-icon { display: flex; color: var(--t-muted); flex-shrink: 0; }
25523
- .cr-header h3 { margin: 0; font-family: var(--ff-heading); font-size: var(--fs-base); font-weight: 600; color: var(--t-bright); white-space: nowrap; letter-spacing: 0.02em; }
25524
- .cr-count {
25525
- font-size: 10px; color: var(--t-muted);
25526
- background: var(--s-light); padding: 2px 8px; border-radius: var(--r-pill);
25527
- font-weight: 500; letter-spacing: 0.02em;
25528
- border: 1px solid var(--b-subtle);
25529
- }
25530
- .cr-count:empty { display: none; }
25531
- .cr-header-actions { display: flex; gap: 6px; flex-shrink: 0; }
25532
- .cr-header-btn {
25533
- padding: 6px 14px; border-radius: var(--r-button);
25534
- font-size: var(--fs-xs); font-weight: 500;
25535
- background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1);
25536
- color: var(--t-secondary); cursor: pointer;
25537
- transition: all 0.15s ease;
25538
- letter-spacing: 0.01em;
25539
- }
25540
- .cr-header-btn:hover {
25541
- background: rgba(255,255,255,0.08);
25542
- color: var(--t-bright);
25543
- border-color: rgba(255,255,255,0.15);
25544
- }
25545
- .cr-header-btn.cr-primary {
25546
- background: rgba(110,181,255,0.1);
25547
- border-color: rgba(110,181,255,0.25);
25548
- color: #6eb5ff;
25549
- }
25550
- .cr-header-btn.cr-primary:hover {
25551
- background: rgba(110,181,255,0.18);
25552
- border-color: rgba(110,181,255,0.4);
25553
- }
25554
- .cr-close {
25555
- width: 28px; height: 28px; display: flex; align-items: center; justify-content: center;
25556
- color: var(--t-muted); background: none; border: none;
25557
- cursor: pointer; border-radius: var(--r-small); flex-shrink: 0;
25558
- transition: all 0.15s ease;
25559
- }
25560
- .cr-close:hover { background: var(--s-hover); color: var(--t-bright); }
25561
-
25562
- /* ── Body ── */
25563
- .cr-body {
25564
- flex: 1; overflow-y: auto; padding: 8px;
25565
- }
25566
- .cr-body::-webkit-scrollbar { width: 5px; }
25567
- .cr-body::-webkit-scrollbar-track { background: transparent; }
25568
- .cr-body::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.08); border-radius: 3px; }
25569
- .cr-body::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.15); }
25570
-
25571
- /* ── Empty state ── */
25572
- .cr-empty { text-align: center; padding: 48px 24px; color: var(--t-muted); }
25573
- .cr-empty-icon { margin-bottom: 12px; opacity: 0.3; }
25574
- .cr-empty-icon svg { width: 32px; height: 32px; }
25575
- .cr-empty p { margin: 4px 0; font-size: var(--fs-sm); line-height: 1.5; }
25576
- .cr-empty-hint { font-size: var(--fs-xs); color: var(--t-faint); }
25577
- .cr-empty-hint strong { color: var(--t-muted); }
25578
-
25579
- /* ── Category group ── */
25580
- .cr-category { margin-bottom: 2px; }
25581
- .cr-cat-header {
25582
- display: flex; align-items: center; gap: 6px;
25583
- padding: 8px 10px; border-radius: var(--r-small);
25584
- cursor: pointer; user-select: none;
25585
- transition: background 0.12s;
25586
- }
25587
- .cr-cat-header:hover { background: var(--s-hover); }
25588
- .cr-cat-chevron {
25589
- display: flex; align-items: center; justify-content: center;
25590
- width: 16px; height: 16px; flex-shrink: 0;
25591
- color: var(--t-muted);
25592
- transition: transform 0.15s ease;
25593
- }
25594
- .cr-category.collapsed .cr-cat-chevron { transform: rotate(0deg); }
25595
- .cr-category:not(.collapsed) .cr-cat-chevron { transform: rotate(90deg); }
25596
- .cr-cat-dot {
25597
- width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
25598
- }
25599
- .cr-cat-name {
25600
- flex: 1; min-width: 0;
25601
- font-size: var(--fs-sm); font-weight: 500; color: var(--t-bright);
25602
- white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
25632
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25633
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel, .styleguide-panel,
25634
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25635
+ .sp-sidepanel.sp-floating, .fe-editor-panel, .sched-prompt-modal, .term-picker-modal) {
25636
+ --fw-surface: var(--s-panel);
25637
+ --fw-text: var(--t-bright);
25638
+ --fw-secondary: var(--t-primary);
25639
+ --fw-muted: var(--t-primary);
25640
+ --fw-border: var(--b-visible);
25641
+ --fw-separator: var(--b-light);
25642
+ --fw-focus: var(--accent-blue);
25643
+ --fw-radius: calc(var(--glass-radius) * 1px);
25644
+ --fw-control-radius: var(--r-card);
25645
+ --fw-header-control-size: max(24px, calc(28px * var(--font-scale, 1)));
25646
+ --fw-header-min-height: calc(var(--fw-header-control-size) + 8px);
25647
+ --fw-shadow: var(--shadow-xl);
25648
+ --fw-header: linear-gradient(180deg, var(--s-light), var(--s-subtle));
25649
+ /* Dark on-primary role from the project Style Guide. */
25650
+ --fw-on-accent: #0e141c;
25651
+ }
25652
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25653
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel, .styleguide-panel,
25654
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25655
+ .sp-sidepanel.sp-floating, .sched-prompt-modal, .term-picker-modal):is(.glass, .term-float-tab, .sp-floating) {
25656
+ border: 1px solid var(--fw-border);
25657
+ border-radius: var(--fw-radius);
25658
+ box-shadow: var(--fw-shadow), var(--shadow-highlight);
25659
+ }
25660
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25661
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel, .styleguide-panel,
25662
+ .image-gallery-panel, .detail-card, .tw, .sched-prompt-modal, .term-picker-modal).glass {
25663
+ background: var(--fw-surface);
25664
+ }
25665
+ body .sp-sidepanel.sp-floating {
25666
+ background: var(--fw-surface);
25667
+ }
25668
+ body .fe-editor-panel {
25669
+ border-left-color: var(--fw-border);
25670
+ }
25671
+ /* Preserve the terminal's snap geometry and cheaper drag shadow. */
25672
+ body .term-float-tab.term-float-tab.float-dragging { box-shadow: 0 8px 24px rgba(0,0,0,0.45), 0 0 0 1px rgba(0,0,0,0.4); }
25673
+ body :is(.term-float-tab, .sp-sidepanel.sp-floating):is(:focus-within, .sp-window-focused) {
25674
+ border-color: var(--fw-focus);
25675
+ }
25676
+ body .term-float-tab.term-float-tab.snapped-r { border-top-right-radius: 0; border-bottom-right-radius: 0; border-right-color: transparent; }
25677
+ body .term-float-tab.term-float-tab.snapped-l { border-top-left-radius: 0; border-bottom-left-radius: 0; border-left-color: transparent; }
25678
+ body .term-float-tab.term-float-tab.snapped-t { border-top-left-radius: 0; border-top-right-radius: 0; border-top-color: transparent; }
25679
+ body .term-float-tab.term-float-tab.snapped-b { border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom-color: transparent; }
25680
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25681
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel, .styleguide-panel,
25682
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25683
+ .sp-sidepanel.sp-floating, .fe-editor-panel, .sched-prompt-modal, .term-picker-modal)
25684
+ > :is(.settings-panel-header, .ss-header, .as-header, .sched-header,
25685
+ .sm-header, .cr-header, .sg-header, .ig-header, .detail-header, .tw-header,
25686
+ .term-float-tab-header, .cp-header, .cxp-header, .ocpv2-header, .asp-header,
25687
+ .fe-editor-header, .sched-prompt-head, .term-picker-header) {
25688
+ min-height: var(--fw-header-min-height);
25689
+ height: auto;
25690
+ margin: 0;
25691
+ border-radius: 0;
25692
+ box-shadow: none;
25693
+ gap: 6px;
25694
+ padding: 4px 12px;
25695
+ flex-shrink: 0;
25696
+ border-bottom: 1px solid var(--fw-separator);
25697
+ background: var(--fw-header);
25698
+ color: var(--fw-text);
25699
+ }
25700
+ body .term-float-tab-header { flex-wrap: wrap; }
25701
+ /* The terminal title bar keeps its own palette tint: --fh / --fs are set per
25702
+ window by _applyFloatColor(), so a picked swatch recolors it at once. The
25703
+ doubled class outweighs the shared header rule above, whose :is() lists
25704
+ count as their heaviest entry (.sp-sidepanel.sp-floating). */
25705
+ body .term-float-tab.term-float-tab > .term-float-tab-header {
25706
+ background: linear-gradient(to bottom, hsla(var(--fh), calc(var(--fs) * 0.5), 16%, 0.60), hsla(var(--fh), calc(var(--fs) * 0.5), 13%, 0.65));
25603
25707
  }
25604
- .cr-cat-count {
25605
- font-size: 10px; color: var(--t-faint);
25606
- background: var(--s-subtle); padding: 1px 6px; border-radius: var(--r-pill);
25708
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25709
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel,
25710
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25711
+ .sp-sidepanel.sp-floating, .fe-editor-panel)
25712
+ > :is(.settings-panel-header, .ss-header, .as-header, .sched-header,
25713
+ .sm-header, .cr-header, .ig-header, .detail-header, .tw-header,
25714
+ .term-float-tab-header, .cp-header, .cxp-header, .ocpv2-header, .asp-header, .fe-editor-header)
25715
+ :is(h3, .ig-title, .detail-header-name, .term-float-tab-title) {
25716
+ font-family: var(--ff-heading);
25717
+ font-size: var(--fs-sm);
25607
25718
  font-weight: 500;
25608
- }
25609
- .cr-cat-actions {
25610
- display: flex; gap: 2px;
25611
- opacity: 0; transition: opacity 0.12s;
25612
- }
25613
- .cr-cat-header:hover .cr-cat-actions { opacity: 1; }
25614
- .cr-cat-body { padding-left: 4px; }
25615
- .cr-cat-empty {
25616
- padding: 6px 8px 6px 34px;
25617
- font-size: var(--fs-xs); color: var(--t-faint); font-style: italic;
25618
- }
25619
- .cr-category.collapsed .cr-cat-body { display: none; }
25620
-
25621
- /* ── Command row ── */
25622
- .cr-cmd {
25623
- display: flex; align-items: center; gap: 8px;
25624
- padding: 6px 8px 6px 22px;
25625
- border-radius: var(--r-small);
25626
- transition: background 0.12s;
25627
- }
25628
- .cr-cmd:hover { background: var(--s-hover); }
25629
- .cr-run-btn {
25630
- width: 28px; height: 28px; flex-shrink: 0;
25631
- display: flex; align-items: center; justify-content: center;
25632
- background: rgba(255,255,255,0.04); border: 1px solid var(--b-subtle);
25633
- border-radius: var(--r-small); cursor: pointer;
25634
- color: var(--t-muted); transition: all 0.15s;
25635
- }
25636
- .cr-run-btn:hover {
25637
- color: #6dd58c; background: rgba(109,213,140,0.1);
25638
- border-color: rgba(109,213,140,0.3);
25639
- }
25640
- .cr-run-btn:active {
25641
- background: rgba(109,213,140,0.18);
25642
- }
25643
- .cr-cmd-info { flex: 1; min-width: 0; }
25644
- .cr-cmd-name {
25645
- font-size: var(--fs-sm); color: var(--t-bright); font-weight: 500;
25646
- white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
25647
- }
25648
- .cr-cmd-text {
25649
- font-size: 11px; color: var(--t-muted);
25650
- font-family: 'JetBrains Mono', monospace;
25651
- white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
25652
- margin-top: 1px;
25653
- }
25654
- .cr-cmd-cwd {
25655
- font-size: 10px; color: var(--t-faint);
25656
- font-family: 'JetBrains Mono', monospace;
25657
- white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
25658
- margin-top: 1px;
25659
- }
25660
- .cr-cmd-actions {
25661
- display: flex; gap: 2px;
25662
- opacity: 0; transition: opacity 0.12s;
25663
- }
25664
- .cr-cmd:hover .cr-cmd-actions { opacity: 1; }
25665
-
25666
- /* ── Icon buttons (edit/delete) ── */
25667
- .cr-icon-btn {
25668
- width: 24px; height: 24px;
25669
- display: flex; align-items: center; justify-content: center;
25670
- background: none; border: none;
25671
- color: var(--t-muted); cursor: pointer;
25672
- border-radius: var(--r-small);
25673
- transition: all 0.12s;
25674
- }
25675
- .cr-icon-btn:hover { background: var(--s-hover); color: var(--t-bright); }
25676
- .cr-icon-btn--danger:hover { color: #f87171; background: rgba(248,113,113,0.1); }
25677
-
25678
- /* ── Inline modal ── */
25679
- .cr-modal-overlay {
25680
- position: absolute; inset: 0; z-index: 10;
25681
- background: rgba(0,0,0,0.45);
25682
- display: flex; align-items: center; justify-content: center;
25683
- backdrop-filter: blur(2px);
25684
- }
25685
- .cr-modal-overlay.hidden { display: none; }
25686
- .cr-modal {
25687
- width: 340px; max-width: 92%;
25688
- border-radius: 12px;
25719
+ letter-spacing: 0;
25720
+ text-transform: none;
25721
+ line-height: 1.4;
25722
+ color: var(--fw-text);
25723
+ min-width: 0;
25689
25724
  overflow: hidden;
25725
+ text-overflow: ellipsis;
25690
25726
  }
25691
- .cr-modal-header {
25692
- display: flex; align-items: center; justify-content: space-between;
25693
- padding: 12px 16px; border-bottom: 1px solid var(--b-subtle);
25694
- }
25695
- .cr-modal-header h4 {
25696
- margin: 0; font-size: var(--fs-sm); font-weight: 600; color: var(--t-bright);
25697
- }
25698
- .cr-modal-body { padding: 14px 16px; }
25699
- .cr-modal-footer {
25700
- display: flex; justify-content: flex-end; gap: 8px;
25701
- padding: 10px 16px; border-top: 1px solid var(--b-subtle);
25702
- }
25703
-
25704
- /* ── Form elements ── */
25705
- .cr-form-label {
25706
- display: block;
25707
- font-size: var(--fs-xs); color: var(--t-secondary);
25708
- margin-bottom: 4px; font-weight: 500;
25709
- }
25710
- .cr-form-hint { color: var(--t-faint); font-weight: 400; }
25711
- .cr-form-input {
25712
- width: 100%; box-sizing: border-box;
25713
- padding: 7px 10px; border-radius: var(--r-small);
25714
- font-size: var(--fs-sm); color: var(--t-bright);
25715
- background: rgba(255,255,255,0.04); border: 1px solid var(--b-light);
25716
- outline: none;
25717
- transition: border-color 0.15s;
25718
- }
25719
- .cr-form-input:focus { border-color: rgba(110,181,255,0.4); }
25720
- .cr-form-input::placeholder { color: var(--t-faint); }
25721
- .cr-form-mono { font-family: 'JetBrains Mono', monospace; font-size: 12px; }
25722
- .cr-form-select {
25723
- appearance: none;
25724
- background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='rgba(255,255,255,0.4)' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
25725
- background-repeat: no-repeat;
25726
- background-position: right 10px center;
25727
- padding-right: 28px;
25727
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25728
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel,
25729
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25730
+ .sp-sidepanel.sp-floating, .fe-editor-panel)
25731
+ > :is(.settings-panel-header, .ss-header, .as-header, .sched-header,
25732
+ .sm-header, .cr-header, .ig-header, .detail-header, .tw-header,
25733
+ .term-float-tab-header, .cp-header, .cxp-header, .ocpv2-header, .asp-header, .fe-editor-header)
25734
+ :is(.settings-panel-close, .backdrop-toggle-btn, .pin-btn, .ss-close,
25735
+ .ss-header-btn, .as-close, .as-header-btn, .sched-close, .sched-header-btn,
25736
+ .sm-close, .sm-header-btn, .cr-close, .ig-btn, .detail-action-btn, .tw-close,
25737
+ .tw-header-btn, .term-float-tab-btn, .cp-header-btn, .cxp-header-btn,
25738
+ .ocpv2-header-btn, .asp-header-btn, .cp-session-btn, .cp-header-rename-btn,
25739
+ .cxp-btn, .cxp-session-btn, .cxp-header-rename, .ocpv2-btn, .ocpv2-session-btn,
25740
+ .ocpv2-header-rename, .asp-btn, .asp-tabs-btn, .sp-window-toggle, .sp-window-move,
25741
+ .fe-editor-back, .fe-editor-action, .fe-editor-btn) {
25742
+ min-width: var(--fw-header-control-size);
25743
+ min-height: var(--fw-header-control-size);
25744
+ height: auto;
25745
+ padding: 4px 6px;
25746
+ flex-shrink: 0;
25747
+ border-radius: var(--fw-control-radius);
25748
+ color: var(--fw-secondary);
25749
+ transition: color 150ms ease, background-color 150ms ease, border-color 150ms ease;
25750
+ }
25751
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25752
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel,
25753
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25754
+ .sp-sidepanel.sp-floating, .fe-editor-panel)
25755
+ > :is(.settings-panel-header, .ss-header, .as-header, .sched-header,
25756
+ .sm-header, .cr-header, .ig-header, .detail-header, .tw-header,
25757
+ .term-float-tab-header, .cp-header, .cxp-header, .ocpv2-header, .asp-header, .fe-editor-header)
25758
+ :is(.settings-panel-close, .backdrop-toggle-btn, .pin-btn, .ss-close,
25759
+ .ss-header-btn, .as-close, .as-header-btn, .sched-close, .sched-header-btn,
25760
+ .sm-close, .sm-header-btn, .cr-close, .ig-btn, .detail-action-btn, .tw-close,
25761
+ .tw-header-btn, .term-float-tab-btn, .cp-header-btn, .cxp-header-btn,
25762
+ .ocpv2-header-btn, .asp-header-btn, .cp-session-btn, .cp-header-rename-btn,
25763
+ .cxp-btn, .cxp-session-btn, .cxp-header-rename, .ocpv2-btn, .ocpv2-session-btn,
25764
+ .ocpv2-header-rename, .asp-btn, .asp-tabs-btn, .sp-window-toggle, .sp-window-move,
25765
+ .fe-editor-back, .fe-editor-action, .fe-editor-btn):hover:not(:disabled) {
25766
+ background-color: var(--s-hover);
25767
+ color: var(--fw-text);
25768
+ }
25769
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25770
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel,
25771
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25772
+ .sp-sidepanel.sp-floating, .fe-editor-panel)
25773
+ :is(button, a, input, select, textarea, [tabindex]):focus-visible {
25774
+ outline: 2px solid var(--fw-focus);
25775
+ outline-offset: 2px;
25728
25776
  }
25729
- .cr-form-select option { background: #1c1c1e; color: var(--t-bright); }
25730
-
25731
- /* ── Color picker ── */
25732
- .cr-color-picker { display: flex; flex-wrap: wrap; gap: 6px; }
25733
- .cr-color-swatch {
25734
- width: 22px; height: 22px; border-radius: 50%;
25735
- cursor: pointer; border: 2px solid transparent;
25736
- transition: border-color 0.12s, transform 0.12s;
25777
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25778
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel,
25779
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab, .sp-sidepanel.sp-floating)
25780
+ > :is(.settings-panel-header, .ss-header, .as-header, .sched-header,
25781
+ .sm-header, .cr-header, .ig-header, .detail-header, .tw-header,
25782
+ .term-float-tab-header, .cp-header, .cxp-header, .ocpv2-header, .asp-header)
25783
+ :is(.settings-panel-close, .ss-close, .as-close, .sched-close, .sm-close,
25784
+ .cr-close, .tw-close, .close-btn, .cp-close-btn, .cxp-btn-danger,
25785
+ .ocpv2-btn-danger, .asp-close, .detail-action-btn--danger):hover:not(:disabled) {
25786
+ color: var(--accent-red);
25787
+ background-color: var(--accent-red-bg);
25788
+ }
25789
+ body .fe-editor-header :is(.fe-editor-action, .fe-editor-back) svg { stroke: currentColor; }
25790
+ body .term-float-tab.pinned .term-float-tab-header .pin-btn,
25791
+ body .fe-editor-header .fe-editor-action.active,
25792
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25793
+ .schedules-studio-panel, .session-monitor-panel, .image-gallery-panel, .tw)
25794
+ > :is(.settings-panel-header, .ss-header, .as-header, .sched-header, .sm-header, .ig-header, .tw-header)
25795
+ :is(.backdrop-toggle-btn.active, .pin-btn.active) {
25796
+ color: var(--fw-focus);
25797
+ background-color: var(--accent-blue-bg);
25798
+ }
25799
+ body .fe-editor-header .fe-editor-action.active svg { stroke: var(--fw-focus); }
25800
+ body .term-float-tab-header .term-float-color-strip {
25801
+ width: var(--fw-header-control-size); height: var(--fw-header-control-size);
25802
+ min-width: var(--fw-header-control-size); min-height: var(--fw-header-control-size);
25803
+ border: 0; padding: calc((var(--fw-header-control-size) - 14px) / 2);
25804
+ background-clip: content-box;
25805
+ }
25806
+ /* Keep terminal and compact memory-card chrome smaller than full dialogs. */
25807
+ body .term-float-tab.term-float-tab,
25808
+ body .detail-card.compact { --fw-header-control-size: max(24px, calc(24px * var(--font-scale, 1))); }
25809
+ body .term-float-tab.term-float-tab > .term-float-tab-header { padding: 3px 8px; }
25810
+ body .detail-card.detail-card > .detail-header .detail-header-name,
25811
+ body .term-float-tab.term-float-tab > .term-float-tab-header .term-float-tab-title { font-size: var(--fs-xs); }
25812
+ body :is(.sched-header-icon, .sm-header-icon, .ig-icon),
25813
+ body :is(.sched-header-icon, .sm-header-icon, .ig-icon) svg { width: 16px; height: 16px; }
25814
+ body .sp-sidepanel.sp-floating > :is(.cp-header, .cxp-header, .ocpv2-header, .asp-header) { flex-wrap: wrap; }
25815
+
25816
+ body .term-float-tab-title { flex: 1 1 100px; }
25817
+ body .term-float-tab-actions { flex-wrap: wrap; max-width: 100%; }
25818
+ body .detail-header-actions { flex-wrap: wrap; }
25819
+ body .detail-card.compact > .detail-header { padding: 2px 8px; }
25820
+ body :is(.ss-header-actions, .as-header-actions, .sched-header-actions, .tw-header-actions,
25821
+ .sm-header-actions, .ig-header-right) { flex-wrap: wrap; max-width: 100%; gap: 4px; }
25822
+ body :is(.ss-header-left, .as-header-left, .sched-header-left, .tw-header-left,
25823
+ .sm-header-left, .ig-header-left, .cr-header-left) { flex-wrap: wrap; gap: 6px; }
25824
+ body :is(.ss-header, .as-header, .sched-header, .tw-header, .fe-editor-header,
25825
+ .sm-header, .ig-header, .cr-header) { flex-wrap: wrap; }
25826
+ body :is(.ss-header, .as-header, .sched-header, .tw-header, .fe-editor-header,
25827
+ .ss-editor-header, .as-detail-header, .as-picker-header, .as-wizard-header, .as-launch-inline-header)
25828
+ :is(.ss-header-btn, .as-header-btn, .sched-header-btn, .tw-header-btn, .fe-editor-btn) {
25829
+ max-width: 100%; white-space: normal; overflow-wrap: anywhere;
25830
+ }
25831
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25832
+ .schedules-studio-panel, .session-monitor-panel, .image-gallery-panel, .tw) {
25833
+ min-width: min(320px, calc(100vw - 16px));
25834
+ max-width: calc(100vw - 16px);
25835
+ }
25836
+ body :is(.settings-panel, .tw) > :is(.resize-handle-t, .resize-handle-tl, .resize-handle-tr) {
25837
+ top: calc(var(--fw-header-min-height) + 1px);
25838
+ }
25839
+
25840
+ /* Inner editor/dialog title rows, never ordinary section or content headings.
25841
+ Override the older narrow-container padding without fixing their height. */
25842
+ body :is(.ss-editor-header, .as-detail-header, .as-picker-header, .as-wizard-header,
25843
+ .as-launch-inline-header, .as-unsaved-dialog-header, .cat-change-modal-header, .ecm-header) {
25844
+ padding-block: 4px;
25845
+ }
25846
+ body :is(.ss-editor-header, .as-detail-header, .as-picker-header, .as-wizard-header,
25847
+ .as-launch-inline-header, .cat-change-modal-header) { flex-wrap: wrap; gap: 6px 8px; }
25848
+ body :is(.ss-editor-header, .as-detail-header, .as-picker-header, .as-wizard-header,
25849
+ .as-launch-inline-header, .as-unsaved-dialog-header) > button { min-height: 24px; flex-shrink: 0; }
25850
+ body :is(.ss-editor-name, .as-detail-name, .as-wizard-title, .awiz-preset-name, .cat-change-modal-title) {
25851
+ min-width: 0; max-width: 100%; font-weight: 500; white-space: normal; overflow-wrap: anywhere;
25852
+ }
25853
+ body :is(.ecm-title, .as-unsaved-dialog-title, .as-launch-inline-title) { min-width: 0; overflow-wrap: anywhere; }
25854
+ body :is(.ecm-close, .awiz-close, .as-launch-dialog-close) { flex-shrink: 0; }
25855
+ body .as-unsaved-dialog-header { gap: 8px; }
25856
+ body .cat-change-modal-from { min-width: 0; max-width: 100%; flex-wrap: wrap; }
25857
+ body .cat-change-from-badge { min-width: 0; max-width: 100%; overflow-wrap: anywhere; }
25858
+ body .awiz-header { padding: 4px 16px; }
25859
+ body .awiz-preset-name, body .cat-change-modal-title { font-size: var(--fs-sm); }
25860
+ body .awiz-preset-icon { font-size: var(--fs-lg); }
25861
+ body .awiz-dots { margin-top: 4px; }
25862
+ body .sched-prompt-head h3 { font-size: var(--fs-sm); font-weight: 500; line-height: 1.4; overflow-wrap: anywhere; }
25863
+ body .sched-prompt-head-text { gap: 8px; }
25864
+ body .sched-prompt-head-text > div { min-width: 0; overflow-wrap: anywhere; }
25865
+ body .sched-prompt-icon { width: 24px; height: 24px; }
25866
+
25867
+ /* Desktop density must not reduce the existing touch targets. */
25868
+ @media (pointer: coarse) {
25869
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
25870
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel, .styleguide-panel,
25871
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab,
25872
+ .sp-sidepanel.sp-floating, .fe-editor-panel, .sched-prompt-modal, .term-picker-modal) {
25873
+ --fw-header-control-size: max(44px, calc(28px * var(--font-scale, 1)));
25874
+ }
25875
+ body :is(.ss-editor-header, .as-detail-header, .as-picker-header, .as-wizard-header,
25876
+ .as-launch-inline-header, .as-unsaved-dialog-header) > button,
25877
+ body :is(.ecm-close, .awiz-close, .sched-prompt-close),
25878
+ body .as-header .as-sidebar-toggle,
25879
+ body .term-float-tab-header :is(.term-float-profile-btn, .term-float-recall-btn) { min-width: 44px; min-height: 44px; }
25737
25880
  }
25738
- .cr-color-swatch:hover { transform: scale(1.15); }
25739
- .cr-color-swatch.selected { border-color: var(--t-bright); }
25740
25881
 
25741
- /* ── Modal buttons ── */
25742
- .cr-modal-btn {
25743
- padding: 6px 16px; border-radius: var(--r-button);
25744
- font-size: var(--fs-xs); font-weight: 500;
25745
- background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1);
25746
- color: var(--t-secondary); cursor: pointer;
25747
- transition: all 0.15s;
25882
+ /* ═══════════════════════════════════════════
25883
+ COMMAND RUNNER — Settings typography, grouped rows and compact controls
25884
+ Uses the shared Settings roles above; shell/glass preferences stay shared.
25885
+ ═══════════════════════════════════════════ */
25886
+ .command-runner-panel {
25887
+ position: fixed; z-index: 50100;
25888
+ width: 720px; max-width: calc(100vw - 16px); min-width: min(320px, calc(100vw - 16px));
25889
+ height: 680px; max-height: calc(100dvh - var(--navbar-height, 48px) - 16px);
25890
+ min-height: min(360px, calc(100dvh - var(--navbar-height, 48px) - 16px));
25891
+ display: flex; flex-direction: column; overflow: hidden;
25892
+ container-type: inline-size; container-name: cr;
25893
+ opacity: 0; transform: scale(.97);
25894
+ transition: opacity 150ms ease, transform 150ms ease;
25895
+ color: var(--stg-text); font-family: var(--stg-font); font-size: var(--fs-sm);
25896
+ --cr-control-radius: var(--radius-control, 5px);
25897
+ --cr-group-radius: var(--radius-group, 9px);
25898
+ --cr-control-height: calc(22px * var(--font-scale, 1));
25899
+ --cr-search-height: calc(34px * var(--font-scale, 1));
25900
+ }
25901
+ body .command-runner-panel {
25902
+ --fw-focus: var(--stg-focus);
25903
+ /* Preserve readable secondary content across user-selected glass backgrounds. */
25904
+ --stg-help: var(--t-primary);
25748
25905
  }
25749
- .cr-modal-btn:hover { background: rgba(255,255,255,0.08); color: var(--t-bright); }
25750
- .cr-modal-btn--primary {
25751
- background: rgba(110,181,255,0.12);
25752
- border-color: rgba(110,181,255,0.3);
25753
- color: #6eb5ff;
25906
+ .command-runner-panel.open { opacity: 1; transform: scale(1); }
25907
+ .command-runner-panel.dragging { transition: none; }
25908
+ .cr-header { display: flex; align-items: center; user-select: none; }
25909
+ .cr-header-left { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
25910
+ .cr-header h3 { margin: 0; white-space: nowrap; }
25911
+ .cr-count { font-size: var(--fs-xs); font-variant-numeric: tabular-nums; color: var(--stg-help); }
25912
+ .cr-close, .cr-icon-btn {
25913
+ display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0;
25914
+ width: var(--cr-control-height); height: var(--cr-control-height); padding: 0; border: 0; border-radius: var(--cr-control-radius);
25915
+ color: var(--stg-help); background: transparent; cursor: pointer;
25916
+ transition: color 150ms ease, background-color 150ms ease;
25917
+ }
25918
+ .cr-close { margin-inline-start: auto; }
25919
+ .cr-icon-btn svg { width: 12px; height: 12px; }
25920
+ .cr-icon-btn:hover:not(:disabled) { color: var(--stg-text); background: var(--stg-control-hover); }
25921
+ .cr-icon-btn--danger:hover:not(:disabled) { color: var(--stg-err); }
25922
+ .cr-main { flex: 1; min-height: 0; display: flex; flex-direction: column; }
25923
+ .cr-library-head {
25924
+ display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap;
25925
+ gap: 12px; padding: 20px 22px 16px; flex-shrink: 0;
25926
+ }
25927
+ .cr-library-head > div { flex: 1 1 180px; min-width: 0; }
25928
+ .cr-library-head h2 {
25929
+ margin: 0; font-family: var(--stg-font); font-size: calc(20px * var(--font-scale, 1));
25930
+ font-weight: 600; line-height: 1.25; letter-spacing: 0; color: var(--stg-text); overflow-wrap: anywhere;
25931
+ }
25932
+ .cr-library-head p { margin-top: 2px; color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; max-width: 68ch; }
25933
+ .cr-button, .cr-run-btn {
25934
+ display: inline-flex; align-items: center; justify-content: center; gap: 4px; flex-shrink: 0;
25935
+ min-height: var(--cr-control-height); max-width: 100%; padding: 2px 10px;
25936
+ border: 1px solid var(--stg-field-line); border-radius: var(--cr-control-radius); box-shadow: none;
25937
+ color: var(--stg-text); background: var(--stg-control); cursor: pointer;
25938
+ font-family: var(--stg-font); font-size: var(--fs-xs); font-weight: 500; line-height: 1.2;
25939
+ transition: background-color 150ms ease, color 150ms ease;
25940
+ }
25941
+ .cr-button svg, .cr-run-btn svg { width: 12px; height: 12px; flex-shrink: 0; }
25942
+ .cr-button:hover:not(:disabled), .cr-run-btn:hover:not(:disabled) { background: var(--stg-control-hover); }
25943
+ .cr-primary { color: #fff; background: var(--stg-accent-fill); border-color: transparent; }
25944
+ .cr-primary:hover:not(:disabled) { background: var(--stg-accent-fill-hover); }
25945
+ .cr-toolbar { display: flex; align-items: center; gap: 8px; padding: 0 22px 8px; flex-shrink: 0; }
25946
+ .cr-search-wrap {
25947
+ display: flex; align-items: center; flex: 1; min-width: 0; gap: 8px;
25948
+ height: var(--cr-search-height); padding: 0 10px; border: 1px solid var(--stg-field-line);
25949
+ background: var(--stg-control); border-radius: var(--cr-group-radius); color: var(--stg-help);
25950
+ }
25951
+ .cr-search-wrap > svg { flex-shrink: 0; width: 15px; height: 15px; }
25952
+ .cr-search-wrap:has(input:focus-visible) { outline: 2px solid var(--stg-focus); outline-offset: 2px; }
25953
+ body .command-runner-panel #cr-search:focus-visible { outline: none; }
25954
+ .cr-search-wrap input {
25955
+ width: 100%; min-width: 0; height: 100%; padding: 0; border: 0; background: transparent;
25956
+ color: var(--stg-text); font-family: var(--stg-font); font-size: var(--fs-sm); outline: 0;
25957
+ }
25958
+ .cr-search-wrap input::placeholder { color: var(--stg-help); opacity: 1; }
25959
+ .cr-search-wrap input::-webkit-search-cancel-button { display: none; }
25960
+ .cr-search-wrap .cr-icon-btn { margin-inline-end: -4px; }
25961
+ .cr-search-wrap kbd { flex-shrink: 0; font-family: var(--stg-mono); font-size: var(--fs-xs); color: var(--stg-help); }
25962
+ .cr-sort, select.cr-form-input {
25963
+ appearance: none; -webkit-appearance: none; color-scheme: dark; cursor: pointer;
25964
+ min-width: 110px; min-height: var(--cr-control-height); height: var(--cr-control-height); padding: 0 22px 0 8px;
25965
+ border: 1px solid var(--stg-field-line); border-radius: var(--cr-control-radius);
25966
+ color: var(--stg-text); background-color: var(--stg-control);
25967
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 12'%3E%3Cpath d='M1.2 4.4 4 1.6l2.8 2.8M1.2 7.6 4 10.4l2.8-2.8' fill='none' stroke='%23a1a1a6' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
25968
+ background-repeat: no-repeat; background-position: right 7px center; background-size: 7px 10px;
25969
+ font-family: var(--stg-font); font-size: var(--fs-xs); line-height: calc(20px * var(--font-scale, 1));
25970
+ }
25971
+ .cr-sort { max-width: 144px; }
25972
+ .cr-sort option, select.cr-form-input option { color: inherit; }
25973
+ .cr-filter-bar { display: flex; align-items: center; gap: 8px; padding: 0 22px 8px; flex-shrink: 0; }
25974
+ .cr-filters {
25975
+ display: flex; flex: 1; min-width: 0; gap: 2px; overflow-x: auto; padding: 4px;
25976
+ scrollbar-width: thin; scrollbar-color: var(--b-hover) transparent;
25977
+ }
25978
+ .cr-filter {
25979
+ display: inline-flex; align-items: center; gap: 6px; min-height: var(--cr-control-height); max-width: 240px;
25980
+ padding: 2px 8px; flex-shrink: 0; border: 0; border-radius: var(--cr-control-radius);
25981
+ font-family: var(--stg-font); font-size: var(--fs-xs); line-height: 1.35;
25982
+ color: var(--stg-help); background: transparent; cursor: pointer; white-space: nowrap;
25983
+ }
25984
+ .cr-filter > span:not(.cr-cat-dot, .cr-filter-count) { overflow: hidden; text-overflow: ellipsis; }
25985
+ .cr-filter:hover { color: var(--stg-text); background: var(--stg-control); }
25986
+ .cr-filter.active { color: var(--stg-text); background: var(--stg-control-hover); }
25987
+ .cr-filter-count { color: var(--stg-help); font-variant-numeric: tabular-nums; }
25988
+ .cr-new-group { color: var(--stg-link); background: transparent; border-color: transparent; padding-inline: 4px; font-weight: 400; }
25989
+ .cr-new-group:hover:not(:disabled) { color: var(--accent-blue); background: transparent; }
25990
+ .cr-body { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 4px 22px 28px; scrollbar-gutter: stable; }
25991
+ .cr-category { min-width: 0; background: var(--stg-group); border: 1px solid var(--stg-line); border-radius: var(--cr-group-radius); }
25992
+ .cr-category + .cr-category { margin-top: 8px; }
25993
+ .cr-cat-header { display: flex; align-items: center; gap: 8px; padding: 7px 12px 7px var(--stg-row-x); }
25994
+ .cr-cat-toggle {
25995
+ display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; min-height: var(--cr-control-height);
25996
+ padding: 0; border: 0; border-radius: var(--cr-control-radius);
25997
+ background: transparent; color: var(--stg-text); text-align: start; font-family: var(--stg-font); cursor: pointer;
25998
+ }
25999
+ .cr-cat-toggle:hover { color: var(--stg-body); }
26000
+ .cr-cat-chevron { display: flex; color: var(--stg-help); transform: rotate(90deg); transition: transform 150ms ease; }
26001
+ .cr-cat-chevron svg { width: 10px; height: 10px; }
26002
+ .cr-category.collapsed .cr-cat-chevron { transform: rotate(0deg); }
26003
+ .cr-cat-dot { width: 6px; height: 6px; border-radius: var(--r-circle); flex-shrink: 0; }
26004
+ .cr-cat-name { min-width: 0; overflow-wrap: anywhere; font-size: var(--fs-sm); font-weight: 600; line-height: 1.35; }
26005
+ .cr-cat-count { color: var(--stg-help); font-size: var(--fs-xs); font-variant-numeric: tabular-nums; }
26006
+ .cr-cat-actions, .cr-cmd-actions { display: flex; align-items: center; gap: 4px; flex-shrink: 0; }
26007
+ .cr-cat-body { padding: 0 var(--stg-row-x); border-top: 1px solid var(--stg-sep); }
26008
+ .cr-cat-empty { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px; padding: 12px 0; color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; }
26009
+ .cr-cmd { display: flex; align-items: center; gap: 16px; min-width: 0; padding: 12px 0; }
26010
+ .cr-cmd + .cr-cmd { border-top: 1px solid var(--stg-sep); }
26011
+ .cr-cmd-content { flex: 1; min-width: 0; }
26012
+ .cr-cmd-name { margin: 0; overflow-wrap: anywhere; font-size: var(--fs-sm); font-weight: 400; line-height: 1.4; color: var(--stg-text); }
26013
+ .cr-code { display: flex; align-items: baseline; gap: 6px; margin: 4px 0; }
26014
+ .cr-prompt { color: var(--stg-help); font-family: var(--stg-mono); font-size: var(--fs-xs); user-select: none; }
26015
+ .cr-cmd-text { min-width: 0; font-family: var(--stg-mono); font-size: var(--fs-xs); line-height: 1.5; color: var(--stg-body); white-space: pre-wrap; overflow-wrap: anywhere; unicode-bidi: plaintext; }
26016
+ .cr-cmd-cwd { display: flex; align-items: flex-start; min-width: 0; gap: 6px; color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; }
26017
+ .cr-cmd-cwd svg { flex-shrink: 0; margin-top: 2px; width: 12px; height: 12px; }
26018
+ .cr-cmd-cwd span { min-width: 0; overflow-wrap: anywhere; }
26019
+ .cr-run-btn { min-width: 58px; margin-inline-start: 4px; }
26020
+ .cr-run-btn.sent { color: var(--stg-ok); }
26021
+ .cr-footer { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; padding: 8px 22px; border-top: 1px solid var(--stg-line); color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; flex-shrink: 0; }
26022
+ #cr-results { min-width: 0; overflow-wrap: anywhere; }
26023
+ .cr-footer-hint { display: inline-flex; align-items: center; gap: 6px; }
26024
+ .cr-footer-hint svg { width: 12px; height: 12px; }
26025
+ .cr-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 100%; padding: 24px 8px; text-align: center; }
26026
+ .cr-empty-icon { display: grid; place-items: center; width: 32px; height: 32px; color: var(--stg-help); margin-bottom: 12px; }
26027
+ .cr-empty-icon svg { width: 24px; height: 24px; }
26028
+ .cr-empty h3 { color: var(--stg-text); font-family: var(--stg-font); font-size: var(--fs-base); line-height: 1.3; font-weight: 600; }
26029
+ .cr-empty p { color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; max-width: 45ch; margin: 8px 0 16px; }
26030
+ .cr-notice { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; padding: 8px 22px; color: var(--stg-warn); border-bottom: 1px solid var(--stg-sep); font-size: var(--fs-xs); line-height: 1.45; }
26031
+ .cr-modal-overlay { position: absolute; inset: 0; z-index: 30; display: flex; align-items: center; justify-content: center; padding: 12px; background: var(--s-panel); backdrop-filter: blur(4px); }
26032
+ .cr-modal-overlay.hidden { display: none; }
26033
+ .cr-modal { width: 480px; max-width: 100%; max-height: 100%; overflow-y: auto; overscroll-behavior: contain; color: var(--stg-text); background: var(--s-panel); border: 1px solid var(--fw-border); border-radius: var(--fw-radius); box-shadow: var(--fw-shadow); }
26034
+ .cr-modal-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 8px 22px; border-bottom: 1px solid var(--stg-line); }
26035
+ .cr-modal-header > div { flex: 1; min-width: 0; overflow-wrap: anywhere; }
26036
+ .cr-modal-header h4 { margin: 0; font-family: var(--stg-font); font-size: var(--fs-sm); line-height: 1.4; font-weight: 500; }
26037
+ .cr-modal-header p { margin-top: 2px; color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; }
26038
+ .cr-modal-body { padding: 16px 22px; }
26039
+ .cr-modal-footer { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8px; padding: 12px 22px; border-top: 1px solid var(--stg-line); }
26040
+ .cr-form-fields { padding: 0 var(--stg-row-x); border: 1px solid var(--stg-line); border-radius: var(--cr-group-radius); background: var(--stg-group); }
26041
+ .cr-form-row { display: grid; grid-template-columns: minmax(0, 120px) minmax(0, 1fr); align-items: center; gap: 8px 12px; padding: var(--stg-row-y) 0; min-width: 0; }
26042
+ .cr-form-row + .cr-form-row { border-top: 1px solid var(--stg-sep); }
26043
+ .cr-form-label { color: var(--stg-text); font-size: var(--fs-sm); font-weight: 400; line-height: 1.4; overflow-wrap: anywhere; }
26044
+ .cr-form-row--command { align-items: start; }
26045
+ .cr-form-hint { display: block; color: var(--stg-help); font-size: var(--fs-xs); font-weight: 400; }
26046
+ .cr-form-input { width: 100%; min-width: 0; min-height: var(--cr-control-height); height: var(--cr-control-height); padding: 0 8px; border: 1px solid var(--stg-field-line); border-radius: var(--cr-control-radius); background: var(--stg-field-bg); color: var(--stg-text); font-family: var(--stg-font); font-size: var(--fs-xs); line-height: calc(20px * var(--font-scale, 1)); color-scheme: dark; }
26047
+ .cr-form-input::placeholder { color: var(--stg-help); }
26048
+ .cr-form-input[aria-invalid="true"] { border-color: var(--stg-err); }
26049
+ .cr-form-mono { font-family: var(--stg-mono); }
26050
+ textarea.cr-form-input { resize: vertical; min-height: 80px; height: auto; padding: 8px; line-height: 1.5; }
26051
+ .cr-form-help { margin-top: 4px; color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; }
26052
+ .cr-form-error { margin: 0 22px 12px; color: var(--stg-err); font-size: var(--fs-xs); line-height: 1.45; }
26053
+ .cr-delete-name { font-size: var(--fs-sm); line-height: 1.4; overflow-wrap: anywhere; font-weight: 400; }
26054
+ .cr-danger:hover:not(:disabled) { color: var(--stg-err); }
26055
+ .cr-color-field { border: 0; padding: 0; margin-top: 16px; }
26056
+ .cr-color-picker { display: grid; grid-template-columns: repeat(auto-fit, minmax(44px, 1fr)); gap: 4px; margin-top: 8px; }
26057
+ .cr-color-swatch { display: grid; place-items: center; width: 44px; height: 44px; background: transparent; border: 2px solid transparent; border-radius: var(--cr-control-radius); cursor: pointer; position: relative; }
26058
+ .cr-color-swatch::before { content: ''; position: absolute; inset: 8px; background: var(--swatch); border-radius: var(--r-circle); }
26059
+ .cr-color-swatch svg { position: relative; visibility: hidden; color: var(--fw-on-accent); stroke-width: 3; }
26060
+ .cr-color-swatch.selected { border-color: var(--stg-text); }
26061
+ .cr-color-swatch.selected svg { visibility: visible; }
26062
+ .cr-color-swatch:hover { background: var(--stg-control-hover); }
26063
+ .cr-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
26064
+ .command-runner-panel [hidden] { display: none !important; }
26065
+ .command-runner-panel :is(button, select):disabled { opacity: .45; cursor: default; }
26066
+ @container cr (max-width: 480px) {
26067
+ .cr-library-head { padding: 16px 14px 12px; gap: 8px; }
26068
+ .cr-library-head > div { flex-basis: 150px; }
26069
+ .cr-toolbar, .cr-filter-bar { padding-inline: 14px; }
26070
+ .cr-toolbar { flex-wrap: wrap; }
26071
+ .cr-search-wrap { flex-basis: 100%; }
26072
+ .cr-sort { margin-inline-start: auto; }
26073
+ .cr-search-wrap kbd { display: none; }
26074
+ .cr-body { padding: 4px 14px 22px; }
26075
+ .cr-footer, .cr-notice { padding-inline: 14px; }
26076
+ .cr-footer-hint { display: none; }
26077
+ .cr-filter { max-width: 180px; }
26078
+ .cr-cmd { flex-direction: column; align-items: stretch; gap: 8px; }
26079
+ .cr-cmd-actions { justify-content: flex-end; }
26080
+ .cr-modal-header, .cr-modal-body, .cr-modal-footer { padding-inline: 14px; }
26081
+ .cr-form-error { margin-inline: 14px; }
26082
+ .cr-form-row { grid-template-columns: minmax(0, 1fr); gap: 4px; }
26083
+ }
26084
+ /* Keep the native desktop scale; touch controls need room for a fingertip. */
26085
+ @media (pointer: coarse) {
26086
+ .command-runner-panel :is(.cr-button, .cr-run-btn, .cr-icon-btn, .cr-filter, .cr-cat-toggle, .cr-sort, .cr-form-input) { min-height: 44px; }
26087
+ .command-runner-panel .cr-icon-btn { width: 44px; }
26088
+ .command-runner-panel .cr-search-wrap { height: 44px; }
26089
+ .command-runner-panel .cr-search-wrap > svg { display: none; }
26090
+ .command-runner-panel .cr-cat-header { flex-wrap: wrap; }
26091
+ .command-runner-panel .cr-cat-toggle { flex-basis: 100%; }
26092
+ .command-runner-panel .cr-cat-actions { margin-inline-start: auto; }
26093
+ }
26094
+ /* Short windows and zoomed layouts scroll the whole library rather than clip controls. */
26095
+ @media (max-height: 560px) {
26096
+ .command-runner-panel .cr-main { overflow-y: auto; overscroll-behavior: contain; }
26097
+ .command-runner-panel .cr-body { flex: 1 0 auto; overflow-y: visible; }
25754
26098
  }
25755
- .cr-modal-btn--primary:hover {
25756
- background: rgba(110,181,255,0.2);
25757
- border-color: rgba(110,181,255,0.45);
26099
+ @media (prefers-reduced-motion: reduce) {
26100
+ body :is(.settings-panel, .skills-studio-panel, .automation-studio-panel,
26101
+ .schedules-studio-panel, .session-monitor-panel, .command-runner-panel,
26102
+ .image-gallery-panel, .detail-card, .tw, .term-float-tab, .sp-sidepanel.sp-floating) {
26103
+ transition: none !important;
26104
+ }
26105
+ .command-runner-panel *, .command-runner-panel *::before { transition: none !important; animation: none !important; }
25758
26106
  }
25759
26107
 
25760
-
25761
26108
  /* ═══════════════════════════════════════════
25762
26109
  SKINS — Settings tab skin grid
25763
26110
  ═══════════════════════════════════════════ */
@@ -27618,154 +27965,216 @@
27618
27965
 
27619
27966
 
27620
27967
  /* ═══════════════════════════════════════════
27621
- STYLE GUIDE PANEL — v2, all selectors scoped to the panel
27968
+ STYLE GUIDE — Settings editor shell and controls; project specimens stay independent
27622
27969
  ═══════════════════════════════════════════ */
27623
27970
  .styleguide-panel {
27624
27971
  position: fixed; z-index: 300000; width: 1180px; max-width: calc(100vw - 16px); min-width: min(480px, calc(100vw - 16px));
27625
- height: 720px; max-height: calc(100vh - 32px); min-height: min(380px, calc(100vh - 32px));
27626
- display: flex; flex-direction: column; overflow: hidden; container-type: inline-size;
27627
- background: var(--s-panel); border: 1px solid var(--b-light); border-radius: var(--r-card);
27628
- color: var(--t-bright); font-family: var(--ff-body, Inter, sans-serif); font-size: 14px; line-height: 1.5;
27629
- --sg-help: color-mix(in srgb, var(--t-bright) 78%, var(--t-muted));
27630
- opacity: 0; transform: scale(.98); transition: opacity .15s ease, transform .15s ease;
27972
+ height: 720px; max-height: calc(100dvh - 32px); min-height: min(380px, calc(100dvh - 32px));
27973
+ display: flex; flex-direction: column; overflow: hidden; container-type: inline-size; container-name: sg;
27974
+ color: var(--stg-text); font-family: var(--stg-font); font-size: var(--fs-sm); line-height: 1.45; color-scheme: dark;
27975
+ --sg-control-radius: var(--radius-control, 5px);
27976
+ --sg-group-radius: var(--radius-group, 9px);
27977
+ --sg-control-height: calc(22px * var(--font-scale, 1));
27978
+ opacity: 0; transform: scale(.98); transition: opacity 150ms ease, transform 150ms ease;
27979
+ }
27980
+ body .styleguide-panel {
27981
+ --fw-focus: var(--stg-focus);
27982
+ /* Keep required secondary content readable over the configurable glass. */
27983
+ --stg-help: var(--t-primary);
27984
+ --sg-help: var(--stg-help);
27631
27985
  }
27632
27986
  .styleguide-panel.open { opacity: 1; transform: none; }
27987
+ .styleguide-panel.dragging { transition: none; }
27633
27988
  .styleguide-panel [hidden] { display: none !important; }
27634
27989
  .styleguide-panel * { box-sizing: border-box; }
27635
- .styleguide-panel .sg-header { padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; gap: 8px; border-bottom: 1px solid var(--b-light); flex-shrink: 0; user-select: none; }
27636
- .styleguide-panel .sg-header h2 { font-family: var(--ff-heading); font-size: 16px; font-weight: 600; margin: 0; white-space: nowrap; }
27637
- .styleguide-panel .sg-project-select { min-width: 130px; max-width: 210px; padding: 7px 10px; border: 1px solid var(--b-light); background: var(--s-subtle); color: var(--t-bright); border-radius: var(--r-button); font: inherit; font-size: 13px; }
27638
- .styleguide-panel select option { background: var(--s-panel); color: var(--t-bright); }
27639
- .styleguide-panel .sg-status { font-size: 12px; padding: 5px 10px; border: 1px solid var(--b-light); background: var(--s-subtle); border-radius: var(--r-pill); color: var(--sg-help); white-space: nowrap; }
27640
- .styleguide-panel .sg-status[data-state="saved"] { border-color: var(--accent-blue-border); color: var(--t-bright); }
27641
- .styleguide-panel .sg-status[data-state="error"], .styleguide-panel .sg-validation { color: var(--accent-orange); }
27990
+ .styleguide-panel .sg-header { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; user-select: none; }
27991
+ .styleguide-panel .sg-header-context { min-width: 0; gap: 6px 10px; }
27992
+ .styleguide-panel .sg-header-actions { gap: 6px; justify-content: flex-end; }
27993
+ .styleguide-panel .sg-header h2 { font-family: var(--stg-font); font-size: var(--fs-sm); font-weight: 500; line-height: 1.35; margin: 0; }
27994
+ .styleguide-panel .sg-status { padding: 0; border: 0; background: none; border-radius: 0; font-size: var(--fs-xs); color: var(--stg-help); overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
27995
+ .styleguide-panel .sg-status[data-state="error"], .styleguide-panel .sg-error, .styleguide-panel .sg-validation { color: var(--stg-err); }
27642
27996
  .styleguide-panel .sg-shell { display: flex; flex: 1; min-height: 0; overflow: hidden; }
27643
- .styleguide-panel .sg-rail { width: 208px; flex-shrink: 0; padding: 12px 8px; border-right: 1px solid var(--b-subtle); overflow-y: auto; background: var(--s-subtle); }
27644
- .styleguide-panel .sg-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 34px; padding: 6px 10px; border: 1px solid var(--b-light); border-radius: var(--r-button); background: var(--s-subtle); color: var(--t-bright); font: inherit; font-size: 12px; cursor: pointer; line-height: 1.4; }
27645
- .styleguide-panel .sg-btn:hover { background: var(--s-hover); border-color: var(--b-hover); }
27646
- .styleguide-panel .sg-btn:disabled { opacity: .5; cursor: default; }
27647
- .styleguide-panel :is(button,input,select,textarea,[tabindex]):focus-visible { outline: 2px solid var(--accent-blue); outline-offset: 2px; }
27648
- .styleguide-panel .sg-rail-button { border-color: transparent; background: transparent; width: 100%; min-height: 40px; justify-content: flex-start; margin-bottom: 3px; font-size: 13px; text-align: start; }
27649
- .styleguide-panel .sg-rail-button.active { background: var(--accent-blue-bg); border-color: var(--accent-blue-border); color: var(--t-bright); }
27650
- .styleguide-panel .sg-rail-icon { width: 24px; flex-shrink: 0; font-size: 16px; text-align: center; }
27651
- .styleguide-panel .sg-body { flex: 1; min-width: 0; overflow: auto; overscroll-behavior: contain; padding: 24px; }
27652
- .styleguide-panel .sg-page-title { font-family: var(--ff-heading); font-size: 28px; line-height: 1.2; font-weight: 600; margin: 0 0 4px; }
27653
- .styleguide-panel .sg-purpose { color: var(--sg-help); font-size: 12px; margin: 0 0 16px; max-width: 75ch; }
27654
- .styleguide-panel .sg-page-purpose { font-size: 14px; margin-bottom: 24px; }
27997
+ .styleguide-panel .sg-rail { width: 208px; flex-shrink: 0; padding: 8px 10px 14px; border-inline-end: 1px solid var(--stg-line); overflow-y: auto; overscroll-behavior: contain; background: var(--stg-field-bg); }
27998
+ .styleguide-panel .sg-btn {
27999
+ display: inline-flex; align-items: center; justify-content: center; gap: 4px; min-height: var(--sg-control-height); max-width: 100%; padding: 2px 10px;
28000
+ border: 1px solid var(--stg-field-line); border-radius: var(--sg-control-radius); box-shadow: none;
28001
+ background: var(--stg-control); color: var(--stg-text); font-family: var(--stg-font); font-size: var(--fs-xs); font-weight: 500; line-height: 1.2;
28002
+ cursor: pointer; white-space: normal; overflow-wrap: anywhere; transition: background-color 150ms ease, color 150ms ease;
28003
+ }
28004
+ .styleguide-panel .sg-btn:hover:not(:disabled) { background: var(--stg-control-hover); }
28005
+ .styleguide-panel :is(button,input,select,textarea):disabled { opacity: .45; cursor: default; }
28006
+ .styleguide-panel :is(button,a,input,select,textarea,[tabindex]):focus-visible { outline: 2px solid var(--stg-focus); outline-offset: 2px; }
28007
+ .styleguide-panel .sg-close { min-width: var(--fw-header-control-size); min-height: var(--fw-header-control-size); padding: 0; border: 0; background: transparent; color: var(--stg-help); font-size: var(--fs-lg); }
28008
+ .styleguide-panel .sg-rail-button { width: 100%; min-height: 33px; padding: 3px 10px 3px 7px; gap: 10px; justify-content: flex-start; margin-bottom: 2px; border: 0; border-radius: var(--r-card); background: transparent; font-size: var(--fs-sm); font-weight: 400; text-align: start; }
28009
+ .styleguide-panel .sg-rail-button:hover:not(:disabled) { background: var(--s-light); }
28010
+ .styleguide-panel .sg-rail-button.active, .styleguide-panel .sg-rail-button.active:hover { background: color-mix(in srgb, var(--stg-accent-fill) 85%, transparent); color: var(--stg-text); }
28011
+ .styleguide-panel .sg-rail-icon { width: 26px; flex-shrink: 0; font-size: 16px; text-align: center; }
28012
+ .styleguide-panel .sg-rail-label { min-width: 0; line-height: 1.3; overflow-wrap: anywhere; }
28013
+ .styleguide-panel .sg-body { flex: 1; min-width: 0; overflow: auto; overscroll-behavior: contain; padding: 20px 22px 28px; scrollbar-gutter: stable; }
28014
+ .styleguide-panel .sg-page-title { font-family: var(--stg-font); font-size: calc(20px * var(--font-scale, 1)); line-height: 1.25; font-weight: 600; margin: 0 0 2px; overflow-wrap: anywhere; }
28015
+ .styleguide-panel .sg-purpose { color: var(--stg-help); font-size: var(--fs-xs); line-height: 1.45; margin: 2px 0 6px; max-width: 72ch; overflow-wrap: anywhere; }
28016
+ .styleguide-panel .sg-page-purpose { font-size: calc(12.5px * var(--font-scale, 1)); margin-bottom: 20px; }
27655
28017
  .styleguide-panel .sg-fields { padding: 0; margin: 0; border: 0; min-width: 0; }
27656
- .styleguide-panel .sg-content { display: flex; flex-direction: column; gap: 16px; }
27657
- .styleguide-panel .sg-card { padding: 20px; border: 1px solid var(--b-light); border-radius: var(--r-card); background: var(--s-subtle); min-width: 0; }
27658
- .styleguide-panel .sg-card h3 { font-family: var(--ff-heading); font-size: 18px; line-height: 1.3; margin: 0 0 4px; font-weight: 550; }
27659
- .styleguide-panel h4 { font-size: 14px; color: var(--t-bright); margin: 0 0 8px; }
27660
- .styleguide-panel .sg-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(min(240px,100%),1fr)); gap: 16px; align-items: start; }
28018
+ .styleguide-panel .sg-content { display: flex; flex-direction: column; gap: 18px; }
28019
+ .styleguide-panel .sg-card { padding: 0; border: 0; border-radius: 0; background: none; min-width: 0; }
28020
+ .styleguide-panel .sg-card > h3 { font-family: var(--stg-font); font-size: var(--fs-sm); line-height: 1.35; margin: 0; font-weight: 600; overflow-wrap: anywhere; }
28021
+ .styleguide-panel h4 { font-family: var(--stg-font); font-size: var(--fs-sm); line-height: 1.35; color: var(--stg-text); margin: 0 0 6px; font-weight: 600; overflow-wrap: anywhere; }
28022
+ .styleguide-panel .sg-card-body { padding: 0 var(--stg-row-x); border: 1px solid var(--stg-line); border-radius: var(--sg-group-radius); background: var(--stg-group); min-width: 0; }
28023
+ .styleguide-panel .sg-card-body > :is(.sg-field,.sg-grid,.sg-row,.sg-stack,.sg-list,.sg-map,.sg-table-wrap,.sg-inline-set,.sg-written) { margin: 0; padding-block: var(--stg-row-y); }
28024
+ .styleguide-panel .sg-card-body > :is(.sg-field,.sg-grid,.sg-row,.sg-stack,.sg-list,.sg-map,.sg-table-wrap,.sg-inline-set,.sg-written)
28025
+ + :is(.sg-field,.sg-grid,.sg-row,.sg-stack,.sg-list,.sg-map,.sg-table-wrap,.sg-inline-set,.sg-written) { border-top: 1px solid var(--stg-sep); }
28026
+ .styleguide-panel .sg-card-body > .sg-btn { margin-block: 8px; }
28027
+ .styleguide-panel .sg-card-body > .sg-hint { margin-block: 8px; }
28028
+ .styleguide-panel .sg-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(min(280px,100%),1fr)); gap: 8px 16px; align-items: start; min-width: 0; }
28029
+ .styleguide-panel .sg-card-body > .sg-grid { grid-template-columns: 1fr; }
28030
+ .styleguide-panel .sg-card-body > .sg-grid:has(> :is(.sg-font-card,.sg-logo-tile,.sg-preset)) { grid-template-columns: repeat(auto-fit,minmax(min(280px,100%),1fr)); }
27661
28031
  .styleguide-panel .sg-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-width: 0; }
27662
- .styleguide-panel .sg-row > .sg-field { flex: 1; min-width: 100px; }
28032
+ .styleguide-panel .sg-row > .sg-field { flex: 1 1 160px; min-width: 0; }
27663
28033
  .styleguide-panel .sg-row > .sg-grid { flex: 1; }
27664
- .styleguide-panel .sg-stack { display: flex; flex-direction: column; gap: 16px; }
27665
- .styleguide-panel .sg-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; font-size: 13px; color: var(--t-bright); margin-bottom: 12px; }
27666
- .styleguide-panel .sg-label { font-size: 13px; color: var(--sg-help); }
27667
- .styleguide-panel .sg-input { width: 100%; min-width: 0; padding: 8px 10px; background: var(--s-subtle); border: 1px solid var(--b-light); border-radius: var(--r-small); color: var(--t-bright); font: inherit; font-size: 13px; min-height: 36px; }
27668
- .styleguide-panel textarea.sg-input { min-height: 92px; resize: vertical; line-height: 1.5; }
27669
- .styleguide-panel .sg-toggle { flex-direction: row; align-items: center; gap: 8px; font-size: 13px; min-height: 36px; }
27670
- .styleguide-panel .sg-toggle input { width: 18px; min-height: 18px; accent-color: var(--accent-blue); }
27671
- .styleguide-panel .sg-hint, .styleguide-panel .sg-validation { font-size: 12px; line-height: 1.5; }
27672
- .styleguide-panel .sg-hint { color: var(--sg-help); }
27673
- .styleguide-panel .sg-list, .styleguide-panel .sg-map { display: flex; flex-direction: column; gap: 8px; margin-block: 12px; }
27674
- .styleguide-panel .sg-list .sg-row .sg-field { margin-bottom: 0; }
27675
- .styleguide-panel .sg-chips .sg-row { padding: 8px; border: 1px solid var(--b-subtle); border-radius: var(--r-small); }
28034
+ .styleguide-panel .sg-stack { display: flex; flex-direction: column; gap: 0; min-width: 0; }
28035
+ .styleguide-panel .sg-stack > .sg-row { padding-block: 8px; }
28036
+ .styleguide-panel .sg-stack > .sg-row + .sg-row { border-top: 1px solid var(--stg-sep); }
28037
+ .styleguide-panel .sg-field { display: grid; grid-template-columns: minmax(100px,30%) minmax(0,1fr); align-items: center; gap: 4px 12px; min-width: 0; font-size: var(--fs-sm); color: var(--stg-text); margin: 0; }
28038
+ .styleguide-panel .sg-field:has(textarea) { align-items: start; }
28039
+ .styleguide-panel .sg-label { font-size: var(--fs-sm); line-height: 1.4; font-weight: 400; color: var(--stg-text); overflow-wrap: anywhere; }
28040
+ .styleguide-panel .sg-field > :is(.sg-input,.sg-input-line,.sg-hint,.sg-validation) { grid-column: 2; }
28041
+ .styleguide-panel .sg-input { width: 100%; min-width: 0; min-height: var(--sg-control-height); height: var(--sg-control-height); padding: 0 8px; background: var(--stg-field-bg); border: 1px solid var(--stg-field-line); border-radius: var(--sg-control-radius); color: var(--stg-text); font-family: var(--stg-font); font-size: var(--fs-xs); line-height: 1.35; }
28042
+ .styleguide-panel .sg-input::placeholder { color: var(--stg-help); }
28043
+ .styleguide-panel .sg-input[aria-invalid="true"] { border-color: var(--stg-err); }
28044
+ .styleguide-panel .sg-input[type="number"] { width: 72px; max-width: 100%; font-family: var(--stg-mono); }
28045
+ .styleguide-panel textarea.sg-input { min-height: 80px; height: auto; padding: 8px; resize: vertical; line-height: 1.5; }
28046
+ .styleguide-panel :is(select.sg-input,.sg-project-select) {
28047
+ appearance: none; -webkit-appearance: none; min-height: var(--sg-control-height); height: var(--sg-control-height); padding: 0 22px 0 8px;
28048
+ border: 1px solid var(--stg-field-line); border-radius: var(--sg-control-radius); background-color: var(--stg-control); color: var(--stg-text);
28049
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 12'%3E%3Cpath d='M1.2 4.4 4 1.6l2.8 2.8M1.2 7.6 4 10.4l2.8-2.8' fill='none' stroke='%23a1a1a6' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
28050
+ background-repeat: no-repeat; background-position: right 7px center; background-size: 7px 10px;
28051
+ font-family: var(--stg-font); font-size: var(--fs-xs); line-height: 1.35; cursor: pointer; color-scheme: dark;
28052
+ }
28053
+ .styleguide-panel .sg-project-select { min-width: 110px; max-width: 210px; flex: 0 1 180px; }
28054
+ .styleguide-panel select option { background: var(--s-panel); color: var(--stg-text); }
28055
+ .styleguide-panel :is(select.sg-input,.sg-project-select):dir(rtl) { padding: 0 8px 0 22px; background-position: left 7px center; }
28056
+ .styleguide-panel .sg-field > input[type="file"] { grid-column: 2; }
28057
+ .styleguide-panel input[type="file"] { width: 100%; min-width: 0; min-height: var(--sg-control-height); height: auto; padding: 0; border: 0; background: transparent; font-family: var(--stg-font); font-size: var(--fs-xs); color: var(--stg-help); }
28058
+ .styleguide-panel input[type="file"]::file-selector-button { min-height: var(--sg-control-height); margin-inline-end: 8px; padding: 2px 10px; border: 1px solid var(--stg-field-line); border-radius: var(--sg-control-radius); background: var(--stg-control); color: var(--stg-text); font: inherit; cursor: pointer; }
28059
+ .styleguide-panel input[type="file"]::file-selector-button:hover { background: var(--stg-control-hover); }
28060
+ .styleguide-panel .sg-toggle { display: flex; flex-direction: row; align-items: center; gap: 8px; min-height: var(--sg-control-height); cursor: pointer; }
28061
+ .styleguide-panel .sg-toggle input[type="checkbox"] { appearance: auto; width: 14px; min-width: 14px; min-height: 14px; height: 14px; padding: 0; margin: 0; flex-shrink: 0; accent-color: var(--stg-accent-fill); }
28062
+ .styleguide-panel .sg-hint, .styleguide-panel .sg-validation { font-size: var(--fs-xs); line-height: 1.45; overflow-wrap: anywhere; }
28063
+ .styleguide-panel .sg-hint { color: var(--stg-help); }
28064
+ .styleguide-panel .sg-list { display: flex; flex-direction: column; gap: 8px; margin-block: 8px; min-width: 0; }
28065
+ .styleguide-panel .sg-list-items { gap: 0; }
28066
+ .styleguide-panel .sg-list-item > .sg-field { flex: 1 1 260px; margin: 0; }
28067
+ .styleguide-panel .sg-hide-label > .sg-label, .styleguide-panel .sg-table .sg-field > .sg-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
28068
+ .styleguide-panel :is(.sg-hide-label,.sg-table .sg-field) { grid-template-columns: minmax(0,1fr); }
28069
+ .styleguide-panel :is(.sg-hide-label,.sg-table .sg-field) > :is(.sg-input,.sg-input-line,.sg-hint,.sg-validation) { grid-column: 1; }
28070
+ .styleguide-panel .sg-add-btn { align-self: flex-start; color: var(--stg-link); background: transparent; border-color: transparent; font-weight: 400; padding-inline: 4px; }
28071
+ .styleguide-panel .sg-add-btn:hover:not(:disabled) { color: var(--accent-blue); background: transparent; }
28072
+ .styleguide-panel .sg-chip-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
28073
+ .styleguide-panel .sg-chip-item { flex-wrap: nowrap; gap: 2px; padding: 2px; border: 1px solid var(--stg-line); border-radius: var(--sg-control-radius); background: var(--stg-control); max-width: 100%; }
28074
+ .styleguide-panel .sg-chip-item > .sg-field { flex: 1 1 auto; min-width: 0; margin: 0; }
28075
+ .styleguide-panel .sg-chip-item .sg-input { width: 12ch; max-width: 100%; padding: 0 6px; border-color: transparent; background: transparent; }
28076
+ .styleguide-panel .sg-icon-btn, .styleguide-panel .sg-eyedropper { min-width: var(--sg-control-height); padding: 0 4px; border-color: transparent; background: transparent; font-size: var(--fs-lg); line-height: 1; }
28077
+ .styleguide-panel .sg-map { display: grid; grid-template-columns: repeat(auto-fill,minmax(min(280px,100%),1fr)); gap: 8px 16px; align-items: end; min-width: 0; margin-block: 8px; }
28078
+ .styleguide-panel .sg-map > .sg-row { flex-wrap: nowrap; align-items: center; }
28079
+ .styleguide-panel .sg-map > .sg-row > .sg-field { flex: 1 1 0; min-width: 0; margin: 0; }
28080
+ .styleguide-panel .sg-map > .sg-row:last-child { grid-column: 1 / -1; max-width: 460px; }
28081
+ .styleguide-panel .sg-map-wide { grid-template-columns: repeat(auto-fill,minmax(min(560px,100%),1fr)); }
28082
+ .styleguide-panel .sg-map-wide > .sg-row { flex-wrap: wrap; }
28083
+ .styleguide-panel .sg-map-wide > .sg-row > .sg-field { flex: 1 1 180px; }
28084
+ .styleguide-panel .sg-map > .sg-row > .sg-row { flex: 1 1 200px; flex-wrap: nowrap; }
28085
+ .styleguide-panel .sg-map > .sg-row > .sg-row > .sg-field { flex: 1; min-width: 0; margin: 0; }
27676
28086
  .styleguide-panel .sg-color-field { display: flex; gap: 8px; align-items: center; min-width: 0; }
27677
- .styleguide-panel .sg-color-field .sg-field { flex: 1; min-width: 0; margin-bottom: 0; }
28087
+ .styleguide-panel .sg-color-field .sg-field { display: flex; flex-direction: column; align-items: stretch; flex: 1; min-width: 0; margin: 0; }
27678
28088
  .styleguide-panel .sg-swatch { width: 32px; height: 36px; padding: 0; border: 1px solid var(--b-light); border-radius: var(--r-small); background: transparent; cursor: pointer; flex-shrink: 0; }
27679
- .styleguide-panel .sg-palette { padding: 16px; border: 1px solid var(--b-light); border-radius: var(--r-card); display: flex; flex-direction: column; gap: 12px; }
27680
- .styleguide-panel .sg-scale { display: grid; grid-template-columns: repeat(11,minmax(58px,1fr)); gap: 4px; overflow-x: auto; padding-bottom: 4px; }
28089
+ .styleguide-panel .sg-scale { display: grid; grid-template-columns: repeat(11,minmax(58px,1fr)); gap: 4px; overflow-x: auto; padding: 4px 2px; }
27681
28090
  .styleguide-panel .sg-scale .sg-color-field { flex-direction: column; align-items: stretch; gap: 4px; }
27682
28091
  .styleguide-panel .sg-scale .sg-swatch { width: 100%; height: 40px; }
27683
- .styleguide-panel .sg-scale .sg-input { padding: 4px 2px; text-align: center; font-family: var(--ff-mono,monospace); font-size: 12px; min-height: 30px; }
27684
- .styleguide-panel .sg-scale .sg-label { text-align: center; font-size: 12px; }
27685
- .styleguide-panel .sg-table-wrap { overflow: auto; max-width: 100%; margin-block: 12px; }
27686
- .styleguide-panel .sg-table { border-collapse: collapse; width: 100%; font-size: 12px; text-align: start; }
27687
- .styleguide-panel .sg-table th, .styleguide-panel .sg-table td { padding: 10px; border-bottom: 1px solid var(--b-light); vertical-align: top; min-width: 100px; overflow-wrap: anywhere; }
27688
- .styleguide-panel .sg-table th { font-weight: 500; color: var(--sg-help); text-align: start; }
27689
- .styleguide-panel .sg-table .sg-field { margin: 0; }
27690
- .styleguide-panel .sg-table .sg-label { font-size: 12px; }
28092
+ .styleguide-panel .sg-scale .sg-input { padding: 0 2px; text-align: center; font-family: var(--stg-mono); }
28093
+ .styleguide-panel .sg-scale .sg-label { text-align: center; font-size: var(--fs-xs); }
28094
+ .styleguide-panel :is(.sg-palette,.sg-font-card,.sg-component-card,.sg-logo-tile,.sg-preset,.sg-proposal) { padding: 8px 0; border: 0; border-radius: 0; background: none; min-width: 0; }
28095
+ .styleguide-panel :is(.sg-palette,.sg-component-card,.sg-proposal) + :is(.sg-palette,.sg-component-card,.sg-proposal) { border-top: 1px solid var(--stg-sep); }
28096
+ .styleguide-panel .sg-palette { display: flex; flex-direction: column; gap: 8px; }
28097
+ .styleguide-panel :is(.sg-font-card,.sg-component-card,.sg-logo-tile) > :is(.sg-field,.sg-grid,.sg-list,.sg-row) { padding-block: 8px; }
28098
+ .styleguide-panel :is(.sg-font-card,.sg-component-card,.sg-logo-tile) > :is(.sg-field,.sg-grid,.sg-list,.sg-row) + :is(.sg-field,.sg-grid,.sg-list,.sg-row) { border-top: 1px solid var(--stg-sep); }
28099
+ .styleguide-panel .sg-component-card > .sg-grid { grid-template-columns: 1fr; }
28100
+ .styleguide-panel .sg-table-wrap { overflow: auto; max-width: 100%; margin-block: 8px; padding: 2px; }
28101
+ .styleguide-panel .sg-table { border-collapse: collapse; width: 100%; font-size: var(--fs-xs); text-align: start; }
28102
+ .styleguide-panel .sg-table :is(th,td) { padding: 8px; border-bottom: 1px solid var(--stg-sep); vertical-align: top; min-width: 100px; overflow-wrap: anywhere; }
28103
+ .styleguide-panel .sg-table th { font-weight: 500; color: var(--stg-help); text-align: start; }
27691
28104
  .styleguide-panel .sg-table .sg-input { min-width: 100px; }
28105
+ .styleguide-panel .sg-table .sg-field { margin: 0; }
27692
28106
  .styleguide-panel .sg-type-table .sg-input { min-width: 75px; }
28107
+ .styleguide-panel .sg-type-table td:last-child .sg-input { min-width: 160px; }
27693
28108
  .styleguide-panel .sg-contrast-matrix td { min-width: 128px; }
27694
28109
  .styleguide-panel [data-pass="true"] { background: var(--accent-blue-bg); }
27695
28110
  .styleguide-panel [data-pass="false"] { border-bottom: 2px solid var(--accent-orange); }
27696
28111
  .styleguide-panel .sg-ratio { white-space: nowrap; font-variant-numeric: tabular-nums; }
27697
- .styleguide-panel .sg-chip { display: inline-block; padding: 2px 6px; border-radius: var(--r-pill); background: var(--s-light); border: 1px solid var(--b-light); font-size: 12px; margin: 3px 3px 0 0; color: var(--t-bright); }
28112
+ .styleguide-panel .sg-chip { display: inline-block; padding: 0; border: 0; border-radius: 0; background: none; font-size: var(--fs-xs); margin: 0; color: var(--stg-help); }
28113
+ .styleguide-panel .sg-header-actions .sg-chip { color: inherit; font-variant-numeric: tabular-nums; }
28114
+ .styleguide-panel .sg-proposal > .sg-row > strong, .styleguide-panel .sg-written code, .styleguide-panel [data-card="history"] .sg-stack > .sg-row > span { flex: 1 1 180px; min-width: 0; overflow-wrap: anywhere; }
28115
+ .styleguide-panel .sg-code { font-family: var(--stg-mono); font-size: var(--fs-xs); line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; padding: 8px; border: 1px solid var(--stg-field-line); border-radius: var(--sg-control-radius); background: var(--stg-field-bg); margin-block: 8px; max-height: 420px; overflow: auto; }
28116
+ .styleguide-panel .sg-written { margin-top: 8px; }
28117
+ .styleguide-panel .sg-written code { font-family: var(--stg-mono); font-size: var(--fs-xs); }
28118
+ .styleguide-panel .sg-error { padding: 8px 22px; font-size: var(--fs-xs); flex-shrink: 0; overflow-wrap: anywhere; }
28119
+ .styleguide-panel > .sg-btn { align-self: flex-start; margin: 0 22px 8px; }
28120
+ .styleguide-panel .sg-empty { padding: 32px 0; color: var(--stg-help); font-size: var(--fs-sm); }
28121
+ .styleguide-panel .sg-input-line { display: flex; align-items: center; gap: 6px; min-width: 0; }
28122
+ .styleguide-panel .sg-input-line > .sg-input { flex: 1; }
28123
+ .styleguide-panel .sg-alias-swatch { width: 22px; height: 22px; flex-shrink: 0; border-radius: var(--r-small); border: 1px solid var(--b-light); }
28124
+ .styleguide-panel .sg-alias-swatch.sg-unresolved { background: repeating-linear-gradient(45deg,transparent 0 4px,var(--b-light) 4px 6px) !important; }
28125
+ .styleguide-panel .sg-inline-set { display: flex; flex-wrap: wrap; gap: 4px 20px; border: 0; padding: 0; margin: 0 0 8px; }
28126
+ .styleguide-panel .sg-inline-set > legend { padding: 0; margin-bottom: 6px; }
28127
+ .styleguide-panel [data-card="proposals"] .sg-card-body > .sg-row > .sg-field { flex: 0 1 260px; }
28128
+ /* The selected guide owns sample colors, fonts, radii, shadows, logos and iframe output. */
27698
28129
  .styleguide-panel .sg-radius-sample { width: 44px; height: 44px; flex-shrink: 0; background: var(--accent-blue-bg); border: 1px solid var(--accent-blue); }
27699
28130
  .styleguide-panel .sg-shadow-sample { width: 90px; height: 60px; display: grid; place-items: center; border-radius: var(--r-card); background: var(--s-medium); font-size: 12px; }
27700
- .styleguide-panel .sg-motion-track { width: 130px; height: 32px; border: 1px solid var(--b-light); border-radius: var(--r-small); padding: 4px; }
28131
+ .styleguide-panel .sg-motion-track { width: 130px; height: 32px; border: 1px solid var(--b-light); border-radius: var(--r-small); padding: 4px; flex-shrink: 0; }
27701
28132
  .styleguide-panel .sg-motion-dot { display: block; width: 22px; height: 22px; border-radius: var(--r-circle); background: var(--accent-blue); }
27702
- .styleguide-panel .sg-font-card, .styleguide-panel .sg-component-card, .styleguide-panel .sg-logo-tile, .styleguide-panel .sg-preset, .styleguide-panel .sg-proposal { border: 1px solid var(--b-light); border-radius: var(--r-card); padding: 16px; min-width: 0; }
27703
- .styleguide-panel .sg-font-specimen { font-size: 20px; padding: 16px; background: var(--s-subtle); border-radius: var(--r-card); }
27704
- .styleguide-panel .sg-style-specimen { overflow-wrap: anywhere; padding: 12px 0; max-width: 760px; }
28133
+ .styleguide-panel .sg-font-specimen { font-size: 20px; font-weight: 400; line-height: 1.5; color: var(--t-bright); padding: 16px; background: var(--s-subtle); border-radius: var(--r-card); }
28134
+ .styleguide-panel .sg-style-specimen { color: var(--t-bright); overflow-wrap: anywhere; padding: 12px 0; max-width: 760px; }
27705
28135
  .styleguide-panel .sg-logo-preview { height: 120px; display: flex; justify-content: center; align-items: center; border-radius: var(--r-card); margin-bottom: 12px; }
27706
28136
  .styleguide-panel .sg-logo-preview img { max-width: 80%; max-height: 90px; }
27707
28137
  .styleguide-panel .sg-preset-swatch { width: 32px; height: 28px; border-radius: var(--r-small); border: 1px solid var(--b-light); }
27708
- .styleguide-panel .sg-code { font-family: var(--ff-mono,monospace); font-size: 12px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; padding: 16px; border: 1px solid var(--b-light); border-radius: var(--r-card); background: var(--s-subtle); margin-block: 12px; max-height: 420px; overflow: auto; }
27709
- .styleguide-panel .sg-written code { font-size: 12px; overflow-wrap: anywhere; }
27710
- .styleguide-panel .sg-error { padding: 10px 16px; color: var(--accent-orange); font-size: 12px; flex-shrink: 0; overflow-wrap: anywhere; }
27711
- .styleguide-panel .sg-empty { padding: 48px 16px; color: var(--sg-help); font-size: 14px; }
28138
+ .styleguide-panel .sg-gradient-sample { width: 96px; height: 36px; flex-shrink: 0; border-radius: var(--r-small); border: 1px solid var(--b-light); }
27712
28139
  .styleguide-panel .sg-preview-stage { overflow-x: auto; max-width: 100%; padding: 16px; background: var(--s-subtle); border-radius: var(--r-card); }
27713
- .styleguide-panel .sg-preview-frame { display: block; height: 470px; min-width: 375px; margin-inline: auto; border: 1px solid var(--b-light); border-radius: var(--r-card); background: var(--s-panel); }
28140
+ .styleguide-panel .sg-preview-frame { display: block; height: clamp(470px,62vh,900px); min-width: 375px; margin-inline: auto; border: 1px solid var(--b-light); border-radius: var(--r-card); background: var(--s-panel); }
27714
28141
  .styleguide-panel .sg-markdown { margin-top: 12px; font-size: 14px; overflow-wrap: anywhere; }
27715
28142
  .styleguide-panel .sg-markdown h1 { font-size: 24px; }
27716
28143
  .styleguide-panel .sg-markdown h2 { font-size: 20px; }
27717
28144
  .styleguide-panel .sg-markdown h3 { font-size: 18px; }
27718
28145
  .styleguide-panel .sg-markdown :is(h4,h5,h6) { font-size: 14px; }
27719
- /* QA pass (run C2): dark native controls, one caption per table column, compact lists and maps */
27720
- .styleguide-panel { color-scheme: dark; }
27721
- .styleguide-panel .sg-hide-label > .sg-label, .styleguide-panel .sg-table .sg-field > .sg-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
27722
- .styleguide-panel .sg-add-btn { align-self: flex-start; }
27723
- .styleguide-panel .sg-list-items { gap: 8px; }
27724
- .styleguide-panel .sg-list-item > .sg-field { flex: 1 1 260px; margin-bottom: 0; }
27725
- .styleguide-panel .sg-chips .sg-row { padding: 0; border: 0; }
27726
- .styleguide-panel .sg-chip-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
27727
- .styleguide-panel .sg-chip-item { flex-wrap: nowrap; gap: 2px; padding: 2px; border: 1px solid var(--b-light); border-radius: var(--r-button); background: var(--s-subtle); }
27728
- .styleguide-panel .sg-chip-item > .sg-field { flex: 0 0 auto; margin: 0; }
27729
- .styleguide-panel .sg-chip-item .sg-input { width: 12ch; min-height: 30px; padding: 4px 8px; border-color: transparent; background: transparent; }
27730
- .styleguide-panel .sg-icon-btn { min-height: 30px; min-width: 30px; padding: 0 8px; font-size: 16px; line-height: 1; border-color: transparent; background: transparent; }
27731
- .styleguide-panel .sg-map { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(220px, 100%), 1fr)); gap: 8px 16px; align-items: end; }
27732
- .styleguide-panel .sg-map > .sg-row { flex-wrap: nowrap; align-items: flex-end; }
27733
- .styleguide-panel .sg-map > .sg-row > .sg-field { flex: 1 1 0; min-width: 0; margin-bottom: 0; }
27734
- .styleguide-panel .sg-map > .sg-row:last-child { grid-column: 1 / -1; max-width: 460px; }
27735
- .styleguide-panel .sg-map-wide { grid-template-columns: repeat(auto-fill, minmax(min(560px, 100%), 1fr)); }
27736
- .styleguide-panel .sg-map-wide > .sg-row { flex-wrap: wrap; }
27737
- .styleguide-panel .sg-map-wide > .sg-row > .sg-field { flex: 1 1 140px; }
27738
- .styleguide-panel .sg-map > .sg-row > .sg-row { flex: 1 1 200px; flex-wrap: nowrap; }
27739
- .styleguide-panel .sg-map > .sg-row > .sg-row > .sg-field { flex: 1; min-width: 0; margin: 0; }
27740
- .styleguide-panel .sg-toggle { display: flex; }
27741
- .styleguide-panel .sg-btn { white-space: nowrap; }
27742
- .styleguide-panel .sg-motion-track { flex-shrink: 0; }
27743
- .styleguide-panel .sg-input-line { display: flex; align-items: center; gap: 6px; min-width: 0; }
27744
- .styleguide-panel .sg-input-line > .sg-input { flex: 1; }
27745
- .styleguide-panel .sg-alias-swatch { width: 22px; height: 22px; flex-shrink: 0; border-radius: var(--r-small); border: 1px solid var(--b-light); }
27746
- .styleguide-panel .sg-alias-swatch.sg-unresolved { background: repeating-linear-gradient(45deg, transparent 0 4px, var(--b-light) 4px 6px) !important; }
27747
- .styleguide-panel .sg-gradient-sample { width: 96px; height: 36px; flex-shrink: 0; border-radius: var(--r-small); border: 1px solid var(--b-light); }
27748
- .styleguide-panel .sg-inline-set { display: flex; flex-wrap: wrap; gap: 4px 20px; border: 0; padding: 0; margin: 0 0 12px; }
27749
- .styleguide-panel .sg-inline-set > legend { padding: 0; margin-bottom: 6px; }
27750
- .styleguide-panel .sg-table .sg-field { min-width: 0; }
27751
- .styleguide-panel .sg-type-table td:last-child .sg-input { min-width: 160px; }
27752
- .styleguide-panel .sg-written { margin-top: 12px; }
27753
- .styleguide-panel [data-card="proposals"] > .sg-row > .sg-field { flex: 0 1 260px; }
27754
- .styleguide-panel .sg-preview-frame { height: clamp(470px, 62vh, 900px); }
27755
- @container (max-width: 899px) {
27756
- .styleguide-panel .sg-rail { width: 58px; padding: 12px 4px; }
27757
- .styleguide-panel .sg-rail-button { padding: 8px; justify-content: center; }
28146
+ @container sg (max-width: 899px) {
28147
+ .styleguide-panel .sg-rail { width: 58px; padding: 8px 4px; }
28148
+ .styleguide-panel .sg-rail-button { padding: 3px 4px; justify-content: center; }
27758
28149
  .styleguide-panel .sg-rail-label { display: none; }
27759
- .styleguide-panel .sg-header { flex-wrap: wrap; }
27760
- .styleguide-panel .sg-body { padding: 16px; }
27761
- }
27762
- @container (max-width: 560px) {
27763
- .styleguide-panel .sg-grid { grid-template-columns: 1fr; }
27764
- .styleguide-panel .sg-card { padding: 12px; }
27765
- .styleguide-panel .sg-btn { min-height: 40px; }
27766
- .styleguide-panel .sg-header { padding: 8px; }
27767
- .styleguide-panel .sg-project-select { max-width: 140px; }
27768
- .styleguide-panel .sg-status { white-space: normal; }
28150
+ .styleguide-panel .sg-header { grid-template-columns: minmax(0,1fr) auto; }
28151
+ .styleguide-panel .sg-header-actions { grid-column: 1 / -1; grid-row: 2; justify-content: flex-start; }
28152
+ .styleguide-panel .sg-close { grid-column: 2; grid-row: 1; align-self: start; }
28153
+ }
28154
+ @container sg (max-width: 560px) {
28155
+ .styleguide-panel .sg-body { padding: 16px 14px 22px; }
28156
+ .styleguide-panel .sg-grid, .styleguide-panel .sg-card-body > .sg-grid:has(> :is(.sg-font-card,.sg-logo-tile,.sg-preset)) { grid-template-columns: 1fr; }
28157
+ .styleguide-panel .sg-field { grid-template-columns: minmax(0,1fr); }
28158
+ .styleguide-panel .sg-field > :is(.sg-input,.sg-input-line,.sg-hint,.sg-validation,input[type="file"]) { grid-column: 1; }
28159
+ .styleguide-panel .sg-color-field .sg-field { display: flex; }
28160
+ .styleguide-panel .sg-project-select { max-width: 160px; }
28161
+ .styleguide-panel .sg-header-context { gap: 6px; }
28162
+ .styleguide-panel .sg-status { flex-basis: 100%; }
28163
+ .styleguide-panel .sg-header-actions { gap: 6px; }
28164
+ .styleguide-panel .sg-error { padding-inline: 14px; }
28165
+ .styleguide-panel > .sg-btn { margin-inline: 14px; }
28166
+ }
28167
+ @media (pointer: coarse) {
28168
+ .styleguide-panel { --sg-control-height: max(44px,calc(22px * var(--font-scale,1))); }
28169
+ .styleguide-panel :is(.sg-btn,.sg-rail-button,.sg-toggle) { min-height: 44px; }
28170
+ .styleguide-panel :is(.sg-close,.sg-icon-btn,.sg-eyedropper) { min-width: 44px; }
28171
+ .styleguide-panel .sg-swatch { min-width: 44px; min-height: 44px; }
28172
+ }
28173
+ @media (max-height: 560px) {
28174
+ .styleguide-panel { overflow-y: auto; }
28175
+ .styleguide-panel .sg-shell { flex: none; min-height: 320px; overflow: visible; }
28176
+ .styleguide-panel .sg-body { overflow: visible; }
28177
+ .styleguide-panel .sg-rail { align-self: stretch; overflow: visible; }
27769
28178
  }
27770
28179
 
27771
28180
  /* ═══════════════════════════════════════════════════════════════════════════