@dmitriikapustin/ui 0.1.0 → 0.2.1

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.
package/dist/index.cjs CHANGED
@@ -40,6 +40,12 @@ var __objRest = (source, exclude) => {
40
40
  }
41
41
  return target;
42
42
  };
43
+
44
+ // src/atoms/Spinner.module.scss
45
+ var Spinner_module_default = {
46
+ root: "Spinner_module_root",
47
+ fallback: "Spinner_module_fallback"
48
+ };
43
49
  var sizeMap = {
44
50
  sm: 32,
45
51
  md: 48,
@@ -47,7 +53,7 @@ var sizeMap = {
47
53
  };
48
54
  var cachedData = null;
49
55
  function Spinner({ size = "md", className = "" }) {
50
- const s = sizeMap[size];
56
+ const px = sizeMap[size];
51
57
  const [data, setData] = react.useState(() => cachedData);
52
58
  react.useEffect(() => {
53
59
  if (data) return;
@@ -66,8 +72,8 @@ function Spinner({ size = "md", className = "" }) {
66
72
  return /* @__PURE__ */ jsxRuntime.jsx(
67
73
  "div",
68
74
  {
69
- className: `inline-flex items-center justify-center ${className}`,
70
- style: { width: s, height: s },
75
+ className: `${Spinner_module_default.root} ${className}`,
76
+ style: { width: px, height: px },
71
77
  "aria-label": "Loading",
72
78
  children: data ? /* @__PURE__ */ jsxRuntime.jsx(
73
79
  Lottie__default.default,
@@ -75,27 +81,29 @@ function Spinner({ size = "md", className = "" }) {
75
81
  animationData: data,
76
82
  loop: true,
77
83
  autoplay: true,
78
- style: { width: s, height: s }
84
+ style: { width: px, height: px }
79
85
  }
80
86
  ) : /* @__PURE__ */ jsxRuntime.jsx(
81
87
  "div",
82
88
  {
83
- className: "rounded-full border-2 border-[var(--border-color)] border-t-[var(--fg)] animate-spin",
84
- style: { width: s * 0.7, height: s * 0.7 }
89
+ className: Spinner_module_default.fallback,
90
+ style: { width: px * 0.7, height: px * 0.7 }
85
91
  }
86
92
  )
87
93
  }
88
94
  );
89
95
  }
90
- var variantStyles = {
91
- primary: "bg-[var(--fg)] text-[var(--bg)] border border-[var(--bg)] hover:opacity-90 active:opacity-80 shadow-[var(--shadow-sm)]",
92
- secondary: "bg-[var(--bg-tertiary)] text-[var(--fg)] hover:bg-[var(--border-color)] active:bg-[var(--border-color-strong)]",
93
- outline: "border border-[var(--fg-secondary)] text-[var(--fg-secondary)] hover:bg-[var(--bg-tertiary)] active:bg-[var(--border-color)]",
94
- ghost: "text-[var(--fg-secondary)] hover:text-[var(--fg)] hover:bg-[var(--bg-tertiary)] active:bg-[var(--border-color)]"
95
- };
96
- var sizeStyles = {
97
- sm: "text-[13px] px-4 py-2 gap-1.5 rounded-full tracking-[-0.25px]",
98
- md: "text-[13px] px-4 py-2 gap-2 rounded-full tracking-[-0.25px]"
96
+
97
+ // src/atoms/Button.module.scss
98
+ var Button_module_default = {
99
+ root: "Button_module_root",
100
+ primary: "Button_module_primary",
101
+ secondary: "Button_module_secondary",
102
+ outline: "Button_module_outline",
103
+ ghost: "Button_module_ghost",
104
+ sm: "Button_module_sm",
105
+ md: "Button_module_md",
106
+ disabled: "Button_module_disabled"
99
107
  };
100
108
  function Button(_a) {
101
109
  var _b = _a, {
@@ -120,7 +128,7 @@ function Button(_a) {
120
128
  return /* @__PURE__ */ jsxRuntime.jsxs(
121
129
  "button",
122
130
  __spreadProps(__spreadValues({
123
- className: `inline-flex items-center justify-center font-medium transition-all duration-[var(--transition-fast)] cursor-pointer select-none whitespace-nowrap ${variantStyles[variant]} ${sizeStyles[size]} ${disabled || loading ? "opacity-50 cursor-not-allowed pointer-events-none" : ""} ${className}`,
131
+ className: `${Button_module_default.root} ${Button_module_default[variant]} ${Button_module_default[size]}${disabled || loading ? ` ${Button_module_default.disabled}` : ""}${className ? ` ${className}` : ""}`,
124
132
  disabled: disabled || loading
125
133
  }, props), {
126
134
  children: [
@@ -131,6 +139,20 @@ function Button(_a) {
131
139
  })
132
140
  );
133
141
  }
142
+
143
+ // src/atoms/Input.module.scss
144
+ var Input_module_default = {
145
+ wrapper: "Input_module_wrapper",
146
+ label: "Input_module_label",
147
+ inputWrap: "Input_module_inputWrap",
148
+ input: "Input_module_input",
149
+ hasIconLeft: "Input_module_hasIconLeft",
150
+ hasIconRight: "Input_module_hasIconRight",
151
+ iconLeft: "Input_module_iconLeft",
152
+ iconRight: "Input_module_iconRight",
153
+ error: "Input_module_error",
154
+ errorText: "Input_module_errorText"
155
+ };
134
156
  function Input(_a) {
135
157
  var _b = _a, {
136
158
  label,
@@ -148,41 +170,37 @@ function Input(_a) {
148
170
  "id"
149
171
  ]);
150
172
  const inputId = id || (label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-"));
151
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
152
- label && /* @__PURE__ */ jsxRuntime.jsx(
153
- "label",
154
- {
155
- htmlFor: inputId,
156
- className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]",
157
- children: label
158
- }
159
- ),
160
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
161
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-3.5 top-1/2 -translate-y-1/2 text-[var(--fg-muted)]", children: icon }),
173
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Input_module_default.wrapper, children: [
174
+ label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: inputId, className: Input_module_default.label, children: label }),
175
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Input_module_default.inputWrap, children: [
176
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Input_module_default.iconLeft, children: icon }),
162
177
  /* @__PURE__ */ jsxRuntime.jsx(
163
178
  "input",
164
179
  __spreadValues({
165
180
  id: inputId,
166
- className: `w-full border border-[var(--fg-muted)] bg-[var(--bg)] px-[15px] py-3 text-[13px] tracking-[-0.25px] text-[var(--fg-secondary)] placeholder:text-[var(--fg-muted)] transition-all duration-[var(--transition-fast)] focus:outline-none focus:border-[var(--fg)] rounded-full ${icon ? "pl-10" : ""} ${iconRight ? "pr-10" : ""} ${error ? "border-[var(--color-error)] focus:border-[var(--color-error)]" : ""} ${className}`
181
+ className: `${Input_module_default.input}${icon ? ` ${Input_module_default.hasIconLeft}` : ""}${iconRight ? ` ${Input_module_default.hasIconRight}` : ""}${error ? ` ${Input_module_default.error}` : ""}${className ? ` ${className}` : ""}`
167
182
  }, props)
168
183
  ),
169
- iconRight && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-3.5 top-1/2 -translate-y-1/2 text-[var(--fg-muted)]", children: iconRight })
184
+ iconRight && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Input_module_default.iconRight, children: iconRight })
170
185
  ] }),
171
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] tracking-[-0.25px] text-[var(--color-error)]", children: error })
186
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: Input_module_default.errorText, children: error })
172
187
  ] });
173
188
  }
174
- var colorStyles = {
175
- default: "bg-[var(--bg-tertiary)] text-[var(--fg)]",
176
- success: "bg-[var(--bg-tertiary)] text-[var(--color-success)]",
177
- warning: "bg-[var(--bg-tertiary)] text-[var(--color-warning)]",
178
- error: "bg-[var(--bg-tertiary)] text-[var(--color-error)]",
179
- info: "bg-[var(--bg-tertiary)] text-[var(--color-info)]"
189
+
190
+ // src/atoms/Badge.module.scss
191
+ var Badge_module_default = {
192
+ root: "Badge_module_root",
193
+ default: "Badge_module_default",
194
+ success: "Badge_module_success",
195
+ warning: "Badge_module_warning",
196
+ error: "Badge_module_error",
197
+ info: "Badge_module_info"
180
198
  };
181
199
  function Badge({ color = "default", children, className = "" }) {
182
200
  return /* @__PURE__ */ jsxRuntime.jsx(
183
201
  "span",
184
202
  {
185
- className: `inline-flex items-center px-2.5 py-0.5 rounded-full text-[13px] font-semibold tracking-[-0.25px] ${colorStyles[color]} ${className}`,
203
+ className: `${Badge_module_default.root} ${Badge_module_default[color]}${className ? ` ${className}` : ""}`,
186
204
  children
187
205
  }
188
206
  );
@@ -220,71 +238,108 @@ var IconlyEye = IconlyActivity;
220
238
  var IconlyEyeOff = IconlyActivity;
221
239
  var IconlyChevronRight = IconlyActivity;
222
240
  var IconlyChevronLeft = IconlyActivity;
223
- var colorStyles2 = {
224
- default: "bg-[var(--bg-tertiary)] text-[var(--fg-secondary)] border-[var(--border-color)]",
225
- primary: "bg-[var(--bg-tertiary)] text-[var(--fg)] border-[var(--border-color-strong)]",
226
- success: "bg-[var(--bg-tertiary)] text-[var(--color-success)] border-[var(--border-color)]",
227
- warning: "bg-[var(--bg-tertiary)] text-[var(--color-warning)] border-[var(--border-color)]",
228
- error: "bg-[var(--bg-tertiary)] text-[var(--color-error)] border-[var(--border-color)]"
241
+
242
+ // src/atoms/Tag.module.scss
243
+ var Tag_module_default = {
244
+ root: "Tag_module_root",
245
+ default: "Tag_module_default",
246
+ primary: "Tag_module_primary",
247
+ success: "Tag_module_success",
248
+ warning: "Tag_module_warning",
249
+ error: "Tag_module_error",
250
+ closeBtn: "Tag_module_closeBtn"
229
251
  };
230
252
  function Tag({ color = "default", closable = false, onClose, children, className = "" }) {
253
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${Tag_module_default.root} ${Tag_module_default[color]} ${className}`, children: [
254
+ children,
255
+ closable && /* @__PURE__ */ jsxRuntime.jsx(
256
+ "button",
257
+ {
258
+ onClick: onClose,
259
+ className: Tag_module_default.closeBtn,
260
+ "aria-label": "Remove tag",
261
+ children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 12 })
262
+ }
263
+ )
264
+ ] });
265
+ }
266
+
267
+ // src/atoms/Toggle.module.scss
268
+ var Toggle_module_default = {
269
+ root: "Toggle_module_root",
270
+ track: "Toggle_module_track",
271
+ trackOn: "Toggle_module_trackOn",
272
+ trackOff: "Toggle_module_trackOff",
273
+ knob: "Toggle_module_knob",
274
+ knobOn: "Toggle_module_knobOn",
275
+ knobOff: "Toggle_module_knobOff",
276
+ label: "Toggle_module_label",
277
+ disabled: "Toggle_module_disabled"
278
+ };
279
+ function Toggle({
280
+ checked = false,
281
+ onChange,
282
+ label,
283
+ disabled = false,
284
+ className = ""
285
+ }) {
231
286
  return /* @__PURE__ */ jsxRuntime.jsxs(
232
- "span",
287
+ "label",
233
288
  {
234
- className: `inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-[13px] font-medium tracking-[-0.25px] border ${colorStyles2[color]} ${className}`,
289
+ className: `${Toggle_module_default.root}${disabled ? ` ${Toggle_module_default.disabled}` : ""}${className ? ` ${className}` : ""}`,
235
290
  children: [
236
- children,
237
- closable && /* @__PURE__ */ jsxRuntime.jsx(
291
+ /* @__PURE__ */ jsxRuntime.jsx(
238
292
  "button",
239
293
  {
240
- onClick: onClose,
241
- className: "hover:opacity-70 transition-opacity cursor-pointer",
242
- "aria-label": "Remove tag",
243
- children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 12 })
294
+ role: "switch",
295
+ type: "button",
296
+ "aria-checked": checked,
297
+ disabled,
298
+ onClick: () => onChange == null ? void 0 : onChange(!checked),
299
+ className: `${Toggle_module_default.track} ${checked ? Toggle_module_default.trackOn : Toggle_module_default.trackOff}${disabled ? ` ${Toggle_module_default.disabled}` : ""}`,
300
+ children: /* @__PURE__ */ jsxRuntime.jsx(
301
+ "span",
302
+ {
303
+ className: `${Toggle_module_default.knob} ${checked ? Toggle_module_default.knobOn : Toggle_module_default.knobOff}`
304
+ }
305
+ )
244
306
  }
245
- )
307
+ ),
308
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Toggle_module_default.label, children: label })
246
309
  ]
247
310
  }
248
311
  );
249
312
  }
250
- function Toggle({ checked = false, onChange, label, disabled = false, className = "" }) {
251
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `inline-flex items-center gap-2.5 ${disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"} ${className}`, children: [
252
- /* @__PURE__ */ jsxRuntime.jsx(
253
- "button",
254
- {
255
- role: "switch",
256
- type: "button",
257
- "aria-checked": checked,
258
- disabled,
259
- onClick: () => onChange == null ? void 0 : onChange(!checked),
260
- className: `relative inline-flex h-6 w-11 shrink-0 items-center rounded-full px-0.5 transition-colors duration-200 ease-in-out focus:outline-none cursor-pointer ${checked ? "bg-[var(--color-accent)] justify-end" : "bg-[var(--border-color)]"} ${disabled ? "cursor-not-allowed" : ""}`,
261
- children: /* @__PURE__ */ jsxRuntime.jsx(
262
- "span",
263
- {
264
- className: "pointer-events-none inline-block h-5 w-5 rounded-full bg-white transition-transform duration-200 ease-in-out"
265
- }
266
- )
267
- }
268
- ),
269
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]", children: label })
270
- ] });
271
- }
272
- var sizeMap2 = {
273
- sm: { container: "w-8 h-8", text: "text-xs" },
274
- md: { container: "w-10 h-10", text: "text-sm" },
275
- lg: { container: "w-12 h-12", text: "text-base" },
276
- xl: { container: "w-16 h-16", text: "text-lg" }
313
+
314
+ // src/atoms/Avatar.module.scss
315
+ var Avatar_module_default = {
316
+ root: "Avatar_module_root",
317
+ initials: "Avatar_module_initials",
318
+ initialsText: "Avatar_module_initialsText",
319
+ sm: "Avatar_module_sm",
320
+ md: "Avatar_module_md",
321
+ lg: "Avatar_module_lg",
322
+ xl: "Avatar_module_xl",
323
+ textSm: "Avatar_module_textSm",
324
+ textMd: "Avatar_module_textMd",
325
+ textLg: "Avatar_module_textLg",
326
+ textXl: "Avatar_module_textXl"
327
+ };
328
+ var textSizeMap = {
329
+ sm: Avatar_module_default.textSm,
330
+ md: Avatar_module_default.textMd,
331
+ lg: Avatar_module_default.textLg,
332
+ xl: Avatar_module_default.textXl
277
333
  };
278
334
  function Avatar(_a) {
279
335
  var _b = _a, { src, alt = "", initials, size = "md", className = "" } = _b, props = __objRest(_b, ["src", "alt", "initials", "size", "className"]);
280
- const s = sizeMap2[size];
281
336
  if (!src && initials) {
282
337
  return /* @__PURE__ */ jsxRuntime.jsx(
283
338
  "div",
284
339
  {
285
- className: `${s.container} rounded-full bg-[var(--bg-tertiary)] border border-[var(--border-color)] flex items-center justify-center ${className}`,
340
+ className: `${Avatar_module_default.initials} ${Avatar_module_default[size]}${className ? ` ${className}` : ""}`,
286
341
  "aria-label": alt || initials,
287
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${s.text} font-medium text-[var(--fg-secondary)] select-none`, children: initials })
342
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${Avatar_module_default.initialsText} ${textSizeMap[size]}`, children: initials })
288
343
  }
289
344
  );
290
345
  }
@@ -296,37 +351,59 @@ function Avatar(_a) {
296
351
  __spreadValues({
297
352
  src: imgSrc,
298
353
  alt,
299
- className: `${s.container} rounded-full object-cover ${className}`
354
+ className: `${Avatar_module_default.root} ${Avatar_module_default[size]}${className ? ` ${className}` : ""}`
300
355
  }, props)
301
356
  )
302
357
  );
303
358
  }
359
+
360
+ // src/atoms/Divider.module.scss
361
+ var Divider_module_default = {
362
+ root: "Divider_module_root",
363
+ withLabel: "Divider_module_withLabel",
364
+ line: "Divider_module_line",
365
+ label: "Divider_module_label"
366
+ };
304
367
  function Divider({ className = "", label }) {
305
368
  if (label) {
306
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex items-center gap-4 ${className}`, children: [
307
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 h-px bg-[var(--border-color)]" }),
308
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-[var(--fg-muted)] uppercase tracking-wider", children: label }),
309
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 h-px bg-[var(--border-color)]" })
369
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${Divider_module_default.withLabel}${className ? ` ${className}` : ""}`, children: [
370
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: Divider_module_default.line }),
371
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Divider_module_default.label, children: label }),
372
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: Divider_module_default.line })
310
373
  ] });
311
374
  }
312
- return /* @__PURE__ */ jsxRuntime.jsx("hr", { className: `border-none h-px bg-[var(--border-color)] ${className}` });
375
+ return /* @__PURE__ */ jsxRuntime.jsx("hr", { className: `${Divider_module_default.root}${className ? ` ${className}` : ""}` });
313
376
  }
314
- function MenuItem({ text, active = false, onClick, className = "" }) {
315
- return /* @__PURE__ */ jsxRuntime.jsx(
377
+
378
+ // src/atoms/MenuItem.module.scss
379
+ var MenuItem_module_default = {
380
+ root: "MenuItem_module_root",
381
+ icon: "MenuItem_module_icon",
382
+ active: "MenuItem_module_active"
383
+ };
384
+ function MenuItem({ text, active = false, onClick, className = "", icon }) {
385
+ return /* @__PURE__ */ jsxRuntime.jsxs(
316
386
  "button",
317
387
  {
318
388
  onClick,
319
- className: `inline-flex items-center px-[4px] py-[2px] text-[13px] font-medium tracking-[-0.25px] cursor-pointer border-none text-left whitespace-nowrap transition-colors duration-150 ${active ? "bg-[var(--bg-secondary)] text-[var(--fg)]" : "bg-transparent text-[var(--fg-muted)] hover:text-[var(--fg-secondary)]"} ${className}`,
320
- children: text
389
+ className: `${MenuItem_module_default.root}${active ? ` ${MenuItem_module_default.active}` : ""}${className ? ` ${className}` : ""}`,
390
+ children: [
391
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: MenuItem_module_default.icon, children: icon }),
392
+ text
393
+ ]
321
394
  }
322
395
  );
323
396
  }
324
- var variantStyles2 = {
325
- primary: "bg-[var(--fg)] text-[var(--bg)] border border-[var(--bg)] shadow-[var(--shadow-sm)]",
326
- secondary: "bg-[var(--bg-tertiary)] text-[var(--fg-secondary)]",
327
- clear: "bg-transparent text-[var(--fg-secondary)] shadow-[var(--shadow-sm)]",
328
- disabled: "bg-[var(--bg-tertiary)] text-[var(--fg-muted)] opacity-50 cursor-not-allowed",
329
- contrast: "bg-[var(--border-color)] text-[var(--fg-secondary)]"
397
+
398
+ // src/atoms/IconButton.module.scss
399
+ var IconButton_module_default = {
400
+ root: "IconButton_module_root",
401
+ primary: "IconButton_module_primary",
402
+ secondary: "IconButton_module_secondary",
403
+ clear: "IconButton_module_clear",
404
+ disabled: "IconButton_module_disabled",
405
+ contrast: "IconButton_module_contrast",
406
+ isDisabled: "IconButton_module_isDisabled"
330
407
  };
331
408
  function IconButton(_a) {
332
409
  var _b = _a, { icon, variant = "primary", className = "", disabled } = _b, props = __objRest(_b, ["icon", "variant", "className", "disabled"]);
@@ -334,34 +411,57 @@ function IconButton(_a) {
334
411
  return /* @__PURE__ */ jsxRuntime.jsx(
335
412
  "button",
336
413
  __spreadProps(__spreadValues({
337
- className: `inline-flex items-center justify-center w-9 h-9 rounded-full transition-all duration-[var(--transition-fast)] cursor-pointer shrink-0 ${variantStyles2[variant]} ${isDisabled ? "cursor-not-allowed" : ""} ${className}`,
414
+ className: `${IconButton_module_default.root} ${IconButton_module_default[variant]}${isDisabled ? ` ${IconButton_module_default.isDisabled}` : ""}${className ? ` ${className}` : ""}`,
338
415
  disabled: isDisabled
339
416
  }, props), {
340
417
  children: icon
341
418
  })
342
419
  );
343
420
  }
421
+
422
+ // src/atoms/Logo.module.scss
423
+ var Logo_module_default = {
424
+ short: "Logo_module_short",
425
+ full: "Logo_module_full",
426
+ third: "Logo_module_third",
427
+ thirdText: "Logo_module_thirdText"
428
+ };
344
429
  function Logo({ version = "short", className = "" }) {
345
430
  if (version === "short") {
346
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-[19px] h-5 ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("img", { className: "logo-img", src: "/assets/logos/logo-short.svg", alt: "aiacade.me", width: 19, height: 20 }) });
431
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${Logo_module_default.short}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("img", { className: "logo-img", src: "/assets/logos/logo-short.svg", alt: "aiacade.me", width: 19, height: 20 }) });
347
432
  }
348
433
  if (version === "third") {
349
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex items-center gap-1.5 ${className}`, children: [
434
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${Logo_module_default.third}${className ? ` ${className}` : ""}`, children: [
350
435
  /* @__PURE__ */ jsxRuntime.jsx("img", { className: "logo-img", src: "/assets/logos/logo-icon.svg", alt: "", width: 20, height: 20 }),
351
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]", children: "aiacade.me" })
436
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Logo_module_default.thirdText, children: "aiacade.me" })
352
437
  ] });
353
438
  }
354
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `h-5 w-[130px] ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("img", { className: "logo-img", src: "/assets/logos/logo-full.svg", alt: "aiacade.me", width: 130, height: 20 }) });
439
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${Logo_module_default.full}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("img", { className: "logo-img", src: "/assets/logos/logo-full.svg", alt: "aiacade.me", width: 130, height: 20 }) });
355
440
  }
441
+
442
+ // src/atoms/StatBadge.module.scss
443
+ var StatBadge_module_default = {
444
+ root: "StatBadge_module_root",
445
+ bracket: "StatBadge_module_bracket"
446
+ };
356
447
  function StatBadge({ value, suffix, showBrackets = false, className = "" }) {
357
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `inline-flex items-center text-[13px] font-medium text-[var(--fg-secondary)] tracking-[-0.25px] whitespace-nowrap ${className}`, children: [
358
- showBrackets && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--fg-muted)]", children: "[ " }),
448
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${StatBadge_module_default.root}${className ? ` ${className}` : ""}`, children: [
449
+ showBrackets && /* @__PURE__ */ jsxRuntime.jsx("span", { className: StatBadge_module_default.bracket, children: "[ " }),
359
450
  value,
360
451
  " ",
361
452
  suffix,
362
- showBrackets && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--fg-muted)]", children: " ]" })
453
+ showBrackets && /* @__PURE__ */ jsxRuntime.jsx("span", { className: StatBadge_module_default.bracket, children: " ]" })
363
454
  ] });
364
455
  }
456
+
457
+ // src/atoms/Textarea.module.scss
458
+ var Textarea_module_default = {
459
+ wrapper: "Textarea_module_wrapper",
460
+ label: "Textarea_module_label",
461
+ textarea: "Textarea_module_textarea",
462
+ error: "Textarea_module_error",
463
+ errorText: "Textarea_module_errorText"
464
+ };
365
465
  function Textarea(_a) {
366
466
  var _b = _a, {
367
467
  label,
@@ -377,26 +477,30 @@ function Textarea(_a) {
377
477
  "rows"
378
478
  ]);
379
479
  const textareaId = id || (label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-"));
380
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
381
- label && /* @__PURE__ */ jsxRuntime.jsx(
382
- "label",
383
- {
384
- htmlFor: textareaId,
385
- className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]",
386
- children: label
387
- }
388
- ),
480
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Textarea_module_default.wrapper, children: [
481
+ label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: textareaId, className: Textarea_module_default.label, children: label }),
389
482
  /* @__PURE__ */ jsxRuntime.jsx(
390
483
  "textarea",
391
484
  __spreadValues({
392
485
  id: textareaId,
393
486
  rows,
394
- className: `w-full border border-[var(--fg-muted)] bg-[var(--bg)] px-[15px] py-3 text-[13px] tracking-[-0.25px] text-[var(--fg-secondary)] placeholder:text-[var(--fg-muted)] transition-all duration-[var(--transition-fast)] focus:outline-none focus:border-[var(--fg)] rounded-[var(--radius-lg)] resize-vertical ${error ? "border-[var(--color-error)] focus:border-[var(--color-error)]" : ""} ${className}`
487
+ className: `${Textarea_module_default.textarea}${error ? ` ${Textarea_module_default.error}` : ""}${className ? ` ${className}` : ""}`
395
488
  }, props)
396
489
  ),
397
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] tracking-[-0.25px] text-[var(--color-error)]", children: error })
490
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: Textarea_module_default.errorText, children: error })
398
491
  ] });
399
492
  }
493
+
494
+ // src/atoms/Select.module.scss
495
+ var Select_module_default = {
496
+ wrapper: "Select_module_wrapper",
497
+ label: "Select_module_label",
498
+ selectWrap: "Select_module_selectWrap",
499
+ select: "Select_module_select",
500
+ chevron: "Select_module_chevron",
501
+ error: "Select_module_error",
502
+ errorText: "Select_module_errorText"
503
+ };
400
504
  function Select(_a) {
401
505
  var _b = _a, {
402
506
  label,
@@ -414,21 +518,14 @@ function Select(_a) {
414
518
  "id"
415
519
  ]);
416
520
  const selectId = id || (label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-"));
417
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
418
- label && /* @__PURE__ */ jsxRuntime.jsx(
419
- "label",
420
- {
421
- htmlFor: selectId,
422
- className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]",
423
- children: label
424
- }
425
- ),
426
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
521
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Select_module_default.wrapper, children: [
522
+ label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: selectId, className: Select_module_default.label, children: label }),
523
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Select_module_default.selectWrap, children: [
427
524
  /* @__PURE__ */ jsxRuntime.jsxs(
428
525
  "select",
429
526
  __spreadProps(__spreadValues(__spreadValues({
430
527
  id: selectId,
431
- className: `w-full appearance-none border border-[var(--fg-muted)] bg-[var(--bg)] px-[15px] py-3 pr-10 text-[13px] tracking-[-0.25px] text-[var(--fg-secondary)] transition-all duration-[var(--transition-fast)] focus:outline-none focus:border-[var(--fg)] rounded-full ${error ? "border-[var(--color-error)] focus:border-[var(--color-error)]" : ""} ${className}`
528
+ className: `${Select_module_default.select}${error ? ` ${Select_module_default.error}` : ""}${className ? ` ${className}` : ""}`
432
529
  }, !("value" in props) && { defaultValue: "" }), props), {
433
530
  children: [
434
531
  placeholder && /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: true, children: placeholder }),
@@ -436,11 +533,22 @@ function Select(_a) {
436
533
  ]
437
534
  })
438
535
  ),
439
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-3.5 top-1/2 -translate-y-1/2 pointer-events-none text-[var(--fg-muted)]", children: /* @__PURE__ */ jsxRuntime.jsx(IconlyChevronDown, { size: 16 }) })
536
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Select_module_default.chevron, children: /* @__PURE__ */ jsxRuntime.jsx(IconlyChevronDown, { size: 16 }) })
440
537
  ] }),
441
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] tracking-[-0.25px] text-[var(--color-error)]", children: error })
538
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: Select_module_default.errorText, children: error })
442
539
  ] });
443
540
  }
541
+
542
+ // src/atoms/Checkbox.module.scss
543
+ var Checkbox_module_default = {
544
+ root: "Checkbox_module_root",
545
+ hiddenInput: "Checkbox_module_hiddenInput",
546
+ box: "Checkbox_module_box",
547
+ checked: "Checkbox_module_checked",
548
+ unchecked: "Checkbox_module_unchecked",
549
+ label: "Checkbox_module_label",
550
+ disabled: "Checkbox_module_disabled"
551
+ };
444
552
  function Checkbox({
445
553
  checked = false,
446
554
  onChange,
@@ -451,7 +559,7 @@ function Checkbox({
451
559
  return /* @__PURE__ */ jsxRuntime.jsxs(
452
560
  "label",
453
561
  {
454
- className: `inline-flex items-center gap-2.5 ${disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"} ${className}`,
562
+ className: `${Checkbox_module_default.root}${disabled ? ` ${Checkbox_module_default.disabled}` : ""}${className ? ` ${className}` : ""}`,
455
563
  children: [
456
564
  /* @__PURE__ */ jsxRuntime.jsx(
457
565
  "input",
@@ -460,13 +568,13 @@ function Checkbox({
460
568
  checked,
461
569
  disabled,
462
570
  onChange: () => onChange == null ? void 0 : onChange(!checked),
463
- className: "absolute opacity-0 w-0 h-0"
571
+ className: Checkbox_module_default.hiddenInput
464
572
  }
465
573
  ),
466
574
  /* @__PURE__ */ jsxRuntime.jsx(
467
575
  "span",
468
576
  {
469
- className: `flex items-center justify-center w-[18px] h-[18px] rounded-[5px] border transition-colors duration-200 shrink-0 ${checked ? "bg-[var(--color-accent)] border-[var(--color-accent)]" : "border-[var(--fg-muted)] bg-transparent"}`,
577
+ className: `${Checkbox_module_default.box} ${checked ? Checkbox_module_default.checked : Checkbox_module_default.unchecked}`,
470
578
  children: checked && /* @__PURE__ */ jsxRuntime.jsx(
471
579
  "svg",
472
580
  {
@@ -489,11 +597,23 @@ function Checkbox({
489
597
  )
490
598
  }
491
599
  ),
492
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]", children: label })
600
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Checkbox_module_default.label, children: label })
493
601
  ]
494
602
  }
495
603
  );
496
604
  }
605
+
606
+ // src/atoms/Radio.module.scss
607
+ var Radio_module_default = {
608
+ root: "Radio_module_root",
609
+ hiddenInput: "Radio_module_hiddenInput",
610
+ circle: "Radio_module_circle",
611
+ checked: "Radio_module_checked",
612
+ unchecked: "Radio_module_unchecked",
613
+ dot: "Radio_module_dot",
614
+ label: "Radio_module_label",
615
+ disabled: "Radio_module_disabled"
616
+ };
497
617
  function Radio({
498
618
  checked = false,
499
619
  onChange,
@@ -506,7 +626,7 @@ function Radio({
506
626
  return /* @__PURE__ */ jsxRuntime.jsxs(
507
627
  "label",
508
628
  {
509
- className: `inline-flex items-center gap-2.5 ${disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"} ${className}`,
629
+ className: `${Radio_module_default.root}${disabled ? ` ${Radio_module_default.disabled}` : ""}${className ? ` ${className}` : ""}`,
510
630
  children: [
511
631
  /* @__PURE__ */ jsxRuntime.jsx(
512
632
  "input",
@@ -517,60 +637,71 @@ function Radio({
517
637
  name,
518
638
  value,
519
639
  onChange: () => onChange == null ? void 0 : onChange(!checked),
520
- className: "absolute opacity-0 w-0 h-0"
640
+ className: Radio_module_default.hiddenInput
521
641
  }
522
642
  ),
523
643
  /* @__PURE__ */ jsxRuntime.jsx(
524
644
  "span",
525
645
  {
526
- className: `flex items-center justify-center w-[18px] h-[18px] rounded-full border transition-colors duration-200 shrink-0 ${checked ? "border-[var(--color-accent)]" : "border-[var(--fg-muted)]"}`,
527
- children: checked && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-[8px] h-[8px] rounded-full bg-[var(--color-accent)]" })
646
+ className: `${Radio_module_default.circle} ${checked ? Radio_module_default.checked : Radio_module_default.unchecked}`,
647
+ children: checked && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Radio_module_default.dot })
528
648
  }
529
649
  ),
530
- label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]", children: label })
650
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Radio_module_default.label, children: label })
531
651
  ]
532
652
  }
533
653
  );
534
654
  }
535
- var variantStyles3 = {
536
- default: "text-[var(--color-accent)] hover:underline",
537
- muted: "text-[var(--fg-muted)] hover:text-[var(--fg)]",
538
- underline: "text-[var(--fg)] underline underline-offset-2 hover:text-[var(--color-accent)]"
655
+
656
+ // src/atoms/Link.module.scss
657
+ var Link_module_default = {
658
+ root: "Link_module_root",
659
+ default: "Link_module_default",
660
+ muted: "Link_module_muted",
661
+ underline: "Link_module_underline"
539
662
  };
540
663
  function Link(_a) {
541
664
  var _b = _a, { variant = "default", className = "", children } = _b, rest = __objRest(_b, ["variant", "className", "children"]);
542
665
  return /* @__PURE__ */ jsxRuntime.jsx(
543
666
  "a",
544
667
  __spreadProps(__spreadValues({
545
- className: `text-[13px] tracking-[-0.25px] transition-colors duration-[var(--transition-fast)] inline-flex items-center gap-1 ${variantStyles3[variant]} ${className}`
668
+ className: `${Link_module_default.root} ${Link_module_default[variant]}${className ? ` ${className}` : ""}`
546
669
  }, rest), {
547
670
  children
548
671
  })
549
672
  );
550
673
  }
551
- var positionStyles = {
552
- top: "bottom-full left-1/2 -translate-x-1/2 mb-1.5",
553
- bottom: "top-full left-1/2 -translate-x-1/2 mt-1.5",
554
- left: "right-full top-1/2 -translate-y-1/2 mr-1.5",
555
- right: "left-full top-1/2 -translate-y-1/2 ml-1.5"
674
+
675
+ // src/atoms/Tooltip.module.scss
676
+ var Tooltip_module_default = {
677
+ root: "Tooltip_module_root",
678
+ tooltip: "Tooltip_module_tooltip",
679
+ top: "Tooltip_module_top",
680
+ bottom: "Tooltip_module_bottom",
681
+ left: "Tooltip_module_left",
682
+ right: "Tooltip_module_right"
556
683
  };
557
684
  function Tooltip({ content, position = "top", children, className = "" }) {
558
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `relative inline-flex group ${className}`, children: [
685
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${Tooltip_module_default.root} ${className}`, children: [
559
686
  children,
560
687
  /* @__PURE__ */ jsxRuntime.jsx(
561
688
  "span",
562
689
  {
563
690
  role: "tooltip",
564
- className: `absolute invisible group-hover:visible opacity-0 group-hover:opacity-100 transition-opacity bg-[var(--fg)] text-[var(--bg)] text-[11px] px-2 py-1 rounded-md whitespace-nowrap z-50 pointer-events-none ${positionStyles[position]}`,
691
+ className: `${Tooltip_module_default.tooltip} ${Tooltip_module_default[position]}`,
565
692
  children: content
566
693
  }
567
694
  )
568
695
  ] });
569
696
  }
570
- var variantStyles4 = {
571
- line: "h-4 w-full rounded-full",
572
- circle: "rounded-full",
573
- rect: "rounded-[var(--radius-lg)]"
697
+
698
+ // src/atoms/Skeleton.module.scss
699
+ var Skeleton_module_default = {
700
+ pulse: "Skeleton_module_pulse",
701
+ root: "Skeleton_module_root",
702
+ line: "Skeleton_module_line",
703
+ circle: "Skeleton_module_circle",
704
+ rect: "Skeleton_module_rect"
574
705
  };
575
706
  function Skeleton({ variant = "line", width, height, className = "" }) {
576
707
  const style = {};
@@ -583,12 +714,23 @@ function Skeleton({ variant = "line", width, height, className = "" }) {
583
714
  return /* @__PURE__ */ jsxRuntime.jsx(
584
715
  "div",
585
716
  {
586
- className: `animate-pulse bg-[var(--bg-tertiary)] ${variantStyles4[variant]} ${className}`,
717
+ className: `${Skeleton_module_default.root} ${Skeleton_module_default[variant]} ${className}`,
587
718
  style: Object.keys(style).length > 0 ? style : void 0,
588
719
  "aria-hidden": "true"
589
720
  }
590
721
  );
591
722
  }
723
+
724
+ // src/atoms/TicketButton.module.scss
725
+ var TicketButton_module_default = {
726
+ root: "TicketButton_module_root",
727
+ stub: "TicketButton_module_stub",
728
+ body: "TicketButton_module_body",
729
+ bodySvg: "TicketButton_module_bodySvg",
730
+ bodyText: "TicketButton_module_bodyText",
731
+ stubSvg: "TicketButton_module_stubSvg",
732
+ stubIcon: "TicketButton_module_stubIcon"
733
+ };
592
734
  var DefaultIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "9 18 15 12 9 6" }) });
593
735
  function TicketButton(_a) {
594
736
  var _b = _a, {
@@ -611,14 +753,14 @@ function TicketButton(_a) {
611
753
  return /* @__PURE__ */ jsxRuntime.jsxs(
612
754
  "button",
613
755
  __spreadProps(__spreadValues({
614
- className: `group relative inline-flex items-stretch cursor-pointer border-none bg-transparent p-0 select-none ${className}`
756
+ className: `${TicketButton_module_default.root} ${className}`
615
757
  }, props), {
616
758
  children: [
617
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative flex items-center", children: [
759
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: TicketButton_module_default.body, children: [
618
760
  /* @__PURE__ */ jsxRuntime.jsxs(
619
761
  "svg",
620
762
  {
621
- className: "absolute inset-0 w-full h-full",
763
+ className: TicketButton_module_default.bodySvg,
622
764
  viewBox: "0 0 140 56",
623
765
  fill: "none",
624
766
  preserveAspectRatio: "none",
@@ -643,13 +785,13 @@ function TicketButton(_a) {
643
785
  ]
644
786
  }
645
787
  ),
646
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative z-10 px-6 py-4 text-[13px] font-semibold tracking-[-0.25px] whitespace-nowrap", style: { color: fg }, children })
788
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: TicketButton_module_default.bodyText, style: { color: fg }, children })
647
789
  ] }),
648
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative flex items-center transition-transform duration-300 ease-[cubic-bezier(0.34,1.56,0.64,1)] group-hover:translate-x-1.5", children: [
790
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: TicketButton_module_default.stub, children: [
649
791
  /* @__PURE__ */ jsxRuntime.jsxs(
650
792
  "svg",
651
793
  {
652
- className: "absolute inset-0 w-full h-full",
794
+ className: TicketButton_module_default.stubSvg,
653
795
  viewBox: "0 0 56 56",
654
796
  fill: "none",
655
797
  preserveAspectRatio: "none",
@@ -673,36 +815,55 @@ function TicketButton(_a) {
673
815
  ]
674
816
  }
675
817
  ),
676
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative z-10 w-[56px] h-[56px] flex items-center justify-center", style: { color: fg }, children: icon || /* @__PURE__ */ jsxRuntime.jsx(DefaultIcon, {}) })
818
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: TicketButton_module_default.stubIcon, style: { color: fg }, children: icon || /* @__PURE__ */ jsxRuntime.jsx(DefaultIcon, {}) })
677
819
  ] })
678
820
  ]
679
821
  })
680
822
  );
681
823
  }
824
+
825
+ // src/molecules/Card.module.scss
826
+ var Card_module_default = {
827
+ root: "Card_module_root",
828
+ imageWrapper: "Card_module_imageWrapper",
829
+ image: "Card_module_image",
830
+ body: "Card_module_body",
831
+ title: "Card_module_title",
832
+ description: "Card_module_description",
833
+ footer: "Card_module_footer"
834
+ };
682
835
  function Card({ image, title, description, footer, children, className = "" }) {
683
- return /* @__PURE__ */ jsxRuntime.jsxs(
684
- "div",
685
- {
686
- className: `rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] overflow-hidden shadow-[var(--shadow-xs)] transition-all duration-[var(--transition-base)] hover:shadow-[var(--shadow-md)] hover:-translate-y-0.5 ${className}`,
687
- children: [
688
- image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: image, alt: title || "", className: "w-full h-full object-cover" }) }),
689
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5", children: [
690
- title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-semibold text-[var(--fg)] mb-1", children: title }),
691
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-[var(--fg-secondary)] leading-relaxed", children: description }),
692
- children
693
- ] }),
694
- footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-5 py-3 border-t border-[var(--border-color)] bg-[var(--bg-secondary)]", children: footer })
695
- ]
696
- }
697
- );
836
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${Card_module_default.root}${className ? ` ${className}` : ""}`, children: [
837
+ image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Card_module_default.imageWrapper, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: image, alt: title || "", className: Card_module_default.image }) }),
838
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Card_module_default.body, children: [
839
+ title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: Card_module_default.title, children: title }),
840
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: Card_module_default.description, children: description }),
841
+ children
842
+ ] }),
843
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Card_module_default.footer, children: footer })
844
+ ] });
698
845
  }
846
+
847
+ // src/molecules/FormField.module.scss
848
+ var FormField_module_default = {
849
+ root: "FormField_module_root",
850
+ hint: "FormField_module_hint"
851
+ };
699
852
  function FormField(_a) {
700
853
  var _b = _a, { label, error, hint, icon } = _b, inputProps = __objRest(_b, ["label", "error", "hint", "icon"]);
701
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
854
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: FormField_module_default.root, children: [
702
855
  /* @__PURE__ */ jsxRuntime.jsx(Input, __spreadValues({ label, error, icon }, inputProps)),
703
- hint && !error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[0.8125rem] text-[var(--fg-muted)]", children: hint })
856
+ hint && !error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: FormField_module_default.hint, children: hint })
704
857
  ] });
705
858
  }
859
+
860
+ // src/molecules/SearchBar.module.scss
861
+ var SearchBar_module_default = {
862
+ root: "SearchBar_module_root",
863
+ searchIcon: "SearchBar_module_searchIcon",
864
+ input: "SearchBar_module_input",
865
+ clearBtn: "SearchBar_module_clearBtn"
866
+ };
706
867
  function SearchBar({ placeholder = "Search...", value: controlledValue, onChange, className = "" }) {
707
868
  const [internalValue, setInternalValue] = react.useState("");
708
869
  const value = controlledValue != null ? controlledValue : internalValue;
@@ -710,8 +871,8 @@ function SearchBar({ placeholder = "Search...", value: controlledValue, onChange
710
871
  setInternalValue(val);
711
872
  onChange == null ? void 0 : onChange(val);
712
873
  };
713
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `relative flex items-center ${className}`, children: [
714
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-3 text-[var(--fg-muted)]", children: /* @__PURE__ */ jsxRuntime.jsx(IconlySearch, { size: 18 }) }),
874
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${SearchBar_module_default.root}${className ? ` ${className}` : ""}`, children: [
875
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: SearchBar_module_default.searchIcon, children: /* @__PURE__ */ jsxRuntime.jsx(IconlySearch, { size: 18 }) }),
715
876
  /* @__PURE__ */ jsxRuntime.jsx(
716
877
  "input",
717
878
  {
@@ -720,73 +881,95 @@ function SearchBar({ placeholder = "Search...", value: controlledValue, onChange
720
881
  onChange: (e) => handleChange(e.target.value),
721
882
  placeholder,
722
883
  "aria-label": "Search",
723
- className: "w-full rounded-[var(--radius-lg)] border border-[var(--border-color)] bg-[var(--bg)] pl-10 pr-10 py-2.5 text-sm text-[var(--fg)] placeholder:text-[var(--fg-muted)] transition-all duration-[var(--transition-fast)] focus:outline-none focus:ring-2 focus:ring-[var(--brand-primary)] focus:border-transparent"
884
+ className: SearchBar_module_default.input
724
885
  }
725
886
  ),
726
887
  value && /* @__PURE__ */ jsxRuntime.jsx(
727
888
  "button",
728
889
  {
729
890
  onClick: () => handleChange(""),
730
- className: "absolute right-3 text-[var(--fg-muted)] hover:text-[var(--fg)] transition-colors cursor-pointer",
891
+ className: SearchBar_module_default.clearBtn,
731
892
  "aria-label": "Clear search",
732
893
  children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 16 })
733
894
  }
734
895
  )
735
896
  ] });
736
897
  }
898
+
899
+ // src/molecules/Stat.module.scss
900
+ var Stat_module_default = {
901
+ root: "Stat_module_root",
902
+ valueRow: "Stat_module_valueRow",
903
+ value: "Stat_module_value",
904
+ trend: "Stat_module_trend",
905
+ positive: "Stat_module_positive",
906
+ negative: "Stat_module_negative",
907
+ label: "Stat_module_label"
908
+ };
737
909
  function Stat({ value, label, trend, className = "" }) {
738
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex flex-col gap-1 ${className}`, children: [
739
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-2", children: [
740
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-2xl font-bold text-[var(--fg)]", children: value }),
741
- trend && /* @__PURE__ */ jsxRuntime.jsxs(
742
- "span",
743
- {
744
- className: `text-sm font-medium ${trend.positive ? "text-[var(--color-success)]" : "text-[var(--color-error)]"}`,
745
- children: [
746
- trend.positive ? "\u2191" : "\u2193",
747
- " ",
748
- trend.value
749
- ]
750
- }
751
- )
910
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${Stat_module_default.root}${className ? ` ${className}` : ""}`, children: [
911
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Stat_module_default.valueRow, children: [
912
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Stat_module_default.value, children: value }),
913
+ trend && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${Stat_module_default.trend} ${trend.positive ? Stat_module_default.positive : Stat_module_default.negative}`, children: [
914
+ trend.positive ? "\u2191" : "\u2193",
915
+ " ",
916
+ trend.value
917
+ ] })
752
918
  ] }),
753
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-[var(--fg-muted)]", children: label })
919
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Stat_module_default.label, children: label })
754
920
  ] });
755
921
  }
756
- var variantConfig = {
757
- info: { accentColor: "text-[var(--color-info)]", Icon: IconlyInfoCircle },
758
- success: { accentColor: "text-[var(--color-success)]", Icon: IconlySuccess },
759
- warning: { accentColor: "text-[var(--color-warning)]", Icon: IconlyWarning },
760
- error: { accentColor: "text-[var(--color-error)]", Icon: IconlyError }
922
+
923
+ // src/molecules/Alert.module.scss
924
+ var Alert_module_default = {
925
+ root: "Alert_module_root",
926
+ icon: "Alert_module_icon",
927
+ info: "Alert_module_info",
928
+ success: "Alert_module_success",
929
+ warning: "Alert_module_warning",
930
+ error: "Alert_module_error",
931
+ content: "Alert_module_content",
932
+ title: "Alert_module_title",
933
+ message: "Alert_module_message",
934
+ dismiss: "Alert_module_dismiss"
935
+ };
936
+ var variantIcons = {
937
+ info: IconlyInfoCircle,
938
+ success: IconlySuccess,
939
+ warning: IconlyWarning,
940
+ error: IconlyError
761
941
  };
762
942
  function Alert({ variant = "info", title, children, closable = false, className = "" }) {
763
943
  const [visible, setVisible] = react.useState(true);
764
944
  if (!visible) return null;
765
- const config = variantConfig[variant];
766
- const { Icon } = config;
767
- return /* @__PURE__ */ jsxRuntime.jsxs(
768
- "div",
769
- {
770
- className: `flex gap-3 p-4 rounded-[var(--radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] ${className}`,
771
- children: [
772
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `shrink-0 mt-0.5 ${config.accentColor}`, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 20 }) }),
773
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
774
- title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `text-[13px] font-medium tracking-[-0.25px] mb-0.5 ${config.accentColor}`, children: title }),
775
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] tracking-[-0.25px] text-[var(--fg-secondary)]", children })
776
- ] }),
777
- closable && /* @__PURE__ */ jsxRuntime.jsx(
778
- "button",
779
- {
780
- onClick: () => setVisible(false),
781
- className: "shrink-0 text-[var(--fg-muted)] hover:text-[var(--fg)] transition-all duration-[var(--transition-fast)] cursor-pointer",
782
- "aria-label": "Dismiss",
783
- children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 16 })
784
- }
785
- )
786
- ]
787
- }
788
- );
945
+ const Icon = variantIcons[variant];
946
+ const variantClass = Alert_module_default[variant];
947
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${Alert_module_default.root}${className ? ` ${className}` : ""}`, children: [
948
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${Alert_module_default.icon} ${variantClass}`, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 20 }) }),
949
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Alert_module_default.content, children: [
950
+ title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${Alert_module_default.title} ${variantClass}`, children: title }),
951
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: Alert_module_default.message, children })
952
+ ] }),
953
+ closable && /* @__PURE__ */ jsxRuntime.jsx(
954
+ "button",
955
+ {
956
+ onClick: () => setVisible(false),
957
+ className: Alert_module_default.dismiss,
958
+ "aria-label": "Dismiss",
959
+ children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 16 })
960
+ }
961
+ )
962
+ ] });
789
963
  }
964
+
965
+ // src/molecules/Tabs.module.scss
966
+ var Tabs_module_default = {
967
+ tabList: "Tabs_module_tabList",
968
+ tab: "Tabs_module_tab",
969
+ active: "Tabs_module_active",
970
+ indicator: "Tabs_module_indicator",
971
+ panel: "Tabs_module_panel"
972
+ };
790
973
  function Tabs({ tabs, defaultTab, onChange, className = "" }) {
791
974
  var _a, _b;
792
975
  const [activeTab, setActiveTab] = react.useState(defaultTab || ((_a = tabs[0]) == null ? void 0 : _a.id));
@@ -817,7 +1000,7 @@ function Tabs({ tabs, defaultTab, onChange, className = "" }) {
817
1000
  "div",
818
1001
  {
819
1002
  role: "tablist",
820
- className: "flex border-b border-[var(--border-color)]",
1003
+ className: Tabs_module_default.tabList,
821
1004
  onKeyDown: handleKeyDown,
822
1005
  children: tabs.map((tab, index) => /* @__PURE__ */ jsxRuntime.jsxs(
823
1006
  "button",
@@ -831,10 +1014,10 @@ function Tabs({ tabs, defaultTab, onChange, className = "" }) {
831
1014
  "aria-controls": `panel-${tab.id}`,
832
1015
  tabIndex: activeTab === tab.id ? 0 : -1,
833
1016
  onClick: () => activateTab(tab.id),
834
- className: `px-4 py-2.5 text-sm font-medium transition-colors cursor-pointer relative ${activeTab === tab.id ? "text-[var(--brand-primary)]" : "text-[var(--fg-muted)] hover:text-[var(--fg)]"}`,
1017
+ className: `${Tabs_module_default.tab} ${activeTab === tab.id ? Tabs_module_default.active : ""}`,
835
1018
  children: [
836
1019
  tab.label,
837
- activeTab === tab.id && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 left-0 right-0 h-0.5 bg-[var(--brand-primary)] rounded-full" })
1020
+ activeTab === tab.id && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Tabs_module_default.indicator })
838
1021
  ]
839
1022
  },
840
1023
  tab.id
@@ -847,12 +1030,24 @@ function Tabs({ tabs, defaultTab, onChange, className = "" }) {
847
1030
  role: "tabpanel",
848
1031
  id: `panel-${activeTab}`,
849
1032
  "aria-labelledby": `tab-${activeTab}`,
850
- className: "pt-4",
1033
+ className: Tabs_module_default.panel,
851
1034
  children: activeContent
852
1035
  }
853
1036
  )
854
1037
  ] });
855
1038
  }
1039
+
1040
+ // src/molecules/ChatInput.module.scss
1041
+ var ChatInput_module_default = {
1042
+ root: "ChatInput_module_root",
1043
+ contrast: "ChatInput_module_contrast",
1044
+ plain: "ChatInput_module_plain",
1045
+ input: "ChatInput_module_input",
1046
+ actions: "ChatInput_module_actions",
1047
+ actionsFull: "ChatInput_module_actionsFull",
1048
+ actionsEasy: "ChatInput_module_actionsEasy",
1049
+ toolGroup: "ChatInput_module_toolGroup"
1050
+ };
856
1051
  function ChatInput({
857
1052
  placeholder = "\u0412\u0432\u0435\u0434\u0438 \u0441\u0432\u043E\u0439 email...",
858
1053
  buttonText = "\u041D\u0430\u0447\u0430\u0442\u044C \u0431\u0435\u0441\u043F\u043B\u0430\u0442\u043D\u043E",
@@ -870,7 +1065,6 @@ function ChatInput({
870
1065
  setValue("");
871
1066
  }
872
1067
  };
873
- const containerStyles = contrast ? "bg-[var(--bg)] border border-[var(--bg-tertiary)] shadow-[var(--shadow-md)] px-[15px] py-[13px]" : "bg-[var(--bg-tertiary)] pl-3.5 pr-3 py-3";
874
1068
  return /* @__PURE__ */ jsxRuntime.jsxs(
875
1069
  "form",
876
1070
  {
@@ -879,7 +1073,7 @@ function ChatInput({
879
1073
  var _a;
880
1074
  return (_a = inputRef.current) == null ? void 0 : _a.focus();
881
1075
  },
882
- className: `rounded-[16px] overflow-hidden flex flex-col gap-4 w-full max-w-[440px] cursor-text ${containerStyles} ${className}`,
1076
+ className: `${ChatInput_module_default.root} ${contrast ? ChatInput_module_default.contrast : ChatInput_module_default.plain}${className ? ` ${className}` : ""}`,
883
1077
  children: [
884
1078
  /* @__PURE__ */ jsxRuntime.jsx(
885
1079
  "input",
@@ -889,11 +1083,11 @@ function ChatInput({
889
1083
  value,
890
1084
  onChange: (e) => setValue(e.target.value),
891
1085
  placeholder,
892
- className: "w-full bg-transparent border-none outline-none text-[13px] tracking-[-0.25px] text-[var(--fg)] placeholder:text-[var(--fg-muted)] font-normal"
1086
+ className: ChatInput_module_default.input
893
1087
  }
894
1088
  ),
895
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex items-center ${type === "full" ? "justify-between" : "justify-end"}`, children: [
896
- type === "full" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
1089
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${ChatInput_module_default.actions} ${type === "full" ? ChatInput_module_default.actionsFull : ChatInput_module_default.actionsEasy}`, children: [
1090
+ type === "full" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ChatInput_module_default.toolGroup, children: [
897
1091
  /* @__PURE__ */ jsxRuntime.jsx(IconButton, { variant: "secondary", icon: /* @__PURE__ */ jsxRuntime.jsx(IconlySmile, { size: 20 }), type: "button", "aria-label": "Emoji" }),
898
1092
  /* @__PURE__ */ jsxRuntime.jsx(IconButton, { variant: "clear", icon: /* @__PURE__ */ jsxRuntime.jsx(IconlyAttach, { size: 20 }), type: "button", "aria-label": "Attach" }),
899
1093
  /* @__PURE__ */ jsxRuntime.jsx(IconButton, { variant: "clear", icon: /* @__PURE__ */ jsxRuntime.jsx(IconlyInfo, { size: 20 }), type: "button", "aria-label": "Info" })
@@ -904,43 +1098,83 @@ function ChatInput({
904
1098
  }
905
1099
  );
906
1100
  }
1101
+
1102
+ // src/molecules/ChatMessage.module.scss
1103
+ var ChatMessage_module_default = {
1104
+ root: "ChatMessage_module_root",
1105
+ user: "ChatMessage_module_user",
1106
+ ai: "ChatMessage_module_ai",
1107
+ bubble: "ChatMessage_module_bubble",
1108
+ sm: "ChatMessage_module_sm",
1109
+ lg: "ChatMessage_module_lg",
1110
+ bubbleUser: "ChatMessage_module_bubbleUser",
1111
+ bubbleAi: "ChatMessage_module_bubbleAi"
1112
+ };
907
1113
  function ChatMessage({ children, role = "user", size = "sm", className = "" }) {
908
1114
  const isUser = role === "user";
909
- const isLarge = size === "lg";
910
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex ${isUser ? "justify-end" : "justify-start"} ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx(
1115
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${ChatMessage_module_default.root} ${isUser ? ChatMessage_module_default.user : ChatMessage_module_default.ai}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx(
911
1116
  "div",
912
1117
  {
913
- className: `text-[13px] tracking-[-0.25px] font-normal px-4 rounded-tl-[16px] rounded-tr-[16px] ${isLarge ? "w-[225px] py-3" : "py-2"} ${isUser ? "bg-[var(--bg-secondary)] text-[var(--fg)] rounded-bl-[16px]" : "bg-[var(--color-accent)] text-[var(--bg)] rounded-br-[16px]"} ${isLarge ? "leading-normal" : "leading-normal"}`,
1118
+ className: `${ChatMessage_module_default.bubble} ${ChatMessage_module_default[size]} ${isUser ? ChatMessage_module_default.bubbleUser : ChatMessage_module_default.bubbleAi}`,
914
1119
  children
915
1120
  }
916
1121
  ) });
917
1122
  }
1123
+
1124
+ // src/molecules/TopPromo.module.scss
1125
+ var TopPromo_module_default = {
1126
+ root: "TopPromo_module_root",
1127
+ text: "TopPromo_module_text"
1128
+ };
918
1129
  function TopPromo({ text, buttonText = "\u0421\u043C\u043E\u0442\u0440\u0435\u0442\u044C", onButtonClick, className = "" }) {
919
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex items-center gap-2.5 ${className}`, children: [
920
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] tracking-[-0.25px] text-[var(--fg-secondary)]", children: text }),
1130
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${TopPromo_module_default.root}${className ? ` ${className}` : ""}`, children: [
1131
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: TopPromo_module_default.text, children: text }),
921
1132
  /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", size: "sm", onClick: onButtonClick, children: buttonText })
922
1133
  ] });
923
1134
  }
1135
+
1136
+ // src/molecules/ProfileNav.module.scss
1137
+ var ProfileNav_module_default = {
1138
+ root: "ProfileNav_module_root",
1139
+ stats: "ProfileNav_module_stats",
1140
+ statItem: "ProfileNav_module_statItem",
1141
+ statText: "ProfileNav_module_statText",
1142
+ separator: "ProfileNav_module_separator"
1143
+ };
924
1144
  function ProfileNav({ stats, avatarSrc, avatarInitials = "DK", className = "" }) {
925
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex items-center gap-5 ${className}`, children: [
926
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center text-[13px] font-medium tracking-[-0.25px] whitespace-nowrap", children: [
927
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[var(--fg-secondary)]", children: [
1145
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${ProfileNav_module_default.root}${className ? ` ${className}` : ""}`, children: [
1146
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ProfileNav_module_default.stats, children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: ProfileNav_module_default.statItem, children: [
1147
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: ProfileNav_module_default.statText, children: [
928
1148
  stat.value,
929
1149
  " ",
930
1150
  stat.suffix
931
1151
  ] }),
932
- i < stats.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--fg-muted)]", children: " //" })
1152
+ i < stats.length - 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: ProfileNav_module_default.separator, children: " //" })
933
1153
  ] }, i)) }),
934
1154
  /* @__PURE__ */ jsxRuntime.jsx(Avatar, { size: "sm", src: avatarSrc, initials: avatarInitials })
935
1155
  ] });
936
1156
  }
1157
+
1158
+ // src/molecules/IconWithText.module.scss
1159
+ var IconWithText_module_default = {
1160
+ root: "IconWithText_module_root",
1161
+ icon: "IconWithText_module_icon",
1162
+ text: "IconWithText_module_text"
1163
+ };
937
1164
  function IconWithText({ icon, text, side = "left", className = "" }) {
938
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `inline-flex items-center gap-1.5 py-1 rounded-full ${className}`, children: [
939
- side === "left" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 w-5 h-5 flex items-center justify-center", children: icon }),
940
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px] whitespace-nowrap", children: text }),
941
- side === "right" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 w-5 h-5 flex items-center justify-center", children: icon })
1165
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${IconWithText_module_default.root}${className ? ` ${className}` : ""}`, children: [
1166
+ side === "left" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: IconWithText_module_default.icon, children: icon }),
1167
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: IconWithText_module_default.text, children: text }),
1168
+ side === "right" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: IconWithText_module_default.icon, children: icon })
942
1169
  ] });
943
1170
  }
1171
+
1172
+ // src/molecules/StampCard.module.scss
1173
+ var StampCard_module_default = {
1174
+ root: "StampCard_module_root",
1175
+ plain: "StampCard_module_plain",
1176
+ inner: "StampCard_module_inner"
1177
+ };
944
1178
  function StampCard({
945
1179
  children,
946
1180
  className = "",
@@ -992,9 +1226,9 @@ function StampCard({
992
1226
  };
993
1227
  }, [build, stamp]);
994
1228
  if (!stamp) {
995
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] overflow-hidden shadow-[var(--shadow-xs)] ${className}`, children });
1229
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${StampCard_module_default.plain} ${className}`, children });
996
1230
  }
997
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: outerRef, className: `relative ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { filter: "drop-shadow(0 1px 3px rgba(0,0,0,0.25)) drop-shadow(0 4px 12px rgba(0,0,0,0.20))" }, children: /* @__PURE__ */ jsxRuntime.jsx(
1231
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: outerRef, className: `${StampCard_module_default.root} ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { filter: "drop-shadow(0 1px 3px rgba(0,0,0,0.25)) drop-shadow(0 4px 12px rgba(0,0,0,0.20))" }, children: /* @__PURE__ */ jsxRuntime.jsx(
998
1232
  "div",
999
1233
  {
1000
1234
  style: {
@@ -1003,10 +1237,15 @@ function StampCard({
1003
1237
  WebkitMaskSize: "100% 100%",
1004
1238
  maskSize: "100% 100%"
1005
1239
  },
1006
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-[var(--bg)]", children })
1240
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: StampCard_module_default.inner, children })
1007
1241
  }
1008
1242
  ) }) });
1009
1243
  }
1244
+
1245
+ // src/molecules/PasswordInput.module.scss
1246
+ var PasswordInput_module_default = {
1247
+ toggle: "PasswordInput_module_toggle"
1248
+ };
1010
1249
  function PasswordInput(_a) {
1011
1250
  var props = __objRest(_a, []);
1012
1251
  const [showPassword, setShowPassword] = react.useState(false);
@@ -1019,7 +1258,7 @@ function PasswordInput(_a) {
1019
1258
  {
1020
1259
  type: "button",
1021
1260
  onClick: () => setShowPassword((prev) => !prev),
1022
- className: "flex items-center justify-center cursor-pointer",
1261
+ className: PasswordInput_module_default.toggle,
1023
1262
  "aria-label": showPassword ? "Hide password" : "Show password",
1024
1263
  tabIndex: -1,
1025
1264
  children: showPassword ? /* @__PURE__ */ jsxRuntime.jsx(IconlyEyeOff, { size: 18 }) : /* @__PURE__ */ jsxRuntime.jsx(IconlyEye, { size: 18 })
@@ -1028,31 +1267,54 @@ function PasswordInput(_a) {
1028
1267
  })
1029
1268
  );
1030
1269
  }
1270
+
1271
+ // src/molecules/Breadcrumbs.module.scss
1272
+ var Breadcrumbs_module_default = {
1273
+ list: "Breadcrumbs_module_list",
1274
+ item: "Breadcrumbs_module_item",
1275
+ separator: "Breadcrumbs_module_separator",
1276
+ active: "Breadcrumbs_module_active",
1277
+ link: "Breadcrumbs_module_link"
1278
+ };
1031
1279
  function Breadcrumbs({
1032
1280
  items,
1033
1281
  separator = /* @__PURE__ */ jsxRuntime.jsx(IconlyChevronRight, { size: 14 })
1034
1282
  }) {
1035
- return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex items-center gap-1.5 text-[13px] tracking-[-0.25px]", children: items.map((item, index) => {
1283
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: Breadcrumbs_module_default.list, children: items.map((item, index) => {
1036
1284
  var _a;
1037
1285
  const isLast = index === items.length - 1;
1038
- return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-1.5", children: [
1039
- index > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--fg-muted)]", "aria-hidden": "true", children: separator }),
1040
- isLast ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--fg)] font-medium", "aria-current": "page", children: item.label }) : /* @__PURE__ */ jsxRuntime.jsx(
1286
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: Breadcrumbs_module_default.item, children: [
1287
+ index > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: Breadcrumbs_module_default.separator, "aria-hidden": "true", children: separator }),
1288
+ isLast ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: Breadcrumbs_module_default.active, "aria-current": "page", children: item.label }) : /* @__PURE__ */ jsxRuntime.jsx(
1041
1289
  "a",
1042
1290
  {
1043
1291
  href: (_a = item.href) != null ? _a : "#",
1044
- className: "text-[var(--fg-muted)] hover:text-[var(--fg)] transition-colors duration-[var(--transition-fast)]",
1292
+ className: Breadcrumbs_module_default.link,
1045
1293
  children: item.label
1046
1294
  }
1047
1295
  )
1048
1296
  ] }, index);
1049
1297
  }) }) });
1050
1298
  }
1051
- var variantConfig2 = {
1052
- info: { accentColor: "text-[var(--color-info)]", Icon: IconlyInfoCircle },
1053
- success: { accentColor: "text-[var(--color-success)]", Icon: IconlySuccess },
1054
- warning: { accentColor: "text-[var(--color-warning)]", Icon: IconlyWarning },
1055
- error: { accentColor: "text-[var(--color-error)]", Icon: IconlyError }
1299
+
1300
+ // src/molecules/Toast.module.scss
1301
+ var Toast_module_default = {
1302
+ root: "Toast_module_root",
1303
+ icon: "Toast_module_icon",
1304
+ info: "Toast_module_info",
1305
+ success: "Toast_module_success",
1306
+ warning: "Toast_module_warning",
1307
+ error: "Toast_module_error",
1308
+ content: "Toast_module_content",
1309
+ title: "Toast_module_title",
1310
+ message: "Toast_module_message",
1311
+ dismiss: "Toast_module_dismiss"
1312
+ };
1313
+ var variantIcons2 = {
1314
+ info: IconlyInfoCircle,
1315
+ success: IconlySuccess,
1316
+ warning: IconlyWarning,
1317
+ error: IconlyError
1056
1318
  };
1057
1319
  function Toast({
1058
1320
  variant = "info",
@@ -1069,25 +1331,25 @@ function Toast({
1069
1331
  return () => clearTimeout(timer);
1070
1332
  }, [visible, duration, onClose]);
1071
1333
  if (!visible) return null;
1072
- const config = variantConfig2[variant];
1073
- const { Icon } = config;
1334
+ const Icon = variantIcons2[variant];
1335
+ const variantClass = Toast_module_default[variant];
1074
1336
  return /* @__PURE__ */ jsxRuntime.jsxs(
1075
1337
  "div",
1076
1338
  {
1077
1339
  role: "alert",
1078
1340
  "aria-live": "assertive",
1079
- className: `fixed bottom-6 right-6 z-50 flex gap-3 p-4 rounded-[var(--radius-lg)] border border-[var(--border-color)] bg-[var(--bg-secondary)] shadow-lg max-w-sm ${className}`,
1341
+ className: `${Toast_module_default.root}${className ? ` ${className}` : ""}`,
1080
1342
  children: [
1081
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `shrink-0 mt-0.5 ${config.accentColor}`, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 20 }) }),
1082
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
1083
- title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `text-[13px] font-medium tracking-[-0.25px] mb-0.5 ${config.accentColor}`, children: title }),
1084
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] tracking-[-0.25px] text-[var(--fg-secondary)]", children: message })
1343
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${Toast_module_default.icon} ${variantClass}`, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 20 }) }),
1344
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Toast_module_default.content, children: [
1345
+ title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${Toast_module_default.title} ${variantClass}`, children: title }),
1346
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: Toast_module_default.message, children: message })
1085
1347
  ] }),
1086
1348
  /* @__PURE__ */ jsxRuntime.jsx(
1087
1349
  "button",
1088
1350
  {
1089
1351
  onClick: onClose,
1090
- className: "shrink-0 text-[var(--fg-muted)] hover:text-[var(--fg)] transition-all duration-[var(--transition-fast)] cursor-pointer",
1352
+ className: Toast_module_default.dismiss,
1091
1353
  "aria-label": "Dismiss",
1092
1354
  children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 16 })
1093
1355
  }
@@ -1096,6 +1358,15 @@ function Toast({
1096
1358
  }
1097
1359
  );
1098
1360
  }
1361
+
1362
+ // src/molecules/Pagination.module.scss
1363
+ var Pagination_module_default = {
1364
+ root: "Pagination_module_root",
1365
+ pageBtn: "Pagination_module_pageBtn",
1366
+ activePage: "Pagination_module_activePage",
1367
+ ellipsis: "Pagination_module_ellipsis",
1368
+ nav: "Pagination_module_nav"
1369
+ };
1099
1370
  function getPageRange(current, total, siblings) {
1100
1371
  const range = /* @__PURE__ */ new Set();
1101
1372
  range.add(1);
@@ -1124,32 +1395,24 @@ function Pagination({
1124
1395
  const pages = getPageRange(currentPage, totalPages, siblingCount);
1125
1396
  const isFirst = currentPage === 1;
1126
1397
  const isLast = currentPage === totalPages;
1127
- const buttonBase = "min-w-[36px] h-[36px] flex items-center justify-center text-[13px] tracking-[-0.25px] transition-all duration-[var(--transition-fast)] cursor-pointer";
1128
- return /* @__PURE__ */ jsxRuntime.jsxs("nav", { "aria-label": "Pagination", className: `flex items-center gap-1 ${className}`, children: [
1398
+ return /* @__PURE__ */ jsxRuntime.jsxs("nav", { "aria-label": "Pagination", className: `${Pagination_module_default.root} ${className}`, children: [
1129
1399
  /* @__PURE__ */ jsxRuntime.jsx(
1130
1400
  "button",
1131
1401
  {
1132
1402
  onClick: () => onPageChange(currentPage - 1),
1133
1403
  disabled: isFirst,
1134
1404
  "aria-label": "Previous page",
1135
- className: `${buttonBase} text-[var(--fg-secondary)] hover:text-[var(--fg)] ${isFirst ? "opacity-50 cursor-not-allowed" : ""}`,
1405
+ className: Pagination_module_default.nav,
1136
1406
  children: /* @__PURE__ */ jsxRuntime.jsx(IconlyChevronLeft, { size: 18 })
1137
1407
  }
1138
1408
  ),
1139
1409
  pages.map(
1140
- (page, i) => page === "\u2026" ? /* @__PURE__ */ jsxRuntime.jsx(
1141
- "span",
1142
- {
1143
- className: "min-w-[36px] h-[36px] flex items-center justify-center text-[13px] text-[var(--fg-muted)]",
1144
- children: "\u2026"
1145
- },
1146
- `ellipsis-${i}`
1147
- ) : /* @__PURE__ */ jsxRuntime.jsx(
1410
+ (page, i) => page === "\u2026" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: Pagination_module_default.ellipsis, children: "\u2026" }, `ellipsis-${i}`) : /* @__PURE__ */ jsxRuntime.jsx(
1148
1411
  "button",
1149
1412
  {
1150
1413
  onClick: () => onPageChange(page),
1151
1414
  "aria-current": page === currentPage ? "page" : void 0,
1152
- className: `${buttonBase} rounded-full ${page === currentPage ? "bg-[var(--fg)] text-[var(--bg)] font-medium" : "text-[var(--fg-secondary)] hover:text-[var(--fg)] hover:bg-[var(--bg-secondary)]"}`,
1415
+ className: `${Pagination_module_default.pageBtn} ${page === currentPage ? Pagination_module_default.activePage : ""}`,
1153
1416
  children: page
1154
1417
  },
1155
1418
  page
@@ -1161,12 +1424,22 @@ function Pagination({
1161
1424
  onClick: () => onPageChange(currentPage + 1),
1162
1425
  disabled: isLast,
1163
1426
  "aria-label": "Next page",
1164
- className: `${buttonBase} text-[var(--fg-secondary)] hover:text-[var(--fg)] ${isLast ? "opacity-50 cursor-not-allowed" : ""}`,
1427
+ className: Pagination_module_default.nav,
1165
1428
  children: /* @__PURE__ */ jsxRuntime.jsx(IconlyChevronRight, { size: 18 })
1166
1429
  }
1167
1430
  )
1168
1431
  ] });
1169
1432
  }
1433
+
1434
+ // src/molecules/CodeInput.module.scss
1435
+ var CodeInput_module_default = {
1436
+ root: "CodeInput_module_root",
1437
+ label: "CodeInput_module_label",
1438
+ group: "CodeInput_module_group",
1439
+ digitInput: "CodeInput_module_digitInput",
1440
+ digitError: "CodeInput_module_digitError",
1441
+ errorText: "CodeInput_module_errorText"
1442
+ };
1170
1443
  function CodeInput({
1171
1444
  length,
1172
1445
  value,
@@ -1219,16 +1492,9 @@ function CodeInput({
1219
1492
  [length, onChange, focusInput]
1220
1493
  );
1221
1494
  const inputId = label == null ? void 0 : label.toLowerCase().replace(/\s+/g, "-");
1222
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex flex-col gap-1.5 ${className}`, children: [
1223
- label && /* @__PURE__ */ jsxRuntime.jsx(
1224
- "label",
1225
- {
1226
- htmlFor: inputId,
1227
- className: "text-[13px] font-medium text-[var(--fg)] tracking-[-0.25px]",
1228
- children: label
1229
- }
1230
- ),
1231
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-3", role: "group", "aria-label": label || "Code input", children: Array.from({ length }, (_, i) => /* @__PURE__ */ jsxRuntime.jsx(
1495
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CodeInput_module_default.root} ${className}`, children: [
1496
+ label && /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: inputId, className: CodeInput_module_default.label, children: label }),
1497
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: CodeInput_module_default.group, role: "group", "aria-label": label || "Code input", children: Array.from({ length }, (_, i) => /* @__PURE__ */ jsxRuntime.jsx(
1232
1498
  "input",
1233
1499
  {
1234
1500
  id: i === 0 ? inputId : void 0,
@@ -1243,14 +1509,25 @@ function CodeInput({
1243
1509
  onKeyDown: handleKeyDown(i),
1244
1510
  onPaste: handlePaste,
1245
1511
  autoComplete: "one-time-code",
1246
- className: `w-12 h-12 text-center text-lg border bg-[var(--bg)] text-[var(--fg)] rounded-[var(--radius-lg)] transition-all duration-[var(--transition-fast)] focus:outline-none focus:border-[var(--fg)] ${error ? "border-[var(--color-error)] focus:border-[var(--color-error)]" : "border-[var(--fg-muted)]"}`,
1512
+ className: `${CodeInput_module_default.digitInput} ${error ? CodeInput_module_default.digitError : ""}`,
1247
1513
  "aria-label": `Digit ${i + 1}`
1248
1514
  },
1249
1515
  i
1250
1516
  )) }),
1251
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] tracking-[-0.25px] text-[var(--color-error)]", children: error })
1517
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: CodeInput_module_default.errorText, children: error })
1252
1518
  ] });
1253
1519
  }
1520
+
1521
+ // src/molecules/Modal.module.scss
1522
+ var Modal_module_default = {
1523
+ dialog: "Modal_module_dialog",
1524
+ content: "Modal_module_content",
1525
+ header: "Modal_module_header",
1526
+ title: "Modal_module_title",
1527
+ closeBtn: "Modal_module_closeBtn",
1528
+ body: "Modal_module_body",
1529
+ footer: "Modal_module_footer"
1530
+ };
1254
1531
  function Modal({
1255
1532
  open,
1256
1533
  onClose,
@@ -1280,27 +1557,39 @@ function Modal({
1280
1557
  ref: dialogRef,
1281
1558
  onClose,
1282
1559
  onClick: handleBackdropClick,
1283
- className: `max-w-lg w-full p-0 rounded-[var(--radius-lg)] shadow-xl bg-[var(--bg)] border border-[var(--border-color)] backdrop:bg-black/50 ${className}`,
1284
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-6", children: [
1285
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between mb-4", children: [
1286
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-[var(--fg)] tracking-[-0.25px]", children: title }),
1560
+ className: `${Modal_module_default.dialog}${className ? ` ${className}` : ""}`,
1561
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Modal_module_default.content, children: [
1562
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Modal_module_default.header, children: [
1563
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: Modal_module_default.title, children: title }),
1287
1564
  /* @__PURE__ */ jsxRuntime.jsx(
1288
1565
  "button",
1289
1566
  {
1290
1567
  type: "button",
1291
1568
  onClick: onClose,
1292
- className: "shrink-0 ml-auto text-[var(--fg-muted)] hover:text-[var(--fg)] transition-all duration-[var(--transition-fast)] cursor-pointer",
1569
+ className: Modal_module_default.closeBtn,
1293
1570
  "aria-label": "Close",
1294
1571
  children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 20 })
1295
1572
  }
1296
1573
  )
1297
1574
  ] }),
1298
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] text-[var(--fg-secondary)] leading-relaxed", children }),
1299
- footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-3 justify-end mt-6", children: footer })
1575
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: Modal_module_default.body, children }),
1576
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Modal_module_default.footer, children: footer })
1300
1577
  ] })
1301
1578
  }
1302
1579
  );
1303
1580
  }
1581
+
1582
+ // src/molecules/DropdownMenu.module.scss
1583
+ var DropdownMenu_module_default = {
1584
+ root: "DropdownMenu_module_root",
1585
+ trigger: "DropdownMenu_module_trigger",
1586
+ menu: "DropdownMenu_module_menu",
1587
+ alignLeft: "DropdownMenu_module_alignLeft",
1588
+ alignRight: "DropdownMenu_module_alignRight",
1589
+ item: "DropdownMenu_module_item",
1590
+ itemIcon: "DropdownMenu_module_itemIcon",
1591
+ divider: "DropdownMenu_module_divider"
1592
+ };
1304
1593
  function DropdownMenu({
1305
1594
  trigger,
1306
1595
  items,
@@ -1368,7 +1657,7 @@ function DropdownMenu({
1368
1657
  openMenu();
1369
1658
  }
1370
1659
  };
1371
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: `relative inline-block ${className}`, children: [
1660
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: `${DropdownMenu_module_default.root} ${className}`, children: [
1372
1661
  /* @__PURE__ */ jsxRuntime.jsx(
1373
1662
  "div",
1374
1663
  {
@@ -1377,7 +1666,7 @@ function DropdownMenu({
1377
1666
  tabIndex: 0,
1378
1667
  onClick: () => isOpen ? closeMenu() : openMenu(),
1379
1668
  onKeyDown: handleTriggerKeyDown,
1380
- className: "cursor-pointer inline-flex",
1669
+ className: DropdownMenu_module_default.trigger,
1381
1670
  "aria-haspopup": "true",
1382
1671
  "aria-expanded": isOpen,
1383
1672
  children: trigger
@@ -1388,9 +1677,9 @@ function DropdownMenu({
1388
1677
  {
1389
1678
  role: "menu",
1390
1679
  onKeyDown: handleMenuKeyDown,
1391
- className: `absolute top-full mt-1 z-50 rounded-[var(--radius-lg)] shadow-lg border border-[var(--border-color)] bg-[var(--bg)] min-w-[180px] py-1 ${align === "right" ? "right-0" : "left-0"}`,
1680
+ className: `${DropdownMenu_module_default.menu} ${align === "right" ? DropdownMenu_module_default.alignRight : DropdownMenu_module_default.alignLeft}`,
1392
1681
  children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1393
- item.divider && /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "my-1 border-[var(--border-color)]" }),
1682
+ item.divider && /* @__PURE__ */ jsxRuntime.jsx("hr", { className: DropdownMenu_module_default.divider }),
1394
1683
  /* @__PURE__ */ jsxRuntime.jsxs(
1395
1684
  "button",
1396
1685
  {
@@ -1404,9 +1693,9 @@ function DropdownMenu({
1404
1693
  item.onClick();
1405
1694
  closeMenu();
1406
1695
  },
1407
- className: "flex items-center gap-2 w-full px-3 py-2 text-[13px] tracking-[-0.25px] text-[var(--fg-secondary)] hover:bg-[var(--bg-secondary)] hover:text-[var(--fg)] transition-all duration-[var(--transition-fast)] cursor-pointer text-left",
1696
+ className: DropdownMenu_module_default.item,
1408
1697
  children: [
1409
- item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-[var(--fg-muted)]", children: item.icon }),
1698
+ item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: DropdownMenu_module_default.itemIcon, children: item.icon }),
1410
1699
  item.label
1411
1700
  ]
1412
1701
  }
@@ -1416,56 +1705,90 @@ function DropdownMenu({
1416
1705
  )
1417
1706
  ] });
1418
1707
  }
1708
+
1709
+ // src/organisms/Header.module.scss
1710
+ var Header_module_default = {
1711
+ root: "Header_module_root",
1712
+ container: "Header_module_container",
1713
+ bar: "Header_module_bar",
1714
+ leftGroup: "Header_module_leftGroup",
1715
+ logoFallback: "Header_module_logoFallback",
1716
+ logoBrand: "Header_module_logoBrand",
1717
+ desktopNav: "Header_module_desktopNav",
1718
+ navLink: "Header_module_navLink",
1719
+ desktopActions: "Header_module_desktopActions",
1720
+ mobileToggle: "Header_module_mobileToggle",
1721
+ mobileMenu: "Header_module_mobileMenu",
1722
+ mobileNav: "Header_module_mobileNav",
1723
+ mobileActions: "Header_module_mobileActions"
1724
+ };
1419
1725
  function Header({ logo, navItems = [], className = "" }) {
1420
1726
  const [mobileOpen, setMobileOpen] = react.useState(false);
1421
- return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: `border-b border-[var(--border-color)] bg-[var(--bg)]/80 backdrop-blur-md sticky top-0 z-50 ${className}`, children: [
1422
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between h-16", children: [
1423
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-8", children: [
1424
- logo || /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-lg font-bold text-[var(--fg)]", children: [
1425
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--brand-primary)]", children: "K" }),
1727
+ return /* @__PURE__ */ jsxRuntime.jsxs("header", { className: `${Header_module_default.root}${className ? ` ${className}` : ""}`, children: [
1728
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: Header_module_default.container, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Header_module_default.bar, children: [
1729
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Header_module_default.leftGroup, children: [
1730
+ logo || /* @__PURE__ */ jsxRuntime.jsxs("span", { className: Header_module_default.logoFallback, children: [
1731
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Header_module_default.logoBrand, children: "K" }),
1426
1732
  "apustin"
1427
1733
  ] }),
1428
- /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "hidden md:flex items-center gap-1", children: navItems.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
1734
+ /* @__PURE__ */ jsxRuntime.jsx("nav", { className: Header_module_default.desktopNav, children: navItems.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
1429
1735
  "a",
1430
1736
  {
1431
1737
  href: item.href,
1432
- className: "px-3 py-2 text-sm text-[var(--fg-secondary)] hover:text-[var(--fg)] rounded-[var(--radius-md)] hover:bg-[var(--bg-tertiary)] transition-colors",
1738
+ className: Header_module_default.navLink,
1433
1739
  children: item.label
1434
1740
  },
1435
1741
  item.label
1436
1742
  )) })
1437
1743
  ] }),
1438
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "hidden md:flex items-center gap-3", children: [
1744
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Header_module_default.desktopActions, children: [
1439
1745
  /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", children: "Sign in" }),
1440
1746
  /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "sm", children: "Get started" })
1441
1747
  ] }),
1442
1748
  /* @__PURE__ */ jsxRuntime.jsx(
1443
1749
  "button",
1444
1750
  {
1445
- className: "md:hidden p-2 text-[var(--fg-secondary)] hover:text-[var(--fg)] cursor-pointer",
1751
+ className: Header_module_default.mobileToggle,
1446
1752
  onClick: () => setMobileOpen(!mobileOpen),
1447
1753
  "aria-label": "Toggle menu",
1448
1754
  children: mobileOpen ? /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 24 }) : /* @__PURE__ */ jsxRuntime.jsx(IconlyMenu, { size: 24 })
1449
1755
  }
1450
1756
  )
1451
1757
  ] }) }),
1452
- mobileOpen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:hidden border-t border-[var(--border-color)] bg-[var(--bg)] px-4 py-4", children: [
1453
- /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "flex flex-col gap-1", children: navItems.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
1758
+ mobileOpen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Header_module_default.mobileMenu, children: [
1759
+ /* @__PURE__ */ jsxRuntime.jsx("nav", { className: Header_module_default.mobileNav, children: navItems.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
1454
1760
  "a",
1455
1761
  {
1456
1762
  href: item.href,
1457
- className: "px-3 py-2 text-sm text-[var(--fg-secondary)] hover:text-[var(--fg)] rounded-[var(--radius-md)] hover:bg-[var(--bg-tertiary)] transition-colors",
1763
+ className: Header_module_default.navLink,
1458
1764
  children: item.label
1459
1765
  },
1460
1766
  item.label
1461
1767
  )) }),
1462
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 mt-4 pt-4 border-t border-[var(--border-color)]", children: [
1768
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Header_module_default.mobileActions, children: [
1463
1769
  /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", children: "Sign in" }),
1464
1770
  /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "sm", children: "Get started" })
1465
1771
  ] })
1466
1772
  ] })
1467
1773
  ] });
1468
1774
  }
1775
+
1776
+ // src/organisms/Footer.module.scss
1777
+ var Footer_module_default = {
1778
+ root: "Footer_module_root",
1779
+ container: "Footer_module_container",
1780
+ grid: "Footer_module_grid",
1781
+ brand: "Footer_module_brand",
1782
+ brandAccent: "Footer_module_brandAccent",
1783
+ tagline: "Footer_module_tagline",
1784
+ columnTitle: "Footer_module_columnTitle",
1785
+ linkList: "Footer_module_linkList",
1786
+ link: "Footer_module_link",
1787
+ bottom: "Footer_module_bottom",
1788
+ copyright: "Footer_module_copyright",
1789
+ socials: "Footer_module_socials",
1790
+ socialLink: "Footer_module_socialLink"
1791
+ };
1469
1792
  var defaultColumns = [
1470
1793
  {
1471
1794
  title: "Product",
@@ -1496,38 +1819,38 @@ var defaultColumns = [
1496
1819
  }
1497
1820
  ];
1498
1821
  function Footer({ columns = defaultColumns, className = "" }) {
1499
- return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: `border-t border-[var(--border-color)] bg-[var(--bg)] ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12", children: [
1500
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-8", children: [
1822
+ return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: `${Footer_module_default.root}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Footer_module_default.container, children: [
1823
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Footer_module_default.grid, children: [
1501
1824
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1502
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-lg font-bold text-[var(--fg)]", children: [
1503
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--brand-primary)]", children: "K" }),
1825
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: Footer_module_default.brand, children: [
1826
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: Footer_module_default.brandAccent, children: "K" }),
1504
1827
  "apustin"
1505
1828
  ] }),
1506
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-[13px] text-[var(--fg-muted)] leading-relaxed tracking-[-0.25px]", children: "A modern design system for building beautiful interfaces." })
1829
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: Footer_module_default.tagline, children: "A modern design system for building beautiful interfaces." })
1507
1830
  ] }),
1508
1831
  columns.map((col) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1509
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-[13px] font-semibold text-[var(--fg-secondary)] mb-3 tracking-[-0.25px]", children: col.title }),
1510
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-2.5", children: col.links.map((link) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
1832
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: Footer_module_default.columnTitle, children: col.title }),
1833
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: Footer_module_default.linkList, children: col.links.map((link) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
1511
1834
  "a",
1512
1835
  {
1513
1836
  href: link.href,
1514
- className: "text-[13px] text-[var(--fg-muted)] hover:text-[var(--fg)] transition-colors duration-[var(--transition-fast)] tracking-[-0.25px]",
1837
+ className: Footer_module_default.link,
1515
1838
  children: link.label
1516
1839
  }
1517
1840
  ) }, link.label)) })
1518
1841
  ] }, col.title))
1519
1842
  ] }),
1520
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-12 pt-8 border-t border-[var(--border-color)] flex flex-col sm:flex-row justify-between items-center gap-4", children: [
1521
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[13px] text-[var(--fg-muted)] tracking-[-0.25px]", children: [
1843
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Footer_module_default.bottom, children: [
1844
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: Footer_module_default.copyright, children: [
1522
1845
  "\xA9 ",
1523
1846
  (/* @__PURE__ */ new Date()).getFullYear(),
1524
1847
  " Kapustin Team. All rights reserved."
1525
1848
  ] }),
1526
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: ["Twitter", "GitHub", "Discord"].map((social) => /* @__PURE__ */ jsxRuntime.jsx(
1849
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: Footer_module_default.socials, children: ["Twitter", "GitHub", "Discord"].map((social) => /* @__PURE__ */ jsxRuntime.jsx(
1527
1850
  "a",
1528
1851
  {
1529
1852
  href: "#",
1530
- className: "text-[13px] text-[var(--fg-muted)] hover:text-[var(--fg)] transition-colors duration-[var(--transition-fast)] tracking-[-0.25px]",
1853
+ className: Footer_module_default.socialLink,
1531
1854
  children: social
1532
1855
  },
1533
1856
  social
@@ -1535,6 +1858,23 @@ function Footer({ columns = defaultColumns, className = "" }) {
1535
1858
  ] })
1536
1859
  ] }) });
1537
1860
  }
1861
+
1862
+ // src/organisms/PricingCard.module.scss
1863
+ var PricingCard_module_default = {
1864
+ root: "PricingCard_module_root",
1865
+ highlighted: "PricingCard_module_highlighted",
1866
+ badgeWrap: "PricingCard_module_badgeWrap",
1867
+ header: "PricingCard_module_header",
1868
+ plan: "PricingCard_module_plan",
1869
+ description: "PricingCard_module_description",
1870
+ priceBlock: "PricingCard_module_priceBlock",
1871
+ price: "PricingCard_module_price",
1872
+ period: "PricingCard_module_period",
1873
+ features: "PricingCard_module_features",
1874
+ featureItem: "PricingCard_module_featureItem",
1875
+ featureIcon: "PricingCard_module_featureIcon",
1876
+ cta: "PricingCard_module_cta"
1877
+ };
1538
1878
  function PricingCard({
1539
1879
  plan,
1540
1880
  price,
@@ -1548,63 +1888,89 @@ function PricingCard({
1548
1888
  return /* @__PURE__ */ jsxRuntime.jsxs(
1549
1889
  "div",
1550
1890
  {
1551
- className: `relative rounded-[var(--radius-xl)] border p-6 flex flex-col ${highlighted ? "border-[var(--brand-primary)] shadow-[0_0_0_1px_var(--brand-primary),var(--shadow-lg)] bg-[var(--bg)]" : "border-[var(--border-color)] bg-[var(--bg)] shadow-[var(--shadow-xs)]"} ${className}`,
1891
+ className: `${PricingCard_module_default.root}${highlighted ? ` ${PricingCard_module_default.highlighted}` : ""}${className ? ` ${className}` : ""}`,
1552
1892
  children: [
1553
- badge && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -top-3 left-1/2 -translate-x-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { color: "info", children: badge }) }),
1554
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4", children: [
1555
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-[var(--fg)]", children: plan }),
1556
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-[var(--fg-muted)] mt-1", children: description })
1893
+ badge && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PricingCard_module_default.badgeWrap, children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { color: "info", children: badge }) }),
1894
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PricingCard_module_default.header, children: [
1895
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: PricingCard_module_default.plan, children: plan }),
1896
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: PricingCard_module_default.description, children: description })
1557
1897
  ] }),
1558
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6", children: [
1559
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-4xl font-bold text-[var(--fg)]", children: price }),
1560
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--fg-muted)]", children: period })
1898
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PricingCard_module_default.priceBlock, children: [
1899
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: PricingCard_module_default.price, children: price }),
1900
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: PricingCard_module_default.period, children: period })
1561
1901
  ] }),
1562
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-3 mb-8 flex-1", children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-2.5 text-sm text-[var(--fg-secondary)]", children: [
1563
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 mt-0.5 text-[var(--color-success)]", children: /* @__PURE__ */ jsxRuntime.jsx(IconlyCheck, { size: 16 }) }),
1902
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: PricingCard_module_default.features, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: PricingCard_module_default.featureItem, children: [
1903
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: PricingCard_module_default.featureIcon, children: /* @__PURE__ */ jsxRuntime.jsx(IconlyCheck, { size: 16 }) }),
1564
1904
  feature
1565
1905
  ] }, i)) }),
1566
- /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: highlighted ? "primary" : "outline", className: "w-full", children: "Get started" })
1906
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: highlighted ? "primary" : "outline", className: PricingCard_module_default.cta, children: "Get started" })
1567
1907
  ]
1568
1908
  }
1569
1909
  );
1570
1910
  }
1911
+
1912
+ // src/organisms/TestimonialCard.module.scss
1913
+ var TestimonialCard_module_default = {
1914
+ root: "TestimonialCard_module_root",
1915
+ quoteIcon: "TestimonialCard_module_quoteIcon",
1916
+ quoteText: "TestimonialCard_module_quoteText",
1917
+ author: "TestimonialCard_module_author",
1918
+ authorName: "TestimonialCard_module_authorName",
1919
+ authorRole: "TestimonialCard_module_authorRole"
1920
+ };
1571
1921
  function TestimonialCard({ quote, name, role, avatarSrc, className = "" }) {
1572
1922
  const initials = name.split(" ").map((n) => n[0]).join("").toUpperCase();
1573
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] p-6 shadow-[var(--shadow-xs)] ${className}`, children: [
1574
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[var(--brand-primary)] opacity-30 mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(IconlyQuote, { size: 32 }) }),
1575
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-[var(--fg-secondary)] leading-relaxed mb-6", children: [
1923
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${TestimonialCard_module_default.root}${className ? ` ${className}` : ""}`, children: [
1924
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: TestimonialCard_module_default.quoteIcon, children: /* @__PURE__ */ jsxRuntime.jsx(IconlyQuote, { size: 32 }) }),
1925
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: TestimonialCard_module_default.quoteText, children: [
1576
1926
  "\u201C",
1577
1927
  quote,
1578
1928
  "\u201D"
1579
1929
  ] }),
1580
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
1930
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: TestimonialCard_module_default.author, children: [
1581
1931
  /* @__PURE__ */ jsxRuntime.jsx(Avatar, { src: avatarSrc, initials, size: "sm" }),
1582
1932
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1583
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-[var(--fg)]", children: name }),
1584
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-[var(--fg-muted)]", children: role })
1933
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: TestimonialCard_module_default.authorName, children: name }),
1934
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: TestimonialCard_module_default.authorRole, children: role })
1585
1935
  ] })
1586
1936
  ] })
1587
1937
  ] });
1588
1938
  }
1939
+
1940
+ // src/organisms/FeatureGrid.module.scss
1941
+ var FeatureGrid_module_default = {
1942
+ root: "FeatureGrid_module_root",
1943
+ cols2: "FeatureGrid_module_cols2",
1944
+ cols3: "FeatureGrid_module_cols3",
1945
+ cols4: "FeatureGrid_module_cols4",
1946
+ card: "FeatureGrid_module_card",
1947
+ cardIcon: "FeatureGrid_module_cardIcon",
1948
+ cardTitle: "FeatureGrid_module_cardTitle",
1949
+ cardDescription: "FeatureGrid_module_cardDescription"
1950
+ };
1589
1951
  function FeatureGrid({ features, columns = 3, className = "" }) {
1590
- const gridCols = {
1591
- 2: "md:grid-cols-2",
1592
- 3: "md:grid-cols-3",
1593
- 4: "md:grid-cols-2 lg:grid-cols-4"
1952
+ const colsClass = {
1953
+ 2: FeatureGrid_module_default.cols2,
1954
+ 3: FeatureGrid_module_default.cols3,
1955
+ 4: FeatureGrid_module_default.cols4
1594
1956
  };
1595
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `grid grid-cols-1 ${gridCols[columns]} gap-6 ${className}`, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs(
1596
- "div",
1597
- {
1598
- className: "rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] p-6 transition-all duration-[var(--transition-base)] hover:shadow-[var(--shadow-md)] hover:-translate-y-0.5",
1599
- children: [
1600
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-10 h-10 rounded-[var(--radius-lg)] bg-[var(--brand-primary)]/10 flex items-center justify-center text-[var(--brand-primary)] mb-4", children: feature.icon }),
1601
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-[var(--fg)] mb-1.5", children: feature.title }),
1602
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-[var(--fg-muted)] leading-relaxed", children: feature.description })
1603
- ]
1604
- },
1605
- i
1606
- )) });
1957
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${FeatureGrid_module_default.root} ${colsClass[columns]}${className ? ` ${className}` : ""}`, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: FeatureGrid_module_default.card, children: [
1958
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: FeatureGrid_module_default.cardIcon, children: feature.icon }),
1959
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: FeatureGrid_module_default.cardTitle, children: feature.title }),
1960
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: FeatureGrid_module_default.cardDescription, children: feature.description })
1961
+ ] }, i)) });
1607
1962
  }
1963
+
1964
+ // src/organisms/Sidebar.module.scss
1965
+ var Sidebar_module_default = {
1966
+ root: "Sidebar_module_root",
1967
+ menu: "Sidebar_module_menu",
1968
+ courseSubmenu: "Sidebar_module_courseSubmenu",
1969
+ logo: "Sidebar_module_logo",
1970
+ nav: "Sidebar_module_nav",
1971
+ footer: "Sidebar_module_footer",
1972
+ legal: "Sidebar_module_legal"
1973
+ };
1608
1974
  var defaultMenuItems = [
1609
1975
  "\u0413\u043B\u0430\u0432\u043D\u0430\u044F",
1610
1976
  "\u041C\u043E\u0438 \u043A\u0443\u0440\u0441\u044B",
@@ -1623,36 +1989,80 @@ var courseMenuItems = [
1623
1989
  "\u0421\u043E\u0446. \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430",
1624
1990
  "\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B"
1625
1991
  ];
1626
- function Sidebar({ type = "menu", menuItems, footer, className = "" }) {
1627
- const items = menuItems || (type === "courseSubmenu" ? courseMenuItems : defaultMenuItems);
1628
- const [active, setActive] = react.useState(0);
1629
- const width = type === "courseSubmenu" ? "w-[340px]" : "w-[240px]";
1992
+ var DEFAULT_LEGAL = "kapustin.cc, 2026 \n\u0418\u041F \u041A\u0430\u043F\u0443\u0441\u0442\u0438\u043D \u0414.\u0412., \u0418\u041D\u041D 7721250201";
1993
+ function normaliseItems(items) {
1994
+ if (items.length === 0) return [];
1995
+ if (typeof items[0] === "string") {
1996
+ return items.map((label, i) => ({ id: String(i), label }));
1997
+ }
1998
+ return items;
1999
+ }
2000
+ function Sidebar({
2001
+ type = "menu",
2002
+ menuItems,
2003
+ footer,
2004
+ className = "",
2005
+ activeId,
2006
+ onItemClick,
2007
+ logo,
2008
+ legalText
2009
+ }) {
2010
+ const rawItems = menuItems || (type === "courseSubmenu" ? courseMenuItems : defaultMenuItems);
2011
+ const items = normaliseItems(rawItems);
2012
+ const [internalActive, setInternalActive] = react.useState(0);
2013
+ const isControlled = activeId !== void 0;
2014
+ const widthClass = type === "courseSubmenu" ? Sidebar_module_default.courseSubmenu : Sidebar_module_default.menu;
2015
+ const showLegal = legalText !== null;
2016
+ const legalContent = legalText === void 0 ? DEFAULT_LEGAL : legalText;
1630
2017
  return /* @__PURE__ */ jsxRuntime.jsxs(
1631
2018
  "aside",
1632
2019
  {
1633
- className: `bg-[var(--bg)] border-r border-[var(--border-color)] flex flex-col justify-between p-8 shrink-0 h-full ${width} ${className}`,
2020
+ className: `${Sidebar_module_default.root} ${widthClass}${className ? ` ${className}` : ""}`,
1634
2021
  children: [
1635
- /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "flex flex-col gap-1 items-start", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(
1636
- MenuItem,
1637
- {
1638
- text: item,
1639
- active: i === active,
1640
- onClick: () => setActive(i)
1641
- },
1642
- `${item}-${i}`
1643
- )) }),
1644
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 w-full", children: [
2022
+ logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Sidebar_module_default.logo, children: logo }),
2023
+ /* @__PURE__ */ jsxRuntime.jsx("nav", { className: Sidebar_module_default.nav, children: items.map((item, i) => {
2024
+ const isActive = isControlled ? item.id === activeId : i === internalActive;
2025
+ return /* @__PURE__ */ jsxRuntime.jsx(
2026
+ MenuItem,
2027
+ {
2028
+ text: item.label,
2029
+ icon: item.icon,
2030
+ active: isActive,
2031
+ onClick: () => {
2032
+ if (onItemClick) onItemClick(item.id);
2033
+ if (!isControlled) setInternalActive(i);
2034
+ }
2035
+ },
2036
+ item.id
2037
+ );
2038
+ }) }),
2039
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module_default.footer, children: [
1645
2040
  type === "menu" && footer,
1646
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[10px] text-[var(--fg-muted)] tracking-[-0.2px]", children: [
1647
- "kapustin.cc, 2026 ",
1648
- /* @__PURE__ */ jsxRuntime.jsx("br", {}),
1649
- "\u0418\u041F \u041A\u0430\u043F\u0443\u0441\u0442\u0438\u043D \u0414.\u0412., \u0418\u041D\u041D 7721250201"
1650
- ] })
2041
+ showLegal && /* @__PURE__ */ jsxRuntime.jsx("p", { className: Sidebar_module_default.legal, children: legalContent })
1651
2042
  ] })
1652
2043
  ]
1653
2044
  }
1654
2045
  );
1655
2046
  }
2047
+
2048
+ // src/organisms/AppCard.module.scss
2049
+ var AppCard_module_default = {
2050
+ defaultCard: "AppCard_module_defaultCard",
2051
+ stampCard: "AppCard_module_stampCard",
2052
+ imageWrap: "AppCard_module_imageWrap",
2053
+ imageWrapRounded: "AppCard_module_imageWrap AppCard_module_imageWrapRounded",
2054
+ image: "AppCard_module_image",
2055
+ contentDefaultNoImage: "AppCard_module_contentArea AppCard_module_contentDefault AppCard_module_contentDefaultNoImage",
2056
+ contentDefaultWithImage: "AppCard_module_contentArea AppCard_module_contentDefault AppCard_module_contentDefaultWithImage",
2057
+ contentStamp: "AppCard_module_contentArea AppCard_module_contentStamp",
2058
+ textGroup: "AppCard_module_textGroup",
2059
+ cardTitle: "AppCard_module_cardTitle",
2060
+ cardDesc: "AppCard_module_cardDesc",
2061
+ footer: "AppCard_module_footer",
2062
+ iconRow: "AppCard_module_iconRow",
2063
+ shadowWrap: "AppCard_module_shadowWrap",
2064
+ stampBg: "AppCard_module_stampBg"
2065
+ };
1656
2066
  var HOLE_R = 4;
1657
2067
  var HOLE_SP = 16;
1658
2068
  function buildStampMask(w, h) {
@@ -1679,18 +2089,18 @@ function CardContent({
1679
2089
  isStamp
1680
2090
  }) {
1681
2091
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1682
- image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `relative w-full aspect-[16/9] overflow-hidden ${isStamp ? "" : "rounded-t-[16px]"}`, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: image, alt: title, className: "absolute inset-0 w-full h-full object-cover" }) }),
2092
+ image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: isStamp ? AppCard_module_default.imageWrap : AppCard_module_default.imageWrapRounded, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: image, alt: title, className: AppCard_module_default.image }) }),
1683
2093
  /* @__PURE__ */ jsxRuntime.jsxs(
1684
2094
  "div",
1685
2095
  {
1686
- className: `bg-[var(--bg)] overflow-hidden flex flex-col justify-between px-[25px] pt-[25px] pb-[21px] flex-1 min-h-[220px] relative ${isStamp ? "" : `border border-[var(--bg-tertiary)] shadow-[var(--shadow-md)] ${image ? "rounded-b-[16px]" : "rounded-[16px]"}`}`,
2096
+ className: isStamp ? AppCard_module_default.contentStamp : image ? AppCard_module_default.contentDefaultWithImage : AppCard_module_default.contentDefaultNoImage,
1687
2097
  children: [
1688
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 pr-8", children: [
1689
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-semibold text-[var(--fg-secondary)] tracking-[-0.25px]", children: title }),
1690
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-[var(--fg-muted)] tracking-[-0.25px] leading-normal", children: description })
2098
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: AppCard_module_default.textGroup, children: [
2099
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: AppCard_module_default.cardTitle, children: title }),
2100
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: AppCard_module_default.cardDesc, children: description })
1691
2101
  ] }),
1692
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mt-5", children: [
1693
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: icons }),
2102
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: AppCard_module_default.footer, children: [
2103
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: AppCard_module_default.iconRow, children: icons }),
1694
2104
  /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: buttonVariant === "outline" ? "outline" : "primary", size: "sm", onClick: onButtonClick, children: buttonText })
1695
2105
  ] })
1696
2106
  ]
@@ -1707,7 +2117,7 @@ function AppCard(_a) {
1707
2117
  "className"
1708
2118
  ]);
1709
2119
  if (variant === "default") {
1710
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex flex-col w-[320px] ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, __spreadProps(__spreadValues({}, contentProps), { isStamp: false })) });
2120
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${AppCard_module_default.defaultCard}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, __spreadProps(__spreadValues({}, contentProps), { isStamp: false })) });
1711
2121
  }
1712
2122
  const padded = variant === "stamp-padded";
1713
2123
  return /* @__PURE__ */ jsxRuntime.jsx(StampWrapper, { className, padded, children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, __spreadProps(__spreadValues({}, contentProps), { isStamp: true })) });
@@ -1733,7 +2143,7 @@ function StampWrapper({ children, className, padded }) {
1733
2143
  ro.disconnect();
1734
2144
  };
1735
2145
  }, [build]);
1736
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: `flex flex-col w-[320px] relative ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { style: { filter: "drop-shadow(0 1px 3px rgba(0,0,0,0.15)) drop-shadow(0 4px 12px rgba(0,0,0,0.12))" }, children: /* @__PURE__ */ jsxRuntime.jsx(
2146
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: `${AppCard_module_default.stampCard}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: AppCard_module_default.shadowWrap, children: /* @__PURE__ */ jsxRuntime.jsx(
1737
2147
  "div",
1738
2148
  {
1739
2149
  style: {
@@ -1742,10 +2152,15 @@ function StampWrapper({ children, className, padded }) {
1742
2152
  WebkitMaskSize: "100% 100%",
1743
2153
  maskSize: "100% 100%"
1744
2154
  },
1745
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-[var(--bg)]", style: padded ? { padding: STAMP_PADDING } : void 0, children })
2155
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: AppCard_module_default.stampBg, style: padded ? { padding: STAMP_PADDING } : void 0, children })
1746
2156
  }
1747
2157
  ) }) });
1748
2158
  }
2159
+
2160
+ // src/organisms/AppTopLine.module.scss
2161
+ var AppTopLine_module_default = {
2162
+ root: "AppTopLine_module_root"
2163
+ };
1749
2164
  function AppTopLine({
1750
2165
  promoText = "\u0412\u0430\u043C \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0441\u043A\u0438\u0434\u043A\u0430 10% \u043D\u0430 \u0432\u0441\u0435 \u043F\u043B\u0430\u0442\u043D\u044B\u0435 \u043A\u0443\u0440\u0441\u044B",
1751
2166
  promoButtonText = "\u0421\u043C\u043E\u0442\u0440\u0435\u0442\u044C",
@@ -1758,19 +2173,51 @@ function AppTopLine({
1758
2173
  avatarSrc,
1759
2174
  className = ""
1760
2175
  }) {
1761
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `bg-[var(--bg)] flex items-center justify-between w-full ${className}`, children: [
2176
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${AppTopLine_module_default.root}${className ? ` ${className}` : ""}`, children: [
1762
2177
  /* @__PURE__ */ jsxRuntime.jsx(TopPromo, { text: promoText, buttonText: promoButtonText }),
1763
2178
  /* @__PURE__ */ jsxRuntime.jsx(ProfileNav, { stats, avatarSrc })
1764
2179
  ] });
1765
2180
  }
2181
+
2182
+ // src/organisms/EmptyState.module.scss
2183
+ var EmptyState_module_default = {
2184
+ root: "EmptyState_module_root",
2185
+ icon: "EmptyState_module_icon",
2186
+ title: "EmptyState_module_title",
2187
+ description: "EmptyState_module_description",
2188
+ action: "EmptyState_module_action"
2189
+ };
1766
2190
  function EmptyState({ icon, title, description, action, className = "" }) {
1767
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] p-8 shadow-[var(--shadow-xs)] flex flex-col items-center text-center ${className}`, children: [
1768
- icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[var(--fg-muted)] mb-4", children: icon }),
1769
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-[var(--fg)]", children: title }),
1770
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[13px] text-[var(--fg-muted)] tracking-[-0.25px] mt-1 max-w-sm", children: description }),
1771
- action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-5", children: action })
2191
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${EmptyState_module_default.root}${className ? ` ${className}` : ""}`, children: [
2192
+ icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: EmptyState_module_default.icon, children: icon }),
2193
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: EmptyState_module_default.title, children: title }),
2194
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: EmptyState_module_default.description, children: description }),
2195
+ action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: EmptyState_module_default.action, children: action })
1772
2196
  ] });
1773
2197
  }
2198
+
2199
+ // src/organisms/HeroSection.module.scss
2200
+ var HeroSection_module_default = {
2201
+ root: "HeroSection_module_root",
2202
+ bgGlow: "HeroSection_module_bgGlow",
2203
+ glowOrb: "HeroSection_module_glowOrb",
2204
+ inner: "HeroSection_module_inner",
2205
+ innerCompact: "HeroSection_module_innerCompact",
2206
+ content: "HeroSection_module_content",
2207
+ contentCenter: "HeroSection_module_content HeroSection_module_contentCenter",
2208
+ eyebrowWrap: "HeroSection_module_eyebrowWrap",
2209
+ eyebrowCenter: "HeroSection_module_eyebrowCenter",
2210
+ eyebrow: "HeroSection_module_eyebrow",
2211
+ eyebrowDot: "HeroSection_module_eyebrowDot",
2212
+ title: "HeroSection_module_title",
2213
+ subtitle: "HeroSection_module_subtitle",
2214
+ subtitleCenter: "HeroSection_module_subtitleCenter",
2215
+ actions: "HeroSection_module_actions",
2216
+ actionsCenter: "HeroSection_module_actionsCenter",
2217
+ mediaWrapCenter: "HeroSection_module_mediaWrap HeroSection_module_mediaWrapCenter",
2218
+ mediaWrapLeft: "HeroSection_module_mediaWrap HeroSection_module_mediaWrapLeft",
2219
+ mediaBox: "HeroSection_module_mediaBox"
2220
+ };
1774
2221
  function HeroSection({
1775
2222
  eyebrow,
1776
2223
  title,
@@ -1783,30 +2230,40 @@ function HeroSection({
1783
2230
  }) {
1784
2231
  const isCenter = align === "center";
1785
2232
  const isCompact = size === "compact";
1786
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `relative overflow-hidden ${className}`, children: [
1787
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 pointer-events-none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 left-1/2 -translate-x-1/2 w-[800px] h-[600px] bg-[radial-gradient(ellipse_at_center,var(--brand-primary)_0%,transparent_70%)] opacity-[0.04]" }) }),
1788
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `relative ${isCompact ? "py-16 md:py-20" : "py-20 md:py-32"}`, children: [
1789
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `max-w-4xl ${isCenter ? "mx-auto text-center" : ""}`, children: [
1790
- eyebrow && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `mb-4 md:mb-5 ${isCenter ? "flex justify-center" : ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-[11px] font-semibold uppercase tracking-[0.08em] bg-[var(--brand-primary)]/10 text-[var(--brand-primary)] border border-[var(--brand-primary)]/15", children: [
1791
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-[var(--brand-primary)] animate-pulse" }),
2233
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${HeroSection_module_default.root}${className ? ` ${className}` : ""}`, children: [
2234
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: HeroSection_module_default.bgGlow, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: HeroSection_module_default.glowOrb }) }),
2235
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: isCompact ? HeroSection_module_default.innerCompact : HeroSection_module_default.inner, children: [
2236
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: isCenter ? HeroSection_module_default.contentCenter : HeroSection_module_default.content, children: [
2237
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${HeroSection_module_default.eyebrowWrap}${isCenter ? ` ${HeroSection_module_default.eyebrowCenter}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: HeroSection_module_default.eyebrow, children: [
2238
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: HeroSection_module_default.eyebrowDot }),
1792
2239
  eyebrow
1793
2240
  ] }) }),
1794
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: `text-[clamp(2rem,5vw,3.75rem)] font-bold leading-[1.08] tracking-[-0.035em] text-[var(--fg)] text-balance`, children: title }),
1795
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `mt-5 md:mt-6 text-base md:text-lg text-[var(--fg-secondary)] leading-relaxed max-w-2xl ${isCenter ? "mx-auto" : ""}`, children: subtitle }),
1796
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `mt-8 md:mt-10 flex flex-wrap gap-3 ${isCenter ? "justify-center" : ""}`, children: actions })
2241
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: HeroSection_module_default.title, children: title }),
2242
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${HeroSection_module_default.subtitle}${isCenter ? ` ${HeroSection_module_default.subtitleCenter}` : ""}`, children: subtitle }),
2243
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${HeroSection_module_default.actions}${isCenter ? ` ${HeroSection_module_default.actionsCenter}` : ""}`, children: actions })
1797
2244
  ] }),
1798
- media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `mt-12 md:mt-16 ${isCenter ? "max-w-5xl mx-auto" : "max-w-4xl"}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-[var(--radius-xl)] border border-[var(--border-color)] shadow-[var(--shadow-xl)] overflow-hidden bg-[var(--bg-secondary)]", children: media }) })
2245
+ media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: isCenter ? HeroSection_module_default.mediaWrapCenter : HeroSection_module_default.mediaWrapLeft, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: HeroSection_module_default.mediaBox, children: media }) })
1799
2246
  ] })
1800
2247
  ] });
1801
2248
  }
2249
+
2250
+ // src/organisms/LogoCloud.module.scss
2251
+ var LogoCloud_module_default = {
2252
+ root: "LogoCloud_module_root",
2253
+ label: "LogoCloud_module_label",
2254
+ grid: "LogoCloud_module_grid",
2255
+ logoItem: "LogoCloud_module_logoItem",
2256
+ logoImg: "LogoCloud_module_logoImg",
2257
+ logoText: "LogoCloud_module_logoText"
2258
+ };
1802
2259
  function LogoCloud({
1803
2260
  label = "Trusted by teams at",
1804
2261
  logos,
1805
2262
  className = ""
1806
2263
  }) {
1807
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `py-10 md:py-14 ${className}`, children: [
1808
- label && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-[11px] font-semibold uppercase tracking-[0.1em] text-[var(--fg-muted)] mb-8", children: label }),
1809
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-center gap-x-10 gap-y-6 md:gap-x-14", children: logos.map((logo) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 opacity-40 hover:opacity-70 transition-opacity duration-[var(--transition-base)]", children: logo.src ? (
2264
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${LogoCloud_module_default.root}${className ? ` ${className}` : ""}`, children: [
2265
+ label && /* @__PURE__ */ jsxRuntime.jsx("p", { className: LogoCloud_module_default.label, children: label }),
2266
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: LogoCloud_module_default.grid, children: logos.map((logo) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: LogoCloud_module_default.logoItem, children: logo.src ? (
1810
2267
  // eslint-disable-next-line @next/next/no-img-element
1811
2268
  /* @__PURE__ */ jsxRuntime.jsx(
1812
2269
  "img",
@@ -1814,32 +2271,52 @@ function LogoCloud({
1814
2271
  src: logo.src,
1815
2272
  alt: logo.name,
1816
2273
  width: logo.width || 100,
1817
- className: "h-6 md:h-7 w-auto object-contain logo-img"
2274
+ className: `${LogoCloud_module_default.logoImg} logo-img`
1818
2275
  }
1819
2276
  )
1820
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm md:text-base font-bold tracking-[-0.02em] text-[var(--fg)] select-none", children: logo.name }) }, logo.name)) })
2277
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: LogoCloud_module_default.logoText, children: logo.name }) }, logo.name)) })
1821
2278
  ] });
1822
2279
  }
2280
+
2281
+ // src/organisms/StatsBar.module.scss
2282
+ var StatsBar_module_default = {
2283
+ root: "StatsBar_module_root",
2284
+ inline: "StatsBar_module_inline",
2285
+ inlineGrid: "StatsBar_module_inlineGrid",
2286
+ inlineItem: "StatsBar_module_inlineItem",
2287
+ cardsGrid: "StatsBar_module_cardsGrid",
2288
+ card: "StatsBar_module_card",
2289
+ cardIconWrap: "StatsBar_module_cardIconWrap",
2290
+ statValue: "StatsBar_module_statValue",
2291
+ statLabel: "StatsBar_module_statLabel"
2292
+ };
1823
2293
  function StatsBar({ stats, variant = "inline", className = "" }) {
1824
2294
  if (variant === "cards") {
1825
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `py-10 md:py-14 ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs(
1826
- "div",
1827
- {
1828
- className: "rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] p-5 md:p-6 text-center transition-all duration-[var(--transition-base)] hover:shadow-[var(--shadow-md)] hover:-translate-y-0.5",
1829
- children: [
1830
- stat.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center mb-3 text-[var(--brand-primary)]", children: stat.icon }),
1831
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-2xl md:text-3xl font-bold text-[var(--fg)] tracking-[-0.03em] tabular-nums", children: stat.value }),
1832
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-[13px] text-[var(--fg-muted)] tracking-[-0.25px]", children: stat.label })
1833
- ]
1834
- },
1835
- i
1836
- )) }) });
2295
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${StatsBar_module_default.root}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: StatsBar_module_default.cardsGrid, children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: StatsBar_module_default.card, children: [
2296
+ stat.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: StatsBar_module_default.cardIconWrap, children: stat.icon }),
2297
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: StatsBar_module_default.statValue, children: stat.value }),
2298
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: StatsBar_module_default.statLabel, children: stat.label })
2299
+ ] }, i)) }) });
1837
2300
  }
1838
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `py-10 md:py-14 border-y border-[var(--border-color)] ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-center gap-8 md:gap-16", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
1839
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-2xl md:text-3xl font-bold text-[var(--fg)] tracking-[-0.03em] tabular-nums", children: stat.value }),
1840
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-[13px] text-[var(--fg-muted)] tracking-[-0.25px]", children: stat.label })
2301
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${StatsBar_module_default.root} ${StatsBar_module_default.inline}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: StatsBar_module_default.inlineGrid, children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: StatsBar_module_default.inlineItem, children: [
2302
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: StatsBar_module_default.statValue, children: stat.value }),
2303
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: StatsBar_module_default.statLabel, children: stat.label })
1841
2304
  ] }, i)) }) });
1842
2305
  }
2306
+
2307
+ // src/organisms/CTASection.module.scss
2308
+ var CTASection_module_default = {
2309
+ root: "CTASection_module_root",
2310
+ default: "CTASection_module_default",
2311
+ filled: "CTASection_module_filled",
2312
+ bordered: "CTASection_module_bordered",
2313
+ inner: "CTASection_module_inner",
2314
+ title: "CTASection_module_title",
2315
+ titleFilled: "CTASection_module_titleFilled",
2316
+ description: "CTASection_module_description",
2317
+ descriptionFilled: "CTASection_module_descriptionFilled",
2318
+ actions: "CTASection_module_actions"
2319
+ };
1843
2320
  function CTASection({
1844
2321
  title,
1845
2322
  description,
@@ -1847,44 +2324,42 @@ function CTASection({
1847
2324
  variant = "default",
1848
2325
  className = ""
1849
2326
  }) {
1850
- const variantStyles5 = {
1851
- default: "py-16 md:py-24",
1852
- filled: "py-12 md:py-16 px-6 md:px-12 rounded-[var(--radius-xl)] bg-[var(--fg)] text-[var(--bg)]",
1853
- bordered: "py-12 md:py-16 px-6 md:px-12 rounded-[var(--radius-xl)] border-2 border-dashed border-[var(--border-color-strong)]"
1854
- };
1855
2327
  const isFilled = variant === "filled";
1856
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${variantStyles5[variant]} ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl mx-auto text-center", children: [
1857
- /* @__PURE__ */ jsxRuntime.jsx(
1858
- "h2",
1859
- {
1860
- className: `text-2xl md:text-4xl font-bold tracking-[-0.03em] leading-[1.1] ${isFilled ? "text-[var(--bg)]" : "text-[var(--fg)]"}`,
1861
- children: title
1862
- }
1863
- ),
1864
- description && /* @__PURE__ */ jsxRuntime.jsx(
1865
- "p",
1866
- {
1867
- className: `mt-4 text-base leading-relaxed ${isFilled ? "text-[var(--bg)]/70" : "text-[var(--fg-secondary)]"}`,
1868
- children: description
1869
- }
1870
- ),
1871
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 flex flex-wrap gap-3 justify-center", children: actions })
2328
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${CTASection_module_default.root} ${CTASection_module_default[variant]}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: CTASection_module_default.inner, children: [
2329
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${CTASection_module_default.title}${isFilled ? ` ${CTASection_module_default.titleFilled}` : ""}`, children: title }),
2330
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CTASection_module_default.description}${isFilled ? ` ${CTASection_module_default.descriptionFilled}` : ""}`, children: description }),
2331
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: CTASection_module_default.actions, children: actions })
1872
2332
  ] }) });
1873
2333
  }
2334
+
2335
+ // src/organisms/BentoGrid.module.scss
2336
+ var BentoGrid_module_default = {
2337
+ root: "BentoGrid_module_root",
2338
+ grid: "BentoGrid_module_grid",
2339
+ item: "BentoGrid_module_item",
2340
+ colSpan2: "BentoGrid_module_colSpan2",
2341
+ rowSpan2: "BentoGrid_module_rowSpan2",
2342
+ mediaWrap: "BentoGrid_module_mediaWrap",
2343
+ content: "BentoGrid_module_content",
2344
+ contentTall: "BentoGrid_module_contentTall",
2345
+ itemIcon: "BentoGrid_module_itemIcon",
2346
+ itemTitle: "BentoGrid_module_itemTitle",
2347
+ itemDescription: "BentoGrid_module_itemDescription"
2348
+ };
1874
2349
  function BentoGrid({ items, className = "" }) {
1875
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `py-10 md:py-14 ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4", children: items.map((item, i) => {
1876
- const colSpanClass = item.span === 2 ? "md:col-span-2" : "";
1877
- const rowSpanClass = item.rowSpan === 2 ? "md:row-span-2" : "";
2350
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${BentoGrid_module_default.root}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: BentoGrid_module_default.grid, children: items.map((item, i) => {
2351
+ const spanClass = item.span === 2 ? ` ${BentoGrid_module_default.colSpan2}` : "";
2352
+ const rowClass = item.rowSpan === 2 ? ` ${BentoGrid_module_default.rowSpan2}` : "";
1878
2353
  return /* @__PURE__ */ jsxRuntime.jsxs(
1879
2354
  "div",
1880
2355
  {
1881
- className: `group relative rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] overflow-hidden transition-all duration-[var(--transition-base)] hover:shadow-[var(--shadow-md)] hover:border-[var(--border-color-strong)] ${colSpanClass} ${rowSpanClass} ${item.className || ""}`,
2356
+ className: `${BentoGrid_module_default.item}${spanClass}${rowClass}${item.className ? ` ${item.className}` : ""}`,
1882
2357
  children: [
1883
- item.media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full overflow-hidden", children: item.media }),
1884
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `p-5 md:p-6 ${item.rowSpan === 2 ? "flex flex-col h-full" : ""}`, children: [
1885
- item.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-9 h-9 rounded-[var(--radius-md)] bg-[var(--brand-primary)]/10 flex items-center justify-center text-[var(--brand-primary)] mb-3.5", children: item.icon }),
1886
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[15px] font-semibold text-[var(--fg)] tracking-[-0.01em]", children: item.title }),
1887
- item.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-[13px] text-[var(--fg-muted)] leading-relaxed tracking-[-0.25px]", children: item.description })
2358
+ item.media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: BentoGrid_module_default.mediaWrap, children: item.media }),
2359
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${BentoGrid_module_default.content}${item.rowSpan === 2 ? ` ${BentoGrid_module_default.contentTall}` : ""}`, children: [
2360
+ item.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: BentoGrid_module_default.itemIcon, children: item.icon }),
2361
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: BentoGrid_module_default.itemTitle, children: item.title }),
2362
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: BentoGrid_module_default.itemDescription, children: item.description })
1888
2363
  ] })
1889
2364
  ]
1890
2365
  },
@@ -1892,6 +2367,23 @@ function BentoGrid({ items, className = "" }) {
1892
2367
  );
1893
2368
  }) }) });
1894
2369
  }
2370
+
2371
+ // src/organisms/FAQSection.module.scss
2372
+ var FAQSection_module_default = {
2373
+ root: "FAQSection_module_root",
2374
+ container: "FAQSection_module_container",
2375
+ title: "FAQSection_module_title",
2376
+ subtitle: "FAQSection_module_subtitle",
2377
+ list: "FAQSection_module_list",
2378
+ item: "FAQSection_module_item",
2379
+ question: "FAQSection_module_question",
2380
+ questionText: "FAQSection_module_questionText",
2381
+ toggleIcon: "FAQSection_module_toggleIcon",
2382
+ toggleIconOpen: "FAQSection_module_toggleIcon FAQSection_module_toggleIconOpen",
2383
+ answerOpen: "FAQSection_module_answer FAQSection_module_answerOpen",
2384
+ answerClosed: "FAQSection_module_answer FAQSection_module_answerClosed",
2385
+ answerText: "FAQSection_module_answerText"
2386
+ };
1895
2387
  function FAQSection({
1896
2388
  title = "Frequently asked questions",
1897
2389
  subtitle,
@@ -1900,64 +2392,72 @@ function FAQSection({
1900
2392
  }) {
1901
2393
  const [openIndex, setOpenIndex] = react.useState(null);
1902
2394
  const toggle = (i) => setOpenIndex(openIndex === i ? null : i);
1903
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `py-14 md:py-20 ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl mx-auto", children: [
1904
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl md:text-3xl font-bold text-[var(--fg)] tracking-[-0.03em] text-center", children: title }),
1905
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-base text-[var(--fg-secondary)] text-center", children: subtitle }),
1906
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${title || subtitle ? "mt-10" : ""} divide-y divide-[var(--border-color)]`, children: items.map((item, i) => {
2395
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${FAQSection_module_default.root}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: FAQSection_module_default.container, children: [
2396
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: FAQSection_module_default.title, children: title }),
2397
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: FAQSection_module_default.subtitle, children: subtitle }),
2398
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: title || subtitle ? FAQSection_module_default.list : "", children: items.map((item, i) => {
1907
2399
  const isOpen = openIndex === i;
1908
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-5", children: [
2400
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: FAQSection_module_default.item, children: [
1909
2401
  /* @__PURE__ */ jsxRuntime.jsxs(
1910
2402
  "button",
1911
2403
  {
1912
2404
  onClick: () => toggle(i),
1913
- className: "w-full flex items-center justify-between gap-4 text-left cursor-pointer group",
2405
+ className: FAQSection_module_default.question,
1914
2406
  "aria-expanded": isOpen,
1915
2407
  children: [
1916
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[15px] font-medium text-[var(--fg)] group-hover:text-[var(--brand-primary)] transition-colors", children: item.question }),
1917
- /* @__PURE__ */ jsxRuntime.jsx(
1918
- "span",
1919
- {
1920
- className: `shrink-0 w-5 h-5 flex items-center justify-center text-[var(--fg-muted)] transition-transform duration-200 ${isOpen ? "rotate-45" : ""}`,
1921
- children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 1v12M1 7h12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) })
1922
- }
1923
- )
2408
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: FAQSection_module_default.questionText, children: item.question }),
2409
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: isOpen ? FAQSection_module_default.toggleIconOpen : FAQSection_module_default.toggleIcon, children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 1v12M1 7h12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) })
1924
2410
  ]
1925
2411
  }
1926
2412
  ),
1927
- /* @__PURE__ */ jsxRuntime.jsx(
1928
- "div",
1929
- {
1930
- className: `overflow-hidden transition-all duration-200 ease-out ${isOpen ? "max-h-96 opacity-100 mt-3" : "max-h-0 opacity-0"}`,
1931
- children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[14px] text-[var(--fg-secondary)] leading-relaxed pr-8", children: item.answer })
1932
- }
1933
- )
2413
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: isOpen ? FAQSection_module_default.answerOpen : FAQSection_module_default.answerClosed, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: FAQSection_module_default.answerText, children: item.answer }) })
1934
2414
  ] }, i);
1935
2415
  }) })
1936
2416
  ] }) });
1937
2417
  }
2418
+
2419
+ // src/organisms/ComparisonTable.module.scss
2420
+ var ComparisonTable_module_default = {
2421
+ root: "ComparisonTable_module_root",
2422
+ scrollWrap: "ComparisonTable_module_scrollWrap",
2423
+ table: "ComparisonTable_module_table",
2424
+ headerCell: "ComparisonTable_module_headerCell",
2425
+ columnHeader: "ComparisonTable_module_columnHeader",
2426
+ columnHeaderHighlighted: "ComparisonTable_module_columnHeader ComparisonTable_module_columnHeaderHighlighted",
2427
+ bodyRow: "ComparisonTable_module_bodyRow",
2428
+ featureCell: "ComparisonTable_module_featureCell",
2429
+ valueCell: "ComparisonTable_module_valueCell",
2430
+ valueCellHighlighted: "ComparisonTable_module_valueCell ComparisonTable_module_valueCellHighlighted",
2431
+ valueCellHighlightedLast: "ComparisonTable_module_valueCell ComparisonTable_module_valueCellHighlighted ComparisonTable_module_valueCellHighlightedLast",
2432
+ iconSuccess: "ComparisonTable_module_iconSuccess",
2433
+ iconMuted: "ComparisonTable_module_iconMuted",
2434
+ textValue: "ComparisonTable_module_textValue"
2435
+ };
1938
2436
  function ComparisonTable({ columns, rows, className = "" }) {
1939
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `py-10 md:py-14 ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto -mx-4 px-4", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full border-collapse min-w-[500px]", children: [
2437
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${ComparisonTable_module_default.root}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: ComparisonTable_module_default.scrollWrap, children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: ComparisonTable_module_default.table, children: [
1940
2438
  /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
1941
- /* @__PURE__ */ jsxRuntime.jsx("th", { className: "text-left py-4 px-4 text-[13px] font-medium text-[var(--fg-muted)] tracking-[-0.25px] w-[40%]" }),
2439
+ /* @__PURE__ */ jsxRuntime.jsx("th", { className: ComparisonTable_module_default.headerCell }),
1942
2440
  columns.map((col, i) => /* @__PURE__ */ jsxRuntime.jsx(
1943
2441
  "th",
1944
2442
  {
1945
- className: `py-4 px-4 text-center text-sm font-semibold ${col.highlighted ? "text-[var(--brand-primary)] bg-[var(--brand-primary)]/5 rounded-t-[var(--radius-lg)]" : "text-[var(--fg)]"}`,
2443
+ className: col.highlighted ? ComparisonTable_module_default.columnHeaderHighlighted : ComparisonTable_module_default.columnHeader,
1946
2444
  children: col.label
1947
2445
  },
1948
2446
  i
1949
2447
  ))
1950
2448
  ] }) }),
1951
- /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-t border-[var(--border-color)]", children: [
1952
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3.5 px-4 text-[14px] text-[var(--fg-secondary)]", children: row.feature }),
2449
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((row, ri) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: ComparisonTable_module_default.bodyRow, children: [
2450
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: ComparisonTable_module_default.featureCell, children: row.feature }),
1953
2451
  row.values.map((val, vi) => {
1954
2452
  var _a;
1955
2453
  const isHighlighted = (_a = columns[vi]) == null ? void 0 : _a.highlighted;
2454
+ const isLast = ri === rows.length - 1;
2455
+ const cellClass = isHighlighted ? isLast ? ComparisonTable_module_default.valueCellHighlightedLast : ComparisonTable_module_default.valueCellHighlighted : ComparisonTable_module_default.valueCell;
1956
2456
  return /* @__PURE__ */ jsxRuntime.jsx(
1957
2457
  "td",
1958
2458
  {
1959
- className: `py-3.5 px-4 text-center ${isHighlighted ? "bg-[var(--brand-primary)]/5" : ""} ${ri === rows.length - 1 && isHighlighted ? "rounded-b-[var(--radius-lg)]" : ""}`,
1960
- children: typeof val === "boolean" ? val ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex text-[var(--color-success)]", children: /* @__PURE__ */ jsxRuntime.jsx(IconlyCheck, { size: 18 }) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex text-[var(--fg-muted)]/40", children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 18 }) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium text-[var(--fg)]", children: val })
2459
+ className: cellClass,
2460
+ children: typeof val === "boolean" ? val ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: ComparisonTable_module_default.iconSuccess, children: /* @__PURE__ */ jsxRuntime.jsx(IconlyCheck, { size: 18 }) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: ComparisonTable_module_default.iconMuted, children: /* @__PURE__ */ jsxRuntime.jsx(IconlyClose, { size: 18 }) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: ComparisonTable_module_default.textValue, children: val })
1961
2461
  },
1962
2462
  vi
1963
2463
  );
@@ -1965,79 +2465,121 @@ function ComparisonTable({ columns, rows, className = "" }) {
1965
2465
  ] }, ri)) })
1966
2466
  ] }) }) });
1967
2467
  }
2468
+
2469
+ // src/organisms/PromoBento.module.scss
2470
+ var PromoBento_module_default = {
2471
+ root: "PromoBento_module_root",
2472
+ header: "PromoBento_module_header",
2473
+ heading: "PromoBento_module_heading",
2474
+ subtitle: "PromoBento_module_subtitle",
2475
+ grid: "PromoBento_module_grid",
2476
+ card: "PromoBento_module_card",
2477
+ cardMedia: "PromoBento_module_cardMedia",
2478
+ cardMediaInner: "PromoBento_module_cardMediaInner",
2479
+ cardFade: "PromoBento_module_cardFade",
2480
+ cardContent: "PromoBento_module_cardContent",
2481
+ pill: "PromoBento_module_pill",
2482
+ pillInner: "PromoBento_module_pillInner",
2483
+ pillIcon: "PromoBento_module_pillIcon",
2484
+ cardTitle: "PromoBento_module_cardTitle",
2485
+ cardDesc: "PromoBento_module_cardDesc",
2486
+ cardCta: "PromoBento_module_cardCta"
2487
+ };
1968
2488
  function PromoBentoCard({ pill, title, description, cta, media, className = "" }) {
1969
- return /* @__PURE__ */ jsxRuntime.jsxs(
1970
- "div",
1971
- {
1972
- className: `relative flex flex-col rounded-[clamp(24px,3vw,48px)] bg-[var(--bg-secondary)] overflow-hidden group transition-shadow duration-[var(--transition-slow)] hover:shadow-[var(--shadow-lg)] ${className}`,
1973
- children: [
1974
- media && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1 min-h-[240px] md:min-h-[320px] overflow-hidden", children: [
1975
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center p-6", children: media }),
1976
- /* @__PURE__ */ jsxRuntime.jsx(
1977
- "div",
1978
- {
1979
- className: "absolute bottom-0 left-0 right-0 h-[140px] pointer-events-none",
1980
- style: {
1981
- background: "linear-gradient(to top, var(--bg-secondary) 0%, transparent 100%)"
1982
- }
1983
- }
1984
- )
1985
- ] }),
1986
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex flex-col gap-4 p-6 md:p-8 pt-0", children: [
1987
- pill && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-2 px-4 py-2 rounded-full bg-[var(--bg)] border border-[var(--border-color)] text-sm font-semibold text-[var(--fg)]", children: [
1988
- pill.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-5 h-5 flex items-center justify-center", children: pill.icon }),
1989
- pill.label
1990
- ] }) }),
1991
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl md:text-[28px] leading-[1.2] tracking-[-0.02em] text-[var(--fg)]", children: title }),
1992
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm md:text-base leading-relaxed text-[var(--fg-secondary)] max-w-[85%]", children: description }),
1993
- cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1", children: /* @__PURE__ */ jsxRuntime.jsx(
1994
- Button,
1995
- {
1996
- variant: "outline",
1997
- onClick: cta.onClick,
1998
- icon: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 3l5 5-5 5" }) }),
1999
- children: cta.label
2000
- }
2001
- ) })
2002
- ] })
2003
- ]
2004
- }
2005
- );
2489
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${PromoBento_module_default.card}${className ? ` ${className}` : ""}`, children: [
2490
+ media && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoBento_module_default.cardMedia, children: [
2491
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoBento_module_default.cardMediaInner, children: media }),
2492
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoBento_module_default.cardFade })
2493
+ ] }),
2494
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoBento_module_default.cardContent, children: [
2495
+ pill && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoBento_module_default.pill, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: PromoBento_module_default.pillInner, children: [
2496
+ pill.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: PromoBento_module_default.pillIcon, children: pill.icon }),
2497
+ pill.label
2498
+ ] }) }),
2499
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: PromoBento_module_default.cardTitle, children: title }),
2500
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoBento_module_default.cardDesc, children: description }),
2501
+ cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoBento_module_default.cardCta, children: /* @__PURE__ */ jsxRuntime.jsx(
2502
+ Button,
2503
+ {
2504
+ variant: "outline",
2505
+ onClick: cta.onClick,
2506
+ icon: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 3l5 5-5 5" }) }),
2507
+ children: cta.label
2508
+ }
2509
+ ) })
2510
+ ] })
2511
+ ] });
2006
2512
  }
2007
2513
  function PromoBento({ heading, subtitle, items, className = "" }) {
2008
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `py-16 md:py-24 ${className}`, children: [
2009
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-10 md:mb-14 max-w-xl", children: [
2010
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[clamp(1.75rem,4vw,2.75rem)] font-bold leading-[1.1] tracking-[-0.03em] text-[var(--fg)] text-balance", children: heading }),
2011
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-base text-[var(--fg-secondary)] leading-relaxed", children: subtitle })
2514
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${PromoBento_module_default.root}${className ? ` ${className}` : ""}`, children: [
2515
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoBento_module_default.header, children: [
2516
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: PromoBento_module_default.heading, children: heading }),
2517
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoBento_module_default.subtitle, children: subtitle })
2012
2518
  ] }),
2013
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6 md:gap-9", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(PromoBentoCard, __spreadValues({}, item), i)) })
2519
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoBento_module_default.grid, children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(PromoBentoCard, __spreadValues({}, item), i)) })
2014
2520
  ] });
2015
2521
  }
2522
+
2523
+ // src/organisms/PromoShowcase.module.scss
2524
+ var PromoShowcase_module_default = {
2525
+ root: "PromoShowcase_module_root",
2526
+ heading: "PromoShowcase_module_heading",
2527
+ headingText: "PromoShowcase_module_headingText",
2528
+ body: "PromoShowcase_module_body",
2529
+ stepper: "PromoShowcase_module_stepper",
2530
+ stepButton: "PromoShowcase_module_stepButton",
2531
+ stepButtonActive: "PromoShowcase_module_stepButtonActive",
2532
+ contentArea: "PromoShowcase_module_contentArea",
2533
+ panel: "PromoShowcase_module_panel",
2534
+ panelActive: "PromoShowcase_module_panelActive",
2535
+ panelInner: "PromoShowcase_module_panelInner"
2536
+ };
2016
2537
  function PromoShowcase({ heading, steps, className = "" }) {
2017
2538
  const [activeIndex, setActiveIndex] = react.useState(0);
2018
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `py-16 md:py-24 ${className}`, children: [
2019
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-10 md:mb-14 max-w-xl", children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[clamp(1.75rem,4vw,2.75rem)] font-bold leading-[1.1] tracking-[-0.03em] text-[var(--fg)] text-balance", children: heading }) }),
2020
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-6 md:gap-8", children: [
2021
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1 p-1 rounded-full bg-[var(--bg-secondary)] border border-[var(--border-color)] w-fit", children: steps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsx(
2539
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${PromoShowcase_module_default.root}${className ? ` ${className}` : ""}`, children: [
2540
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoShowcase_module_default.heading, children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: PromoShowcase_module_default.headingText, children: heading }) }),
2541
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoShowcase_module_default.body, children: [
2542
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoShowcase_module_default.stepper, children: steps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsx(
2022
2543
  "button",
2023
2544
  {
2024
2545
  onClick: () => setActiveIndex(i),
2025
- className: `px-5 py-2.5 rounded-full text-sm font-medium transition-all duration-[var(--transition-base)] cursor-pointer ${i === activeIndex ? "bg-[var(--fg)] text-[var(--bg)] shadow-[var(--shadow-sm)]" : "text-[var(--fg-secondary)] hover:text-[var(--fg)] hover:bg-[var(--bg-tertiary)]"}`,
2546
+ className: `${PromoShowcase_module_default.stepButton}${i === activeIndex ? ` ${PromoShowcase_module_default.stepButtonActive}` : ""}`,
2026
2547
  children: step.label
2027
2548
  },
2028
2549
  i
2029
2550
  )) }),
2030
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative rounded-[clamp(16px,2vw,32px)] border border-[var(--border-color)] bg-[var(--bg-secondary)] overflow-hidden min-h-[300px] md:min-h-[480px]", children: steps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsx(
2551
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoShowcase_module_default.contentArea, children: steps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsx(
2031
2552
  "div",
2032
2553
  {
2033
- className: `absolute inset-0 transition-opacity duration-300 ease-out ${i === activeIndex ? "opacity-100 z-10" : "opacity-0 z-0 pointer-events-none"}`,
2034
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full flex items-center justify-center p-6 md:p-10", children: step.content })
2554
+ className: `${PromoShowcase_module_default.panel}${i === activeIndex ? ` ${PromoShowcase_module_default.panelActive}` : ""}`,
2555
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoShowcase_module_default.panelInner, children: step.content })
2035
2556
  },
2036
2557
  i
2037
2558
  )) })
2038
2559
  ] })
2039
2560
  ] });
2040
2561
  }
2562
+
2563
+ // src/organisms/PromoSplit.module.scss
2564
+ var PromoSplit_module_default = {
2565
+ root: "PromoSplit_module_root",
2566
+ grid: "PromoSplit_module_grid",
2567
+ gridReversed: "PromoSplit_module_grid PromoSplit_module_gridReversed",
2568
+ textColumn: "PromoSplit_module_textColumn",
2569
+ textColumnLtr: "PromoSplit_module_textColumnLtr",
2570
+ heading: "PromoSplit_module_heading",
2571
+ description: "PromoSplit_module_description",
2572
+ features: "PromoSplit_module_features",
2573
+ feature: "PromoSplit_module_feature",
2574
+ featureTitle: "PromoSplit_module_featureTitle",
2575
+ featureDesc: "PromoSplit_module_featureDesc",
2576
+ mediaColumn: "PromoSplit_module_mediaColumn",
2577
+ mediaColumnLtr: "PromoSplit_module_mediaColumnLtr",
2578
+ mediaBox: "PromoSplit_module_mediaBox",
2579
+ mediaContent: "PromoSplit_module_mediaContent",
2580
+ mediaPlaceholder: "PromoSplit_module_mediaPlaceholder",
2581
+ placeholderCircle: "PromoSplit_module_placeholderCircle"
2582
+ };
2041
2583
  function PromoSplit({
2042
2584
  heading,
2043
2585
  description,
@@ -2047,66 +2589,118 @@ function PromoSplit({
2047
2589
  className = ""
2048
2590
  }) {
2049
2591
  const isLeft = mediaPosition === "left";
2050
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `py-16 md:py-24 ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `grid grid-cols-1 lg:grid-cols-2 gap-10 md:gap-16 items-center ${isLeft ? "lg:[direction:rtl]" : ""}`, children: [
2051
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex flex-col gap-6 ${isLeft ? "lg:[direction:ltr]" : ""}`, children: [
2052
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[clamp(1.75rem,4vw,2.75rem)] font-bold leading-[1.1] tracking-[-0.03em] text-[var(--fg)] text-balance", children: heading }),
2053
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base md:text-lg leading-relaxed text-[var(--fg-secondary)]", children: description }),
2054
- features && features.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-5 mt-2", children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
2055
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-semibold text-[var(--fg)]", children: feature.title }),
2056
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-[var(--fg-secondary)] leading-relaxed", children: feature.description })
2592
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${PromoSplit_module_default.root}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: isLeft ? PromoSplit_module_default.gridReversed : PromoSplit_module_default.grid, children: [
2593
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${PromoSplit_module_default.textColumn}${isLeft ? ` ${PromoSplit_module_default.textColumnLtr}` : ""}`, children: [
2594
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: PromoSplit_module_default.heading, children: heading }),
2595
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoSplit_module_default.description, children: description }),
2596
+ features && features.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoSplit_module_default.features, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoSplit_module_default.feature, children: [
2597
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: PromoSplit_module_default.featureTitle, children: feature.title }),
2598
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoSplit_module_default.featureDesc, children: feature.description })
2057
2599
  ] }, i)) })
2058
2600
  ] }),
2059
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `relative ${isLeft ? "lg:[direction:ltr]" : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative rounded-[clamp(16px,2vw,32px)] bg-[var(--bg-secondary)] border border-[var(--border-color)] overflow-hidden min-h-[280px] md:min-h-[380px]", children: media ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center p-6", children: media }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-20 h-20 rounded-full bg-[var(--bg-tertiary)] flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "var(--fg-muted)", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
2601
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${PromoSplit_module_default.mediaColumn}${isLeft ? ` ${PromoSplit_module_default.mediaColumnLtr}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoSplit_module_default.mediaBox, children: media ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoSplit_module_default.mediaContent, children: media }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoSplit_module_default.mediaPlaceholder, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoSplit_module_default.placeholderCircle, children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", stroke: "var(--fg-muted)", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
2060
2602
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
2061
2603
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8.5", cy: "8.5", r: "1.5" }),
2062
2604
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 15-5-5L5 21" })
2063
2605
  ] }) }) }) }) })
2064
2606
  ] }) });
2065
2607
  }
2608
+
2609
+ // src/organisms/PromoTrustGrid.module.scss
2610
+ var PromoTrustGrid_module_default = {
2611
+ root: "PromoTrustGrid_module_root",
2612
+ heading: "PromoTrustGrid_module_heading",
2613
+ headingText: "PromoTrustGrid_module_headingText",
2614
+ grid: "PromoTrustGrid_module_grid",
2615
+ featureCard: "PromoTrustGrid_module_featureCard",
2616
+ featureIcon: "PromoTrustGrid_module_featureIcon",
2617
+ featureTitle: "PromoTrustGrid_module_featureTitle",
2618
+ featureDescription: "PromoTrustGrid_module_featureDescription",
2619
+ media: "PromoTrustGrid_module_media",
2620
+ mediaInner: "PromoTrustGrid_module_mediaInner"
2621
+ };
2066
2622
  function PromoTrustGrid({ heading, features, media, className = "" }) {
2067
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `py-16 md:py-24 ${className}`, children: [
2068
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-10 md:mb-14", children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[clamp(1.75rem,4vw,2.75rem)] font-bold leading-[1.1] tracking-[-0.03em] text-[var(--fg)] text-balance", children: heading }) }),
2069
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 mb-10 md:mb-14", children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2070
- "div",
2071
- {
2072
- className: "group relative flex flex-col gap-3 p-6 md:p-8 rounded-[var(--radius-xl)] bg-[var(--bg)] border border-[var(--border-color)] transition-all duration-[var(--transition-base)] hover:shadow-[var(--shadow-md)] hover:-translate-y-0.5",
2073
- children: [
2074
- feature.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-10 h-10 rounded-[var(--radius-lg)] bg-[var(--fg)]/5 flex items-center justify-center text-[var(--fg)] mb-1", children: feature.icon }),
2075
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-semibold text-[var(--fg)] leading-snug", children: feature.title }),
2076
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-[var(--fg-secondary)] leading-relaxed", children: feature.description })
2077
- ]
2078
- },
2079
- i
2080
- )) }),
2081
- media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative rounded-[clamp(16px,2vw,32px)] bg-[var(--bg-secondary)] border border-[var(--border-color)] overflow-hidden min-h-[280px] md:min-h-[420px]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center p-6", children: media }) })
2623
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${PromoTrustGrid_module_default.root}${className ? ` ${className}` : ""}`, children: [
2624
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTrustGrid_module_default.heading, children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: PromoTrustGrid_module_default.headingText, children: heading }) }),
2625
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTrustGrid_module_default.grid, children: features.map((feature, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoTrustGrid_module_default.featureCard, children: [
2626
+ feature.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTrustGrid_module_default.featureIcon, children: feature.icon }),
2627
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: PromoTrustGrid_module_default.featureTitle, children: feature.title }),
2628
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoTrustGrid_module_default.featureDescription, children: feature.description })
2629
+ ] }, i)) }),
2630
+ media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTrustGrid_module_default.media, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTrustGrid_module_default.mediaInner, children: media }) })
2082
2631
  ] });
2083
2632
  }
2633
+
2634
+ // src/organisms/PromoDevicesCTA.module.scss
2635
+ var PromoDevicesCTA_module_default = {
2636
+ root: "PromoDevicesCTA_module_root",
2637
+ textBlock: "PromoDevicesCTA_module_textBlock",
2638
+ heading: "PromoDevicesCTA_module_heading",
2639
+ description: "PromoDevicesCTA_module_description",
2640
+ ctaWrap: "PromoDevicesCTA_module_ctaWrap",
2641
+ devices: "PromoDevicesCTA_module_devices",
2642
+ laptop: "PromoDevicesCTA_module_laptop",
2643
+ laptopScreen: "PromoDevicesCTA_module_laptopScreen",
2644
+ laptopScreenInner: "PromoDevicesCTA_module_laptopScreenInner",
2645
+ laptopHinge: "PromoDevicesCTA_module_laptopHinge",
2646
+ laptopBase: "PromoDevicesCTA_module_laptopBase",
2647
+ tablet: "PromoDevicesCTA_module_tablet",
2648
+ tabletShell: "PromoDevicesCTA_module_tabletShell",
2649
+ tabletScreen: "PromoDevicesCTA_module_tabletScreen",
2650
+ phone: "PromoDevicesCTA_module_phone",
2651
+ phoneShell: "PromoDevicesCTA_module_phoneShell",
2652
+ phoneNotch: "PromoDevicesCTA_module_phoneNotch",
2653
+ phoneScreen: "PromoDevicesCTA_module_phoneScreen"
2654
+ };
2084
2655
  function PromoDevicesCTA({
2085
2656
  heading,
2086
2657
  description,
2087
2658
  cta,
2088
2659
  className = ""
2089
2660
  }) {
2090
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `py-16 md:py-24 ${className}`, children: [
2091
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-2xl mx-auto text-center mb-8 md:mb-10", children: [
2092
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[clamp(1.75rem,4vw,2.75rem)] font-bold leading-[1.1] tracking-[-0.03em] text-[var(--fg)] text-balance", children: heading }),
2093
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-base md:text-lg leading-relaxed text-[var(--fg-secondary)]", children: description }),
2094
- cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: cta.onClick, children: cta.label }) })
2661
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${PromoDevicesCTA_module_default.root}${className ? ` ${className}` : ""}`, children: [
2662
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoDevicesCTA_module_default.textBlock, children: [
2663
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: PromoDevicesCTA_module_default.heading, children: heading }),
2664
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoDevicesCTA_module_default.description, children: description }),
2665
+ cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.ctaWrap, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: cta.onClick, children: cta.label }) })
2095
2666
  ] }),
2096
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-end justify-center gap-6 md:gap-10 px-4 md:px-0 max-w-4xl mx-auto", children: [
2097
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "hidden md:block relative w-[38%] max-w-[380px]", children: [
2098
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/10] rounded-t-[var(--radius-lg)] border border-b-0 border-[var(--border-color)] bg-[var(--bg-secondary)] overflow-hidden shadow-[var(--shadow-md)]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-3 rounded-[var(--radius-md)] bg-[var(--bg-tertiary)]" }) }),
2099
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-2.5 bg-[var(--bg-tertiary)] border border-[var(--border-color)] rounded-b-sm" }),
2100
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-1 bg-[var(--bg-tertiary)] border-x border-b border-[var(--border-color)] rounded-b-[var(--radius-sm)] mx-[-4%]" })
2667
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoDevicesCTA_module_default.devices, children: [
2668
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoDevicesCTA_module_default.laptop, children: [
2669
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.laptopScreen, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.laptopScreenInner }) }),
2670
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.laptopHinge }),
2671
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.laptopBase })
2101
2672
  ] }),
2102
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-[40%] md:w-[28%] max-w-[280px]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[3/4] rounded-[var(--radius-xl)] border-2 border-[var(--border-color)] bg-[var(--bg-secondary)] overflow-hidden shadow-[var(--shadow-lg)]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-2.5 rounded-[var(--radius-lg)] bg-[var(--bg-tertiary)]" }) }) }),
2103
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-[24%] md:w-[14%] max-w-[140px]", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "aspect-[9/19] rounded-[clamp(12px,2vw,24px)] border-2 border-[var(--border-color)] bg-[var(--bg-secondary)] overflow-hidden shadow-[var(--shadow-lg)]", children: [
2104
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1.5 left-1/2 -translate-x-1/2 w-[40%] h-[3%] rounded-full bg-[var(--border-color)]" }),
2105
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-1.5 top-[6%] rounded-[clamp(8px,1.5vw,16px)] bg-[var(--bg-tertiary)]" })
2673
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.tablet, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.tabletShell, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.tabletScreen }) }) }),
2674
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.phone, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoDevicesCTA_module_default.phoneShell, children: [
2675
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.phoneNotch }),
2676
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoDevicesCTA_module_default.phoneScreen })
2106
2677
  ] }) })
2107
2678
  ] })
2108
2679
  ] });
2109
2680
  }
2681
+
2682
+ // src/organisms/PromoTestimonials.module.scss
2683
+ var PromoTestimonials_module_default = {
2684
+ root: "PromoTestimonials_module_root",
2685
+ wrapper: "PromoTestimonials_module_wrapper",
2686
+ avatarSection: "PromoTestimonials_module_avatarSection",
2687
+ avatarStack: "PromoTestimonials_module_avatarStack",
2688
+ avatarRing: "PromoTestimonials_module_avatarRing",
2689
+ overflowBadge: "PromoTestimonials_module_overflowBadge",
2690
+ overflowCircle: "PromoTestimonials_module_overflowCircle",
2691
+ headingSection: "PromoTestimonials_module_headingSection",
2692
+ heading: "PromoTestimonials_module_heading",
2693
+ subtitle: "PromoTestimonials_module_subtitle",
2694
+ cardsSection: "PromoTestimonials_module_cardsSection",
2695
+ cardsGrid: "PromoTestimonials_module_cardsGrid",
2696
+ card: "PromoTestimonials_module_card",
2697
+ quote: "PromoTestimonials_module_quote",
2698
+ author: "PromoTestimonials_module_author",
2699
+ authorName: "PromoTestimonials_module_authorName",
2700
+ authorRole: "PromoTestimonials_module_authorRole",
2701
+ mediaSection: "PromoTestimonials_module_mediaSection",
2702
+ mediaBox: "PromoTestimonials_module_mediaBox"
2703
+ };
2110
2704
  function PromoTestimonials({
2111
2705
  heading,
2112
2706
  subtitle,
@@ -2114,14 +2708,14 @@ function PromoTestimonials({
2114
2708
  media,
2115
2709
  className = ""
2116
2710
  }) {
2117
- return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `py-16 md:py-24 ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative rounded-[clamp(20px,3vw,40px)] border border-[var(--border-color)] bg-[var(--bg)] overflow-hidden", children: [
2118
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center pt-10 md:pt-14 pb-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex -space-x-3", children: [
2711
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: `${PromoTestimonials_module_default.root}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoTestimonials_module_default.wrapper, children: [
2712
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTestimonials_module_default.avatarSection, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoTestimonials_module_default.avatarStack, children: [
2119
2713
  testimonials.slice(0, 5).map((t, i) => {
2120
2714
  const initials = t.name.split(" ").map((n) => n[0]).join("").toUpperCase();
2121
2715
  return /* @__PURE__ */ jsxRuntime.jsx(
2122
2716
  "div",
2123
2717
  {
2124
- className: "relative ring-3 ring-[var(--bg)] rounded-full",
2718
+ className: PromoTestimonials_module_default.avatarRing,
2125
2719
  style: { zIndex: 10 - i },
2126
2720
  children: /* @__PURE__ */ jsxRuntime.jsx(
2127
2721
  Avatar,
@@ -2135,32 +2729,32 @@ function PromoTestimonials({
2135
2729
  i
2136
2730
  );
2137
2731
  }),
2138
- testimonials.length > 5 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative ring-3 ring-[var(--bg)] rounded-full z-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-10 h-10 rounded-full bg-[var(--bg-tertiary)] flex items-center justify-center text-xs font-semibold text-[var(--fg-secondary)]", children: [
2732
+ testimonials.length > 5 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTestimonials_module_default.overflowBadge, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoTestimonials_module_default.overflowCircle, children: [
2139
2733
  "+",
2140
2734
  testimonials.length - 5
2141
2735
  ] }) })
2142
2736
  ] }) }),
2143
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center px-6 pb-8 md:pb-10", children: [
2144
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[clamp(1.75rem,4vw,2.75rem)] font-bold leading-[1.1] tracking-[-0.03em] text-[var(--fg)] text-balance", children: heading }),
2145
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-base text-[var(--fg-secondary)] leading-relaxed max-w-lg mx-auto", children: subtitle })
2737
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoTestimonials_module_default.headingSection, children: [
2738
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: PromoTestimonials_module_default.heading, children: heading }),
2739
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoTestimonials_module_default.subtitle, children: subtitle })
2146
2740
  ] }),
2147
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 md:px-10 pb-8 md:pb-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-5", children: testimonials.map((t, i) => {
2741
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTestimonials_module_default.cardsSection, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTestimonials_module_default.cardsGrid, children: testimonials.map((t, i) => {
2148
2742
  const initials = t.name.split(" ").map((n) => n[0]).join("").toUpperCase();
2149
2743
  return /* @__PURE__ */ jsxRuntime.jsxs(
2150
2744
  "div",
2151
2745
  {
2152
- className: "flex flex-col gap-4 p-5 md:p-6 rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] transition-shadow duration-[var(--transition-base)] hover:shadow-[var(--shadow-md)]",
2746
+ className: PromoTestimonials_module_default.card,
2153
2747
  children: [
2154
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-[var(--fg-secondary)] leading-relaxed flex-1", children: [
2748
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: PromoTestimonials_module_default.quote, children: [
2155
2749
  "\u201C",
2156
2750
  t.quote,
2157
2751
  "\u201D"
2158
2752
  ] }),
2159
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-1", children: [
2753
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoTestimonials_module_default.author, children: [
2160
2754
  /* @__PURE__ */ jsxRuntime.jsx(Avatar, { size: "sm", src: t.avatarSrc, initials }),
2161
2755
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2162
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-[var(--fg)]", children: t.name }),
2163
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-[var(--fg-muted)]", children: t.role })
2756
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoTestimonials_module_default.authorName, children: t.name }),
2757
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoTestimonials_module_default.authorRole, children: t.role })
2164
2758
  ] })
2165
2759
  ] })
2166
2760
  ]
@@ -2168,9 +2762,30 @@ function PromoTestimonials({
2168
2762
  i
2169
2763
  );
2170
2764
  }) }) }),
2171
- media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 md:px-10 pb-8 md:pb-12", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-[var(--radius-xl)] bg-[var(--bg-secondary)] overflow-hidden", children: media }) })
2765
+ media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTestimonials_module_default.mediaSection, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoTestimonials_module_default.mediaBox, children: media }) })
2172
2766
  ] }) });
2173
2767
  }
2768
+
2769
+ // src/organisms/PromoHero.module.scss
2770
+ var PromoHero_module_default = {
2771
+ root: "PromoHero_module_root",
2772
+ dark: "PromoHero_module_dark",
2773
+ light: "PromoHero_module_light",
2774
+ gradient: "PromoHero_module_gradient",
2775
+ glowLayer: "PromoHero_module_glowLayer",
2776
+ glowTop: "PromoHero_module_glowTop",
2777
+ glowBottom: "PromoHero_module_glowBottom",
2778
+ inner: "PromoHero_module_inner",
2779
+ textColumn: "PromoHero_module_textColumn",
2780
+ title: "PromoHero_module_title",
2781
+ subtitle: "PromoHero_module_subtitle",
2782
+ subtitleDark: "PromoHero_module_subtitleDark",
2783
+ subtitleLight: "PromoHero_module_subtitleLight",
2784
+ actions: "PromoHero_module_actions",
2785
+ ctaDark: "PromoHero_module_ctaDark",
2786
+ ghostDark: "PromoHero_module_ghostDark",
2787
+ mediaColumn: "PromoHero_module_mediaColumn"
2788
+ };
2174
2789
  function PromoHero({
2175
2790
  title,
2176
2791
  subtitle,
@@ -2180,36 +2795,29 @@ function PromoHero({
2180
2795
  variant = "dark",
2181
2796
  className = ""
2182
2797
  }) {
2183
- const variantStyles5 = {
2184
- dark: "bg-[var(--neutral-900)] text-white",
2185
- light: "bg-[var(--bg)] text-[var(--fg)]",
2186
- gradient: "bg-gradient-to-br from-[var(--neutral-900)] via-[var(--neutral-800)] to-[var(--neutral-700)] text-white"
2187
- };
2188
- const subtitleColor = {
2189
- dark: "text-white/70",
2190
- light: "text-[var(--fg-secondary)]",
2191
- gradient: "text-white/70"
2192
- };
2798
+ const variantClass = variant === "dark" ? PromoHero_module_default.dark : variant === "gradient" ? PromoHero_module_default.gradient : PromoHero_module_default.light;
2799
+ const subtitleClass = variant === "light" ? PromoHero_module_default.subtitleLight : PromoHero_module_default.subtitleDark;
2800
+ const isLight = variant === "light";
2193
2801
  return /* @__PURE__ */ jsxRuntime.jsxs(
2194
2802
  "section",
2195
2803
  {
2196
- className: `relative overflow-hidden rounded-[clamp(20px,3vw,40px)] min-h-[480px] md:min-h-[600px] flex items-center ${variantStyles5[variant]} ${className}`,
2804
+ className: `${PromoHero_module_default.root} ${variantClass}${className ? ` ${className}` : ""}`,
2197
2805
  children: [
2198
- variant !== "light" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none", "aria-hidden": "true", children: [
2199
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-[-20%] right-[-10%] w-[600px] h-[600px] rounded-full bg-white/[0.03] blur-[100px]" }),
2200
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-[-30%] left-[-5%] w-[400px] h-[400px] rounded-full bg-white/[0.02] blur-[80px]" })
2806
+ !isLight && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoHero_module_default.glowLayer, "aria-hidden": "true", children: [
2807
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoHero_module_default.glowTop }),
2808
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoHero_module_default.glowBottom })
2201
2809
  ] }),
2202
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 grid grid-cols-1 lg:grid-cols-2 gap-10 md:gap-16 w-full p-8 md:p-12 lg:p-16 items-center", children: [
2203
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5 md:gap-6", children: [
2204
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-[clamp(2.25rem,5.5vw,5rem)] font-bold leading-[0.95] tracking-[-0.04em] text-balance", children: title }),
2205
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `text-base md:text-lg leading-relaxed max-w-lg ${subtitleColor[variant]}`, children: subtitle }),
2206
- (cta || secondaryCta) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-3 mt-2", children: [
2810
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoHero_module_default.inner, children: [
2811
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoHero_module_default.textColumn, children: [
2812
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: PromoHero_module_default.title, children: title }),
2813
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${PromoHero_module_default.subtitle} ${subtitleClass}`, children: subtitle }),
2814
+ (cta || secondaryCta) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoHero_module_default.actions, children: [
2207
2815
  cta && /* @__PURE__ */ jsxRuntime.jsx(
2208
2816
  Button,
2209
2817
  {
2210
- variant: variant === "light" ? "primary" : "outline",
2818
+ variant: isLight ? "primary" : "outline",
2211
2819
  onClick: cta.onClick,
2212
- className: variant !== "light" ? "border-white/20 text-white hover:bg-white/10" : "",
2820
+ className: !isLight ? PromoHero_module_default.ctaDark : "",
2213
2821
  children: cta.label
2214
2822
  }
2215
2823
  ),
@@ -2218,18 +2826,65 @@ function PromoHero({
2218
2826
  {
2219
2827
  variant: "ghost",
2220
2828
  onClick: secondaryCta.onClick,
2221
- className: variant !== "light" ? "text-white/70 hover:text-white hover:bg-white/5" : "",
2829
+ className: !isLight ? PromoHero_module_default.ghostDark : "",
2222
2830
  children: secondaryCta.label
2223
2831
  }
2224
2832
  )
2225
2833
  ] })
2226
2834
  ] }),
2227
- media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex items-center justify-center", children: media })
2835
+ media && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoHero_module_default.mediaColumn, children: media })
2228
2836
  ] })
2229
2837
  ]
2230
2838
  }
2231
2839
  );
2232
2840
  }
2841
+
2842
+ // src/organisms/PromoPricing.module.scss
2843
+ var PromoPricing_module_default = {
2844
+ root: "PromoPricing_module_root",
2845
+ dark: "PromoPricing_module_dark",
2846
+ light: "PromoPricing_module_light",
2847
+ headingSection: "PromoPricing_module_headingSection",
2848
+ heading: "PromoPricing_module_heading",
2849
+ headingDark: "PromoPricing_module_headingDark",
2850
+ headingLight: "PromoPricing_module_headingLight",
2851
+ subtitle: "PromoPricing_module_subtitle",
2852
+ subtitleDark: "PromoPricing_module_subtitleDark",
2853
+ subtitleLight: "PromoPricing_module_subtitleLight",
2854
+ tiersGrid: "PromoPricing_module_tiersGrid",
2855
+ tierDefault: "PromoPricing_module_tierCard PromoPricing_module_tierDefault",
2856
+ tierHighlighted: "PromoPricing_module_tierCard PromoPricing_module_tierHighlighted",
2857
+ tierDark: "PromoPricing_module_tierCard PromoPricing_module_tierDark",
2858
+ tierDarkHighlighted: "PromoPricing_module_tierCard PromoPricing_module_tierDarkHighlighted",
2859
+ tierName: "PromoPricing_module_tierName",
2860
+ tierNameMuted: "PromoPricing_module_tierNameMuted",
2861
+ tierNameDark: "PromoPricing_module_tierNameDark",
2862
+ tierNameHighlightedLight: "PromoPricing_module_tierNameHighlightedLight",
2863
+ tierNameHighlightedDark: "PromoPricing_module_tierNameHighlightedDark",
2864
+ price: "PromoPricing_module_price",
2865
+ period: "PromoPricing_module_period",
2866
+ periodMuted: "PromoPricing_module_periodMuted",
2867
+ periodDark: "PromoPricing_module_periodDark",
2868
+ periodHighlightedLight: "PromoPricing_module_periodHighlightedLight",
2869
+ periodHighlightedDark: "PromoPricing_module_periodHighlightedDark",
2870
+ tierDesc: "PromoPricing_module_tierDesc",
2871
+ tierDescMuted: "PromoPricing_module_tierDescMuted",
2872
+ tierDescDark: "PromoPricing_module_tierDescDark",
2873
+ tierDescHighlightedLight: "PromoPricing_module_tierDescHighlightedLight",
2874
+ tierDescHighlightedDark: "PromoPricing_module_tierDescHighlightedDark",
2875
+ featureList: "PromoPricing_module_featureList",
2876
+ featureItem: "PromoPricing_module_featureItem",
2877
+ checkIcon: "PromoPricing_module_checkIcon",
2878
+ checkDefault: "PromoPricing_module_checkDefault",
2879
+ checkDark: "PromoPricing_module_checkDark",
2880
+ checkHighlightedLight: "PromoPricing_module_checkHighlightedLight",
2881
+ checkHighlightedDark: "PromoPricing_module_checkHighlightedDark",
2882
+ featureTextMuted: "PromoPricing_module_featureTextMuted",
2883
+ featureTextDark: "PromoPricing_module_featureTextDark",
2884
+ featureTextHighlightedLight: "PromoPricing_module_featureTextHighlightedLight",
2885
+ featureTextHighlightedDark: "PromoPricing_module_featureTextHighlightedDark",
2886
+ ctaWrap: "PromoPricing_module_ctaWrap"
2887
+ };
2233
2888
  function PromoPricing({
2234
2889
  heading,
2235
2890
  subtitle,
@@ -2238,39 +2893,51 @@ function PromoPricing({
2238
2893
  className = ""
2239
2894
  }) {
2240
2895
  const isDark = variant === "dark";
2896
+ const getTierClass = (highlighted) => {
2897
+ if (highlighted) return isDark ? PromoPricing_module_default.tierDarkHighlighted : PromoPricing_module_default.tierHighlighted;
2898
+ return isDark ? PromoPricing_module_default.tierDark : PromoPricing_module_default.tierDefault;
2899
+ };
2900
+ const getNameClass = (highlighted) => {
2901
+ if (highlighted) return isDark ? PromoPricing_module_default.tierNameHighlightedDark : PromoPricing_module_default.tierNameHighlightedLight;
2902
+ return isDark ? PromoPricing_module_default.tierNameDark : PromoPricing_module_default.tierNameMuted;
2903
+ };
2904
+ const getPeriodClass = (highlighted) => {
2905
+ if (highlighted) return isDark ? PromoPricing_module_default.periodHighlightedDark : PromoPricing_module_default.periodHighlightedLight;
2906
+ return isDark ? PromoPricing_module_default.periodDark : PromoPricing_module_default.periodMuted;
2907
+ };
2908
+ const getDescClass = (highlighted) => {
2909
+ if (highlighted) return isDark ? PromoPricing_module_default.tierDescHighlightedDark : PromoPricing_module_default.tierDescHighlightedLight;
2910
+ return isDark ? PromoPricing_module_default.tierDescDark : PromoPricing_module_default.tierDescMuted;
2911
+ };
2912
+ const getCheckClass = (highlighted) => {
2913
+ if (highlighted) return isDark ? PromoPricing_module_default.checkHighlightedDark : PromoPricing_module_default.checkHighlightedLight;
2914
+ return isDark ? PromoPricing_module_default.checkDark : PromoPricing_module_default.checkDefault;
2915
+ };
2916
+ const getFeatureTextClass = (highlighted) => {
2917
+ if (highlighted) return isDark ? PromoPricing_module_default.featureTextHighlightedDark : PromoPricing_module_default.featureTextHighlightedLight;
2918
+ return isDark ? PromoPricing_module_default.featureTextDark : PromoPricing_module_default.featureTextMuted;
2919
+ };
2241
2920
  return /* @__PURE__ */ jsxRuntime.jsxs(
2242
2921
  "section",
2243
2922
  {
2244
- className: `py-16 md:py-24 px-6 md:px-12 rounded-[clamp(20px,3vw,40px)] ${isDark ? "bg-[var(--neutral-900)] text-white" : "bg-[var(--bg)]"} ${className}`,
2923
+ className: `${PromoPricing_module_default.root} ${isDark ? PromoPricing_module_default.dark : PromoPricing_module_default.light}${className ? ` ${className}` : ""}`,
2245
2924
  children: [
2246
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-10 md:mb-14 max-w-2xl mx-auto", children: [
2247
- /* @__PURE__ */ jsxRuntime.jsx(
2248
- "h2",
2249
- {
2250
- className: `text-[clamp(2rem,5vw,4.75rem)] font-bold leading-[0.95] tracking-[-0.04em] text-balance ${isDark ? "text-white" : "text-[var(--fg)]"}`,
2251
- children: heading
2252
- }
2253
- ),
2254
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `mt-4 text-base md:text-lg leading-relaxed ${isDark ? "text-white/60" : "text-[var(--fg-secondary)]"}`, children: subtitle })
2925
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoPricing_module_default.headingSection, children: [
2926
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${PromoPricing_module_default.heading} ${isDark ? PromoPricing_module_default.headingDark : PromoPricing_module_default.headingLight}`, children: heading }),
2927
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${PromoPricing_module_default.subtitle} ${isDark ? PromoPricing_module_default.subtitleDark : PromoPricing_module_default.subtitleLight}`, children: subtitle })
2255
2928
  ] }),
2256
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-5 md:gap-6 max-w-5xl mx-auto", children: tiers.map((tier, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2929
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoPricing_module_default.tiersGrid, children: tiers.map((tier, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2257
2930
  "div",
2258
2931
  {
2259
- className: `relative flex flex-col rounded-[var(--radius-xl)] p-6 md:p-8 transition-all duration-[var(--transition-base)] ${tier.highlighted ? isDark ? "bg-white text-[var(--neutral-900)] shadow-[0_0_60px_rgba(255,255,255,0.1)]" : "bg-[var(--fg)] text-[var(--bg)] shadow-[var(--shadow-xl)]" : isDark ? "bg-white/[0.06] border border-white/10 text-white hover:bg-white/[0.1]" : "bg-[var(--bg)] border border-[var(--border-color)] hover:shadow-[var(--shadow-md)] hover:-translate-y-0.5"}`,
2932
+ className: getTierClass(tier.highlighted),
2260
2933
  children: [
2261
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsxRuntime.jsx(
2262
- "h3",
2263
- {
2264
- className: `text-sm font-semibold uppercase tracking-[0.06em] ${tier.highlighted ? isDark ? "text-[var(--neutral-500)]" : "text-[var(--bg)]/60" : isDark ? "text-white/50" : "text-[var(--fg-muted)]"}`,
2265
- children: tier.name
2266
- }
2267
- ) }),
2268
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2", children: [
2269
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-4xl md:text-5xl font-bold tracking-[-0.03em]", children: tier.price }),
2270
- tier.period && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-sm ml-1 ${tier.highlighted ? isDark ? "text-[var(--neutral-500)]" : "text-[var(--bg)]/50" : isDark ? "text-white/40" : "text-[var(--fg-muted)]"}`, children: tier.period })
2934
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoPricing_module_default.tierName, children: /* @__PURE__ */ jsxRuntime.jsx("h3", { className: getNameClass(tier.highlighted), children: tier.name }) }),
2935
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoPricing_module_default.price, children: [
2936
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: tier.price }),
2937
+ tier.period && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${PromoPricing_module_default.period} ${getPeriodClass(tier.highlighted)}`, children: tier.period })
2271
2938
  ] }),
2272
- tier.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `text-sm mb-6 ${tier.highlighted ? isDark ? "text-[var(--neutral-600)]" : "text-[var(--bg)]/60" : isDark ? "text-white/50" : "text-[var(--fg-secondary)]"}`, children: tier.description }),
2273
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-2.5 mb-8 flex-1", children: tier.features.map((feature, fi) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start gap-2.5 text-sm", children: [
2939
+ tier.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${PromoPricing_module_default.tierDesc} ${getDescClass(tier.highlighted)}`, children: tier.description }),
2940
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: PromoPricing_module_default.featureList, children: tier.features.map((feature, fi) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: PromoPricing_module_default.featureItem, children: [
2274
2941
  /* @__PURE__ */ jsxRuntime.jsx(
2275
2942
  "svg",
2276
2943
  {
@@ -2278,13 +2945,13 @@ function PromoPricing({
2278
2945
  height: "16",
2279
2946
  viewBox: "0 0 16 16",
2280
2947
  fill: "none",
2281
- className: `shrink-0 mt-0.5 ${tier.highlighted ? isDark ? "text-[var(--color-success)]" : "text-[var(--color-success-light)]" : isDark ? "text-white/40" : "text-[var(--color-success)]"}`,
2948
+ className: `${PromoPricing_module_default.checkIcon} ${getCheckClass(tier.highlighted)}`,
2282
2949
  children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3.5 8.5L6.5 11.5L12.5 4.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })
2283
2950
  }
2284
2951
  ),
2285
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${tier.highlighted ? isDark ? "text-[var(--neutral-700)]" : "text-[var(--bg)]/80" : isDark ? "text-white/70" : "text-[var(--fg-secondary)]"}`, children: feature })
2952
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: getFeatureTextClass(tier.highlighted), children: feature })
2286
2953
  ] }, fi)) }),
2287
- tier.cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto", children: tier.cta })
2954
+ tier.cta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoPricing_module_default.ctaWrap, children: tier.cta })
2288
2955
  ]
2289
2956
  },
2290
2957
  i
@@ -2293,6 +2960,24 @@ function PromoPricing({
2293
2960
  }
2294
2961
  );
2295
2962
  }
2963
+
2964
+ // src/organisms/PromoActionCards.module.scss
2965
+ var PromoActionCards_module_default = {
2966
+ root: "PromoActionCards_module_root",
2967
+ header: "PromoActionCards_module_header",
2968
+ heading: "PromoActionCards_module_heading",
2969
+ subtitle: "PromoActionCards_module_subtitle",
2970
+ grid2: "PromoActionCards_module_grid PromoActionCards_module_grid2",
2971
+ grid3: "PromoActionCards_module_grid PromoActionCards_module_grid3",
2972
+ card: "PromoActionCards_module_card",
2973
+ cardContent: "PromoActionCards_module_cardContent",
2974
+ cardTitle: "PromoActionCards_module_cardTitle",
2975
+ cardDesc: "PromoActionCards_module_cardDesc",
2976
+ cardFooter: "PromoActionCards_module_cardFooter",
2977
+ iconGroup: "PromoActionCards_module_iconGroup",
2978
+ iconCircle: "PromoActionCards_module_iconCircle",
2979
+ ctaBtn: "PromoActionCards_module_ctaBtn"
2980
+ };
2296
2981
  function PromoActionCards({
2297
2982
  heading,
2298
2983
  subtitle,
@@ -2300,28 +2985,28 @@ function PromoActionCards({
2300
2985
  columns = 3,
2301
2986
  className = ""
2302
2987
  }) {
2303
- const gridCols = columns === 2 ? "md:grid-cols-2" : "md:grid-cols-2 lg:grid-cols-3";
2304
- return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `py-16 md:py-24 ${className}`, children: [
2305
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-10 md:mb-14 max-w-xl", children: [
2306
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[clamp(1.25rem,3vw,1.5rem)] font-medium leading-[1.3] tracking-[-0.01em] text-[var(--fg-secondary)] text-balance", children: heading }),
2307
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-sm text-[var(--fg-muted)]", children: subtitle })
2988
+ const gridClass = columns === 2 ? PromoActionCards_module_default.grid2 : PromoActionCards_module_default.grid3;
2989
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${PromoActionCards_module_default.root}${className ? ` ${className}` : ""}`, children: [
2990
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoActionCards_module_default.header, children: [
2991
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: PromoActionCards_module_default.heading, children: heading }),
2992
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoActionCards_module_default.subtitle, children: subtitle })
2308
2993
  ] }),
2309
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `grid grid-cols-1 ${gridCols} gap-4 md:gap-5`, children: cards.map((card, i) => {
2994
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: gridClass, children: cards.map((card, i) => {
2310
2995
  var _a;
2311
2996
  return /* @__PURE__ */ jsxRuntime.jsxs(
2312
2997
  "div",
2313
2998
  {
2314
- className: "group flex flex-col gap-4 p-5 md:p-6 rounded-[var(--radius-xl)] border border-[var(--border-color)] bg-[var(--bg)] transition-all duration-[var(--transition-base)] hover:shadow-[var(--shadow-md)] hover:border-[var(--border-color-strong)]",
2999
+ className: PromoActionCards_module_default.card,
2315
3000
  children: [
2316
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 flex-1", children: [
2317
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[15px] font-semibold text-[var(--fg)] leading-snug", children: card.title }),
2318
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-[var(--fg-secondary)] leading-relaxed", children: card.description })
3001
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoActionCards_module_default.cardContent, children: [
3002
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: PromoActionCards_module_default.cardTitle, children: card.title }),
3003
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: PromoActionCards_module_default.cardDesc, children: card.description })
2319
3004
  ] }),
2320
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between pt-1", children: [
2321
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: (_a = card.icons) == null ? void 0 : _a.map((icon, ii) => /* @__PURE__ */ jsxRuntime.jsx(
3005
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: PromoActionCards_module_default.cardFooter, children: [
3006
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: PromoActionCards_module_default.iconGroup, children: (_a = card.icons) == null ? void 0 : _a.map((icon, ii) => /* @__PURE__ */ jsxRuntime.jsx(
2322
3007
  "span",
2323
3008
  {
2324
- className: "w-7 h-7 rounded-full bg-[var(--bg-secondary)] flex items-center justify-center text-[var(--fg-secondary)]",
3009
+ className: PromoActionCards_module_default.iconCircle,
2325
3010
  children: icon
2326
3011
  },
2327
3012
  ii
@@ -2330,7 +3015,7 @@ function PromoActionCards({
2330
3015
  "button",
2331
3016
  {
2332
3017
  onClick: card.cta.onClick,
2333
- className: "inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-xs font-medium bg-[var(--fg)] text-[var(--bg)] hover:opacity-90 transition-opacity cursor-pointer",
3018
+ className: PromoActionCards_module_default.ctaBtn,
2334
3019
  children: [
2335
3020
  card.cta.label,
2336
3021
  /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "11", height: "11", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.5 2.5l4 3.5-4 3.5" }) })
@@ -2345,6 +3030,22 @@ function PromoActionCards({
2345
3030
  }) })
2346
3031
  ] });
2347
3032
  }
3033
+
3034
+ // src/templates/ArticleHero.module.scss
3035
+ var ArticleHero_module_default = {
3036
+ root: "ArticleHero_module_root",
3037
+ bgLayer: "ArticleHero_module_bgLayer",
3038
+ bgImage: "ArticleHero_module_bgImage",
3039
+ overlay: "ArticleHero_module_overlay",
3040
+ topBar: "ArticleHero_module_topBar",
3041
+ logo: "ArticleHero_module_logo",
3042
+ divider: "ArticleHero_module_divider",
3043
+ nav: "ArticleHero_module_nav",
3044
+ bottom: "ArticleHero_module_bottom",
3045
+ category: "ArticleHero_module_category",
3046
+ title: "ArticleHero_module_title",
3047
+ subtitle: "ArticleHero_module_subtitle"
3048
+ };
2348
3049
  var DEFAULT_BG = "https://images.unsplash.com/photo-1451187580459-43490279c0fa?w=1600&h=900&fit=crop&q=80";
2349
3050
  function ArticleHero({
2350
3051
  category,
@@ -2356,48 +3057,44 @@ function ArticleHero({
2356
3057
  className = ""
2357
3058
  }) {
2358
3059
  const bgSrc = backgroundImage != null ? backgroundImage : DEFAULT_BG;
2359
- return /* @__PURE__ */ jsxRuntime.jsxs(
2360
- "section",
2361
- {
2362
- className: `relative w-full rounded-[var(--radius-xl)] overflow-hidden min-h-[320px] md:min-h-[480px] flex flex-col justify-between p-5 md:p-10 ${className}`,
2363
- children: [
2364
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none", children: [
2365
- /* @__PURE__ */ jsxRuntime.jsx(
2366
- "img",
2367
- {
2368
- src: bgSrc,
2369
- alt: "",
2370
- className: "absolute inset-0 w-full h-full object-cover"
2371
- }
2372
- ),
2373
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/40" })
2374
- ] }),
2375
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex items-center w-full", children: [
2376
- logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 pr-4 md:pr-10", children: logo }),
2377
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 h-px bg-white/30" }),
2378
- nav && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 pl-4 md:pl-10", children: nav })
2379
- ] }),
2380
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 max-w-[500px]", children: [
2381
- category && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg text-white leading-7 mb-2", children: category }),
2382
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-[32px] leading-[34px] md:text-[60px] md:leading-[60px] font-normal text-white tracking-[-2px] md:tracking-[-3px] mb-4", children: title }),
2383
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg text-white/90 leading-[22.5px]", children: subtitle })
2384
- ] })
2385
- ]
2386
- }
2387
- );
3060
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: `${ArticleHero_module_default.root}${className ? ` ${className}` : ""}`, children: [
3061
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleHero_module_default.bgLayer, children: [
3062
+ /* @__PURE__ */ jsxRuntime.jsx("img", { src: bgSrc, alt: "", className: ArticleHero_module_default.bgImage }),
3063
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleHero_module_default.overlay })
3064
+ ] }),
3065
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleHero_module_default.topBar, children: [
3066
+ logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleHero_module_default.logo, children: logo }),
3067
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleHero_module_default.divider }),
3068
+ nav && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleHero_module_default.nav, children: nav })
3069
+ ] }),
3070
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleHero_module_default.bottom, children: [
3071
+ category && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ArticleHero_module_default.category, children: category }),
3072
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: ArticleHero_module_default.title, children: title }),
3073
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ArticleHero_module_default.subtitle, children: subtitle })
3074
+ ] })
3075
+ ] });
2388
3076
  }
3077
+
3078
+ // src/templates/ArticleBody.module.scss
3079
+ var ArticleBody_module_default = {
3080
+ root: "ArticleBody_module_root"
3081
+ };
2389
3082
  function ArticleBody({ children, className = "" }) {
2390
- return /* @__PURE__ */ jsxRuntime.jsx(
2391
- "div",
2392
- {
2393
- className: `text-[16px] leading-7 text-[var(--fg-secondary)] font-normal ${className}`,
2394
- children
2395
- }
2396
- );
3083
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${ArticleBody_module_default.root}${className ? ` ${className}` : ""}`, children });
2397
3084
  }
2398
- var levelStyles = {
2399
- 2: "text-[24px] leading-8 font-bold pt-12",
2400
- 3: "text-[20px] leading-8 font-semibold pt-8"
3085
+
3086
+ // src/templates/ArticleHeading.module.scss
3087
+ var ArticleHeading_module_default = {
3088
+ root: "ArticleHeading_module_root",
3089
+ header: "ArticleHeading_module_header",
3090
+ h2: "ArticleHeading_module_h2",
3091
+ h3: "ArticleHeading_module_h3",
3092
+ action: "ArticleHeading_module_action",
3093
+ subtitle: "ArticleHeading_module_subtitle"
3094
+ };
3095
+ var levelClass = {
3096
+ 2: ArticleHeading_module_default.h2,
3097
+ 3: ArticleHeading_module_default.h3
2401
3098
  };
2402
3099
  function ArticleHeading({
2403
3100
  level = 2,
@@ -2407,14 +3104,29 @@ function ArticleHeading({
2407
3104
  className = ""
2408
3105
  }) {
2409
3106
  const Tag2 = `h${level}`;
2410
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex flex-col gap-1 ${className}`, children: [
2411
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2412
- /* @__PURE__ */ jsxRuntime.jsx(Tag2, { className: `text-[var(--fg)] tracking-tight ${levelStyles[level]}`, children }),
2413
- action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: action })
3107
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${ArticleHeading_module_default.root}${className ? ` ${className}` : ""}`, children: [
3108
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleHeading_module_default.header, children: [
3109
+ /* @__PURE__ */ jsxRuntime.jsx(Tag2, { className: levelClass[level], children }),
3110
+ action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleHeading_module_default.action, children: action })
2414
3111
  ] }),
2415
- subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[14px] leading-5 text-[var(--fg-muted)]", children: subtitle })
3112
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ArticleHeading_module_default.subtitle, children: subtitle })
2416
3113
  ] });
2417
3114
  }
3115
+
3116
+ // src/templates/ArticleFigure.module.scss
3117
+ var ArticleFigure_module_default = {
3118
+ root: "ArticleFigure_module_root",
3119
+ imageWrapper: "ArticleFigure_module_imageWrapper",
3120
+ image: "ArticleFigure_module_image",
3121
+ childWrapper: "ArticleFigure_module_childWrapper",
3122
+ placeholder: "ArticleFigure_module_placeholder",
3123
+ placeholderText: "ArticleFigure_module_placeholderText",
3124
+ legend: "ArticleFigure_module_legend",
3125
+ legendItem: "ArticleFigure_module_legendItem",
3126
+ legendSwatch: "ArticleFigure_module_legendSwatch",
3127
+ legendLabel: "ArticleFigure_module_legendLabel",
3128
+ caption: "ArticleFigure_module_caption"
3129
+ };
2418
3130
  function ArticleFigure({
2419
3131
  src,
2420
3132
  alt = "",
@@ -2424,37 +3136,52 @@ function ArticleFigure({
2424
3136
  children,
2425
3137
  className = ""
2426
3138
  }) {
2427
- return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: `w-full ${className}`, children: [
3139
+ return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: `${ArticleFigure_module_default.root}${className ? ` ${className}` : ""}`, children: [
2428
3140
  /* @__PURE__ */ jsxRuntime.jsx(
2429
3141
  "div",
2430
3142
  {
2431
- className: "w-full rounded-[var(--radius-lg)] overflow-hidden bg-[var(--bg-secondary)] flex items-center justify-center",
3143
+ className: ArticleFigure_module_default.imageWrapper,
2432
3144
  style: { minHeight: height },
2433
3145
  children: src ? (
2434
3146
  // eslint-disable-next-line @next/next/no-img-element
2435
- /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className: "w-full h-full object-contain" })
2436
- ) : children ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full h-full p-4", children }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-2 text-[var(--fg-muted)]", children: [
3147
+ /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className: ArticleFigure_module_default.image })
3148
+ ) : children ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleFigure_module_default.childWrapper, children }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleFigure_module_default.placeholder, children: [
2437
3149
  /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "48", height: "48", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [
2438
3150
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
2439
3151
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 16l5-5 4 4 4-6 5 7" })
2440
3152
  ] }),
2441
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: "Figure placeholder" })
3153
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleFigure_module_default.placeholderText, children: "Figure placeholder" })
2442
3154
  ] })
2443
3155
  }
2444
3156
  ),
2445
- legend && legend.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4 mt-3 flex-wrap", children: legend.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
3157
+ legend && legend.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleFigure_module_default.legend, children: legend.map((item) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleFigure_module_default.legendItem, children: [
2446
3158
  /* @__PURE__ */ jsxRuntime.jsx(
2447
3159
  "span",
2448
3160
  {
2449
- className: "w-3 h-3 rounded-sm shrink-0",
3161
+ className: ArticleFigure_module_default.legendSwatch,
2450
3162
  style: { backgroundColor: item.color }
2451
3163
  }
2452
3164
  ),
2453
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-4 text-[var(--fg-secondary)]", children: item.label })
3165
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleFigure_module_default.legendLabel, children: item.label })
2454
3166
  ] }, item.label)) }),
2455
- caption && /* @__PURE__ */ jsxRuntime.jsx("figcaption", { className: "mt-2 text-[14px] leading-5 text-[var(--fg-muted)]", children: caption })
3167
+ caption && /* @__PURE__ */ jsxRuntime.jsx("figcaption", { className: ArticleFigure_module_default.caption, children: caption })
2456
3168
  ] });
2457
3169
  }
3170
+
3171
+ // src/templates/ArticleTable.module.scss
3172
+ var ArticleTable_module_default = {
3173
+ root: "ArticleTable_module_root",
3174
+ headerRow: "ArticleTable_module_headerRow",
3175
+ rankCell: "ArticleTable_module_rankCell",
3176
+ headerCell: "ArticleTable_module_headerCell",
3177
+ headerLabel: "ArticleTable_module_headerLabel",
3178
+ row: "ArticleTable_module_row",
3179
+ rankValue: "ArticleTable_module_rankValue",
3180
+ cell: "ArticleTable_module_cell",
3181
+ cellText: "ArticleTable_module_cellText",
3182
+ badge: "ArticleTable_module_badge",
3183
+ showMore: "ArticleTable_module_showMore"
3184
+ };
2458
3185
  function ArticleTable({
2459
3186
  columns,
2460
3187
  rows,
@@ -2466,34 +3193,27 @@ function ArticleTable({
2466
3193
  const limit = initialVisible != null ? initialVisible : rows.length;
2467
3194
  const visibleRows = expanded ? rows : rows.slice(0, limit);
2468
3195
  const hiddenCount = rows.length - limit;
2469
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `w-full ${className}`, children: [
2470
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center border-b border-[var(--border-color)] pb-px", children: [
2471
- showRank && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-[120px] shrink-0" }),
2472
- columns.map((col) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 px-4 py-3.5", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[14px] leading-5 font-medium text-[var(--fg-muted)]", children: col.label }) }, col.key))
3196
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${ArticleTable_module_default.root}${className ? ` ${className}` : ""}`, children: [
3197
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleTable_module_default.headerRow, children: [
3198
+ showRank && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleTable_module_default.rankCell }),
3199
+ columns.map((col) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleTable_module_default.headerCell, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleTable_module_default.headerLabel, children: col.label }) }, col.key))
2473
3200
  ] }),
2474
- /* @__PURE__ */ jsxRuntime.jsx("div", { children: visibleRows.map((row, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2475
- "div",
2476
- {
2477
- className: "flex items-center gap-4 border-b border-[var(--border-color)] last:border-b-0",
2478
- children: [
2479
- showRank && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-[120px] shrink-0 px-4 py-4", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[14px] leading-5 text-[var(--fg-muted)]", children: i + 1 }) }),
2480
- columns.map((col) => {
2481
- const value = row[col.key];
2482
- const hasBadge = row._badge && row._badgeColumn === col.key;
2483
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 px-4 py-4 flex items-center gap-3", children: [
2484
- col.render ? col.render(value, row) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[14px] leading-5 text-[var(--fg-secondary)]", children: String(value != null ? value : "") }),
2485
- hasBadge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center px-2.5 py-0.5 rounded-full text-[12px] leading-4 font-semibold bg-[var(--bg-tertiary)] text-[var(--fg)]", children: row._badge })
2486
- ] }, col.key);
2487
- })
2488
- ]
2489
- },
2490
- i
2491
- )) }),
3201
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: visibleRows.map((row, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleTable_module_default.row, children: [
3202
+ showRank && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleTable_module_default.rankValue, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: i + 1 }) }),
3203
+ columns.map((col) => {
3204
+ const value = row[col.key];
3205
+ const hasBadge = row._badge && row._badgeColumn === col.key;
3206
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleTable_module_default.cell, children: [
3207
+ col.render ? col.render(value, row) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleTable_module_default.cellText, children: String(value != null ? value : "") }),
3208
+ hasBadge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleTable_module_default.badge, children: row._badge })
3209
+ ] }, col.key);
3210
+ })
3211
+ ] }, i)) }),
2492
3212
  hiddenCount > 0 && !expanded && /* @__PURE__ */ jsxRuntime.jsxs(
2493
3213
  "button",
2494
3214
  {
2495
3215
  onClick: () => setExpanded(true),
2496
- className: "mt-4 text-[14px] leading-5 font-medium text-[var(--fg-muted)] hover:text-[var(--fg)] transition-colors cursor-pointer",
3216
+ className: ArticleTable_module_default.showMore,
2497
3217
  children: [
2498
3218
  "Show ",
2499
3219
  hiddenCount,
@@ -2503,34 +3223,62 @@ function ArticleTable({
2503
3223
  )
2504
3224
  ] });
2505
3225
  }
3226
+
3227
+ // src/templates/ArticleList.module.scss
3228
+ var ArticleList_module_default = {
3229
+ root: "ArticleList_module_root",
3230
+ ordered: "ArticleList_module_ordered",
3231
+ unordered: "ArticleList_module_unordered",
3232
+ item: "ArticleList_module_item"
3233
+ };
2506
3234
  function ArticleList({
2507
3235
  variant = "unordered",
2508
3236
  items,
2509
3237
  className = ""
2510
3238
  }) {
2511
3239
  const Tag2 = variant === "ordered" ? "ol" : "ul";
2512
- const markerClass = variant === "ordered" ? "list-decimal" : "list-disc";
3240
+ const variantClass = variant === "ordered" ? ArticleList_module_default.ordered : ArticleList_module_default.unordered;
2513
3241
  return /* @__PURE__ */ jsxRuntime.jsx(
2514
3242
  Tag2,
2515
3243
  {
2516
- className: `pl-[26px] flex flex-col gap-2 text-[16px] leading-7 text-[var(--fg-secondary)] ${markerClass} ${className}`,
2517
- children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "pl-1", children: item }, i))
3244
+ className: `${ArticleList_module_default.root} ${variantClass}${className ? ` ${className}` : ""}`,
3245
+ children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: ArticleList_module_default.item, children: item }, i))
2518
3246
  }
2519
3247
  );
2520
3248
  }
3249
+
3250
+ // src/templates/ArticleNote.module.scss
3251
+ var ArticleNote_module_default = {
3252
+ root: "ArticleNote_module_root"
3253
+ };
2521
3254
  function ArticleNote({ children, className = "" }) {
2522
- return /* @__PURE__ */ jsxRuntime.jsx(
2523
- "p",
2524
- {
2525
- className: `text-[16px] leading-7 text-[var(--fg-secondary)] italic ${className}`,
2526
- children
2527
- }
2528
- );
3255
+ return /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${ArticleNote_module_default.root}${className ? ` ${className}` : ""}`, children });
2529
3256
  }
2530
- var roleStyles = {
2531
- assistant: { bg: "bg-[var(--bg-secondary)]", label: "text-[var(--fg-secondary)]", gradient: "var(--bg-secondary)" },
2532
- system: { bg: "bg-[var(--bg-tertiary)]", label: "text-[var(--fg-secondary)]", gradient: "var(--bg-tertiary)" },
2533
- user: { bg: "bg-[var(--bg-secondary)]", label: "text-[var(--fg-secondary)]", gradient: "var(--bg-secondary)" }
3257
+
3258
+ // src/templates/ArticleChatBlock.module.scss
3259
+ var ArticleChatBlock_module_default = {
3260
+ root: "ArticleChatBlock_module_root",
3261
+ assistant: "ArticleChatBlock_module_assistant",
3262
+ system: "ArticleChatBlock_module_system",
3263
+ user: "ArticleChatBlock_module_user",
3264
+ header: "ArticleChatBlock_module_header",
3265
+ roleLabel: "ArticleChatBlock_module_roleLabel",
3266
+ toolBadge: "ArticleChatBlock_module_toolBadge",
3267
+ toolBadgeInner: "ArticleChatBlock_module_toolBadgeInner",
3268
+ toolDot: "ArticleChatBlock_module_toolDot",
3269
+ toolLabel: "ArticleChatBlock_module_toolLabel",
3270
+ divider: "ArticleChatBlock_module_divider",
3271
+ contentWrapper: "ArticleChatBlock_module_contentWrapper",
3272
+ content: "ArticleChatBlock_module_content",
3273
+ fadeOverlay: "ArticleChatBlock_module_fadeOverlay",
3274
+ fadeGradient: "ArticleChatBlock_module_fadeGradient",
3275
+ showMoreBar: "ArticleChatBlock_module_showMoreBar",
3276
+ showMoreBtn: "ArticleChatBlock_module_showMoreBtn"
3277
+ };
3278
+ var roleConfig = {
3279
+ assistant: { cls: ArticleChatBlock_module_default.assistant, gradient: "var(--bg-secondary)" },
3280
+ system: { cls: ArticleChatBlock_module_default.system, gradient: "var(--bg-tertiary)" },
3281
+ user: { cls: ArticleChatBlock_module_default.user, gradient: "var(--bg-secondary)" }
2534
3282
  };
2535
3283
  function ArticleChatBlock({
2536
3284
  role,
@@ -2543,41 +3291,41 @@ function ArticleChatBlock({
2543
3291
  }) {
2544
3292
  var _a;
2545
3293
  const [expanded, setExpanded] = react.useState(false);
2546
- const styles = (_a = roleStyles[role]) != null ? _a : roleStyles.assistant;
2547
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `w-full rounded-[var(--radius-lg)] overflow-hidden ${styles.bg} ${className}`, children: [
2548
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 px-5 pt-4 pb-2", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `text-[12px] leading-4 ${styles.label}`, children: [
3294
+ const config = (_a = roleConfig[role]) != null ? _a : roleConfig.assistant;
3295
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${ArticleChatBlock_module_default.root} ${config.cls}${className ? ` ${className}` : ""}`, children: [
3296
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChatBlock_module_default.header, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: ArticleChatBlock_module_default.roleLabel, children: [
2549
3297
  role,
2550
3298
  model && ` \u2022 ${model}`
2551
3299
  ] }) }),
2552
- toolCall && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-5 pb-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-1.5 px-3 py-1 rounded-full border border-[var(--border-color)] bg-[var(--bg)]", children: [
2553
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-[var(--color-accent)]" }),
2554
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] font-medium tracking-[-0.25px] text-[var(--fg-secondary)]", children: toolCall })
3300
+ toolCall && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChatBlock_module_default.toolBadge, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChatBlock_module_default.toolBadgeInner, children: [
3301
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChatBlock_module_default.toolDot }),
3302
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChatBlock_module_default.toolLabel, children: toolCall })
2555
3303
  ] }) }),
2556
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-5 h-px bg-[var(--border-color)]" }),
2557
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
3304
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChatBlock_module_default.divider }),
3305
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChatBlock_module_default.contentWrapper, children: [
2558
3306
  /* @__PURE__ */ jsxRuntime.jsx(
2559
3307
  "div",
2560
3308
  {
2561
- className: "px-5 py-4 text-[14px] leading-6 text-[var(--fg-secondary)] overflow-hidden transition-all",
3309
+ className: ArticleChatBlock_module_default.content,
2562
3310
  style: collapsible && !expanded ? { maxHeight: collapsedHeight, overflow: "hidden" } : void 0,
2563
3311
  children
2564
3312
  }
2565
3313
  ),
2566
- collapsible && !expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute bottom-0 left-0 right-0", children: [
3314
+ collapsible && !expanded && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChatBlock_module_default.fadeOverlay, children: [
2567
3315
  /* @__PURE__ */ jsxRuntime.jsx(
2568
3316
  "div",
2569
3317
  {
2570
- className: "h-16 pointer-events-none",
3318
+ className: ArticleChatBlock_module_default.fadeGradient,
2571
3319
  style: {
2572
- background: `linear-gradient(to top, ${styles.gradient}, transparent)`
3320
+ background: `linear-gradient(to top, ${config.gradient}, transparent)`
2573
3321
  }
2574
3322
  }
2575
3323
  ),
2576
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `px-5 pb-4 ${styles.bg}`, children: /* @__PURE__ */ jsxRuntime.jsx(
3324
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${ArticleChatBlock_module_default.showMoreBar} ${config.cls}`, children: /* @__PURE__ */ jsxRuntime.jsx(
2577
3325
  "button",
2578
3326
  {
2579
3327
  onClick: () => setExpanded(true),
2580
- className: "text-[14px] leading-5 font-medium text-[var(--fg-muted)] hover:text-[var(--fg)] transition-colors cursor-pointer",
3328
+ className: ArticleChatBlock_module_default.showMoreBtn,
2581
3329
  children: "Show more"
2582
3330
  }
2583
3331
  ) })
@@ -2585,40 +3333,79 @@ function ArticleChatBlock({
2585
3333
  ] })
2586
3334
  ] });
2587
3335
  }
3336
+
3337
+ // src/templates/ArticleLinkButton.module.scss
3338
+ var ArticleLinkButton_module_default = {
3339
+ root: "ArticleLinkButton_module_root"
3340
+ };
2588
3341
  function ArticleLinkButton({
2589
3342
  children,
2590
3343
  href,
2591
3344
  onClick,
2592
3345
  className = ""
2593
3346
  }) {
2594
- const baseClass = `inline-flex items-center justify-center px-4 py-2 rounded-full bg-[var(--fg)] text-[13px] font-medium tracking-[-0.25px] text-[var(--bg)] border border-[var(--bg)] shadow-[var(--shadow-sm)] hover:opacity-90 active:opacity-80 transition-all duration-[var(--transition-fast)] cursor-pointer ${className}`;
3347
+ const cls = `${ArticleLinkButton_module_default.root}${className ? ` ${className}` : ""}`;
2595
3348
  if (href) {
2596
- return /* @__PURE__ */ jsxRuntime.jsx("a", { href, className: baseClass, children });
3349
+ return /* @__PURE__ */ jsxRuntime.jsx("a", { href, className: cls, children });
2597
3350
  }
2598
- return /* @__PURE__ */ jsxRuntime.jsx("button", { onClick, className: baseClass, children });
3351
+ return /* @__PURE__ */ jsxRuntime.jsx("button", { onClick, className: cls, children });
2599
3352
  }
3353
+
3354
+ // src/templates/ArticleFooter.module.scss
3355
+ var ArticleFooter_module_default = {
3356
+ root: "ArticleFooter_module_root",
3357
+ topBar: "ArticleFooter_module_topBar",
3358
+ logo: "ArticleFooter_module_logo",
3359
+ divider: "ArticleFooter_module_divider",
3360
+ copyright: "ArticleFooter_module_copyright"
3361
+ };
2600
3362
  function ArticleFooter({
2601
3363
  logo,
2602
3364
  copyright = `\xA9 ${(/* @__PURE__ */ new Date()).getFullYear()} All rights reserved.`,
2603
3365
  className = ""
2604
3366
  }) {
2605
- return /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: `w-full px-20 py-10 flex flex-col gap-10 ${className}`, children: [
2606
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
2607
- logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 pr-10", children: logo }),
2608
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 h-px bg-[var(--fg)]" })
3367
+ return /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: `${ArticleFooter_module_default.root}${className ? ` ${className}` : ""}`, children: [
3368
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleFooter_module_default.topBar, children: [
3369
+ logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleFooter_module_default.logo, children: logo }),
3370
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleFooter_module_default.divider })
2609
3371
  ] }),
2610
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[14px] leading-5 text-[var(--fg-muted)]", children: copyright })
3372
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: ArticleFooter_module_default.copyright, children: copyright })
2611
3373
  ] });
2612
3374
  }
3375
+
3376
+ // src/templates/ArticleLayout.module.scss
3377
+ var ArticleLayout_module_default = {
3378
+ root: "ArticleLayout_module_root",
3379
+ wide: "ArticleLayout_module_wide",
3380
+ narrow: "ArticleLayout_module_narrow"
3381
+ };
2613
3382
  function ArticleLayout({ children, className = "" }) {
2614
- return /* @__PURE__ */ jsxRuntime.jsx("article", { className: `w-full max-w-[1100px] mx-auto flex flex-col gap-5 ${className}`, children });
3383
+ return /* @__PURE__ */ jsxRuntime.jsx("article", { className: `${ArticleLayout_module_default.root}${className ? ` ${className}` : ""}`, children });
2615
3384
  }
2616
3385
  function ArticleWide({ children, className = "" }) {
2617
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-full ${className}`, children });
3386
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${ArticleLayout_module_default.wide}${className ? ` ${className}` : ""}`, children });
2618
3387
  }
2619
3388
  function ArticleNarrow({ children, className = "" }) {
2620
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-full max-w-[720px] ${className}`, children });
3389
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${ArticleLayout_module_default.narrow}${className ? ` ${className}` : ""}`, children });
2621
3390
  }
3391
+
3392
+ // src/templates/ArticleChart.module.scss
3393
+ var ArticleChart_module_default = {
3394
+ figure: "ArticleChart_module_figure",
3395
+ chartWrapper: "ArticleChart_module_chartWrapper",
3396
+ tooltip: "ArticleChart_module_tooltip",
3397
+ tooltipLabel: "ArticleChart_module_tooltipLabel",
3398
+ tooltipRow: "ArticleChart_module_tooltipRow",
3399
+ tooltipDot: "ArticleChart_module_tooltipDot",
3400
+ tooltipName: "ArticleChart_module_tooltipName",
3401
+ tooltipValue: "ArticleChart_module_tooltipValue",
3402
+ scatterTooltipLabel: "ArticleChart_module_scatterTooltipLabel",
3403
+ scatterTooltipRow: "ArticleChart_module_scatterTooltipRow",
3404
+ legend: "ArticleChart_module_legend",
3405
+ legendItem: "ArticleChart_module_legendItem",
3406
+ legendSwatch: "ArticleChart_module_legendSwatch",
3407
+ legendLabel: "ArticleChart_module_legendLabel"
3408
+ };
2622
3409
  function ChartTooltip({
2623
3410
  active,
2624
3411
  payload,
@@ -2629,15 +3416,15 @@ function ChartTooltip({
2629
3416
  }) {
2630
3417
  if (!active || !(payload == null ? void 0 : payload.length)) return null;
2631
3418
  const fmt = valueFormatter != null ? valueFormatter : ((v) => String(v));
2632
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-[var(--bg)] border border-[var(--border-color)] rounded-[var(--radius-md)] shadow-[var(--shadow-md)] px-3 py-2 text-[12px] leading-4", children: [
2633
- label !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[var(--fg-muted)] mb-1", children: [
3419
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChart_module_default.tooltip, children: [
3420
+ label !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: ArticleChart_module_default.tooltipLabel, children: [
2634
3421
  xLabel ? `${xLabel}: ` : "",
2635
3422
  label
2636
3423
  ] }),
2637
- payload.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2638
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-2 h-2 rounded-full shrink-0", style: { backgroundColor: entry.color } }),
2639
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[var(--fg-secondary)]", children: entry.name }),
2640
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-[var(--fg)] ml-auto pl-3", children: yLabel ? `${fmt(entry.value)} ` : fmt(entry.value) })
3424
+ payload.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChart_module_default.tooltipRow, children: [
3425
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChart_module_default.tooltipDot, style: { backgroundColor: entry.color } }),
3426
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChart_module_default.tooltipName, children: entry.name }),
3427
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChart_module_default.tooltipValue, children: yLabel ? `${fmt(entry.value)} ` : fmt(entry.value) })
2641
3428
  ] }, i))
2642
3429
  ] });
2643
3430
  }
@@ -2651,8 +3438,8 @@ function ArticleLineChart({
2651
3438
  valueFormatter,
2652
3439
  className = ""
2653
3440
  }) {
2654
- return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: `w-full ${className}`, children: [
2655
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.LineChart, { data, margin: { top: 8, right: 16, bottom: 4, left: 8 }, children: [
3441
+ return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: `${ArticleChart_module_default.figure}${className ? ` ${className}` : ""}`, children: [
3442
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChart_module_default.chartWrapper, style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.LineChart, { data, margin: { top: 8, right: 16, bottom: 4, left: 8 }, children: [
2656
3443
  /* @__PURE__ */ jsxRuntime.jsx(recharts.CartesianGrid, { strokeDasharray: "3 3", stroke: "var(--border-color)" }),
2657
3444
  /* @__PURE__ */ jsxRuntime.jsx(
2658
3445
  recharts.XAxis,
@@ -2702,9 +3489,9 @@ function ArticleLineChart({
2702
3489
  s.dataKey
2703
3490
  ))
2704
3491
  ] }) }) }),
2705
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4 mt-3 flex-wrap", children: series.map((s) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
2706
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-3 h-3 rounded-sm shrink-0", style: { backgroundColor: s.color } }),
2707
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-4 text-[var(--fg-secondary)]", children: s.name })
3492
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChart_module_default.legend, children: series.map((s) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChart_module_default.legendItem, children: [
3493
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChart_module_default.legendSwatch, style: { backgroundColor: s.color } }),
3494
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChart_module_default.legendLabel, children: s.name })
2708
3495
  ] }, s.dataKey)) })
2709
3496
  ] });
2710
3497
  }
@@ -2719,8 +3506,8 @@ function ArticleBarChart({
2719
3506
  valueFormatter,
2720
3507
  className = ""
2721
3508
  }) {
2722
- return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: `w-full ${className}`, children: [
2723
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.BarChart, { data, margin: { top: 8, right: 16, bottom: 4, left: 8 }, children: [
3509
+ return /* @__PURE__ */ jsxRuntime.jsxs("figure", { className: `${ArticleChart_module_default.figure}${className ? ` ${className}` : ""}`, children: [
3510
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChart_module_default.chartWrapper, style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.BarChart, { data, margin: { top: 8, right: 16, bottom: 4, left: 8 }, children: [
2724
3511
  /* @__PURE__ */ jsxRuntime.jsx(recharts.CartesianGrid, { strokeDasharray: "3 3", stroke: "var(--border-color)", vertical: false }),
2725
3512
  /* @__PURE__ */ jsxRuntime.jsx(
2726
3513
  recharts.XAxis,
@@ -2768,9 +3555,9 @@ function ArticleBarChart({
2768
3555
  s.dataKey
2769
3556
  ))
2770
3557
  ] }) }) }),
2771
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4 mt-3 flex-wrap", children: series.map((s) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
2772
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-3 h-3 rounded-sm shrink-0", style: { backgroundColor: s.color } }),
2773
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-4 text-[var(--fg-secondary)]", children: s.name })
3558
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChart_module_default.legend, children: series.map((s) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChart_module_default.legendItem, children: [
3559
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChart_module_default.legendSwatch, style: { backgroundColor: s.color } }),
3560
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: ArticleChart_module_default.legendLabel, children: s.name })
2774
3561
  ] }, s.dataKey)) })
2775
3562
  ] });
2776
3563
  }
@@ -2788,7 +3575,7 @@ function ArticleScatterChart({
2788
3575
  var _a;
2789
3576
  return (_a = d.color) != null ? _a : color;
2790
3577
  });
2791
- return /* @__PURE__ */ jsxRuntime.jsx("figure", { className: `w-full ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.ScatterChart, { margin: { top: 8, right: 16, bottom: 4, left: 8 }, children: [
3578
+ return /* @__PURE__ */ jsxRuntime.jsx("figure", { className: `${ArticleChart_module_default.figure}${className ? ` ${className}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: ArticleChart_module_default.chartWrapper, style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsxs(recharts.ScatterChart, { margin: { top: 8, right: 16, bottom: 4, left: 8 }, children: [
2792
3579
  /* @__PURE__ */ jsxRuntime.jsx(recharts.CartesianGrid, { strokeDasharray: "3 3", stroke: "var(--border-color)" }),
2793
3580
  /* @__PURE__ */ jsxRuntime.jsx(
2794
3581
  recharts.XAxis,
@@ -2824,14 +3611,14 @@ function ArticleScatterChart({
2824
3611
  if (!active || !(payload == null ? void 0 : payload.length)) return null;
2825
3612
  const point = (_a = payload[0]) == null ? void 0 : _a.payload;
2826
3613
  const fmt = valueFormatter != null ? valueFormatter : ((v) => String(v));
2827
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-[var(--bg)] border border-[var(--border-color)] rounded-[var(--radius-md)] shadow-[var(--shadow-md)] px-3 py-2 text-[12px] leading-4", children: [
2828
- point.label && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium text-[var(--fg)] mb-1", children: point.label }),
2829
- xLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[var(--fg-secondary)]", children: [
3614
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ArticleChart_module_default.tooltip, children: [
3615
+ point.label && /* @__PURE__ */ jsxRuntime.jsx("p", { className: ArticleChart_module_default.scatterTooltipLabel, children: point.label }),
3616
+ xLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: ArticleChart_module_default.scatterTooltipRow, children: [
2830
3617
  xLabel,
2831
3618
  ": ",
2832
3619
  fmt(point.x)
2833
3620
  ] }),
2834
- yLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-[var(--fg-secondary)]", children: [
3621
+ yLabel && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: ArticleChart_module_default.scatterTooltipRow, children: [
2835
3622
  yLabel,
2836
3623
  ": ",
2837
3624
  fmt(point.y)
@@ -2843,6 +3630,16 @@ function ArticleScatterChart({
2843
3630
  /* @__PURE__ */ jsxRuntime.jsx(recharts.Scatter, { data, children: data.map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(recharts.Cell, { fill: colors[i], r: 6 }, i)) })
2844
3631
  ] }) }) }) });
2845
3632
  }
3633
+
3634
+ // src/templates/LandingLayout.module.scss
3635
+ var LandingLayout_module_default = {
3636
+ headerMode: "LandingLayout_module_headerMode",
3637
+ headerMain: "LandingLayout_module_headerMain",
3638
+ sidebarMode: "LandingLayout_module_sidebarMode",
3639
+ sidebarNav: "LandingLayout_module_sidebarNav",
3640
+ sidebarMain: "LandingLayout_module_sidebarMain",
3641
+ sidebarContent: "LandingLayout_module_sidebarContent"
3642
+ };
2846
3643
  function LandingLayout({
2847
3644
  mode = "header",
2848
3645
  nav,
@@ -2850,14 +3647,14 @@ function LandingLayout({
2850
3647
  className = ""
2851
3648
  }) {
2852
3649
  if (mode === "sidebar") {
2853
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex min-h-screen bg-[var(--bg)] ${className}`, children: [
2854
- nav && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden md:flex shrink-0", children: nav }),
2855
- /* @__PURE__ */ jsxRuntime.jsx("main", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 md:px-10 lg:px-16 max-w-5xl", children }) })
3650
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${LandingLayout_module_default.sidebarMode}${className ? ` ${className}` : ""}`, children: [
3651
+ nav && /* @__PURE__ */ jsxRuntime.jsx("div", { className: LandingLayout_module_default.sidebarNav, children: nav }),
3652
+ /* @__PURE__ */ jsxRuntime.jsx("main", { className: LandingLayout_module_default.sidebarMain, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: LandingLayout_module_default.sidebarContent, children }) })
2856
3653
  ] });
2857
3654
  }
2858
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `min-h-screen bg-[var(--bg)] ${className}`, children: [
3655
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${LandingLayout_module_default.headerMode}${className ? ` ${className}` : ""}`, children: [
2859
3656
  nav,
2860
- /* @__PURE__ */ jsxRuntime.jsx("main", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children })
3657
+ /* @__PURE__ */ jsxRuntime.jsx("main", { className: LandingLayout_module_default.headerMain, children })
2861
3658
  ] });
2862
3659
  }
2863
3660