@gunjo/ui 0.0.1-alpha.0 → 0.0.1-alpha.2

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 (224) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +90 -0
  3. package/README.md +52 -91
  4. package/package.json +47 -6
  5. package/src/components/display/Accordion.tsx +185 -0
  6. package/src/components/display/AccordionGroup.tsx +155 -0
  7. package/src/components/display/ActionDataTable.tsx +413 -0
  8. package/src/components/display/ActivityTimelineCard.tsx +483 -0
  9. package/src/components/display/AnalyticsCard.tsx +167 -0
  10. package/src/components/display/AssetCard.tsx +242 -0
  11. package/src/components/display/AssetGrid.tsx +164 -0
  12. package/src/components/display/Avatar.tsx +127 -0
  13. package/src/components/display/AvatarGroup.tsx +131 -0
  14. package/src/components/{atoms → display}/Badge.tsx +3 -3
  15. package/src/components/display/BarChart.tsx +247 -0
  16. package/src/components/{molecules → display}/Card.tsx +1 -1
  17. package/src/components/display/Carousel.tsx +593 -0
  18. package/src/components/display/ChartLegend.tsx +124 -0
  19. package/src/components/display/ChatMessage.tsx +382 -0
  20. package/src/components/display/ChoroplethMap.tsx +613 -0
  21. package/src/components/display/Code.tsx +42 -0
  22. package/src/components/display/CodeBlock.tsx +338 -0
  23. package/src/components/display/ColorSwatch.tsx +71 -0
  24. package/src/components/display/ConcentricProgressCard.tsx +545 -0
  25. package/src/components/display/DataTable.tsx +522 -0
  26. package/src/components/display/DistributionBar.tsx +102 -0
  27. package/src/components/display/DocNote.tsx +36 -0
  28. package/src/components/display/DonutChart.tsx +257 -0
  29. package/src/components/display/EmptyState.tsx +44 -0
  30. package/src/components/display/FileTree.tsx +180 -0
  31. package/src/components/display/GaugeChart.tsx +219 -0
  32. package/src/components/display/HeatmapChart.tsx +266 -0
  33. package/src/components/display/Icon.tsx +66 -0
  34. package/src/components/display/ImagePreview.tsx +140 -0
  35. package/src/components/{atoms → display}/Img.tsx +46 -12
  36. package/src/components/display/LabeledDonutCard.tsx +475 -0
  37. package/src/components/display/LineChart.tsx +464 -0
  38. package/src/components/{molecules → display}/List.tsx +20 -13
  39. package/src/components/display/MarkdownRenderer.tsx +157 -0
  40. package/src/components/display/MetadataList.tsx +81 -0
  41. package/src/components/display/MiniDistributionBarCard.tsx +314 -0
  42. package/src/components/display/PieChart.tsx +234 -0
  43. package/src/components/display/QuadrantMatrix.tsx +330 -0
  44. package/src/components/display/RadarChart.tsx +335 -0
  45. package/src/components/display/RadialBarChart.tsx +264 -0
  46. package/src/components/display/RetentionCohortCard.tsx +350 -0
  47. package/src/components/display/RibbonChart.tsx +618 -0
  48. package/src/components/display/SearchableAccordion.tsx +270 -0
  49. package/src/components/display/SegmentTimelineCard.tsx +452 -0
  50. package/src/components/display/SegmentedGaugeCard.tsx +607 -0
  51. package/src/components/display/Spacer.tsx +51 -0
  52. package/src/components/display/SparklineChart.tsx +394 -0
  53. package/src/components/display/StackedBarChart.tsx +393 -0
  54. package/src/components/display/Statistic.tsx +70 -0
  55. package/src/components/{molecules → display}/Table.tsx +22 -7
  56. package/src/components/display/Tag.tsx +80 -0
  57. package/src/components/display/TagEditor.tsx +141 -0
  58. package/src/components/display/Timeline.tsx +121 -0
  59. package/src/components/{atoms → display}/ToolPill.tsx +42 -18
  60. package/src/components/display/TreeView.tsx +226 -0
  61. package/src/components/display/chart-tooltip.tsx +423 -0
  62. package/src/components/display/chart-utils.ts +71 -0
  63. package/src/components/display/circular-chart-utils.ts +147 -0
  64. package/src/components/display/generated/default-variant-keys.ts +90 -0
  65. package/src/components/display/generated/variant-keys.ts +169 -0
  66. package/src/components/{atoms → feedback}/Alert.tsx +12 -5
  67. package/src/components/feedback/Banner.tsx +90 -0
  68. package/src/components/{molecules → feedback}/NotificationCenter.tsx +64 -31
  69. package/src/components/feedback/ProgressWidget.tsx +44 -0
  70. package/src/components/{atoms → feedback}/Spinner.tsx +2 -2
  71. package/src/components/{molecules → feedback}/StatusBar.tsx +4 -4
  72. package/src/components/feedback/StatusScreen.tsx +148 -0
  73. package/src/components/{molecules → feedback}/Stepper.tsx +10 -5
  74. package/src/components/feedback/Toast.tsx +108 -0
  75. package/src/components/feedback/ToastProvider.tsx +78 -0
  76. package/src/components/feedback/generated/default-variant-keys.ts +16 -0
  77. package/src/components/feedback/generated/variant-keys.ts +21 -0
  78. package/src/components/generated/component-manifest.ts +1568 -454
  79. package/src/components/generated/component-style-hints.ts +1958 -718
  80. package/src/components/{atoms → inputs}/ButtonVariants.ts +13 -3
  81. package/src/components/inputs/Calendar.tsx +212 -0
  82. package/src/components/inputs/ChatComposer.tsx +75 -0
  83. package/src/components/inputs/ChatInput.tsx +528 -0
  84. package/src/components/{atoms → inputs}/Checkbox.tsx +2 -2
  85. package/src/components/inputs/Combobox.tsx +175 -0
  86. package/src/components/inputs/CopyButton.tsx +187 -0
  87. package/src/components/inputs/DatePicker.tsx +519 -0
  88. package/src/components/inputs/DateRangePicker.tsx +878 -0
  89. package/src/components/inputs/EditableField.tsx +182 -0
  90. package/src/components/{organisms → inputs}/FileUploader.tsx +24 -9
  91. package/src/components/inputs/FilterButton.tsx +163 -0
  92. package/src/components/{molecules → inputs}/Form.tsx +20 -3
  93. package/src/components/{atoms → inputs}/Input.tsx +2 -0
  94. package/src/components/inputs/InputOTP.tsx +75 -0
  95. package/src/components/inputs/Mention.tsx +279 -0
  96. package/src/components/inputs/NumberInput.tsx +109 -0
  97. package/src/components/inputs/PasswordGroup.tsx +138 -0
  98. package/src/components/inputs/PasswordInput.tsx +74 -0
  99. package/src/components/inputs/PasswordRequirementList.tsx +96 -0
  100. package/src/components/inputs/PasswordStrengthMeter.tsx +93 -0
  101. package/src/components/inputs/PhoneInput.tsx +99 -0
  102. package/src/components/inputs/PostalCodeInput.tsx +98 -0
  103. package/src/components/inputs/RangeSlider.tsx +129 -0
  104. package/src/components/inputs/SearchInput.tsx +76 -0
  105. package/src/components/inputs/Select.tsx +39 -0
  106. package/src/components/{atoms → inputs}/Slider.tsx +18 -5
  107. package/src/components/{molecules → inputs}/SortButton.tsx +5 -2
  108. package/src/components/{atoms → inputs}/Switch.tsx +15 -4
  109. package/src/components/inputs/TagInput.tsx +114 -0
  110. package/src/components/{atoms → inputs}/Textarea.tsx +1 -0
  111. package/src/components/inputs/TimePicker.tsx +150 -0
  112. package/src/components/inputs/Toggle.tsx +48 -0
  113. package/src/components/{atoms → inputs}/ToggleGroup.tsx +2 -2
  114. package/src/components/inputs/TooltipButton.tsx +148 -0
  115. package/src/components/inputs/VoiceInputButton.tsx +317 -0
  116. package/src/components/inputs/calendar-holidays.ts +56 -0
  117. package/src/components/inputs/generated/default-variant-keys.ts +32 -0
  118. package/src/components/{atoms → inputs}/generated/variant-keys.ts +19 -27
  119. package/src/components/layout/AspectRatio.tsx +12 -0
  120. package/src/components/layout/AssetInspectorPanel.tsx +416 -0
  121. package/src/components/layout/Cluster.tsx +56 -0
  122. package/src/components/layout/CollapsiblePanelToggle.tsx +94 -0
  123. package/src/components/layout/Container.tsx +43 -0
  124. package/src/components/layout/DeviceFrame.tsx +227 -0
  125. package/src/components/layout/Grid.tsx +65 -0
  126. package/src/components/layout/HStack.tsx +73 -0
  127. package/src/components/{organisms → layout}/InspectorPanel.tsx +6 -5
  128. package/src/components/layout/MarqueeFrame.tsx +158 -0
  129. package/src/components/layout/Resizable.tsx +94 -0
  130. package/src/components/layout/ScrollArea.tsx +71 -0
  131. package/src/components/{organisms → layout}/SpatialCanvas.tsx +12 -7
  132. package/src/components/layout/VStack.tsx +69 -0
  133. package/src/components/layout/generated/default-variant-keys.ts +16 -0
  134. package/src/components/layout/generated/variant-keys.ts +21 -0
  135. package/src/components/{molecules → navigation}/Breadcrumb.tsx +5 -4
  136. package/src/components/navigation/Command.tsx +266 -0
  137. package/src/components/navigation/CommandPalette.tsx +83 -0
  138. package/src/components/navigation/DocumentPager.tsx +171 -0
  139. package/src/components/navigation/Footer.tsx +88 -0
  140. package/src/components/navigation/Header.tsx +80 -0
  141. package/src/components/{molecules → navigation}/Menubar.tsx +45 -12
  142. package/src/components/navigation/NavigationMenu.tsx +128 -0
  143. package/src/components/navigation/PageAside.tsx +84 -0
  144. package/src/components/{molecules → navigation}/Pagination.tsx +60 -7
  145. package/src/components/{organisms → navigation}/RightRail.tsx +1 -1
  146. package/src/components/navigation/Sidebar.tsx +223 -0
  147. package/src/components/navigation/SidebarItem.tsx +160 -0
  148. package/src/components/{molecules → navigation}/Tabs.tsx +2 -2
  149. package/src/components/navigation/TextLink.tsx +71 -0
  150. package/src/components/navigation/generated/default-variant-keys.ts +12 -0
  151. package/src/components/navigation/generated/variant-keys.ts +13 -0
  152. package/src/components/overlay/AIChatInput.tsx +5 -0
  153. package/src/components/overlay/AIChatMessage.tsx +6 -0
  154. package/src/components/overlay/AlertDialog.tsx +145 -0
  155. package/src/components/overlay/ChatPanel.tsx +180 -0
  156. package/src/components/{molecules → overlay}/ContextMenu.tsx +65 -29
  157. package/src/components/{molecules → overlay}/Dialog.tsx +21 -13
  158. package/src/components/overlay/Drawer.tsx +131 -0
  159. package/src/components/{molecules → overlay}/DropdownMenu.tsx +52 -17
  160. package/src/components/overlay/FloatingPanel.tsx +90 -0
  161. package/src/components/overlay/HoverCard.tsx +36 -0
  162. package/src/components/overlay/MediaLightbox.tsx +403 -0
  163. package/src/components/overlay/MediaPickerDialog.tsx +198 -0
  164. package/src/components/overlay/Modal.tsx +103 -0
  165. package/src/components/overlay/OnboardingFlow.tsx +172 -0
  166. package/src/components/overlay/Popover.tsx +36 -0
  167. package/src/components/overlay/ShareModal.tsx +324 -0
  168. package/src/components/{molecules → overlay}/Sheet.tsx +76 -19
  169. package/src/components/overlay/Tooltip.tsx +130 -0
  170. package/src/components/overlay/generated/default-variant-keys.ts +14 -0
  171. package/src/components/overlay/generated/variant-keys.ts +17 -0
  172. package/src/components/patterns/BlogTemplate.tsx +46 -0
  173. package/src/components/{templates → patterns}/DashboardTemplate.tsx +2 -2
  174. package/src/components/patterns/DocsTemplate.tsx +41 -0
  175. package/src/components/{templates → patterns}/MediaLibraryTemplate.tsx +1 -1
  176. package/src/components/patterns/OnboardingTemplate.tsx +32 -0
  177. package/src/components/patterns/PricingTemplate.tsx +106 -0
  178. package/src/globals.css +173 -22
  179. package/src/index.ts +177 -76
  180. package/tailwind-theme-extend.cjs +48 -3
  181. package/design/atoms-metadata.json +0 -82
  182. package/design/molecules-metadata.json +0 -130
  183. package/design/organisms-metadata.json +0 -38
  184. package/design/templates-metadata.json +0 -38
  185. package/src/components/atoms/Avatar.tsx +0 -57
  186. package/src/components/atoms/Select.tsx +0 -28
  187. package/src/components/atoms/generated/default-variant-keys.ts +0 -36
  188. package/src/components/molecules/AIChatInput.tsx +0 -140
  189. package/src/components/molecules/AIChatMessage.tsx +0 -109
  190. package/src/components/molecules/Accordion.tsx +0 -99
  191. package/src/components/molecules/Calendar.tsx +0 -60
  192. package/src/components/molecules/Carousel.tsx +0 -261
  193. package/src/components/molecules/Command.tsx +0 -152
  194. package/src/components/molecules/FilterButton.tsx +0 -133
  195. package/src/components/molecules/HoverCard.tsx +0 -29
  196. package/src/components/molecules/Modal.tsx +0 -66
  197. package/src/components/molecules/Popover.tsx +0 -31
  198. package/src/components/molecules/ProgressWidget.tsx +0 -40
  199. package/src/components/molecules/Resizable.tsx +0 -47
  200. package/src/components/molecules/ScrollArea.tsx +0 -48
  201. package/src/components/molecules/SidebarItem.tsx +0 -134
  202. package/src/components/molecules/Toast.tsx +0 -57
  203. package/src/components/molecules/Tooltip.tsx +0 -30
  204. package/src/components/molecules/generated/default-variant-keys.ts +0 -22
  205. package/src/components/molecules/generated/variant-keys.ts +0 -33
  206. package/src/components/organisms/CommandPalette.tsx +0 -58
  207. package/src/components/organisms/FloatingPanel.tsx +0 -46
  208. package/src/components/organisms/ShareModal.tsx +0 -182
  209. package/src/components/organisms/ToastProvider.tsx +0 -49
  210. /package/src/components/{atoms → display}/Kbd.tsx +0 -0
  211. /package/src/components/{atoms → display}/Separator.tsx +0 -0
  212. /package/src/components/{atoms → display}/Skeleton.tsx +0 -0
  213. /package/src/components/{atoms → feedback}/Progress.tsx +0 -0
  214. /package/src/components/{atoms → inputs}/Button.tsx +0 -0
  215. /package/src/components/{atoms → inputs}/Label.tsx +0 -0
  216. /package/src/components/{atoms → inputs}/RadioGroup.tsx +0 -0
  217. /package/src/components/{organisms → navigation}/AppRail.tsx +0 -0
  218. /package/src/components/{templates → patterns}/AuthTemplate.tsx +0 -0
  219. /package/src/components/{templates → patterns}/BannalyzeTemplate.tsx +0 -0
  220. /package/src/components/{templates → patterns}/ChatTemplate.tsx +0 -0
  221. /package/src/components/{templates → patterns}/EditorTemplate.tsx +0 -0
  222. /package/src/components/{templates → patterns}/KanbanTemplate.tsx +0 -0
  223. /package/src/components/{templates → patterns}/LandingTemplate.tsx +0 -0
  224. /package/src/components/{templates → patterns}/SettingsTemplate.tsx +0 -0
@@ -0,0 +1,41 @@
1
+ import * as React from "react"
2
+
3
+ import { cn } from "../../lib/utils"
4
+
5
+ export interface DocsTemplateProps extends React.HTMLAttributes<HTMLDivElement> {
6
+ /** Left navigation sidebar content. */
7
+ sidebar: React.ReactNode
8
+ /** Right "On this page" TOC content. Optional. */
9
+ toc?: React.ReactNode
10
+ /** Top header. Optional (e.g. site Header organism). */
11
+ header?: React.ReactNode
12
+ }
13
+
14
+ const DocsTemplate = React.forwardRef<HTMLDivElement, DocsTemplateProps>(
15
+ ({ className, sidebar, toc, header, children, ...props }, ref) => (
16
+ <div
17
+ ref={ref}
18
+ className={cn(
19
+ "flex min-h-screen w-full flex-col bg-background text-foreground",
20
+ className
21
+ )}
22
+ {...props}
23
+ >
24
+ {header}
25
+ <div className="grid flex-1 grid-cols-[200px_minmax(0,1fr)] md:grid-cols-[220px_minmax(0,1fr)_180px]">
26
+ <aside className="border-r border-border bg-muted/40 p-4 overflow-y-auto">
27
+ {sidebar}
28
+ </aside>
29
+ <main className="p-6 md:p-10 overflow-x-auto">{children}</main>
30
+ {toc ? (
31
+ <aside className="hidden md:block border-l border-border p-4 overflow-y-auto text-sm">
32
+ {toc}
33
+ </aside>
34
+ ) : null}
35
+ </div>
36
+ </div>
37
+ )
38
+ )
39
+ DocsTemplate.displayName = "DocsTemplate"
40
+
41
+ export { DocsTemplate }
@@ -31,7 +31,7 @@ export function MediaLibraryTemplate({
31
31
  <div className="flex flex-1 overflow-hidden relative">
32
32
  {/* Left Sidebar (Folders/Collections) */}
33
33
  {sidebar && (
34
- <aside className="group flex-shrink-0 w-64 border-r bg-muted/10 hidden md:block overflow-y-auto">
34
+ <aside className="group hidden w-64 flex-shrink-0 overflow-hidden border-r bg-muted/10 md:block">
35
35
  {sidebar}
36
36
  </aside>
37
37
  )}
@@ -0,0 +1,32 @@
1
+ import * as React from "react"
2
+
3
+ import { cn } from "../../lib/utils"
4
+
5
+ export interface OnboardingTemplateProps
6
+ extends React.HTMLAttributes<HTMLDivElement> {
7
+ /** Hero side panel content (welcome / branding / illustration). */
8
+ hero: React.ReactNode
9
+ }
10
+
11
+ const OnboardingTemplate = React.forwardRef<HTMLDivElement, OnboardingTemplateProps>(
12
+ ({ className, hero, children, ...props }, ref) => (
13
+ <div
14
+ ref={ref}
15
+ className={cn(
16
+ "grid min-h-screen w-full grid-cols-1 bg-background text-foreground md:grid-cols-[minmax(0,2fr)_minmax(0,3fr)]",
17
+ className
18
+ )}
19
+ {...props}
20
+ >
21
+ <aside className="flex flex-col justify-center gap-6 bg-foreground p-12 text-background md:min-h-screen">
22
+ {hero}
23
+ </aside>
24
+ <main className="flex items-center justify-center p-6 md:p-12">
25
+ <div className="w-full max-w-lg">{children}</div>
26
+ </main>
27
+ </div>
28
+ )
29
+ )
30
+ OnboardingTemplate.displayName = "OnboardingTemplate"
31
+
32
+ export { OnboardingTemplate }
@@ -0,0 +1,106 @@
1
+ import * as React from "react"
2
+ import { IconCheck as Check } from "@tabler/icons-react";
3
+
4
+ import { cn } from "../../lib/utils"
5
+
6
+ export interface PricingPlan {
7
+ id: string
8
+ name: React.ReactNode
9
+ price: React.ReactNode
10
+ period?: React.ReactNode
11
+ description?: React.ReactNode
12
+ features: React.ReactNode[]
13
+ cta: React.ReactNode
14
+ /** Highlight this plan as featured. */
15
+ featured?: boolean
16
+ }
17
+
18
+ export interface PricingTemplateProps
19
+ extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
20
+ title?: React.ReactNode
21
+ subtitle?: React.ReactNode
22
+ plans: PricingPlan[]
23
+ }
24
+
25
+ const PricingTemplate = React.forwardRef<HTMLDivElement, PricingTemplateProps>(
26
+ (
27
+ {
28
+ className,
29
+ title = "Pricing",
30
+ subtitle = "Choose a plan that fits your team",
31
+ plans,
32
+ ...props
33
+ },
34
+ ref
35
+ ) => (
36
+ <section
37
+ ref={ref}
38
+ className={cn("flex w-full flex-col items-center gap-8 p-8", className)}
39
+ {...props}
40
+ >
41
+ <div className="flex flex-col items-center gap-2 text-center">
42
+ <h1 className="text-3xl font-bold tracking-tight">{title}</h1>
43
+ {subtitle ? (
44
+ <p className="text-muted-foreground">{subtitle}</p>
45
+ ) : null}
46
+ </div>
47
+ <div className="grid w-full max-w-4xl gap-4 md:grid-cols-3">
48
+ {plans.map((plan) => (
49
+ <div
50
+ key={plan.id}
51
+ className={cn(
52
+ "flex flex-col gap-3 rounded-lg border p-6",
53
+ plan.featured
54
+ ? "border-foreground bg-foreground text-background shadow-lg"
55
+ : "border-border bg-card text-card-foreground"
56
+ )}
57
+ >
58
+ <p className="text-sm font-semibold uppercase tracking-wide">
59
+ {plan.name}
60
+ </p>
61
+ <div className="flex items-baseline gap-1">
62
+ <span className="text-3xl font-bold tracking-tight">
63
+ {plan.price}
64
+ </span>
65
+ {plan.period ? (
66
+ <span
67
+ className={cn(
68
+ "text-sm",
69
+ plan.featured ? "text-background/70" : "text-muted-foreground"
70
+ )}
71
+ >
72
+ {plan.period}
73
+ </span>
74
+ ) : null}
75
+ </div>
76
+ {plan.description ? (
77
+ <p
78
+ className={cn(
79
+ "text-sm",
80
+ plan.featured ? "text-background/70" : "text-muted-foreground"
81
+ )}
82
+ >
83
+ {plan.description}
84
+ </p>
85
+ ) : null}
86
+ <ul className="flex flex-col gap-2 pt-2">
87
+ {plan.features.map((f, i) => (
88
+ <li
89
+ key={i}
90
+ className="flex items-start gap-2 text-sm"
91
+ >
92
+ <Check className="mt-0.5 h-3.5 w-3.5 shrink-0" aria-hidden />
93
+ <span>{f}</span>
94
+ </li>
95
+ ))}
96
+ </ul>
97
+ <div className="mt-auto pt-4">{plan.cta}</div>
98
+ </div>
99
+ ))}
100
+ </div>
101
+ </section>
102
+ )
103
+ )
104
+ PricingTemplate.displayName = "PricingTemplate"
105
+
106
+ export { PricingTemplate }
package/src/globals.css CHANGED
@@ -1,8 +1,45 @@
1
1
  @layer base {
2
2
  :root {
3
- --warning: 45 93% 47%;
4
- --success: 142 71% 45%;
3
+ --primary-subtle: 232 55% 96%;
4
+ --primary-subtle-foreground: 232 43% 28%;
5
+ --primary: 232 39% 49%;
6
+ --primary-foreground: 210 40% 98%;
7
+ --primary-strong: 232 47% 38%;
8
+ --primary-strong-foreground: 210 40% 98%;
9
+ --primary-border: 232 46% 82%;
10
+
11
+ --info-subtle: 214 100% 97%;
12
+ --info-subtle-foreground: 217 91% 28%;
5
13
  --info: 217 91% 60%;
14
+ --info-foreground: 222 47% 11%;
15
+ --info-strong: 224 76% 48%;
16
+ --info-strong-foreground: 210 40% 98%;
17
+ --info-border: 214 95% 86%;
18
+
19
+ --success-subtle: 138 76% 97%;
20
+ --success-subtle-foreground: 143 64% 24%;
21
+ --success: 142 71% 45%;
22
+ --success-foreground: 144 61% 10%;
23
+ --success-strong: 142 72% 29%;
24
+ --success-strong-foreground: 210 40% 98%;
25
+ --success-border: 141 84% 85%;
26
+
27
+ --warning-subtle: 48 96% 89%;
28
+ --warning-subtle-foreground: 32 95% 20%;
29
+ --warning: 45 93% 47%;
30
+ --warning-foreground: 24 10% 10%;
31
+ --warning-strong: 32 95% 35%;
32
+ --warning-strong-foreground: 210 40% 98%;
33
+ --warning-border: 45 96% 75%;
34
+
35
+ --destructive-subtle: 0 86% 97%;
36
+ --destructive-subtle-foreground: 0 63% 31%;
37
+ --destructive: 0 72% 51%;
38
+ --destructive-foreground: 210 40% 98%;
39
+ --destructive-strong: 0 72% 43%;
40
+ --destructive-strong-foreground: 210 40% 98%;
41
+ --destructive-border: 0 93% 84%;
42
+
6
43
  --overlay: 0 0% 0%;
7
44
  --background: 0 0% 100%;
8
45
  --foreground: 240 20% 6%;
@@ -13,24 +50,18 @@
13
50
  --popover: 0 0% 100%;
14
51
  --popover-foreground: 240 20% 6%;
15
52
 
16
- --primary: 217 91% 60%;
17
- --primary-foreground: 210 40% 98%;
18
-
19
53
  --secondary: 210 40% 96%;
20
54
  --secondary-foreground: 240 6% 10%;
21
55
 
22
56
  --muted: 210 40% 96%;
23
- --muted-foreground: 215 16% 47%;
24
-
25
- --accent: 210 40% 96%;
26
- --accent-foreground: 240 6% 10%;
57
+ --muted-foreground: 215 20% 40%;
27
58
 
28
- --destructive: 0 84% 60%;
29
- --destructive-foreground: 210 40% 98%;
59
+ --accent: 29 31% 87%;
60
+ --accent-foreground: 14 22% 19%;
30
61
 
31
62
  --border: 214 32% 91%;
32
63
  --input: 214 32% 91%;
33
- --ring: 217 91% 60%;
64
+ --ring: 232 39% 49%;
34
65
 
35
66
  --radius: 0.5rem;
36
67
 
@@ -55,9 +86,77 @@
55
86
  --ease-in: cubic-bezier(0.4, 0, 1, 1);
56
87
  --ease-out: cubic-bezier(0, 0, 0.2, 1);
57
88
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
89
+
90
+ /* Gunjō brand atmosphere — used by hero and color-story art only.
91
+ Theme-independent (do not flip with .dark) so the hero keeps its
92
+ identity across modes. */
93
+ --gunjo-deep: 232 50% 32%;
94
+ --gunjo-deeper: 233 55% 18%;
95
+ --gunjo-deepest: 234 60% 8%;
96
+ --gunjo-light: 232 50% 55%;
97
+ --gunjo-mid: 232 39% 49%;
98
+ --gunjo-bright: 232 50% 60%;
99
+ --gunjo-dark: 233 50% 25%;
100
+ --gunjo-swatch-hue: 232;
101
+ --kobicha-warm: 14 35% 35%;
102
+ --kobicha-mid: 15 28% 34%;
103
+ --kobicha-bright: 20 35% 55%;
104
+ --kobicha-deepest: 15 28% 22%;
105
+ --palette-red: 0 84% 60%;
106
+ --palette-green: 142 71% 45%;
107
+ --palette-blue: 221 83% 53%;
108
+ --palette-yellow: 48 96% 53%;
109
+ --palette-cyan: 188 86% 53%;
110
+ --palette-magenta: 292 84% 61%;
111
+ --palette-gray: 220 9% 46%;
112
+ --palette-white: 0 0% 100%;
113
+ --palette-black: 0 0% 0%;
114
+ --pure-white: 0 0% 100%;
115
+ --pure-black: 234 60% 4%;
58
116
  }
59
117
 
60
118
  .dark {
119
+ --primary-subtle: 232 42% 18%;
120
+ --primary-subtle-foreground: 232 90% 88%;
121
+ --primary: 232 47% 65%;
122
+ --primary-foreground: 234 60% 8%;
123
+ --primary-strong: 232 55% 72%;
124
+ --primary-strong-foreground: 234 60% 8%;
125
+ --primary-border: 232 40% 38%;
126
+
127
+ --info-subtle: 220 47% 16%;
128
+ --info-subtle-foreground: 213 94% 88%;
129
+ --info: 213 94% 68%;
130
+ --info-foreground: 222 47% 11%;
131
+ --info-strong: 213 94% 68%;
132
+ --info-strong-foreground: 222 47% 11%;
133
+ --info-border: 217 55% 35%;
134
+
135
+ --success-subtle: 150 50% 14%;
136
+ --success-subtle-foreground: 142 76% 85%;
137
+ --success: 142 69% 58%;
138
+ --success-foreground: 144 61% 9%;
139
+ --success-strong: 142 69% 58%;
140
+ --success-strong-foreground: 144 61% 9%;
141
+ --success-border: 145 52% 32%;
142
+
143
+ --warning-subtle: 38 60% 15%;
144
+ --warning-subtle-foreground: 48 96% 82%;
145
+ --warning: 43 96% 56%;
146
+ --warning-foreground: 26 83% 14%;
147
+ --warning-strong: 43 96% 56%;
148
+ --warning-strong-foreground: 26 83% 14%;
149
+ --warning-border: 40 64% 34%;
150
+
151
+ --destructive-subtle: 0 50% 16%;
152
+ --destructive-subtle-foreground: 0 93% 88%;
153
+ --destructive: 0 72% 51%;
154
+ --destructive-foreground: 210 40% 98%;
155
+ --destructive-strong: 0 72% 43%;
156
+ --destructive-strong-foreground: 210 40% 98%;
157
+ --destructive-border: 0 55% 36%;
158
+
159
+ --overlay: 0 0% 0%;
61
160
  --background: 222.2 84% 4.9%;
62
161
  --foreground: 210 40% 98%;
63
162
 
@@ -67,24 +166,28 @@
67
166
  --popover: 222.2 84% 4.9%;
68
167
  --popover-foreground: 210 40% 98%;
69
168
 
70
- --primary: 217.2 91.2% 59.8%;
71
- --primary-foreground: 222.2 47.4% 11.2%;
72
-
73
169
  --secondary: 217.2 32.6% 17.5%;
74
170
  --secondary-foreground: 210 40% 98%;
75
171
 
76
172
  --muted: 217.2 32.6% 17.5%;
77
173
  --muted-foreground: 215 20.2% 65.1%;
78
174
 
79
- --accent: 217.2 32.6% 17.5%;
80
- --accent-foreground: 210 40% 98%;
81
-
82
- --destructive: 0 62.8% 30.6%;
83
- --destructive-foreground: 210 40% 98%;
175
+ --accent: 14 22% 19%;
176
+ --accent-foreground: 29 31% 87%;
84
177
 
85
178
  --border: 217.2 32.6% 17.5%;
86
179
  --input: 217.2 32.6% 17.5%;
87
- --ring: 224.3 76.3% 48%;
180
+ --ring: 232 47% 65%;
181
+
182
+ --palette-red: 0 84% 60%;
183
+ --palette-green: 142 71% 45%;
184
+ --palette-blue: 221 83% 53%;
185
+ --palette-yellow: 48 96% 53%;
186
+ --palette-cyan: 188 86% 53%;
187
+ --palette-magenta: 292 84% 61%;
188
+ --palette-gray: 220 9% 46%;
189
+ --palette-white: 0 0% 100%;
190
+ --palette-black: 0 0% 0%;
88
191
 
89
192
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.2);
90
193
  --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2), 0 1px 2px -1px rgb(0 0 0 / 0.2);
@@ -105,4 +208,52 @@
105
208
  body {
106
209
  @apply bg-background text-foreground;
107
210
  }
108
- }
211
+
212
+ }
213
+
214
+ @layer components {
215
+ [data-tree-view-row] {
216
+ padding-left: var(--tree-view-indent, 0.5rem);
217
+ }
218
+
219
+ [data-sidebar-item-button] {
220
+ padding-left: var(--sidebar-item-indent, 0.5rem);
221
+ }
222
+
223
+ .gunjo-timeline-marker-active {
224
+ animation: gunjo-timeline-marker-pulse 1.8s ease-in-out infinite;
225
+ box-shadow:
226
+ 0 0 0 4px hsl(var(--primary) / 0.16),
227
+ 0 0 18px hsl(var(--primary) / 0.35);
228
+ }
229
+
230
+ @keyframes gunjo-timeline-marker-pulse {
231
+ 0%,
232
+ 100% {
233
+ box-shadow:
234
+ 0 0 0 4px hsl(var(--primary) / 0.12),
235
+ 0 0 12px hsl(var(--primary) / 0.24);
236
+ }
237
+
238
+ 50% {
239
+ box-shadow:
240
+ 0 0 0 6px hsl(var(--primary) / 0.18),
241
+ 0 0 22px hsl(var(--primary) / 0.42);
242
+ }
243
+ }
244
+
245
+ @media (prefers-reduced-motion: reduce) {
246
+ .gunjo-timeline-marker-active {
247
+ animation: none;
248
+ }
249
+ }
250
+
251
+ }
252
+
253
+ @media (max-width: 767px) {
254
+ input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
255
+ textarea:not([data-mobile-focus-zoom]),
256
+ select:not([data-mobile-focus-zoom]) {
257
+ font-size: 16px;
258
+ }
259
+ }