openclacky 1.3.6 → 1.3.8

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +54 -0
  3. data/lib/clacky/agent/hook_manager.rb +10 -1
  4. data/lib/clacky/agent/system_prompt_builder.rb +1 -1
  5. data/lib/clacky/agent.rb +17 -3
  6. data/lib/clacky/agent_profile.rb +124 -53
  7. data/lib/clacky/billing/billing_store.rb +3 -2
  8. data/lib/clacky/brand_config.rb +309 -6
  9. data/lib/clacky/cli.rb +4 -57
  10. data/lib/clacky/default_extensions/coding/agents/coding/avatar.png +0 -0
  11. data/lib/clacky/default_extensions/coding/ext.yml +19 -0
  12. data/lib/clacky/default_extensions/ext-studio/agents/ext-developer/avatar.png +0 -0
  13. data/lib/clacky/default_extensions/ext-studio/agents/ext-developer/system_prompt.md +95 -0
  14. data/lib/clacky/default_extensions/ext-studio/api/handler.rb +254 -0
  15. data/lib/clacky/default_extensions/ext-studio/ext.yml +33 -0
  16. data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +1288 -0
  17. data/lib/clacky/default_extensions/ext-studio/skills/ext-debug/SKILL.md +71 -0
  18. data/lib/clacky/default_extensions/ext-studio/skills/ext-publish/SKILL.md +74 -0
  19. data/lib/clacky/default_extensions/ext-studio/skills/ext-scaffold/SKILL.md +65 -0
  20. data/lib/clacky/default_extensions/general/agents/general/avatar.png +0 -0
  21. data/lib/clacky/default_extensions/general/ext.yml +19 -0
  22. data/lib/clacky/default_extensions/git/ext.yml +12 -0
  23. data/lib/clacky/{default_agents/_panels/git/panel.js → default_extensions/git/panels/git/view.js} +4 -5
  24. data/lib/clacky/default_extensions/meeting/{handler.rb → api/handler.rb} +78 -26
  25. data/lib/clacky/default_extensions/meeting/ext.yml +15 -0
  26. data/lib/clacky/default_extensions/meeting/{meeting.js → panels/meeting/view.js} +266 -90
  27. data/lib/clacky/default_extensions/meeting/skills/meeting-summarizer/SKILL.md +2 -1
  28. data/lib/clacky/default_extensions/time_machine/ext.yml +12 -0
  29. data/lib/clacky/{default_agents/_panels/time_machine/panel.js → default_extensions/time_machine/panels/time_machine/view.js} +58 -47
  30. data/lib/clacky/default_skills/channel-manager/discord_setup.rb +1 -1
  31. data/lib/clacky/default_skills/extend-openclacky/SKILL.md +83 -18
  32. data/lib/clacky/{api_extension.rb → extension/api_extension.rb} +27 -11
  33. data/lib/clacky/extension/api_loader.rb +136 -0
  34. data/lib/clacky/extension/cli_commands.rb +226 -0
  35. data/lib/clacky/{server/api_extension_dispatcher.rb → extension/dispatcher.rb} +22 -9
  36. data/lib/clacky/extension/hook_loader.rb +77 -0
  37. data/lib/clacky/extension/loader.rb +489 -0
  38. data/lib/clacky/extension/packager.rb +226 -0
  39. data/lib/clacky/{patch_loader.rb → extension/patch_loader.rb} +45 -0
  40. data/lib/clacky/extension/scaffold/template_renderer.rb +64 -0
  41. data/lib/clacky/extension/scaffold/templates/full/README.md.erb +48 -0
  42. data/lib/clacky/extension/scaffold/templates/full/agents/designer.md +5 -0
  43. data/lib/clacky/extension/scaffold/templates/full/api/handler.rb.erb +16 -0
  44. data/lib/clacky/extension/scaffold/templates/full/channels/noop.rb.erb +40 -0
  45. data/lib/clacky/extension/scaffold/templates/full/ext.yml.erb +41 -0
  46. data/lib/clacky/extension/scaffold/templates/full/hooks/audit.rb +9 -0
  47. data/lib/clacky/extension/scaffold/templates/full/panels/dashboard/view.js.erb +194 -0
  48. data/lib/clacky/extension/scaffold/templates/full/patches/audit.rb +15 -0
  49. data/lib/clacky/extension/scaffold/templates/full/skills/__slug__-skill/SKILL.md.erb +8 -0
  50. data/lib/clacky/extension/scaffold/templates/hello/api/handler.rb.erb +9 -0
  51. data/lib/clacky/extension/scaffold/templates/hello/ext.yml.erb +12 -0
  52. data/lib/clacky/extension/scaffold/templates/hello/panels/hello/view.js.erb +31 -0
  53. data/lib/clacky/extension/scaffold.rb +55 -0
  54. data/lib/clacky/extension/verifier.rb +196 -0
  55. data/lib/clacky/identity.rb +70 -0
  56. data/lib/clacky/locales/en.rb +19 -1
  57. data/lib/clacky/locales/zh.rb +19 -1
  58. data/lib/clacky/platform_http_client.rb +18 -15
  59. data/lib/clacky/server/channel/extension_adapter_loader.rb +32 -0
  60. data/lib/clacky/server/channel.rb +6 -0
  61. data/lib/clacky/server/http_server.rb +439 -146
  62. data/lib/clacky/server/session_registry.rb +9 -2
  63. data/lib/clacky/shell_hook_loader.rb +266 -22
  64. data/lib/clacky/skill_loader.rb +28 -1
  65. data/lib/clacky/ui2/components/welcome_banner.rb +1 -1
  66. data/lib/clacky/ui2/ui_controller.rb +9 -6
  67. data/lib/clacky/utils/workspace_rules.rb +2 -2
  68. data/lib/clacky/version.rb +1 -1
  69. data/lib/clacky/web/app.css +1034 -675
  70. data/lib/clacky/web/app.js +63 -15
  71. data/lib/clacky/web/auth.js +2 -0
  72. data/lib/clacky/web/components/notify.js +2 -0
  73. data/lib/clacky/web/components/sidebar.js +1 -5
  74. data/lib/clacky/web/core/ext.js +432 -89
  75. data/lib/clacky/web/features/backup/store.js +1 -0
  76. data/lib/clacky/web/features/backup/view.js +0 -1
  77. data/lib/clacky/web/features/brand/view.js +13 -5
  78. data/lib/clacky/web/features/extensions/store.js +184 -0
  79. data/lib/clacky/web/features/extensions/view.js +390 -0
  80. data/lib/clacky/web/features/new-session/store.js +199 -0
  81. data/lib/clacky/web/features/new-session/view.js +619 -0
  82. data/lib/clacky/web/features/share/view.js +63 -14
  83. data/lib/clacky/web/features/skills/store.js +3 -1
  84. data/lib/clacky/web/features/skills/view.js +1 -1
  85. data/lib/clacky/web/features/tasks/view.js +12 -0
  86. data/lib/clacky/web/features/trash/store.js +24 -6
  87. data/lib/clacky/web/features/trash/view.js +48 -12
  88. data/lib/clacky/web/features/workspace/store.js +2 -0
  89. data/lib/clacky/web/features/workspace/view.js +0 -1
  90. data/lib/clacky/web/i18n.js +152 -106
  91. data/lib/clacky/web/index.html +172 -190
  92. data/lib/clacky/web/sessions.js +67 -272
  93. data/lib/clacky/web/settings.js +1 -1
  94. data/lib/clacky/web/skills.js +88 -48
  95. data/lib/clacky/web/theme.js +5 -0
  96. data/lib/clacky/web/ws-dispatcher.js +12 -2
  97. data/lib/clacky/web/ws.js +2 -0
  98. data/lib/clacky.rb +21 -10
  99. metadata +52 -21
  100. data/benchmark/runner.rb +0 -441
  101. data/lib/clacky/api_extension_loader.rb +0 -168
  102. data/lib/clacky/default_agents/SOUL.md +0 -3
  103. data/lib/clacky/default_agents/USER.md +0 -1
  104. data/lib/clacky/default_agents/coding/profile.yml +0 -5
  105. data/lib/clacky/default_agents/coding/webui/.gitkeep +0 -0
  106. data/lib/clacky/default_agents/general/profile.yml +0 -2
  107. data/lib/clacky/default_extensions/meeting/meta.yml +0 -3
  108. data/lib/clacky/web/features/creator/store.js +0 -81
  109. data/lib/clacky/web/features/creator/view.js +0 -380
  110. /data/lib/clacky/{default_agents → default_extensions/coding/agents}/coding/system_prompt.md +0 -0
  111. /data/lib/clacky/{default_agents → default_extensions/general/agents}/general/system_prompt.md +0 -0
  112. /data/lib/clacky/{default_agents/base_prompt.md → prompts/base.md} +0 -0
@@ -221,6 +221,7 @@ html { font-size: 16px; }
221
221
  100% { background-position: -200% 0; }
222
222
  }
223
223
  .skel {
224
+ display: inline-block;
224
225
  border-radius: 6px;
225
226
  background: linear-gradient(90deg,
226
227
  #e8e8e8 25%,
@@ -607,6 +608,21 @@ body {
607
608
  }
608
609
  #session-list { padding: 4px 0 0; min-height: 6.75rem; }
609
610
 
611
+ /* ── Extension nav slots (top / mid / bottom) ───────────────────────────── */
612
+ [id^="ext-slot-sidebar-nav"] { display: block; }
613
+ [id^="ext-slot-sidebar-nav"]:empty { display: none; }
614
+ #ext-slot-sidebar-nav-top {
615
+ padding: 8px 0 10px;
616
+ margin-bottom: 6px;
617
+ border-bottom: 1px solid var(--color-border-secondary);
618
+ }
619
+ #ext-slot-sidebar-nav { padding: 6px 0 4px; }
620
+ #ext-slot-sidebar-nav-bottom {
621
+ padding: 8px 0 10px;
622
+ margin-top: 6px;
623
+ border-top: 1px solid var(--color-border-secondary);
624
+ }
625
+
610
626
  /* ── Sidebar divider (Section Labels) ───────────────────────────────────── */
611
627
  .sidebar-divider {
612
628
  display: flex;
@@ -645,19 +661,12 @@ body {
645
661
  gap: 4px;
646
662
  }
647
663
 
648
- /* ── Split button [+ ▾] ─────────────────────────────────────────────────── */
649
- .btn-split-wrap {
650
- position: relative;
651
- display: flex;
652
- align-items: center;
653
- border-radius: 6px;
654
- overflow: visible;
655
- }
664
+ /* ── New Session button ──────────────────────────────────────────────────── */
656
665
  .btn-split-main {
657
666
  height: 1.5rem;
658
667
  padding: 0 0.625rem;
659
668
  border: none;
660
- border-radius: 6px 0 0 6px;
669
+ border-radius: 6px;
661
670
  background: var(--color-accent-primary);
662
671
  color: #fff;
663
672
  font-size: 0.75rem;
@@ -671,51 +680,6 @@ body {
671
680
  background: var(--color-button-primary-hover);
672
681
  box-shadow: 0 2px 6px rgba(0,0,0,0.15);
673
682
  }
674
- .btn-split-arrow {
675
- height: 1.5rem;
676
- padding: 0 0.35rem;
677
- border: none;
678
- border-left: 1px solid rgba(255,255,255,0.3);
679
- border-radius: 0 6px 6px 0;
680
- background: var(--color-accent-primary);
681
- color: #fff;
682
- font-size: 0.75rem;
683
- cursor: pointer;
684
- transition: background 0.15s;
685
- }
686
- .btn-split-arrow:hover {
687
- background: var(--color-button-primary-hover);
688
- }
689
-
690
- /* ── Dropdown menu ───────────────────────────────────────────────────────── */
691
- .new-session-dropdown {
692
- position: absolute;
693
- top: 100%;
694
- right: 0;
695
- min-width: 11.25rem;
696
- background: var(--color-bg-card);
697
- border: 1px solid var(--color-border-primary);
698
- border-radius: 7px;
699
- box-shadow: var(--shadow-md);
700
- z-index: 200;
701
- padding: 0.375rem 0 0.25rem;
702
- overflow: hidden;
703
- }
704
- .new-session-dropdown[hidden] { display: none; }
705
- .dropdown-item {
706
- padding: 0.4rem 0.875rem;
707
- font-size: 0.8125rem;
708
- color: var(--color-text-secondary);
709
- cursor: pointer;
710
- white-space: nowrap;
711
- transition: all 0.12s;
712
- display: flex;
713
- align-items: center;
714
- }
715
- .dropdown-item:hover {
716
- background: var(--color-bg-hover);
717
- color: var(--color-accent-primary);
718
- }
719
683
 
720
684
  /* ── Session source badge ────────────────────────────────────────────────── */
721
685
  /* Design: compact neutral chips — the visual weight is carried by the
@@ -769,6 +733,21 @@ body {
769
733
  .session-item.active .session-badge--coding {
770
734
  color: var(--color-text-tertiary);
771
735
  }
736
+ /* Agent profile: extension / custom agents — same hollow neutral base as
737
+ coding, but a subtle accent tint keeps user-defined agents visually
738
+ distinct from the built-in "coding" tag. */
739
+ .session-badge--agent {
740
+ background: transparent;
741
+ color: var(--color-accent-primary);
742
+ border-color: var(--color-accent-soft);
743
+ max-width: 8rem;
744
+ overflow: hidden;
745
+ text-overflow: ellipsis;
746
+ white-space: nowrap;
747
+ }
748
+ .session-item.active .session-badge--agent {
749
+ border-color: var(--color-accent-primary);
750
+ }
772
751
 
773
752
 
774
753
  /* ── Sidebar divider actions group ───────────────────────────────────────── */
@@ -1516,6 +1495,23 @@ body {
1516
1495
  background: var(--color-accent-primary);
1517
1496
  }
1518
1497
 
1498
+ /* Extension nav mounts are wrapped by ext.js; the Router stamps .active on the
1499
+ wrapper, so the highlight is forwarded to the inner nav item. */
1500
+ [data-ext-workspace].active > .task-item {
1501
+ background: var(--color-accent-soft);
1502
+ }
1503
+ [data-ext-workspace].active > .task-item::before {
1504
+ content: "";
1505
+ position: absolute;
1506
+ left: -10px;
1507
+ top: 50%;
1508
+ transform: translateY(-50%);
1509
+ width: 3px;
1510
+ height: 17px;
1511
+ border-radius: 0 3px 3px 0;
1512
+ background: var(--color-accent-primary);
1513
+ }
1514
+
1519
1515
  .task-row {
1520
1516
  display: flex;
1521
1517
  align-items: center;
@@ -1839,6 +1835,14 @@ body {
1839
1835
  background: var(--color-bg-secondary);
1840
1836
  transition: background-color var(--transition-base);
1841
1837
  }
1838
+
1839
+ /* Extension workspace slot: give any registered workspace the same page
1840
+ chrome as built-in pages (padding + scroll) so extensions don't reinvent it. */
1841
+ #ext-slot-main-workspace {
1842
+ flex: 1;
1843
+ overflow-y: auto;
1844
+ padding: 2rem 2rem 1.5rem;
1845
+ }
1842
1846
  .centered {
1843
1847
  flex: 1;
1844
1848
  display: flex;
@@ -1849,143 +1853,439 @@ body {
1849
1853
  color: var(--color-text-secondary);
1850
1854
  }
1851
1855
 
1852
- /* ── Empty / welcome state agent "standing by" cockpit ─────────────────── */
1853
- .ce-mark {
1854
- width: 3.25rem;
1855
- height: 3.25rem;
1856
- border-radius: 0.875rem;
1857
- background: var(--color-accent-soft);
1858
- display: grid;
1859
- place-items: center;
1856
+ /* ── New Session landing page (#new) ─────────────────────────────────────── */
1857
+ .new-session-page {
1858
+ justify-content: flex-start;
1859
+ padding: 0;
1860
+ overflow: hidden;
1861
+ gap: 0;
1862
+ }
1863
+ .new-session-inner {
1864
+ width: 100%;
1865
+ height: 100%;
1866
+ display: flex;
1867
+ flex-direction: column;
1868
+ gap: 0;
1860
1869
  }
1861
- .ce-mark svg { width: 1.625rem; height: 1.625rem; color: var(--color-accent-primary); }
1862
- .ce-head {
1870
+ .new-session-body {
1871
+ flex: 1 1 auto;
1872
+ overflow-y: auto;
1863
1873
  display: flex;
1864
1874
  flex-direction: column;
1865
- gap: 0.375rem;
1866
- align-items: center;
1875
+ gap: 1.25rem;
1876
+ width: 100%;
1877
+ max-width: 60rem;
1878
+ margin: 0 auto;
1879
+ padding: 5.5rem 1.5rem 1rem;
1880
+ }
1881
+ .new-session-composer {
1882
+ position: relative;
1883
+ flex: none;
1884
+ padding: 0.75rem 1.5rem 1.25rem;
1867
1885
  }
1868
- .ce-title {
1869
- font-size: 1.3125rem;
1886
+ .new-session-title {
1887
+ font-size: 1.5rem;
1870
1888
  font-weight: 680;
1871
1889
  color: var(--color-text-primary);
1872
1890
  letter-spacing: -0.01em;
1873
- text-align: center;
1891
+ text-align: left;
1892
+ margin: 0;
1874
1893
  }
1875
- .ce-sub {
1894
+ .new-session-subtitle {
1876
1895
  color: var(--color-text-tertiary);
1877
- font-size: 0.84375rem;
1878
- text-align: center;
1896
+ font-size: 0.875rem;
1897
+ text-align: left;
1898
+ margin: 0;
1899
+ }
1900
+ .new-session-agents {
1901
+ display: grid;
1902
+ grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));
1903
+ grid-auto-rows: 1fr;
1904
+ gap: 0.75rem;
1879
1905
  }
1880
- .chips {
1906
+ .new-session-agent-panels {
1881
1907
  display: flex;
1882
- gap: 0.625rem;
1883
1908
  flex-wrap: wrap;
1884
- justify-content: center;
1885
- max-width: 34rem;
1909
+ align-items: center;
1910
+ gap: 0.375rem;
1911
+ margin-top: -0.625rem;
1912
+ padding-left: 0.125rem;
1886
1913
  }
1887
- .chip {
1888
- display: flex;
1914
+ .ns-panels-label {
1915
+ width: 100%;
1916
+ font-size: 0.75rem;
1917
+ color: var(--color-text-tertiary);
1918
+ margin-bottom: 0.0625rem;
1919
+ }
1920
+ .ns-panel-chip {
1921
+ display: inline-flex;
1889
1922
  align-items: center;
1890
- gap: 0.5625rem;
1891
- padding: 0.6875rem 0.9375rem;
1923
+ padding: 0.1875rem 0.5rem;
1924
+ border-radius: 0.375rem;
1925
+ font-size: 0.78125rem;
1926
+ font-weight: 500;
1927
+ line-height: 1.3;
1928
+ }
1929
+ .ns-panel-chip--panel {
1930
+ background: var(--color-accent-soft);
1931
+ color: var(--color-accent-primary);
1932
+ }
1933
+ .ns-panel-chip--skill {
1934
+ background: var(--color-bg-secondary);
1935
+ color: var(--color-text-secondary);
1936
+ border: 1px solid var(--color-border-primary);
1937
+ }
1938
+ .agent-card {
1939
+ position: relative;
1940
+ padding: 0.9375rem 1rem;
1892
1941
  border: 1px solid var(--color-border-primary);
1893
- border-radius: 0.625rem;
1942
+ border-radius: 0.75rem;
1894
1943
  background: var(--color-bg-primary);
1895
1944
  cursor: pointer;
1896
1945
  text-align: left;
1897
- transition: border-color 0.14s, transform 0.14s;
1946
+ transition: border-color 0.14s, background-color 0.14s, transform 0.14s;
1947
+ display: flex;
1948
+ flex-direction: column;
1949
+ gap: 0.25rem;
1898
1950
  }
1899
- .chip:hover {
1900
- border-color: color-mix(in srgb, var(--color-accent-primary) 45%, var(--color-border-primary));
1951
+ .agent-card:hover {
1952
+ border-color: color-mix(in srgb, var(--color-accent-primary) 40%, var(--color-border-primary));
1901
1953
  transform: translateY(-1px);
1902
1954
  }
1903
- .chip .ci {
1904
- width: 1.875rem;
1905
- height: 1.875rem;
1906
- border-radius: 0.5rem;
1907
- background: var(--color-bg-hover);
1908
- display: grid;
1909
- place-items: center;
1910
- flex-shrink: 0;
1955
+ .agent-card--selected {
1956
+ border-color: var(--color-accent-primary);
1957
+ background: var(--color-accent-soft);
1911
1958
  }
1912
- .chip .ci svg { width: 1rem; height: 1rem; color: var(--color-text-secondary); }
1913
- .chip .ct-wrap { display: flex; flex-direction: column; gap: 1px; }
1914
- .chip .ct { font-size: 0.8125rem; color: var(--color-text-primary); font-weight: 550; }
1915
- .chip .cd { font-size: 0.71875rem; color: var(--color-text-tertiary); }
1916
- #btn-welcome-new {
1917
- background: transparent;
1918
- color: var(--color-text-tertiary);
1919
- border: none;
1920
- padding: 0.25rem 0.5rem;
1921
- font-size: 0.8125rem;
1922
- cursor: pointer;
1923
- transition: color var(--transition-fast);
1959
+ .agent-card-title {
1960
+ font-size: 0.9375rem;
1961
+ font-weight: 620;
1962
+ color: var(--color-text-primary);
1963
+ display: flex;
1964
+ align-items: center;
1965
+ gap: 0.375rem;
1924
1966
  }
1925
- #btn-welcome-new:hover { color: var(--color-text-secondary); text-decoration: underline; }
1926
-
1927
-
1928
- /* ── Chat panel ──────────────────────────────────────────────────────────── */
1929
- #chat-panel { flex: 1; display: flex; flex-direction: row; overflow: hidden; position: relative; }
1930
- #chat-main { flex: 1; display: flex; flex-direction: column; overflow: hidden; position: relative; min-width: 0; }
1931
-
1932
- /* ── Session extension slots (agent-scoped panels mount here) ───────────────
1933
- Each slot is laid out by the host; an empty slot collapses to zero so it
1934
- never reserves space when no panel is mounted for the current agent. */
1935
- /* ── Session aside — one resizable / collapsible right column with tabs ─────
1936
- The host owns the chrome (resize handle, collapse button, floating opener);
1937
- Clacky.ext renders the tab bar + bodies into #ext-slot-session-aside. When
1938
- the slot has no panels for the current agent it stays empty and the whole
1939
- column collapses to zero width. */
1940
- #session-aside {
1941
- --session-aside-width: 16rem;
1942
- width: var(--session-aside-width);
1943
- flex-shrink: 0;
1944
- position: relative;
1967
+ .agent-card-header {
1945
1968
  display: flex;
1946
- flex-direction: column;
1969
+ align-items: center;
1970
+ gap: 0.625rem;
1971
+ margin-bottom: 0.125rem;
1972
+ }
1973
+ .agent-card-avatar {
1974
+ flex: none;
1975
+ width: 2.25rem;
1976
+ height: 2.25rem;
1977
+ border-radius: 50%;
1947
1978
  overflow: hidden;
1948
- border-left: 1px solid var(--color-border-primary);
1949
- background: var(--color-bg-secondary);
1950
- transition: width var(--transition-base);
1979
+ background: var(--color-bg-hover);
1980
+ display: flex;
1981
+ align-items: center;
1982
+ justify-content: center;
1951
1983
  }
1952
- #session-aside.collapsed { width: 0; border-left: none; }
1953
- /* Empty slot (no panels for this agent) → collapse the whole column. */
1954
- #session-aside:has(.session-aside-slot:empty) { width: 0; border-left: none; }
1955
- #session-aside:has(.session-aside-slot:empty) .session-aside-resize,
1956
- #session-aside:has(.session-aside-slot:empty) .session-aside-collapse { display: none; }
1957
-
1958
- .session-aside-resize {
1959
- position: absolute;
1960
- top: 0;
1961
- left: -6px;
1962
- bottom: 0;
1963
- width: 12px;
1964
- cursor: col-resize;
1965
- z-index: 10;
1966
- background: transparent;
1984
+ .agent-card-avatar img {
1985
+ width: 100%;
1986
+ height: 100%;
1987
+ object-fit: cover;
1988
+ display: block;
1967
1989
  }
1968
- .session-aside-resize::after {
1969
- content: "";
1990
+ .agent-card-avatar--fallback {
1991
+ font-size: 1rem;
1992
+ font-weight: 700;
1993
+ color: var(--color-accent-primary);
1994
+ background: var(--color-accent-soft);
1995
+ }
1996
+ .agent-card-new {
1997
+ font-size: 0.6rem;
1998
+ font-weight: 700;
1999
+ line-height: 1;
2000
+ padding: 2px 5px;
2001
+ border-radius: 4px;
2002
+ background: color-mix(in srgb, #16a34a 18%, transparent);
2003
+ color: #16a34a;
2004
+ letter-spacing: 0.04em;
2005
+ }
2006
+ .agent-card-desc {
2007
+ font-size: 0.78125rem;
2008
+ color: var(--color-text-tertiary);
2009
+ line-height: 1.4;
2010
+ }
2011
+ .agent-card-badge {
1970
2012
  position: absolute;
1971
- top: 0;
1972
- bottom: 0;
1973
- left: 6px;
1974
- width: 1px;
1975
- background: transparent;
1976
- transition: background-color var(--transition-base);
2013
+ top: 0.5rem;
2014
+ right: 0.5rem;
2015
+ font-size: 0.65rem;
2016
+ font-weight: 600;
2017
+ padding: 1px 5px;
2018
+ border-radius: 4px;
2019
+ background: var(--color-bg-hover);
2020
+ color: var(--color-text-secondary);
2021
+ letter-spacing: 0.02em;
2022
+ text-transform: uppercase;
2023
+ }
2024
+ .agent-card-badge--custom {
2025
+ background: color-mix(in srgb, var(--color-accent-primary) 15%, transparent);
2026
+ color: var(--color-accent-primary);
2027
+ }
2028
+ .agent-card-author {
2029
+ margin-top: 0.25rem;
2030
+ font-size: 0.72rem;
2031
+ color: var(--color-text-tertiary);
2032
+ opacity: 0.8;
1977
2033
  }
1978
- .session-aside-resize:hover::after,
1979
- .session-aside-resize.active::after { background: transparent; }
1980
2034
 
1981
- .session-aside-collapse {
1982
- position: absolute;
1983
- top: 7px;
1984
- right: 8px;
1985
- z-index: 11;
1986
- display: inline-flex;
2035
+ .new-session-input-bar {
2036
+ margin: 0;
2037
+ padding: 10px 12px;
2038
+ border: 1px solid var(--color-border-primary);
2039
+ border-radius: 13px;
2040
+ background: var(--color-bg-primary);
2041
+ display: flex;
1987
2042
  align-items: center;
1988
- justify-content: center;
2043
+ gap: 8px;
2044
+ box-shadow: var(--shadow-card);
2045
+ transition: border-color .14s;
2046
+ }
2047
+ .new-session-input-bar:focus-within {
2048
+ border-color: color-mix(in srgb, var(--color-accent-primary) 50%, var(--color-border-primary));
2049
+ }
2050
+ .new-session-composer-btn {
2051
+ flex: none;
2052
+ display: grid;
2053
+ place-items: center;
2054
+ width: 32px;
2055
+ height: 32px;
2056
+ padding: 0;
2057
+ border: none;
2058
+ border-radius: 8px;
2059
+ background: transparent;
2060
+ color: var(--color-text-tertiary);
2061
+ cursor: pointer;
2062
+ transition: background .12s, color .12s;
2063
+ }
2064
+ .new-session-composer-btn:hover {
2065
+ color: var(--color-text-primary);
2066
+ background: var(--color-bg-hover);
2067
+ }
2068
+ .new-session-composer-btn.active {
2069
+ color: var(--color-accent-primary);
2070
+ background: var(--color-accent-soft);
2071
+ }
2072
+ .new-session-composer-btn > span {
2073
+ font-size: 0.875rem;
2074
+ font-weight: 400;
2075
+ line-height: 1;
2076
+ }
2077
+ .new-session-textarea {
2078
+ flex: 1;
2079
+ border: none;
2080
+ outline: none;
2081
+ resize: none;
2082
+ background: transparent;
2083
+ color: var(--color-text-primary);
2084
+ font-family: var(--font-sans);
2085
+ font-size: 0.875rem;
2086
+ line-height: 1.55;
2087
+ padding: 4px 6px;
2088
+ margin: 0;
2089
+ max-height: 12.5rem;
2090
+ overflow-y: auto;
2091
+ scrollbar-width: none;
2092
+ }
2093
+ .new-session-textarea::-webkit-scrollbar { display: none; }
2094
+ .new-session-advanced-wrap {
2095
+ display: flex;
2096
+ flex-direction: column;
2097
+ gap: 0.5rem;
2098
+ align-items: flex-start;
2099
+ margin-top: -0.75rem;
2100
+ }
2101
+ .new-session-advanced-toggle {
2102
+ display: inline-flex;
2103
+ align-items: center;
2104
+ gap: 0.375rem;
2105
+ border: none;
2106
+ background: transparent;
2107
+ color: var(--color-text-tertiary);
2108
+ font-size: 0.8125rem;
2109
+ cursor: pointer;
2110
+ padding: 0.25rem 0.5rem;
2111
+ border-radius: 0.375rem;
2112
+ transition: color var(--transition-fast), background-color var(--transition-fast);
2113
+ }
2114
+ .new-session-advanced-toggle:hover {
2115
+ color: var(--color-text-secondary);
2116
+ }
2117
+ .new-session-advanced-caret {
2118
+ transition: transform 0.15s;
2119
+ }
2120
+ .new-session-advanced-toggle.is-open .new-session-advanced-caret {
2121
+ transform: rotate(180deg);
2122
+ }
2123
+ .new-session-send {
2124
+ flex: none;
2125
+ display: grid;
2126
+ place-items: center;
2127
+ width: 34px;
2128
+ height: 34px;
2129
+ border: none;
2130
+ border-radius: 9px;
2131
+ background: var(--color-accent-primary);
2132
+ color: #fff;
2133
+ cursor: pointer;
2134
+ transition: background .12s, opacity .12s;
2135
+ }
2136
+ .new-session-send svg {
2137
+ width: 15px;
2138
+ height: 15px;
2139
+ }
2140
+ .new-session-send:disabled {
2141
+ background: var(--color-border-primary);
2142
+ color: var(--color-text-tertiary);
2143
+ cursor: not-allowed;
2144
+ opacity: 0.6;
2145
+ }
2146
+ .new-session-send:not(:disabled):hover {
2147
+ background: color-mix(in srgb, var(--color-accent-primary) 85%, #fff);
2148
+ }
2149
+
2150
+ .new-session-advanced {
2151
+ display: flex;
2152
+ flex-direction: column;
2153
+ gap: 0.75rem;
2154
+ padding: 0.9375rem;
2155
+ border: 1px solid var(--color-border-primary);
2156
+ border-radius: 0.75rem;
2157
+ background: var(--color-bg-secondary);
2158
+ align-self: stretch;
2159
+ }
2160
+ .new-session-advanced[hidden] {
2161
+ display: none;
2162
+ }
2163
+ .new-session-field {
2164
+ display: flex;
2165
+ flex-direction: column;
2166
+ gap: 0.3125rem;
2167
+ }
2168
+ .new-session-label {
2169
+ font-size: 0.78125rem;
2170
+ color: var(--color-text-secondary);
2171
+ font-weight: 540;
2172
+ }
2173
+ .new-session-input,
2174
+ .new-session-select {
2175
+ width: 100%;
2176
+ padding: 0.4375rem 0.625rem;
2177
+ border: 1px solid var(--color-border-primary);
2178
+ border-radius: 0.4375rem;
2179
+ background: var(--color-bg-primary);
2180
+ color: var(--color-text-primary);
2181
+ font-size: 0.8125rem;
2182
+ font-family: inherit;
2183
+ }
2184
+ .new-session-input:focus,
2185
+ .new-session-select:focus {
2186
+ outline: none;
2187
+ border-color: var(--color-accent-primary);
2188
+ }
2189
+ .new-session-input-row {
2190
+ display: flex;
2191
+ gap: 0.375rem;
2192
+ }
2193
+ .new-session-input-row .new-session-input {
2194
+ flex: 1;
2195
+ }
2196
+ .new-session-browse-btn {
2197
+ padding: 0 0.625rem;
2198
+ border: 1px solid var(--color-border-primary);
2199
+ border-radius: 0.4375rem;
2200
+ background: var(--color-bg-primary);
2201
+ color: var(--color-text-secondary);
2202
+ cursor: pointer;
2203
+ display: grid;
2204
+ place-items: center;
2205
+ transition: border-color var(--transition-fast), color var(--transition-fast);
2206
+ }
2207
+ .new-session-browse-btn:hover {
2208
+ border-color: var(--color-accent-primary);
2209
+ color: var(--color-accent-primary);
2210
+ }
2211
+ .new-session-checkbox-field {
2212
+ display: flex;
2213
+ align-items: center;
2214
+ }
2215
+ .new-session-checkbox-label {
2216
+ display: inline-flex;
2217
+ align-items: center;
2218
+ gap: 0.5rem;
2219
+ font-size: 0.8125rem;
2220
+ color: var(--color-text-secondary);
2221
+ cursor: pointer;
2222
+ }
2223
+ .new-session-checkbox {
2224
+ cursor: pointer;
2225
+ }
2226
+
2227
+
2228
+ /* ── Chat panel ──────────────────────────────────────────────────────────── */
2229
+ #chat-panel { flex: 1; display: flex; flex-direction: row; overflow: hidden; position: relative; }
2230
+ #chat-main { flex: 1; display: flex; flex-direction: column; overflow: hidden; position: relative; min-width: 0; }
2231
+
2232
+ /* ── Session extension slots (agent-scoped panels mount here) ───────────────
2233
+ Each slot is laid out by the host; an empty slot collapses to zero so it
2234
+ never reserves space when no panel is mounted for the current agent. */
2235
+ /* ── Session aside — one resizable / collapsible right column with tabs ─────
2236
+ The host owns the chrome (resize handle, collapse button, floating opener);
2237
+ Clacky.ext renders the tab bar + bodies into #ext-slot-session-aside. When
2238
+ the slot has no panels for the current agent it stays empty and the whole
2239
+ column collapses to zero width. */
2240
+ #session-aside {
2241
+ --session-aside-width: 16rem;
2242
+ width: var(--session-aside-width);
2243
+ flex-shrink: 0;
2244
+ position: relative;
2245
+ display: flex;
2246
+ flex-direction: column;
2247
+ overflow: hidden;
2248
+ border-left: 1px solid var(--color-border-primary);
2249
+ background: var(--color-bg-secondary);
2250
+ transition: width var(--transition-base);
2251
+ }
2252
+ #session-aside.collapsed { width: 0; border-left: none; }
2253
+ /* Empty slot (no panels for this agent) → collapse the whole column. */
2254
+ #session-aside:has(.session-aside-slot:empty) { width: 0; border-left: none; }
2255
+ #session-aside:has(.session-aside-slot:empty) .session-aside-resize,
2256
+ #session-aside:has(.session-aside-slot:empty) .session-aside-collapse { display: none; }
2257
+
2258
+ .session-aside-resize {
2259
+ position: absolute;
2260
+ top: 0;
2261
+ left: -6px;
2262
+ bottom: 0;
2263
+ width: 12px;
2264
+ cursor: col-resize;
2265
+ z-index: 10;
2266
+ background: transparent;
2267
+ }
2268
+ .session-aside-resize::after {
2269
+ content: "";
2270
+ position: absolute;
2271
+ top: 0;
2272
+ bottom: 0;
2273
+ left: 6px;
2274
+ width: 1px;
2275
+ background: transparent;
2276
+ transition: background-color var(--transition-base);
2277
+ }
2278
+ .session-aside-resize:hover::after,
2279
+ .session-aside-resize.active::after { background: transparent; }
2280
+
2281
+ .session-aside-collapse {
2282
+ position: absolute;
2283
+ top: 7px;
2284
+ right: 8px;
2285
+ z-index: 11;
2286
+ display: inline-flex;
2287
+ align-items: center;
2288
+ justify-content: center;
1989
2289
  width: 1.625rem;
1990
2290
  height: 1.625rem;
1991
2291
  border: none;
@@ -2069,7 +2369,15 @@ body {
2069
2369
  .session-banner:empty,
2070
2370
  .session-composer:empty { display: none; }
2071
2371
  .session-banner { flex-shrink: 0; }
2072
- .session-composer { flex-shrink: 0; }
2372
+ .session-composer {
2373
+ flex-shrink: 0;
2374
+ margin-bottom: -9px;
2375
+ display: flex;
2376
+ padding-inline: 12px;
2377
+ }
2378
+ .session-composer > * {
2379
+ justify-content: flex-start !important;
2380
+ }
2073
2381
 
2074
2382
  /* ── File tree (used inside the Files tab) ──────────────────────────────── */
2075
2383
  .wt-panel { flex: 1; min-height: 0; display: flex; flex-direction: column; }
@@ -3852,6 +4160,12 @@ body {
3852
4160
  box-shadow: var(--shadow-card);
3853
4161
  margin-bottom: -1px;
3854
4162
  }
4163
+ #ns-image-preview-strip {
4164
+ display: flex;
4165
+ flex-wrap: wrap;
4166
+ gap: 0.5rem;
4167
+ padding: 0.25rem 0 0.5rem;
4168
+ }
3855
4169
  /* Square off the top corners of the input-bar when the preview strip sits above it */
3856
4170
  #input-area:has(#image-preview-strip:not([style*="display:none"])):not(:has(#image-preview-strip[style*="display: none"])) #input-bar {
3857
4171
  border-top-left-radius: 0;
@@ -3950,7 +4264,8 @@ body {
3950
4264
  .pdf-preview-remove:hover { background: var(--color-error); }
3951
4265
 
3952
4266
  /* ── Skill autocomplete dropdown ─────────────────────────────────────────── */
3953
- #skill-autocomplete {
4267
+ #skill-autocomplete,
4268
+ .skill-autocomplete {
3954
4269
  position: absolute;
3955
4270
  bottom: 100%;
3956
4271
  left: 0;
@@ -3968,7 +4283,8 @@ body {
3968
4283
  z-index: 1000;
3969
4284
  }
3970
4285
 
3971
- #skill-autocomplete-list {
4286
+ #skill-autocomplete-list,
4287
+ #ns-skill-autocomplete-list {
3972
4288
  padding: 0.25rem 0;
3973
4289
  }
3974
4290
 
@@ -5780,24 +6096,7 @@ body {
5780
6096
  border-color: var(--color-accent-primary);
5781
6097
  }
5782
6098
 
5783
- /* New Session Modal */
5784
- .new-session-modal {
5785
- max-width: 32.5rem;
5786
- padding: 1.25rem 1.25rem 1rem;
5787
- }
5788
- .new-session-modal .modal-header {
5789
- display: flex;
5790
- align-items: center;
5791
- margin-bottom: 0.875rem;
5792
- }
5793
- .new-session-modal .modal-title {
5794
- font-size: 1rem;
5795
- font-weight: 600;
5796
- margin: 0;
5797
- padding: 0;
5798
- border: none;
5799
- color: var(--color-text-primary);
5800
- }
6099
+
5801
6100
  .modal-box .modal-header {
5802
6101
  display: flex;
5803
6102
  align-items: center;
@@ -5922,13 +6221,6 @@ body {
5922
6221
  cursor: pointer;
5923
6222
  accent-color: var(--color-accent-primary);
5924
6223
  }
5925
- .new-session-modal .modal-body {
5926
- gap: 0.75rem;
5927
- }
5928
- .new-session-modal .modal-footer {
5929
- margin-top: 1rem;
5930
- padding-top: 1rem;
5931
- }
5932
6224
  .modal-footer {
5933
6225
  display: flex;
5934
6226
  gap: 0.625rem;
@@ -6287,7 +6579,7 @@ body {
6287
6579
  transition: transform 0.18s;
6288
6580
  }
6289
6581
  .skills-filter-toggle input:checked ~ .skills-filter-toggle-track {
6290
- background: var(--color-accent, #6c63ff);
6582
+ background: var(--color-accent-primary);
6291
6583
  }
6292
6584
  .skills-filter-toggle input:checked ~ .skills-filter-toggle-track::after {
6293
6585
  transform: translateX(0.875rem);
@@ -6310,7 +6602,7 @@ body {
6310
6602
  color: var(--color-text-secondary);
6311
6603
  font-size: 0.8125rem;
6312
6604
  }
6313
- /* Guided CTA card in the empty-skills state — mirrors .creator-new-card */
6605
+ /* Guided CTA card in the empty-skills state */
6314
6606
  .skills-empty-create-btn {
6315
6607
  display: flex;
6316
6608
  align-items: center;
@@ -6777,28 +7069,280 @@ body {
6777
7069
  margin-bottom: 0.625rem;
6778
7070
  }
6779
7071
 
6780
- /* Brand Skill card */
6781
- .brand-skill-card {
6782
- background: var(--color-bg-secondary);
6783
- border: 1px solid var(--color-border-primary);
6784
- border-radius: 8px;
6785
- padding: 0.875rem 1rem;
6786
- transition: border-color .15s;
6787
- }
6788
- .brand-skill-card:hover { border-color: var(--color-text-muted); }
6789
- .brand-skill-card-main {
7072
+ /* ── Extension Market ─────────────────────────────────────────────────── */
7073
+ #extensions-body {
7074
+ flex: 1;
7075
+ overflow-y: auto;
7076
+ padding: 1.75rem 2.25rem;
6790
7077
  display: flex;
6791
- align-items: center;
6792
- gap: 0.75rem;
7078
+ flex-direction: column;
7079
+ gap: 1.25rem;
6793
7080
  }
6794
- .brand-skill-info { flex: 1; min-width: 0; }
6795
- .brand-skill-title {
7081
+ .extensions-toolbar {
6796
7082
  display: flex;
6797
7083
  align-items: center;
6798
- gap: 0.375rem;
6799
- margin-bottom: 0.25rem;
7084
+ gap: 0.5rem;
6800
7085
  }
6801
- .brand-skill-name {
7086
+ .extensions-search {
7087
+ flex: 1;
7088
+ min-width: 0;
7089
+ font-size: 0.8125rem;
7090
+ padding: 0.4375rem 0.75rem;
7091
+ border-radius: 6px;
7092
+ border: 1px solid var(--color-border-primary);
7093
+ background: var(--color-bg-secondary);
7094
+ color: var(--color-text-primary);
7095
+ }
7096
+ .extensions-search:focus {
7097
+ outline: none;
7098
+ border-color: var(--color-accent, #6366f1);
7099
+ }
7100
+ .extensions-sort {
7101
+ flex-shrink: 0;
7102
+ font-size: 0.8125rem;
7103
+ padding: 0.4375rem 2rem 0.4375rem 0.75rem;
7104
+ border-radius: 6px;
7105
+ border: 1px solid var(--color-border-primary);
7106
+ background: var(--color-bg-secondary);
7107
+ color: var(--color-text-primary);
7108
+ cursor: pointer;
7109
+ appearance: none;
7110
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23888' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
7111
+ background-repeat: no-repeat;
7112
+ background-position: right 0.625rem center;
7113
+ }
7114
+ .extensions-sort:focus {
7115
+ outline: none;
7116
+ border-color: var(--color-accent, #6366f1);
7117
+ }
7118
+ #extensions-list {
7119
+ display: flex;
7120
+ flex-direction: column;
7121
+ gap: 0.5rem;
7122
+ padding-top: 0.25rem;
7123
+ }
7124
+ .extensions-empty {
7125
+ font-size: 0.8125rem;
7126
+ color: var(--color-text-secondary);
7127
+ text-align: center;
7128
+ padding: 1.5rem 0;
7129
+ }
7130
+ .extension-card {
7131
+ background: var(--color-bg-secondary);
7132
+ border: 1px solid var(--color-border-primary);
7133
+ border-radius: 8px;
7134
+ padding: 0.875rem 1rem;
7135
+ transition: border-color .15s;
7136
+ }
7137
+ .extension-card:hover { border-color: var(--color-text-muted); }
7138
+ .extension-card-main {
7139
+ display: flex;
7140
+ align-items: flex-start;
7141
+ gap: 0.75rem;
7142
+ }
7143
+ .extension-emoji {
7144
+ font-size: 1.5rem;
7145
+ line-height: 1.4;
7146
+ flex-shrink: 0;
7147
+ }
7148
+ .extension-info { flex: 1; min-width: 0; }
7149
+ .extension-title {
7150
+ display: flex;
7151
+ align-items: center;
7152
+ gap: 0.375rem;
7153
+ margin-bottom: 0.25rem;
7154
+ flex-wrap: wrap;
7155
+ }
7156
+ .extension-name {
7157
+ font-size: 0.8125rem;
7158
+ font-weight: 600;
7159
+ color: var(--color-text-primary);
7160
+ }
7161
+ .extension-version {
7162
+ font-size: 0.6875rem;
7163
+ color: var(--color-text-secondary);
7164
+ background: var(--color-bg-tertiary, rgba(255,255,255,0.05));
7165
+ border-radius: 4px;
7166
+ padding: 0.0625rem 0.375rem;
7167
+ }
7168
+ .extension-units {
7169
+ font-size: 0.6875rem;
7170
+ color: var(--color-text-muted);
7171
+ }
7172
+ .extension-installed {
7173
+ font-size: 0.6875rem;
7174
+ color: var(--color-success, #16a34a);
7175
+ background: var(--color-success-bg, rgba(22,163,74,0.12));
7176
+ border-radius: 4px;
7177
+ padding: 0.0625rem 0.375rem;
7178
+ }
7179
+ .extension-desc {
7180
+ font-size: 0.75rem;
7181
+ color: var(--color-text-secondary);
7182
+ line-height: 1.5;
7183
+ margin-bottom: 0.375rem;
7184
+ }
7185
+ .extension-meta {
7186
+ display: flex;
7187
+ align-items: center;
7188
+ gap: 0.75rem;
7189
+ }
7190
+ .extension-homepage {
7191
+ font-size: 0.6875rem;
7192
+ color: var(--color-accent, #6366f1);
7193
+ text-decoration: none;
7194
+ }
7195
+ .extension-homepage:hover { text-decoration: underline; }
7196
+
7197
+ /* Clickable catalog card + detail view */
7198
+ .extension-card-clickable { cursor: pointer; }
7199
+
7200
+ .extension-detail {
7201
+ flex: 1;
7202
+ overflow-y: auto;
7203
+ padding: 1.75rem 2.25rem;
7204
+ }
7205
+ .extension-detail-head { margin-bottom: 1rem; }
7206
+ .extension-detail-back {
7207
+ display: inline-flex;
7208
+ align-items: center;
7209
+ gap: 0.25rem;
7210
+ background: transparent;
7211
+ border: none;
7212
+ color: var(--color-text-secondary);
7213
+ font-size: 0.8125rem;
7214
+ cursor: pointer;
7215
+ padding: 0.3rem 0.6rem;
7216
+ border-radius: 6px;
7217
+ margin-left: -0.6rem;
7218
+ transition: background 0.15s, color 0.15s;
7219
+ }
7220
+ .extension-detail-back:hover {
7221
+ color: var(--color-text-primary);
7222
+ background: var(--color-bg-hover);
7223
+ }
7224
+ .extension-detail-hero {
7225
+ display: flex;
7226
+ align-items: flex-start;
7227
+ gap: 0.875rem;
7228
+ padding-bottom: 1rem;
7229
+ border-bottom: 1px solid var(--color-border-primary);
7230
+ }
7231
+ .extension-detail-heading { flex: 1; min-width: 0; }
7232
+ .extension-emoji-lg { font-size: 2.25rem; }
7233
+ .extension-name-lg { font-size: 1.0625rem; }
7234
+ .extension-detail-block { margin-top: 1.25rem; }
7235
+ .extension-detail-block-title {
7236
+ font-size: 0.8125rem;
7237
+ font-weight: 600;
7238
+ color: var(--color-text-primary);
7239
+ margin: 0 0 0.625rem;
7240
+ }
7241
+ .extension-detail-section { margin-bottom: 0.875rem; }
7242
+ .extension-detail-section-title {
7243
+ font-size: 0.6875rem;
7244
+ font-weight: 600;
7245
+ text-transform: uppercase;
7246
+ letter-spacing: 0.03em;
7247
+ color: var(--color-text-muted);
7248
+ margin: 0 0 0.375rem;
7249
+ }
7250
+ .extension-contrib-list,
7251
+ .extension-version-list { list-style: none; margin: 0; padding: 0; }
7252
+ .extension-contrib-item {
7253
+ padding: 0.5rem 0.75rem;
7254
+ background: var(--color-bg-secondary);
7255
+ border: 1px solid var(--color-border-primary);
7256
+ border-radius: 6px;
7257
+ margin-bottom: 0.375rem;
7258
+ }
7259
+ .extension-contrib-title {
7260
+ display: block;
7261
+ font-size: 0.8125rem;
7262
+ font-weight: 600;
7263
+ color: var(--color-text-primary);
7264
+ }
7265
+ .extension-contrib-desc {
7266
+ display: block;
7267
+ font-size: 0.75rem;
7268
+ color: var(--color-text-secondary);
7269
+ line-height: 1.5;
7270
+ margin-top: 0.125rem;
7271
+ }
7272
+ .extension-version-item {
7273
+ padding: 0.5rem 0.75rem;
7274
+ border-bottom: 1px solid var(--color-border-primary);
7275
+ }
7276
+ .extension-version-item:last-child { border-bottom: none; }
7277
+ .extension-version-row {
7278
+ display: flex;
7279
+ align-items: center;
7280
+ gap: 0.5rem;
7281
+ }
7282
+ .extension-version-date {
7283
+ font-size: 0.6875rem;
7284
+ color: var(--color-text-muted);
7285
+ }
7286
+ .extension-version-notes {
7287
+ font-size: 0.75rem;
7288
+ color: var(--color-text-secondary);
7289
+ line-height: 1.5;
7290
+ margin-top: 0.25rem;
7291
+ white-space: pre-wrap;
7292
+ }
7293
+ .extension-detail-loading { display: flex; flex-direction: column; gap: 0.5rem; }
7294
+
7295
+ .extension-detail-actions {
7296
+ display: flex;
7297
+ align-items: center;
7298
+ gap: 0.5rem;
7299
+ margin-top: 0.75rem;
7300
+ }
7301
+ .extension-disabled {
7302
+ font-size: 0.6875rem;
7303
+ color: var(--color-text-secondary);
7304
+ background: var(--color-surface-hover, rgba(0,0,0,0.06));
7305
+ border-radius: 4px;
7306
+ padding: 0.0625rem 0.375rem;
7307
+ }
7308
+ .extension-action {
7309
+ font-size: 0.75rem;
7310
+ padding: 0.3125rem 0.75rem;
7311
+ border-radius: 6px;
7312
+ border: 1px solid var(--color-border);
7313
+ background: var(--color-surface);
7314
+ color: var(--color-text);
7315
+ cursor: pointer;
7316
+ }
7317
+ .extension-action:hover { background: var(--color-surface-hover, rgba(0,0,0,0.04)); }
7318
+ .extension-action-remove {
7319
+ color: var(--color-danger, #dc2626);
7320
+ border-color: var(--color-danger-border, rgba(220,38,38,0.4));
7321
+ }
7322
+ .extension-action-remove:hover { background: var(--color-danger-bg, rgba(220,38,38,0.08)); }
7323
+
7324
+ /* Brand Skill card */
7325
+ .brand-skill-card {
7326
+ background: var(--color-bg-secondary);
7327
+ border: 1px solid var(--color-border-primary);
7328
+ border-radius: 8px;
7329
+ padding: 0.875rem 1rem;
7330
+ transition: border-color .15s;
7331
+ }
7332
+ .brand-skill-card:hover { border-color: var(--color-text-muted); }
7333
+ .brand-skill-card-main {
7334
+ display: flex;
7335
+ align-items: center;
7336
+ gap: 0.75rem;
7337
+ }
7338
+ .brand-skill-info { flex: 1; min-width: 0; }
7339
+ .brand-skill-title {
7340
+ display: flex;
7341
+ align-items: center;
7342
+ gap: 0.375rem;
7343
+ margin-bottom: 0.25rem;
7344
+ }
7345
+ .brand-skill-name {
6802
7346
  font-size: 0.8125rem;
6803
7347
  font-weight: 600;
6804
7348
  color: var(--color-text-primary);
@@ -8184,6 +8728,8 @@ body.setup-mode[data-theme="dark"] {
8184
8728
  flex-shrink: 0;
8185
8729
  }
8186
8730
 
8731
+ .brand-warning-bar > span { flex: 1; }
8732
+
8187
8733
  .brand-warning-bar button {
8188
8734
  background: transparent;
8189
8735
  border: none;
@@ -8194,6 +8740,20 @@ body.setup-mode[data-theme="dark"] {
8194
8740
  opacity: 0.7;
8195
8741
  }
8196
8742
 
8743
+ .brand-warning-bar .brand-warning-renew-btn {
8744
+ background: transparent;
8745
+ border: 1px solid currentColor;
8746
+ border-radius: var(--radius-sm, 4px);
8747
+ color: var(--color-warning);
8748
+ cursor: pointer;
8749
+ font-size: 0.75rem;
8750
+ font-weight: 600;
8751
+ padding: 0.2rem 0.6rem;
8752
+ opacity: 0.9;
8753
+ flex-shrink: 0;
8754
+ white-space: nowrap;
8755
+ }
8756
+
8197
8757
  .brand-warning-bar button:hover { opacity: 1; }
8198
8758
 
8199
8759
  /* ── Brand activation banner (top info bar, replaces full-screen panel) ──── */
@@ -9353,449 +9913,88 @@ body.setup-mode[data-theme="dark"] {
9353
9913
  display: inline-flex;
9354
9914
  align-items: center;
9355
9915
  gap: 0.3125rem;
9356
- transition: background 0.15s, border-color 0.15s, color 0.15s;
9357
- }
9358
-
9359
- .btn-memory-curate:hover,
9360
- .btn-memory-edit:hover {
9361
- border-color: var(--color-text-primary);
9362
- background: var(--color-bg-hover);
9363
- }
9364
-
9365
- .btn-memory-delete {
9366
- color: var(--color-text-primary);
9367
- }
9368
- .btn-memory-delete:hover {
9369
- border-color: var(--color-error);
9370
- color: var(--color-error);
9371
- background: var(--color-error-bg);
9372
- }
9373
-
9374
- .btn-memory-expand {
9375
- min-width: 1.75rem;
9376
- justify-content: center;
9377
- color: var(--color-text-muted);
9378
- }
9379
-
9380
- .btn-memory-expand:hover { color: var(--color-text-primary); }
9381
- .btn-memory-expand.expanded svg { transform: rotate(180deg); }
9382
- .btn-memory-expand svg { transition: transform 0.2s; }
9383
-
9384
- .memory-card-body {
9385
- padding: 0.25rem 1rem 0.875rem 1rem;
9386
- border-top: 1px solid var(--color-border-primary);
9387
- background: var(--color-bg-secondary);
9388
- font-size: 0.8125rem;
9389
- line-height: 1.6;
9390
- color: var(--color-text-primary);
9391
- }
9392
-
9393
- .memory-card-body h1,
9394
- .memory-card-body h2,
9395
- .memory-card-body h3 {
9396
- margin: 0.625rem 0 0.375rem;
9397
- font-weight: 600;
9398
- }
9399
-
9400
- .memory-card-body p { margin: 0.375rem 0; }
9401
- .memory-card-body ul,
9402
- .memory-card-body ol { margin: 0.25rem 0 0.5rem 1.25rem; padding: 0; }
9403
- .memory-card-body li { margin: 2px 0; }
9404
- .memory-card-body code {
9405
- background: var(--color-bg-hover);
9406
- padding: 1px 0.3125rem;
9407
- border-radius: 4px;
9408
- font-family: ui-monospace, "SF Mono", Menlo, monospace;
9409
- font-size: 0.75rem;
9410
- }
9411
-
9412
- .memory-card-loading {
9413
- padding: 0.625rem 0;
9414
- text-align: center;
9415
- color: var(--color-text-muted);
9416
- font-size: 0.75rem;
9417
- font-style: italic;
9418
- }
9419
-
9420
-
9421
- /* ── Mobile responsive (≤48rem) ─────────────────────────────────────────── */
9422
-
9423
-
9424
- /* ══════════════════════════════════════════════════════════════════════════
9425
- Creator Hub — Creator Center
9426
- ══════════════════════════════════════════════════════════════════════════ */
9427
-
9428
- #creator-panel {
9429
- display: flex;
9430
- flex-direction: column;
9431
- height: 100%;
9432
- overflow: hidden;
9433
- }
9434
-
9435
- #creator-body {
9436
- flex: 1;
9437
- overflow-y: auto;
9438
- display: flex;
9439
- flex-direction: column;
9440
- padding: 2rem 2rem 3.75rem;
9441
- gap: 1.75rem;
9442
- }
9443
-
9444
- /* ── Section blocks ────────────────────────────────────────────────────── */
9445
- .creator-section-block {
9446
- display: flex;
9447
- flex-direction: column;
9448
- gap: 0.625rem;
9449
- }
9450
-
9451
- .creator-section-header {
9452
- display: flex;
9453
- align-items: baseline;
9454
- gap: 0.625rem;
9455
- padding-bottom: 0.375rem;
9456
- border-bottom: 1px solid var(--color-border-primary);
9457
- margin-bottom: 2px;
9458
- }
9459
-
9460
- .creator-section-label {
9461
- font-size: 0.75rem;
9462
- font-weight: 600;
9463
- color: var(--color-text-secondary);
9464
- text-transform: uppercase;
9465
- letter-spacing: 0.5px;
9466
- }
9467
-
9468
- .creator-section-hint {
9469
- font-size: 0.6875rem;
9470
- color: var(--color-text-muted);
9471
- }
9472
-
9473
- .creator-list {
9474
- display: flex;
9475
- flex-direction: column;
9476
- gap: 0.5rem;
9477
- }
9478
-
9479
- /* ── Skill Card base ───────────────────────────────────────────────────── */
9480
- .creator-skill-card {
9481
- background: var(--color-bg-secondary);
9482
- border: 1px solid var(--color-border-primary);
9483
- border-radius: 8px;
9484
- padding: 0.875rem 1rem;
9485
- margin-bottom: 0.75rem;
9486
- transition: border-color .15s;
9487
- }
9488
- .creator-skill-card:last-child {
9489
- margin-bottom: 0;
9490
- }
9491
- .creator-skill-card:hover { border-color: var(--color-text-muted); }
9492
-
9493
- .creator-card-main {
9494
- display: flex;
9495
- align-items: center;
9496
- gap: 0.75rem;
9497
- }
9498
- .creator-card-info { flex: 1; min-width: 0; }
9499
- .creator-card-actions {
9500
- display: flex;
9501
- align-items: center;
9502
- gap: 0.5rem;
9503
- flex-shrink: 0;
9504
- }
9505
- .creator-card-title {
9506
- display: flex;
9507
- align-items: center;
9508
- gap: 0.5rem;
9509
- margin-bottom: 0.25rem;
9510
- flex-wrap: wrap;
9511
- }
9512
- .creator-skill-name {
9513
- font-size: 0.8125rem;
9514
- font-weight: 600;
9515
- color: var(--color-text-primary);
9516
- }
9517
- .creator-card-desc {
9518
- font-size: 0.75rem;
9519
- color: var(--color-text-tertiary);
9520
- line-height: 1.5;
9521
- white-space: nowrap;
9522
- overflow: hidden;
9523
- text-overflow: ellipsis;
9524
- }
9525
-
9526
- /* ── Card meta row (version + download count) ──────────────────────────── */
9527
- .creator-card-meta {
9528
- display: flex;
9529
- align-items: center;
9530
- gap: 0.75rem;
9531
- margin-top: 0.3125rem;
9532
- }
9533
-
9534
- .creator-version {
9535
- font-size: 0.6875rem;
9536
- color: var(--color-text-muted);
9537
- }
9538
-
9539
- .creator-dl-count {
9540
- display: inline-flex;
9541
- align-items: center;
9542
- gap: 0.25rem;
9543
- font-size: 0.6875rem;
9544
- color: var(--color-text-muted);
9545
- }
9546
-
9547
- /* ── Badges ────────────────────────────────────────────────────────────── */
9548
- .creator-badge {
9549
- font-size: 0.625rem;
9550
- font-weight: 600;
9551
- padding: 2px 0.4375rem;
9552
- border-radius: 10px;
9553
- letter-spacing: 0.3px;
9554
- flex-shrink: 0;
9555
- }
9556
- .creator-badge-published {
9557
- background: var(--color-success-bg);
9558
- color: var(--color-success);
9559
- border: 1px solid var(--color-success-border);
9560
- }
9561
- .creator-badge-local {
9562
- background: rgba(250, 173, 20, 0.1);
9563
- color: #b8860b;
9564
- border: 1px solid rgba(250, 173, 20, 0.3);
9565
- }
9566
- [data-theme="dark"] .creator-badge-local {
9567
- color: #f5c842;
9568
- background: rgba(245, 200, 66, 0.1);
9569
- border-color: rgba(245, 200, 66, 0.25);
9570
- }
9571
-
9572
- /* "Has local changes" badge — orange dot */
9573
- .creator-changes-badge {
9574
- font-size: 0.6875rem;
9575
- font-weight: 500;
9576
- color: #d97706;
9577
- flex-shrink: 0;
9578
- }
9579
- [data-theme="dark"] .creator-changes-badge {
9580
- color: #fbbf24;
9581
- }
9582
-
9583
- /* Local-overrides-brand badge */
9584
- .creator-shadow-badge {
9585
- font-size: 0.625rem;
9586
- font-weight: 600;
9587
- padding: 2px 0.4375rem;
9588
- border-radius: 10px;
9589
- background: rgba(168, 85, 247, 0.1);
9590
- color: #8b5cf6;
9591
- border: 1px solid rgba(168, 85, 247, 0.3);
9592
- cursor: help;
9593
- }
9594
- [data-theme="dark"] .creator-shadow-badge {
9595
- background: rgba(139, 92, 246, 0.15);
9596
- color: #a78bfa;
9597
- border-color: rgba(139, 92, 246, 0.3);
9598
- }
9599
-
9600
- /* ── Publish / Update button ───────────────────────────────────────────── */
9601
- .creator-upload-wrap { position: relative; }
9602
-
9603
- .btn-creator-publish {
9604
- display: flex;
9605
- align-items: center;
9606
- gap: 0.3125rem;
9607
- padding: 0.375rem 0.75rem;
9608
- border-radius: 7px;
9609
- font-size: 0.75rem;
9610
- font-weight: 500;
9611
- cursor: pointer;
9612
- background: var(--color-accent-primary);
9613
- color: #fff;
9614
- border: none;
9615
- transition: background-color 0.2s, opacity 0.2s;
9616
- white-space: nowrap;
9617
- }
9618
- .btn-creator-publish:hover:not(:disabled) {
9619
- background: var(--color-accent-hover);
9620
- }
9621
- .btn-creator-publish:disabled {
9622
- opacity: 0.6;
9623
- cursor: not-allowed;
9624
- }
9625
- .btn-creator-publish[data-state="success"] { background: var(--color-success, #22c55e); }
9626
- .btn-creator-publish[data-state="error"] { background: var(--color-error, #ef4444); }
9627
-
9628
- /* Progress bar (reuse skill-upload-progress-* classes) */
9629
- .creator-upload-wrap .skill-upload-progress-wrap {
9630
- position: absolute;
9631
- bottom: -0.1875rem;
9632
- left: 0; right: 0;
9633
- height: 2px;
9634
- background: var(--color-border-primary);
9635
- border-radius: 1px;
9636
- overflow: hidden;
9637
- }
9638
- .creator-upload-wrap .skill-upload-progress-bar {
9639
- height: 100%;
9640
- background: var(--color-accent-primary);
9641
- border-radius: 1px;
9642
- transition: width 0.15s ease;
9643
- }
9644
- .creator-upload-wrap .skill-upload-progress-bar[data-state="success"] { background: var(--color-success, #22c55e); }
9645
- .creator-upload-wrap .skill-upload-progress-bar[data-state="error"] { background: var(--color-error, #ef4444); }
9646
-
9647
- /* Iterate button */
9648
- .btn-creator-iterate {
9649
- display: flex;
9650
- align-items: center;
9651
- gap: 0.3125rem;
9652
- padding: 0.375rem 0.75rem;
9653
- border-radius: 7px;
9654
- font-size: 0.75rem;
9655
- font-weight: 500;
9656
- cursor: pointer;
9657
- background: transparent;
9658
- color: var(--color-text-secondary);
9659
- border: 1px solid var(--color-border-primary);
9660
- transition: background-color 0.2s, color 0.2s, border-color 0.2s;
9661
- white-space: nowrap;
9662
- }
9663
- .btn-creator-iterate:hover {
9664
- background: var(--color-bg-hover);
9665
- color: var(--color-text-primary);
9666
- border-color: var(--color-border-secondary);
9667
- }
9668
-
9669
- /* Up-to-date (disabled) button */
9670
- .btn-creator-up-to-date {
9671
- display: flex;
9672
- align-items: center;
9673
- gap: 0.3125rem;
9674
- padding: 0.375rem 0.75rem;
9675
- border-radius: 7px;
9676
- font-size: 0.75rem;
9677
- font-weight: 500;
9678
- cursor: not-allowed;
9679
- background: transparent;
9680
- color: var(--color-text-disabled, var(--color-text-muted));
9681
- border: 1px solid var(--color-border-muted, var(--color-border-primary));
9682
- opacity: 0.55;
9683
- white-space: nowrap;
9684
- }
9685
-
9686
- /* ── Promo banner (non-licensed users) ─────────────────────────────────── */
9687
- #creator-promo-banner {
9688
- display: flex;
9689
- align-items: center;
9690
- gap: 0.5rem;
9691
- padding: 0.625rem 0.875rem;
9692
- background: var(--color-bg-secondary);
9693
- border: 1px solid var(--color-border-primary);
9694
- border-radius: 8px;
9695
- font-size: 0.7812rem;
9696
- color: var(--color-text-secondary);
9916
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
9697
9917
  }
9698
- #creator-promo-banner svg {
9699
- flex-shrink: 0;
9700
- color: var(--color-accent-primary);
9701
- opacity: 0.8;
9918
+
9919
+ .btn-memory-curate:hover,
9920
+ .btn-memory-edit:hover {
9921
+ border-color: var(--color-text-primary);
9922
+ background: var(--color-bg-hover);
9702
9923
  }
9703
- #creator-promo-banner a {
9704
- margin-left: auto;
9705
- white-space: nowrap;
9706
- color: var(--color-accent-primary);
9707
- text-decoration: none;
9708
- font-weight: 500;
9924
+
9925
+ .btn-memory-delete {
9926
+ color: var(--color-text-primary);
9709
9927
  }
9710
- #creator-promo-banner a:hover {
9711
- text-decoration: underline;
9928
+ .btn-memory-delete:hover {
9929
+ border-color: var(--color-error);
9930
+ color: var(--color-error);
9931
+ background: var(--color-error-bg);
9712
9932
  }
9713
9933
 
9714
- /* ── Cloud skills lock (non-licensed users) ─────────────────────────────── */
9715
- #creator-cloud-lock {
9716
- display: flex;
9717
- align-items: center;
9718
- gap: 0.5rem;
9719
- padding: 0.75rem 0.875rem;
9720
- border: 1px dashed var(--color-border-primary);
9721
- border-radius: 8px;
9722
- font-size: 0.7812rem;
9934
+ .btn-memory-expand {
9935
+ min-width: 1.75rem;
9936
+ justify-content: center;
9723
9937
  color: var(--color-text-muted);
9724
9938
  }
9725
- #creator-cloud-lock svg {
9726
- flex-shrink: 0;
9727
- opacity: 0.5;
9728
- }
9729
- #creator-cloud-lock a {
9730
- margin-left: auto;
9731
- white-space: nowrap;
9732
- color: var(--color-accent-primary);
9733
- text-decoration: none;
9734
- font-weight: 500;
9735
- opacity: 0.85;
9736
- }
9737
- #creator-cloud-lock a:hover {
9738
- text-decoration: underline;
9739
- }
9740
9939
 
9741
- /* ── Create New Skill entry card ───────────────────────────────────────── */
9742
- .creator-new-card {
9743
- display: flex;
9744
- align-items: center;
9745
- gap: 0.625rem;
9746
- padding: 0.875rem 1rem;
9940
+ .btn-memory-expand:hover { color: var(--color-text-primary); }
9941
+ .btn-memory-expand.expanded svg { transform: rotate(180deg); }
9942
+ .btn-memory-expand svg { transition: transform 0.2s; }
9943
+
9944
+ .memory-card-body {
9945
+ padding: 0.25rem 1rem 0.875rem 1rem;
9946
+ border-top: 1px solid var(--color-border-primary);
9747
9947
  background: var(--color-bg-secondary);
9748
- border: 1px dashed var(--color-border-primary);
9749
- border-radius: 8px;
9750
- cursor: pointer;
9751
9948
  font-size: 0.8125rem;
9752
- font-weight: 500;
9753
- color: var(--color-text-secondary);
9754
- transition: border-color .15s, color .15s, background .15s;
9949
+ line-height: 1.6;
9950
+ color: var(--color-text-primary);
9755
9951
  }
9756
- .creator-new-card:hover {
9757
- border-color: var(--color-accent-primary);
9758
- color: var(--color-accent-primary);
9759
- background: var(--color-accent-bg, rgba(59,130,246,0.04));
9952
+
9953
+ .memory-card-body h1,
9954
+ .memory-card-body h2,
9955
+ .memory-card-body h3 {
9956
+ margin: 0.625rem 0 0.375rem;
9957
+ font-weight: 600;
9760
9958
  }
9761
- .creator-new-arrow {
9762
- margin-left: auto;
9763
- opacity: 0.5;
9764
- transition: opacity .15s, transform .15s;
9959
+
9960
+ .memory-card-body p { margin: 0.375rem 0; }
9961
+ .memory-card-body ul,
9962
+ .memory-card-body ol { margin: 0.25rem 0 0.5rem 1.25rem; padding: 0; }
9963
+ .memory-card-body li { margin: 2px 0; }
9964
+ .memory-card-body code {
9965
+ background: var(--color-bg-hover);
9966
+ padding: 1px 0.3125rem;
9967
+ border-radius: 4px;
9968
+ font-family: ui-monospace, "SF Mono", Menlo, monospace;
9969
+ font-size: 0.75rem;
9765
9970
  }
9766
- .creator-new-card:hover .creator-new-arrow {
9767
- opacity: 1;
9768
- transform: translateX(3px);
9971
+
9972
+ .memory-card-loading {
9973
+ padding: 0.625rem 0;
9974
+ text-align: center;
9975
+ color: var(--color-text-muted);
9976
+ font-size: 0.75rem;
9977
+ font-style: italic;
9769
9978
  }
9770
9979
 
9771
- /* ── State messages ────────────────────────────────────────────────────── */
9772
- .creator-loading,
9773
- .creator-empty {
9980
+
9981
+ /* ── Mobile responsive (≤48rem) ─────────────────────────────────────────── */
9982
+
9983
+ /* ── Trash panel · Recently Deleted ────────────────────────────────── */
9984
+
9985
+ .trash-loading,
9986
+ .trash-empty {
9774
9987
  text-align: center;
9775
9988
  color: var(--color-text-tertiary);
9776
9989
  font-size: 0.8125rem;
9777
9990
  padding: 1.5rem 0;
9778
9991
  }
9779
- .creator-error {
9992
+ .trash-error {
9780
9993
  text-align: center;
9781
9994
  color: var(--color-error, #ef4444);
9782
9995
  font-size: 0.8125rem;
9783
9996
  padding: 1.5rem 0;
9784
9997
  }
9785
- .creator-notice {
9786
- font-size: 0.75rem;
9787
- padding: 0.5rem 0.75rem;
9788
- border-radius: 6px;
9789
- margin-bottom: 0.25rem;
9790
- }
9791
- .creator-notice-warn {
9792
- background: rgba(250, 173, 20, 0.1);
9793
- color: #b8860b;
9794
- border: 1px solid rgba(250, 173, 20, 0.3);
9795
- }
9796
- [data-theme="dark"] .creator-notice-warn { color: #f5c842; }
9797
-
9798
- /* ── Trash panel · Recently Deleted ────────────────────────────────── */
9799
9998
 
9800
9999
  /* Tab switches (file trash / session trash) — mirrors skills-tabs pattern */
9801
10000
  #trash-tabs {
@@ -9803,7 +10002,7 @@ body.setup-mode[data-theme="dark"] {
9803
10002
  align-items: center;
9804
10003
  justify-content: space-between;
9805
10004
  border-bottom: 1px solid var(--color-border-primary);
9806
- margin-bottom: 0.75rem;
10005
+ margin-bottom: 0.25rem;
9807
10006
  }
9808
10007
  .trash-tabs-left {
9809
10008
  display: flex;
@@ -9908,11 +10107,68 @@ body.setup-mode[data-theme="dark"] {
9908
10107
  opacity: .5;
9909
10108
  cursor: not-allowed;
9910
10109
  }
10110
+
10111
+ /* Skeleton card wrapper — uses global .skel for lines + animation */
10112
+ .trash-session-skeleton {
10113
+ background: var(--color-bg-secondary);
10114
+ border: 1px solid var(--color-border-primary);
10115
+ border-radius: 10px;
10116
+ padding: 0.75rem 1rem;
10117
+ display: flex;
10118
+ align-items: center;
10119
+ gap: 0.75rem;
10120
+ }
10121
+ .trash-session-skeleton-info {
10122
+ flex: 1;
10123
+ min-width: 0;
10124
+ display: flex;
10125
+ flex-direction: column;
10126
+ gap: 0.375rem;
10127
+ }
10128
+ .trash-skeleton-actions {
10129
+ display: flex;
10130
+ gap: 0.375rem;
10131
+ flex-shrink: 0;
10132
+ }
10133
+ .trash-skeleton-btn {
10134
+ width: 3.5rem;
10135
+ height: 1.625rem;
10136
+ border-radius: 5px;
10137
+ }
10138
+ .trash-session-hint {
10139
+ margin: -0.25rem 0;
10140
+ font-size: 0.75rem;
10141
+ color: var(--color-text-secondary);
10142
+ }
9911
10143
  .trash-summary {
9912
10144
  font-size: 0.6875rem;
9913
10145
  color: var(--color-text-muted);
9914
10146
  margin-right: auto;
9915
10147
  }
10148
+ .trash-filter-bar {
10149
+ display: flex;
10150
+ align-items: center;
10151
+ gap: 0.375rem;
10152
+ }
10153
+ .trash-filter-chip {
10154
+ font-size: 0.6875rem;
10155
+ padding: 0.2rem 0.55rem;
10156
+ border-radius: 5px;
10157
+ border: 1px solid var(--color-border-primary);
10158
+ background: transparent;
10159
+ color: var(--color-text-muted);
10160
+ cursor: pointer;
10161
+ transition: background 0.14s, color 0.14s, border-color 0.14s;
10162
+ }
10163
+ .trash-filter-chip:hover {
10164
+ border-color: var(--color-accent-primary);
10165
+ color: var(--color-text-primary);
10166
+ }
10167
+ .trash-filter-chip.active {
10168
+ background: var(--color-accent-primary);
10169
+ border-color: var(--color-accent-primary);
10170
+ color: #fff;
10171
+ }
9916
10172
  .trash-actions {
9917
10173
  display: flex;
9918
10174
  align-items: center;
@@ -11634,16 +11890,16 @@ body.setup-mode[data-theme="dark"] {
11634
11890
  .share-modal {
11635
11891
  position: relative;
11636
11892
  width: 100%;
11637
- max-width: 660px;
11893
+ max-width: 780px;
11638
11894
  max-height: 90vh;
11639
11895
  overflow-y: auto;
11640
11896
  background: var(--color-bg-card);
11641
11897
  border: 1px solid var(--color-border-primary);
11642
11898
  border-radius: var(--radius-lg, 14px);
11643
- box-shadow: 0 18px 48px rgba(15, 18, 28, 0.22);
11644
- padding: 24px;
11645
- transform: translateY(8px) scale(.98);
11646
- transition: transform .18s ease;
11899
+ box-shadow: 0 24px 64px rgba(15, 18, 28, 0.28);
11900
+ padding: 28px;
11901
+ transform: translateY(10px) scale(.97);
11902
+ transition: transform .22s ease;
11647
11903
  }
11648
11904
  .share-overlay.open .share-modal { transform: translateY(0) scale(1); }
11649
11905
 
@@ -11657,59 +11913,81 @@ body.setup-mode[data-theme="dark"] {
11657
11913
  line-height: 1;
11658
11914
  color: var(--color-text-muted);
11659
11915
  cursor: pointer;
11916
+ width: 32px;
11917
+ height: 32px;
11918
+ border-radius: 8px;
11919
+ display: flex;
11920
+ align-items: center;
11921
+ justify-content: center;
11922
+ transition: background 0.15s ease, color 0.15s ease;
11923
+ }
11924
+ .share-close:hover {
11925
+ color: var(--color-text-primary);
11926
+ background: var(--color-bg-hover, rgba(0,0,0,0.07));
11660
11927
  }
11661
- .share-close:hover { color: var(--color-text-primary); }
11662
11928
 
11663
11929
  .share-title {
11664
11930
  margin: 0 0 4px;
11665
- font-size: 1.0625rem;
11931
+ font-size: 1.125rem;
11666
11932
  font-weight: 700;
11667
11933
  color: var(--color-text-primary);
11668
11934
  }
11669
11935
  .share-subtitle {
11670
- margin: 0 0 16px;
11936
+ margin: 0 0 20px;
11671
11937
  font-size: 0.8125rem;
11672
11938
  color: var(--color-text-tertiary);
11673
11939
  }
11674
11940
 
11675
11941
  .share-body {
11676
11942
  display: flex;
11677
- gap: 20px;
11678
- align-items: flex-start;
11943
+ gap: 24px;
11944
+ align-items: stretch;
11679
11945
  }
11680
11946
  .share-controls {
11681
11947
  flex: 1;
11682
11948
  min-width: 0;
11949
+ display: flex;
11950
+ flex-direction: column;
11951
+ }
11952
+ .share-actions {
11953
+ margin-top: auto;
11683
11954
  }
11684
11955
 
11685
11956
  .share-poster-wrap {
11686
- display: flex;
11687
- justify-content: center;
11688
11957
  flex-shrink: 0;
11958
+ display: flex;
11689
11959
  }
11690
11960
  .share-poster-img {
11691
- width: 220px;
11961
+ width: 250px;
11962
+ object-fit: cover;
11692
11963
  border-radius: var(--radius-md, 10px);
11693
- box-shadow: 0 6px 18px rgba(15, 18, 28, 0.16);
11964
+ box-shadow: 0 8px 28px rgba(15, 18, 28, 0.22);
11965
+ cursor: pointer;
11966
+ transition: box-shadow .2s ease;
11967
+ }
11968
+ .share-poster-img:hover {
11969
+ box-shadow: 0 12px 36px rgba(15, 18, 28, 0.3);
11694
11970
  }
11695
11971
 
11696
- @media (max-width: 560px) {
11972
+ @media (max-width: 620px) {
11697
11973
  .share-body { flex-direction: column; align-items: stretch; }
11698
11974
  .share-poster-wrap { margin-bottom: 4px; }
11699
- .share-poster-img { width: 180px; }
11975
+ .share-poster-img { width: 100%; height: 200px; }
11700
11976
  }
11701
11977
 
11702
11978
  .share-row-label {
11703
- font-size: 0.75rem;
11979
+ font-size: 0.6875rem;
11704
11980
  font-weight: 600;
11705
- color: var(--color-text-tertiary);
11981
+ letter-spacing: .04em;
11982
+ text-transform: uppercase;
11983
+ color: var(--color-text-muted);
11706
11984
  }
11707
11985
 
11708
11986
  .share-theme-row {
11709
11987
  display: flex;
11710
11988
  flex-direction: column;
11711
- gap: 6px;
11712
- margin-bottom: 14px;
11989
+ gap: 8px;
11990
+ margin-bottom: 16px;
11713
11991
  }
11714
11992
  .share-theme-chips {
11715
11993
  display: flex;
@@ -11717,29 +11995,46 @@ body.setup-mode[data-theme="dark"] {
11717
11995
  }
11718
11996
  .share-theme-chip {
11719
11997
  flex: 1;
11720
- height: 34px;
11998
+ height: 40px;
11721
11999
  border: 2px solid transparent;
11722
- border-radius: var(--radius-sm, 6px);
12000
+ border-radius: var(--radius-sm, 8px);
11723
12001
  cursor: pointer;
11724
12002
  position: relative;
11725
12003
  display: flex;
11726
12004
  align-items: center;
11727
12005
  justify-content: center;
11728
- transition: border-color .12s ease, transform .12s ease;
12006
+ gap: 6px;
12007
+ transition: border-color .14s ease, transform .14s ease, box-shadow .14s ease;
12008
+ box-shadow: 0 2px 6px rgba(0,0,0,.08);
12009
+ }
12010
+ .share-theme-chip:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,.14); }
12011
+ .share-theme-chip.is-active {
12012
+ border-color: var(--color-button-primary);
12013
+ box-shadow: 0 0 0 3px rgba(var(--color-button-primary-rgb, 124,58,237), .18);
11729
12014
  }
11730
- .share-theme-chip:hover { transform: translateY(-1px); }
11731
- .share-theme-chip.is-active { border-color: var(--color-button-primary); }
11732
12015
  .share-theme-name {
11733
12016
  font-size: 0.6875rem;
11734
12017
  font-weight: 700;
11735
- color: rgba(0,0,0,.55);
11736
- text-shadow: 0 1px 0 rgba(255,255,255,.4);
11737
12018
  pointer-events: none;
11738
12019
  }
12020
+ .share-theme-dot {
12021
+ width: 8px;
12022
+ height: 8px;
12023
+ border-radius: 50%;
12024
+ flex-shrink: 0;
12025
+ pointer-events: none;
12026
+ box-shadow: 0 0 0 1.5px rgba(255,255,255,.3);
12027
+ }
11739
12028
  .share-theme-chip[data-theme="geek"] .share-theme-name {
11740
12029
  color: rgba(255,255,255,.92);
11741
12030
  text-shadow: 0 1px 2px rgba(0,0,0,.4);
11742
12031
  }
12032
+ .share-theme-chip[data-theme="light"] .share-theme-name {
12033
+ color: rgba(15,23,42,.72);
12034
+ }
12035
+ .share-theme-chip[data-theme="warm"] .share-theme-name {
12036
+ color: rgba(124,45,18,.85);
12037
+ }
11743
12038
 
11744
12039
  .share-periods {
11745
12040
  display: inline-flex;
@@ -11771,7 +12066,7 @@ body.setup-mode[data-theme="dark"] {
11771
12066
  display: grid;
11772
12067
  grid-template-columns: repeat(4, 1fr);
11773
12068
  gap: 8px;
11774
- margin-bottom: 14px;
12069
+ margin-bottom: 16px;
11775
12070
  }
11776
12071
  .share-platform {
11777
12072
  padding: 9px 4px;
@@ -11779,22 +12074,31 @@ body.setup-mode[data-theme="dark"] {
11779
12074
  border-radius: var(--radius-sm, 6px);
11780
12075
  background: var(--color-bg-primary);
11781
12076
  color: var(--color-text-secondary);
11782
- font-size: 0.8125rem;
12077
+ font-size: 0.75rem;
11783
12078
  font-weight: 600;
11784
12079
  cursor: pointer;
11785
- transition: background .12s ease, border-color .12s ease, color .12s ease;
12080
+ display: flex;
12081
+ flex-direction: column;
12082
+ align-items: center;
12083
+ gap: 4px;
12084
+ transition: background .12s ease, border-color .12s ease, color .12s ease, transform .12s ease;
11786
12085
  }
11787
12086
  .share-platform:hover {
11788
12087
  background: var(--color-bg-hover);
11789
12088
  border-color: var(--color-border-strong);
12089
+ transform: translateY(-1px);
11790
12090
  }
11791
12091
  .share-platform.is-active {
11792
12092
  background: var(--color-button-primary);
11793
12093
  color: var(--color-button-primary-text);
11794
12094
  border-color: var(--color-button-primary);
11795
12095
  }
12096
+ .share-platform-icon {
12097
+ font-size: 1.125rem;
12098
+ line-height: 1;
12099
+ }
11796
12100
 
11797
- .share-editor { margin-bottom: 14px; }
12101
+ .share-editor { margin-bottom: 16px; }
11798
12102
  .share-editor-head {
11799
12103
  display: flex;
11800
12104
  align-items: center;
@@ -11809,25 +12113,29 @@ body.setup-mode[data-theme="dark"] {
11809
12113
  font-weight: 600;
11810
12114
  cursor: pointer;
11811
12115
  padding: 2px 4px;
12116
+ border-radius: 4px;
12117
+ transition: background .1s ease;
11812
12118
  }
11813
- .share-shuffle:hover { text-decoration: underline; }
12119
+ .share-shuffle:hover { background: var(--color-bg-hover); }
11814
12120
  .share-text {
11815
12121
  width: 100%;
11816
12122
  box-sizing: border-box;
11817
12123
  resize: vertical;
11818
- min-height: 72px;
12124
+ min-height: 80px;
11819
12125
  padding: 10px 12px;
11820
12126
  border: 1px solid var(--color-border-primary);
11821
12127
  border-radius: var(--radius-sm, 6px);
11822
12128
  background: var(--color-bg-primary);
11823
12129
  color: var(--color-text-primary);
11824
12130
  font-size: 0.8125rem;
11825
- line-height: 1.5;
12131
+ line-height: 1.6;
11826
12132
  font-family: inherit;
12133
+ transition: border-color .12s ease;
11827
12134
  }
11828
12135
  .share-text:focus {
11829
12136
  outline: none;
11830
12137
  border-color: var(--color-button-primary);
12138
+ box-shadow: 0 0 0 2px rgba(var(--color-button-primary-rgb, 124,58,237), .12);
11831
12139
  }
11832
12140
 
11833
12141
  .share-actions {
@@ -11835,28 +12143,44 @@ body.setup-mode[data-theme="dark"] {
11835
12143
  flex-wrap: wrap;
11836
12144
  gap: 8px;
11837
12145
  }
11838
- .share-btn-primary, .share-btn-secondary {
11839
- padding: 10px;
11840
- border-radius: var(--radius-sm, 6px);
11841
- font-size: 0.8125rem;
11842
- font-weight: 600;
11843
- cursor: pointer;
11844
- border: 1px solid var(--color-border-primary);
11845
- }
11846
12146
  .share-btn-primary {
11847
12147
  flex: 1 1 100%;
12148
+ padding: 12px 16px;
12149
+ border-radius: var(--radius-sm, 8px);
12150
+ font-size: 0.9375rem;
12151
+ font-weight: 700;
12152
+ cursor: pointer;
12153
+ border: none;
11848
12154
  background: var(--color-button-primary);
11849
12155
  color: var(--color-button-primary-text);
11850
- border-color: var(--color-button-primary);
12156
+ letter-spacing: .01em;
12157
+ transition: background .14s ease, transform .1s ease, box-shadow .14s ease;
12158
+ box-shadow: 0 2px 8px rgba(var(--color-button-primary-rgb, 124,58,237), .3);
11851
12159
  }
11852
- .share-btn-primary:hover { background: var(--color-button-primary-hover); }
12160
+ .share-btn-primary:hover {
12161
+ background: var(--color-button-primary-hover);
12162
+ transform: translateY(-1px);
12163
+ box-shadow: 0 4px 14px rgba(var(--color-button-primary-rgb, 124,58,237), .4);
12164
+ }
12165
+ .share-btn-primary:active { transform: translateY(0); }
11853
12166
  .share-btn-secondary {
11854
- flex: 1 1 calc(50% - 4px);
11855
- min-width: 90px;
12167
+ flex: 1 1 calc(33% - 6px);
12168
+ min-width: 80px;
12169
+ padding: 9px 8px;
12170
+ border-radius: var(--radius-sm, 6px);
12171
+ font-size: 0.8125rem;
12172
+ font-weight: 600;
12173
+ cursor: pointer;
12174
+ border: 1px solid var(--color-border-primary);
11856
12175
  background: var(--color-bg-primary);
11857
12176
  color: var(--color-text-secondary);
12177
+ transition: background .12s ease, border-color .12s ease, color .12s ease;
12178
+ }
12179
+ .share-btn-secondary:hover {
12180
+ background: var(--color-bg-hover);
12181
+ border-color: var(--color-border-strong);
12182
+ color: var(--color-text-primary);
11858
12183
  }
11859
- .share-btn-secondary:hover { background: var(--color-bg-hover); }
11860
12184
 
11861
12185
  #share-toggle-header svg { display: block; }
11862
12186
 
@@ -12136,10 +12460,9 @@ body.setup-mode[data-theme="dark"] {
12136
12460
  gap: 0.75rem;
12137
12461
  }
12138
12462
 
12139
- /* ── Billing / Trash / Creator pages ── */
12463
+ /* ── Billing / Trash pages ── */
12140
12464
  #billing-body { padding: 1rem 1rem 1rem; }
12141
12465
  #trash-body { padding: 1rem 1rem 1rem; }
12142
- #creator-body { padding: 1rem 1rem 1rem; }
12143
12466
 
12144
12467
  .billing-heatmap-row { grid-template-columns: 1fr; }
12145
12468
 
@@ -12297,5 +12620,41 @@ body.setup-mode[data-theme="dark"] {
12297
12620
  #workspace-overlay.active {
12298
12621
  display: block;
12299
12622
  }
12623
+
12624
+ /* ── New-session page: mobile ── */
12625
+ #welcome.new-session-page {
12626
+ position: fixed;
12627
+ top: 3rem;
12628
+ left: 0;
12629
+ right: 0;
12630
+ bottom: 0;
12631
+ overflow: hidden;
12632
+ padding: 0;
12633
+ justify-content: flex-start;
12634
+ height: auto;
12635
+ }
12636
+ .new-session-inner {
12637
+ height: 100%;
12638
+ display: flex;
12639
+ flex-direction: column;
12640
+ }
12641
+ .new-session-spacer {
12642
+ display: none;
12643
+ }
12644
+ .new-session-body {
12645
+ flex: 1 1 auto;
12646
+ min-height: 0;
12647
+ overflow-y: auto;
12648
+ -webkit-overflow-scrolling: touch;
12649
+ padding: 1.25rem 1rem 1rem;
12650
+ max-width: 100%;
12651
+ }
12652
+ .new-session-composer {
12653
+ flex: none;
12654
+ position: static;
12655
+ padding: 0.75rem 1rem 1rem;
12656
+ border-top: 1px solid var(--color-border-subtle);
12657
+ background: var(--color-bg-primary);
12658
+ }
12300
12659
  }
12301
12660