ksk-design-system 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +190 -0
- package/CLAUDE.md +189 -0
- package/DESIGN.md +190 -0
- package/LICENSE +21 -0
- package/MIGRATION.md +107 -0
- package/PUBLISHING.md +160 -0
- package/README.md +59 -0
- package/RELEASE.md +82 -0
- package/bin/init.js +112 -0
- package/contracts/components.json +1443 -0
- package/contracts/rules.json +447 -0
- package/dist/class-names.js +4 -0
- package/dist/index.js +13157 -0
- package/dist/native/ui.js +4928 -0
- package/dist/native.js +1559 -0
- package/dist/server-variants-Dr_V3bDI.js +55 -0
- package/dist/types/class-names.d.ts +27 -0
- package/dist/types/components/patterns/admin/bulk-actions.d.ts +17 -0
- package/dist/types/components/patterns/admin/chart-controls.d.ts +16 -0
- package/dist/types/components/patterns/admin/data-table.d.ts +165 -0
- package/dist/types/components/patterns/admin/image-uploader.d.ts +14 -0
- package/dist/types/components/patterns/admin/kebab-menu.d.ts +17 -0
- package/dist/types/components/patterns/admin/notification-list.d.ts +16 -0
- package/dist/types/components/patterns/admin/search-panel.d.ts +9 -0
- package/dist/types/components/patterns/admin/status-tabs.d.ts +13 -0
- package/dist/types/components/patterns/app-header.d.ts +76 -0
- package/dist/types/components/patterns/banner-carousel.d.ts +25 -0
- package/dist/types/components/patterns/banner.d.ts +13 -0
- package/dist/types/components/patterns/bottom-sheet-form.d.ts +17 -0
- package/dist/types/components/patterns/category-nav.d.ts +43 -0
- package/dist/types/components/patterns/category-scroll.d.ts +53 -0
- package/dist/types/components/patterns/chip-selector.d.ts +20 -0
- package/dist/types/components/patterns/chip.d.ts +42 -0
- package/dist/types/components/patterns/coach-mark-overlay.d.ts +66 -0
- package/dist/types/components/patterns/commerce/bottom-tab-bar.d.ts +27 -0
- package/dist/types/components/patterns/commerce/filter-bar.d.ts +39 -0
- package/dist/types/components/patterns/commerce/image-carousel.d.ts +14 -0
- package/dist/types/components/patterns/commerce/order-summary.d.ts +26 -0
- package/dist/types/components/patterns/commerce/price-display.d.ts +20 -0
- package/dist/types/components/patterns/commerce/product-card.d.ts +50 -0
- package/dist/types/components/patterns/commerce/product-carousel.d.ts +15 -0
- package/dist/types/components/patterns/commerce/quantity-selector.d.ts +21 -0
- package/dist/types/components/patterns/commerce/rating-display.d.ts +15 -0
- package/dist/types/components/patterns/commerce/review-card.d.ts +22 -0
- package/dist/types/components/patterns/commerce/review-summary.d.ts +12 -0
- package/dist/types/components/patterns/confirm-dialog.d.ts +32 -0
- package/dist/types/components/patterns/cookie-consent.d.ts +62 -0
- package/dist/types/components/patterns/empty-state.d.ts +15 -0
- package/dist/types/components/patterns/error-state.d.ts +10 -0
- package/dist/types/components/patterns/file-upload.d.ts +31 -0
- package/dist/types/components/patterns/filter-chip.d.ts +26 -0
- package/dist/types/components/patterns/footer.d.ts +24 -0
- package/dist/types/components/patterns/form-field.d.ts +30 -0
- package/dist/types/components/patterns/form.d.ts +13 -0
- package/dist/types/components/patterns/list-item.d.ts +23 -0
- package/dist/types/components/patterns/list-skeletons.d.ts +43 -0
- package/dist/types/components/patterns/menu-drawer.d.ts +27 -0
- package/dist/types/components/patterns/notification-badge.d.ts +15 -0
- package/dist/types/components/patterns/progress-steps.d.ts +7 -0
- package/dist/types/components/patterns/review-overlay.d.ts +25 -0
- package/dist/types/components/patterns/search-bar.d.ts +6 -0
- package/dist/types/components/patterns/section-header.d.ts +8 -0
- package/dist/types/components/patterns/share-buttons.d.ts +13 -0
- package/dist/types/components/patterns/shells/admin-shell.d.ts +8 -0
- package/dist/types/components/patterns/shells/app-shell.d.ts +7 -0
- package/dist/types/components/patterns/shells/marketing-shell.d.ts +7 -0
- package/dist/types/components/patterns/simple-pagination.d.ts +69 -0
- package/dist/types/components/patterns/stat-card.d.ts +43 -0
- package/dist/types/components/patterns/sticky-action-bar.d.ts +27 -0
- package/dist/types/components/patterns/swipe-row.d.ts +17 -0
- package/dist/types/components/patterns/tag-input.d.ts +20 -0
- package/dist/types/components/patterns/tag.d.ts +7 -0
- package/dist/types/components/ui/accordion.d.ts +7 -0
- package/dist/types/components/ui/alert-dialog.d.ts +47 -0
- package/dist/types/components/ui/alert.d.ts +45 -0
- package/dist/types/components/ui/auto-grow-textarea.d.ts +40 -0
- package/dist/types/components/ui/avatar.d.ts +6 -0
- package/dist/types/components/ui/badge.d.ts +18 -0
- package/dist/types/components/ui/breadcrumb.d.ts +16 -0
- package/dist/types/components/ui/button.d.ts +29 -0
- package/dist/types/components/ui/calendar.d.ts +5 -0
- package/dist/types/components/ui/card.d.ts +28 -0
- package/dist/types/components/ui/checkbox-card.d.ts +29 -0
- package/dist/types/components/ui/checkbox-field.d.ts +24 -0
- package/dist/types/components/ui/checkbox-group.d.ts +33 -0
- package/dist/types/components/ui/checkbox.d.ts +44 -0
- package/dist/types/components/ui/coach-mark.d.ts +27 -0
- package/dist/types/components/ui/collapsible.d.ts +24 -0
- package/dist/types/components/ui/combobox.d.ts +19 -0
- package/dist/types/components/ui/countdown-timer.d.ts +39 -0
- package/dist/types/components/ui/date-picker.d.ts +53 -0
- package/dist/types/components/ui/dialog.d.ts +54 -0
- package/dist/types/components/ui/dropdown-filter.d.ts +35 -0
- package/dist/types/components/ui/dropdown-menu.d.ts +42 -0
- package/dist/types/components/ui/error-boundary.d.ts +66 -0
- package/dist/types/components/ui/form.d.ts +61 -0
- package/dist/types/components/ui/hover-card.d.ts +24 -0
- package/dist/types/components/ui/image-gallery.d.ts +28 -0
- package/dist/types/components/ui/input.d.ts +17 -0
- package/dist/types/components/ui/label.d.ts +4 -0
- package/dist/types/components/ui/multi-select.d.ts +21 -0
- package/dist/types/components/ui/navigation-bar.d.ts +58 -0
- package/dist/types/components/ui/number-input.d.ts +20 -0
- package/dist/types/components/ui/pagination.d.ts +26 -0
- package/dist/types/components/ui/pill-toggle.d.ts +16 -0
- package/dist/types/components/ui/popover.d.ts +7 -0
- package/dist/types/components/ui/progress-ring.d.ts +31 -0
- package/dist/types/components/ui/progress.d.ts +34 -0
- package/dist/types/components/ui/radio-group.d.ts +22 -0
- package/dist/types/components/ui/responsive-dialog.d.ts +31 -0
- package/dist/types/components/ui/scroll-area.d.ts +5 -0
- package/dist/types/components/ui/select.d.ts +22 -0
- package/dist/types/components/ui/separator.d.ts +4 -0
- package/dist/types/components/ui/sheet.d.ts +139 -0
- package/dist/types/components/ui/skeleton.d.ts +31 -0
- package/dist/types/components/ui/slider.d.ts +14 -0
- package/dist/types/components/ui/social-icon-data.d.ts +10 -0
- package/dist/types/components/ui/social-icon.d.ts +38 -0
- package/dist/types/components/ui/social-login-button.d.ts +10 -0
- package/dist/types/components/ui/spinner.d.ts +22 -0
- package/dist/types/components/ui/star-rating.d.ts +12 -0
- package/dist/types/components/ui/sub-nav.d.ts +17 -0
- package/dist/types/components/ui/switch.d.ts +4 -0
- package/dist/types/components/ui/sync-status-badge.d.ts +17 -0
- package/dist/types/components/ui/tabs.d.ts +15 -0
- package/dist/types/components/ui/textarea.d.ts +8 -0
- package/dist/types/components/ui/time-picker.d.ts +14 -0
- package/dist/types/components/ui/toast.d.ts +49 -0
- package/dist/types/components/ui/tooltip.d.ts +7 -0
- package/dist/types/index.d.ts +174 -0
- package/dist/types/lib/server-variants/button-variants.d.ts +20 -0
- package/dist/types/lib/utils.d.ts +2 -0
- package/dist/types/native/components/Accordion.d.ts +12 -0
- package/dist/types/native/components/Alert.d.ts +9 -0
- package/dist/types/native/components/AlertDialog.d.ts +11 -0
- package/dist/types/native/components/AppHeader.d.ts +10 -0
- package/dist/types/native/components/AppShell.d.ts +13 -0
- package/dist/types/native/components/AutoGrowTextarea.d.ts +8 -0
- package/dist/types/native/components/Avatar.d.ts +8 -0
- package/dist/types/native/components/Badge.d.ts +8 -0
- package/dist/types/native/components/Banner.d.ts +10 -0
- package/dist/types/native/components/BannerCarousel.d.ts +8 -0
- package/dist/types/native/components/BottomSheetForm.d.ts +10 -0
- package/dist/types/native/components/BottomTabBar.d.ts +8 -0
- package/dist/types/native/components/Breadcrumb.d.ts +12 -0
- package/dist/types/native/components/Button.d.ts +9 -0
- package/dist/types/native/components/Calendar.d.ts +8 -0
- package/dist/types/native/components/Card.d.ts +11 -0
- package/dist/types/native/components/CategoryNav.d.ts +13 -0
- package/dist/types/native/components/CategoryScroll.d.ts +12 -0
- package/dist/types/native/components/Checkbox.d.ts +7 -0
- package/dist/types/native/components/CheckboxCard.d.ts +8 -0
- package/dist/types/native/components/CheckboxField.d.ts +8 -0
- package/dist/types/native/components/CheckboxGroup.d.ts +12 -0
- package/dist/types/native/components/Chip.d.ts +17 -0
- package/dist/types/native/components/ChipSelector.d.ts +13 -0
- package/dist/types/native/components/CoachMark.d.ts +12 -0
- package/dist/types/native/components/CoachMarkOverlay.d.ts +19 -0
- package/dist/types/native/components/Collapsible.d.ts +7 -0
- package/dist/types/native/components/Combobox.d.ts +14 -0
- package/dist/types/native/components/ConfirmDialog.d.ts +7 -0
- package/dist/types/native/components/CountdownTimer.d.ts +7 -0
- package/dist/types/native/components/DatePicker.d.ts +10 -0
- package/dist/types/native/components/Dialog.d.ts +12 -0
- package/dist/types/native/components/DropdownFilter.d.ts +12 -0
- package/dist/types/native/components/DropdownMenu.d.ts +19 -0
- package/dist/types/native/components/EmptyState.d.ts +8 -0
- package/dist/types/native/components/ErrorState.d.ts +8 -0
- package/dist/types/native/components/FileUpload.d.ts +12 -0
- package/dist/types/native/components/FilterBar.d.ts +13 -0
- package/dist/types/native/components/FilterChip.d.ts +7 -0
- package/dist/types/native/components/Footer.d.ts +9 -0
- package/dist/types/native/components/FormField.d.ts +9 -0
- package/dist/types/native/components/GlassView.d.ts +25 -0
- package/dist/types/native/components/ImageCarousel.d.ts +8 -0
- package/dist/types/native/components/ImageGallery.d.ts +7 -0
- package/dist/types/native/components/Input.d.ts +9 -0
- package/dist/types/native/components/Label.d.ts +7 -0
- package/dist/types/native/components/ListItem.d.ts +11 -0
- package/dist/types/native/components/ListSkeletons.d.ts +6 -0
- package/dist/types/native/components/MarketingShell.d.ts +9 -0
- package/dist/types/native/components/MenuDrawer.d.ts +21 -0
- package/dist/types/native/components/MultiSelect.d.ts +13 -0
- package/dist/types/native/components/NavigationBar.d.ts +18 -0
- package/dist/types/native/components/NotificationBadge.d.ts +9 -0
- package/dist/types/native/components/NumberInput.d.ts +9 -0
- package/dist/types/native/components/OrderSummary.d.ts +10 -0
- package/dist/types/native/components/Pagination.d.ts +7 -0
- package/dist/types/native/components/PillToggle.d.ts +12 -0
- package/dist/types/native/components/Popover.d.ts +14 -0
- package/dist/types/native/components/PriceDisplay.d.ts +8 -0
- package/dist/types/native/components/ProductCard.d.ts +14 -0
- package/dist/types/native/components/ProductCarousel.d.ts +11 -0
- package/dist/types/native/components/Progress.d.ts +7 -0
- package/dist/types/native/components/ProgressRing.d.ts +12 -0
- package/dist/types/native/components/ProgressSteps.d.ts +9 -0
- package/dist/types/native/components/QuantitySelector.d.ts +6 -0
- package/dist/types/native/components/RadioGroup.d.ts +13 -0
- package/dist/types/native/components/RatingDisplay.d.ts +7 -0
- package/dist/types/native/components/ResponsiveDialog.d.ts +7 -0
- package/dist/types/native/components/ReviewCard.d.ts +11 -0
- package/dist/types/native/components/ReviewOverlay.d.ts +7 -0
- package/dist/types/native/components/ReviewSummary.d.ts +7 -0
- package/dist/types/native/components/ScrollArea.d.ts +9 -0
- package/dist/types/native/components/SearchBar.d.ts +9 -0
- package/dist/types/native/components/SectionHeader.d.ts +10 -0
- package/dist/types/native/components/Select.d.ts +14 -0
- package/dist/types/native/components/Separator.d.ts +5 -0
- package/dist/types/native/components/ShareButtons.d.ts +11 -0
- package/dist/types/native/components/Sheet.d.ts +20 -0
- package/dist/types/native/components/SimplePagination.d.ts +7 -0
- package/dist/types/native/components/Skeleton.d.ts +11 -0
- package/dist/types/native/components/Slider.d.ts +9 -0
- package/dist/types/native/components/SocialIcon.d.ts +12 -0
- package/dist/types/native/components/SocialLoginButton.d.ts +8 -0
- package/dist/types/native/components/Spinner.d.ts +6 -0
- package/dist/types/native/components/Stack.d.ts +13 -0
- package/dist/types/native/components/StarRating.d.ts +9 -0
- package/dist/types/native/components/StatCard.d.ts +7 -0
- package/dist/types/native/components/StickyActionBar.d.ts +6 -0
- package/dist/types/native/components/SubNav.d.ts +12 -0
- package/dist/types/native/components/SwipeRow.d.ts +14 -0
- package/dist/types/native/components/Switch.d.ts +4 -0
- package/dist/types/native/components/SyncStatusBadge.d.ts +6 -0
- package/dist/types/native/components/Tabs.d.ts +23 -0
- package/dist/types/native/components/Tag.d.ts +10 -0
- package/dist/types/native/components/TagInput.d.ts +7 -0
- package/dist/types/native/components/Text.d.ts +10 -0
- package/dist/types/native/components/Textarea.d.ts +7 -0
- package/dist/types/native/components/TimePicker.d.ts +12 -0
- package/dist/types/native/components/Toast.d.ts +18 -0
- package/dist/types/native/components/index.d.ts +99 -0
- package/dist/types/native/components/social-icon-data.d.ts +5 -0
- package/dist/types/native/index.d.ts +4 -0
- package/dist/types/native/theme/ThemeProvider.d.ts +21 -0
- package/dist/types/native/typography.d.ts +8 -0
- package/dist/types/tokens/native/index.d.ts +13 -0
- package/dist/types/tokens/native/primitives.d.ts +116 -0
- package/dist/types/tokens/native/scales.d.ts +270 -0
- package/dist/types/tokens/native/themes.d.ts +1147 -0
- package/eslint/deprecated.js +104 -0
- package/eslint/no-colorless-border.js +217 -0
- package/package.json +215 -0
- package/scripts/codemod/README.md +51 -0
- package/scripts/codemod/template.mjs +164 -0
- package/src/components/COMPONENT_LOOKUP.md +190 -0
- package/src/preset.css +168 -0
- package/src/styles/categorical.css +161 -0
- package/src/styles/glass.css +365 -0
- package/src/styles/primitive.css +161 -0
- package/src/styles/semantic.css +247 -0
- package/src/styles/typography.css +140 -0
- package/src/themes/README.md +44 -0
- package/src/themes/blue.css +21 -0
- package/src/themes/default.css +12 -0
- package/src/themes/green.css +22 -0
- package/src/themes/orange.css +21 -0
- package/src/themes/violet.css +22 -0
- package/templates/AGENTS.md +77 -0
- package/templates/CLAUDE.md +77 -0
- package/tokens.json +607 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* =============================================================
|
|
2
|
+
KSK Design System — Categorical (Qualitative) Color Tokens
|
|
3
|
+
|
|
4
|
+
「カテゴリ識別子」専用の質的カラーパレット。
|
|
5
|
+
Brand / Status とは無関係な “何番目のカテゴリか” を色で区別するための
|
|
6
|
+
16 色スケール。カレンダーの予定ドット、カテゴリ chip、ボード列の背景、
|
|
7
|
+
グラフ系列などで使う(例: belle-todo の結婚式準備カテゴリ)。
|
|
8
|
+
|
|
9
|
+
─── 設計上の3つの約束 ──────────────────────────────────────
|
|
10
|
+
1. テーマ非依存:
|
|
11
|
+
Brand-* には一切連動しない固定値。テーマ(default/orange/green/
|
|
12
|
+
violet)を差し替えてもカテゴリの色は変わらない=アプリ横断で
|
|
13
|
+
「カテゴリ⇄色」の対応が一貫する。External Brand(--Brand-Line 等)
|
|
14
|
+
と同じく semantic 層に固定 hex で置く方針。
|
|
15
|
+
2. 並び順は「分離度の高い順」:
|
|
16
|
+
--Categorical-1..N は CVD シミュレーション上の色差(CIEDE2000)が
|
|
17
|
+
大きい順に並べてある。K 色だけ必要なら 1..K を順に使えば、その K 色は
|
|
18
|
+
可能な範囲で最も見分けやすい組み合わせになる(colorbrewer / d3 と同じ思想)。
|
|
19
|
+
3. 3 階層(base / Subtle / Bold):
|
|
20
|
+
--Categorical-N … base。ドット・アイコン・小さな塗り(mark)用。
|
|
21
|
+
--Categorical-N-Subtle … 淡いティント。行・列・カードの背景用(≒ 50/100)。
|
|
22
|
+
--Categorical-N-Bold … 濃色。chip ラベルや見出しなど「文字」用。
|
|
23
|
+
|
|
24
|
+
─── アクセシビリティ(WCAG / CVD) ─────────────────────────
|
|
25
|
+
• 文字には必ず -Bold を使うこと。base(≒500)は白背景で 4.5:1 に届かない
|
|
26
|
+
色が大半(黄/シアン/ライム等)。-Bold は 16 色すべてが
|
|
27
|
+
- 白背景で ≥4.9:1(AA 通常テキスト)
|
|
28
|
+
- 自分の -Subtle 上で ≥4.5:1(chip: Subtle 背景+Bold 文字)
|
|
29
|
+
を満たす。
|
|
30
|
+
• ドット/アイコン(非テキスト, 1.4.11 = 3:1)は base でよいが、
|
|
31
|
+
warm/cyan 系(orange/amber/yellow/lime/teal/cyan/sky ≒ index 5,7,8,12,13)は
|
|
32
|
+
白背景で 3:1 未満。これらが “色だけ” で意味を伝える唯一の手段になる場合は
|
|
33
|
+
-Bold をドットに使うか、アイコン/ラベルを併記すること。
|
|
34
|
+
• CVD(色覚多様性): 16 色のうち赤緑系 CVD でも確実に見分けられるのは
|
|
35
|
+
概ね先頭 8〜9 色まで。末尾の紫系(fuchsia/purple/violet = 14,15,16)は
|
|
36
|
+
protanopia でほぼ同色になる。色だけに依存せずアイコン・ラベル・形状を
|
|
37
|
+
併用すること(WCAG 1.4.1 Use of Color)。10 色を超えて識別が必須なら
|
|
38
|
+
カテゴリのグルーピングを検討。
|
|
39
|
+
|
|
40
|
+
─── tint を mix で自動生成したい場合 ───────────────────────
|
|
41
|
+
本ファイルは AA 検証済みの固定値を採用しているが、base から導出するなら:
|
|
42
|
+
Subtle(light) ≈ color-mix(in srgb, var(--Categorical-N) 15%, white) … 推奨 a = 15%
|
|
43
|
+
Subtle(dark) = color-mix(in srgb, var(--Categorical-N) 18%, transparent) … 暗面に重ねる
|
|
44
|
+
※ 15% mix だと Bold 文字とのコントラストが一部 4.48:1 と AA 境界ぎりぎりに
|
|
45
|
+
なるため、確実な AA が必要なら本ファイルの明示値(Tailwind-100 相当)を使うこと。
|
|
46
|
+
|
|
47
|
+
命名規則: --Categorical-{1..16}{,-Subtle,-Bold}
|
|
48
|
+
============================================================= */
|
|
49
|
+
|
|
50
|
+
:root {
|
|
51
|
+
/* ─── base(mark: ドット/アイコン/小塗り。Tailwind-500 相当) ─── */
|
|
52
|
+
--Categorical-1: #EF4444; /* red */
|
|
53
|
+
--Categorical-2: #0EA5E9; /* sky */
|
|
54
|
+
--Categorical-3: #14B8A6; /* teal */
|
|
55
|
+
--Categorical-4: #64748B; /* slate */
|
|
56
|
+
--Categorical-5: #EAB308; /* yellow */
|
|
57
|
+
--Categorical-6: #6366F1; /* indigo */
|
|
58
|
+
--Categorical-7: #F97316; /* orange */
|
|
59
|
+
--Categorical-8: #06B6D4; /* cyan */
|
|
60
|
+
--Categorical-9: #EC4899; /* pink */
|
|
61
|
+
--Categorical-10: #F43F5E; /* rose */
|
|
62
|
+
--Categorical-11: #3B82F6; /* blue */
|
|
63
|
+
--Categorical-12: #84CC16; /* lime */
|
|
64
|
+
--Categorical-13: #F59E0B; /* amber */
|
|
65
|
+
--Categorical-14: #D946EF; /* fuchsia */
|
|
66
|
+
--Categorical-15: #A855F7; /* purple */
|
|
67
|
+
--Categorical-16: #8B5CF6; /* violet */
|
|
68
|
+
|
|
69
|
+
/* ─── Subtle(背景ティント。Tailwind-100 相当 ≒ base 15% on white) ─── */
|
|
70
|
+
--Categorical-1-Subtle: #FEE2E2;
|
|
71
|
+
--Categorical-2-Subtle: #E0F2FE;
|
|
72
|
+
--Categorical-3-Subtle: #CCFBF1;
|
|
73
|
+
--Categorical-4-Subtle: #F1F5F9;
|
|
74
|
+
--Categorical-5-Subtle: #FEF9C3;
|
|
75
|
+
--Categorical-6-Subtle: #E0E7FF;
|
|
76
|
+
--Categorical-7-Subtle: #FFEDD5;
|
|
77
|
+
--Categorical-8-Subtle: #CFFAFE;
|
|
78
|
+
--Categorical-9-Subtle: #FCE7F3;
|
|
79
|
+
--Categorical-10-Subtle: #FFE4E6;
|
|
80
|
+
--Categorical-11-Subtle: #DBEAFE;
|
|
81
|
+
--Categorical-12-Subtle: #ECFCCB;
|
|
82
|
+
--Categorical-13-Subtle: #FEF3C7;
|
|
83
|
+
--Categorical-14-Subtle: #FAE8FF;
|
|
84
|
+
--Categorical-15-Subtle: #F3E8FF;
|
|
85
|
+
--Categorical-16-Subtle: #EDE9FE;
|
|
86
|
+
|
|
87
|
+
/* ─── Bold(文字/ラベル用。Tailwind-700 相当, ≥4.5:1 on white & on -Subtle) ─── */
|
|
88
|
+
--Categorical-1-Bold: #B91C1C;
|
|
89
|
+
--Categorical-2-Bold: #0369A1;
|
|
90
|
+
--Categorical-3-Bold: #0F766E;
|
|
91
|
+
--Categorical-4-Bold: #334155;
|
|
92
|
+
--Categorical-5-Bold: #A16207;
|
|
93
|
+
--Categorical-6-Bold: #4338CA;
|
|
94
|
+
--Categorical-7-Bold: #C2410C;
|
|
95
|
+
--Categorical-8-Bold: #0E7490;
|
|
96
|
+
--Categorical-9-Bold: #BE185D;
|
|
97
|
+
--Categorical-10-Bold: #BE123C;
|
|
98
|
+
--Categorical-11-Bold: #1D4ED8;
|
|
99
|
+
--Categorical-12-Bold: #4D7C0F;
|
|
100
|
+
--Categorical-13-Bold: #B45309;
|
|
101
|
+
--Categorical-14-Bold: #A21CAF;
|
|
102
|
+
--Categorical-15-Bold: #7E22CE;
|
|
103
|
+
--Categorical-16-Bold: #6D28D9;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* ─── Dark Mode ───────────────────────────────────────────────
|
|
107
|
+
色相(カテゴリ識別)は保ったまま、明度だけ暗面向けに調整。
|
|
108
|
+
base 500→400(暗面で映える), Bold 700→300(暗面の文字),
|
|
109
|
+
Subtle は base を 18% 透過で暗面に重ねる(semantic.css の Subtle と同方針)。 */
|
|
110
|
+
.dark {
|
|
111
|
+
--Categorical-1: #F87171;
|
|
112
|
+
--Categorical-2: #38BDF8;
|
|
113
|
+
--Categorical-3: #2DD4BF;
|
|
114
|
+
--Categorical-4: #94A3B8;
|
|
115
|
+
--Categorical-5: #FACC15;
|
|
116
|
+
--Categorical-6: #818CF8;
|
|
117
|
+
--Categorical-7: #FB923C;
|
|
118
|
+
--Categorical-8: #22D3EE;
|
|
119
|
+
--Categorical-9: #F472B6;
|
|
120
|
+
--Categorical-10: #FB7185;
|
|
121
|
+
--Categorical-11: #60A5FA;
|
|
122
|
+
--Categorical-12: #A3E635;
|
|
123
|
+
--Categorical-13: #FBBF24;
|
|
124
|
+
--Categorical-14: #E879F9;
|
|
125
|
+
--Categorical-15: #C084FC;
|
|
126
|
+
--Categorical-16: #A78BFA;
|
|
127
|
+
|
|
128
|
+
--Categorical-1-Subtle: color-mix(in srgb, var(--Categorical-1) 18%, transparent);
|
|
129
|
+
--Categorical-2-Subtle: color-mix(in srgb, var(--Categorical-2) 18%, transparent);
|
|
130
|
+
--Categorical-3-Subtle: color-mix(in srgb, var(--Categorical-3) 18%, transparent);
|
|
131
|
+
--Categorical-4-Subtle: color-mix(in srgb, var(--Categorical-4) 18%, transparent);
|
|
132
|
+
--Categorical-5-Subtle: color-mix(in srgb, var(--Categorical-5) 18%, transparent);
|
|
133
|
+
--Categorical-6-Subtle: color-mix(in srgb, var(--Categorical-6) 18%, transparent);
|
|
134
|
+
--Categorical-7-Subtle: color-mix(in srgb, var(--Categorical-7) 18%, transparent);
|
|
135
|
+
--Categorical-8-Subtle: color-mix(in srgb, var(--Categorical-8) 18%, transparent);
|
|
136
|
+
--Categorical-9-Subtle: color-mix(in srgb, var(--Categorical-9) 18%, transparent);
|
|
137
|
+
--Categorical-10-Subtle: color-mix(in srgb, var(--Categorical-10) 18%, transparent);
|
|
138
|
+
--Categorical-11-Subtle: color-mix(in srgb, var(--Categorical-11) 18%, transparent);
|
|
139
|
+
--Categorical-12-Subtle: color-mix(in srgb, var(--Categorical-12) 18%, transparent);
|
|
140
|
+
--Categorical-13-Subtle: color-mix(in srgb, var(--Categorical-13) 18%, transparent);
|
|
141
|
+
--Categorical-14-Subtle: color-mix(in srgb, var(--Categorical-14) 18%, transparent);
|
|
142
|
+
--Categorical-15-Subtle: color-mix(in srgb, var(--Categorical-15) 18%, transparent);
|
|
143
|
+
--Categorical-16-Subtle: color-mix(in srgb, var(--Categorical-16) 18%, transparent);
|
|
144
|
+
|
|
145
|
+
--Categorical-1-Bold: #FCA5A5;
|
|
146
|
+
--Categorical-2-Bold: #7DD3FC;
|
|
147
|
+
--Categorical-3-Bold: #5EEAD4;
|
|
148
|
+
--Categorical-4-Bold: #CBD5E1;
|
|
149
|
+
--Categorical-5-Bold: #FDE047;
|
|
150
|
+
--Categorical-6-Bold: #A5B4FC;
|
|
151
|
+
--Categorical-7-Bold: #FDBA74;
|
|
152
|
+
--Categorical-8-Bold: #67E8F9;
|
|
153
|
+
--Categorical-9-Bold: #F9A8D4;
|
|
154
|
+
--Categorical-10-Bold: #FDA4AF;
|
|
155
|
+
--Categorical-11-Bold: #93C5FD;
|
|
156
|
+
--Categorical-12-Bold: #BEF264;
|
|
157
|
+
--Categorical-13-Bold: #FCD34D;
|
|
158
|
+
--Categorical-14-Bold: #F0ABFC;
|
|
159
|
+
--Categorical-15-Bold: #D8B4FE;
|
|
160
|
+
--Categorical-16-Bold: #C4B5FD;
|
|
161
|
+
}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
/* =============================================================
|
|
2
|
+
KSK Design System — Liquid Glass Material
|
|
3
|
+
iOS 26 / macOS 26 スタイルのガラス素材トークン + ユーティリティ
|
|
4
|
+
|
|
5
|
+
使い方:
|
|
6
|
+
クラスを直接付与: <div class="glass">...</div>
|
|
7
|
+
または CSS 変数を参照: backdrop-filter: var(--glass-blur);
|
|
8
|
+
|
|
9
|
+
⚠️ 宣言順の不変条件: `-webkit-backdrop-filter` を先、標準の
|
|
10
|
+
`backdrop-filter` を後に書くこと(Tailwind の出力順と同じ)。
|
|
11
|
+
消費側の本番ビルド(Next.js 等の CSS minifier)は両者を同一
|
|
12
|
+
プロパティとして dedupe し「後に書いた方」だけを残すため、標準形を
|
|
13
|
+
先に書くと minify 後に -webkit- だけが残り、エイリアス非対応の
|
|
14
|
+
Firefox で blur が完全に無効になる(yokoku-app 本番で実害、
|
|
15
|
+
2026-06-12 修正)。dev は未 minify なので手元では再現しない。
|
|
16
|
+
============================================================= */
|
|
17
|
+
|
|
18
|
+
/* ─── Liquid Glass トークン ─── */
|
|
19
|
+
:root {
|
|
20
|
+
/* Blur — Liquid Glass は旧来のすりガラスより透明度が高い。blur を抑えめに
|
|
21
|
+
して背景の形を残し、saturate + brightness で「ガラス越しに光を集めた」
|
|
22
|
+
濃縮感を出す(brightness はライトで明るく、ダークで暗く倒す) */
|
|
23
|
+
--glass-blur-sm: blur(14px) saturate(1.7) brightness(1.05);
|
|
24
|
+
--glass-blur: blur(28px) saturate(1.9) brightness(1.06);
|
|
25
|
+
--glass-blur-lg: blur(56px) saturate(2.0) brightness(1.05);
|
|
26
|
+
|
|
27
|
+
/* Background */
|
|
28
|
+
--glass-bg: rgba(255, 255, 255, 0.18);
|
|
29
|
+
--glass-bg-subtle: rgba(255, 255, 255, 0.10);
|
|
30
|
+
--glass-bg-medium: rgba(255, 255, 255, 0.28);
|
|
31
|
+
--glass-bg-strong: rgba(255, 255, 255, 0.55);
|
|
32
|
+
--glass-bg-dark: rgba(10, 10, 20, 0.25);
|
|
33
|
+
|
|
34
|
+
/* Border — 上端の光の屈折を模した細い輪郭 */
|
|
35
|
+
--glass-border: rgba(255, 255, 255, 0.42);
|
|
36
|
+
--glass-border-dark: rgba(255, 255, 255, 0.15);
|
|
37
|
+
|
|
38
|
+
/* Edge rim — レンズ縁での光の屈折リング(.glass-specular の ::after)。
|
|
39
|
+
0deg=上端に主光源のグリント、180deg=下端に内部反射のカウンターグリント、
|
|
40
|
+
左右(90/270deg 付近)は減衰させて「光がエッジを回り込む」見え方にする。
|
|
41
|
+
グリントの肩に寒色(青系)、カウンターグリントの肩に暖色を僅かに乗せ、
|
|
42
|
+
強い曲率で起きる色分散(chromatic aberration)を擬似する */
|
|
43
|
+
--glass-rim-width: 1.5px;
|
|
44
|
+
--glass-rim: conic-gradient(
|
|
45
|
+
from 0deg,
|
|
46
|
+
rgba(255, 255, 255, 0.80) 0deg,
|
|
47
|
+
rgba(186, 224, 255, 0.45) 40deg,
|
|
48
|
+
rgba(255, 255, 255, 0.20) 75deg,
|
|
49
|
+
rgba(255, 255, 255, 0.06) 120deg,
|
|
50
|
+
rgba(255, 226, 200, 0.30) 162deg,
|
|
51
|
+
rgba(255, 255, 255, 0.50) 180deg,
|
|
52
|
+
rgba(255, 226, 200, 0.30) 198deg,
|
|
53
|
+
rgba(255, 255, 255, 0.06) 240deg,
|
|
54
|
+
rgba(186, 224, 255, 0.45) 320deg,
|
|
55
|
+
rgba(255, 255, 255, 0.80) 360deg
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
/* Inner specular highlight — レンズ上端の白い光 */
|
|
59
|
+
--glass-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.60),
|
|
60
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.08);
|
|
61
|
+
|
|
62
|
+
/* Shadow — ガラスを浮かせる影 */
|
|
63
|
+
--glass-shadow-sm: 0 4px 16px rgba(0, 0, 0, 0.08),
|
|
64
|
+
0 1px 4px rgba(0, 0, 0, 0.05);
|
|
65
|
+
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.12),
|
|
66
|
+
0 2px 8px rgba(0, 0, 0, 0.06);
|
|
67
|
+
--glass-shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.16),
|
|
68
|
+
0 4px 12px rgba(0, 0, 0, 0.08);
|
|
69
|
+
|
|
70
|
+
/* Overlay blur — モーダル背景の軽いすりガラス */
|
|
71
|
+
--glass-overlay-bg: rgba(0, 0, 0, 0.15);
|
|
72
|
+
--glass-overlay-blur: blur(8px);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* ─── Dark mode overrides ─── */
|
|
76
|
+
.dark {
|
|
77
|
+
--glass-blur-sm: blur(14px) saturate(1.5) brightness(0.95);
|
|
78
|
+
--glass-blur: blur(28px) saturate(1.6) brightness(0.92);
|
|
79
|
+
--glass-blur-lg: blur(56px) saturate(1.7) brightness(0.90);
|
|
80
|
+
--glass-bg: rgba(20, 20, 30, 0.35);
|
|
81
|
+
--glass-bg-subtle: rgba(20, 20, 30, 0.20);
|
|
82
|
+
--glass-bg-medium: rgba(20, 20, 30, 0.50);
|
|
83
|
+
--glass-bg-strong: rgba(20, 20, 30, 0.70);
|
|
84
|
+
--glass-bg-dark: rgba(0, 0, 10, 0.45);
|
|
85
|
+
--glass-border: rgba(255, 255, 255, 0.18);
|
|
86
|
+
--glass-border-dark: rgba(255, 255, 255, 0.08);
|
|
87
|
+
--glass-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.20),
|
|
88
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.04);
|
|
89
|
+
--glass-rim: conic-gradient(
|
|
90
|
+
from 0deg,
|
|
91
|
+
rgba(255, 255, 255, 0.38) 0deg,
|
|
92
|
+
rgba(170, 210, 255, 0.18) 40deg,
|
|
93
|
+
rgba(255, 255, 255, 0.08) 75deg,
|
|
94
|
+
rgba(255, 255, 255, 0.03) 120deg,
|
|
95
|
+
rgba(255, 215, 185, 0.12) 162deg,
|
|
96
|
+
rgba(255, 255, 255, 0.20) 180deg,
|
|
97
|
+
rgba(255, 215, 185, 0.12) 198deg,
|
|
98
|
+
rgba(255, 255, 255, 0.03) 240deg,
|
|
99
|
+
rgba(170, 210, 255, 0.18) 320deg,
|
|
100
|
+
rgba(255, 255, 255, 0.38) 360deg
|
|
101
|
+
);
|
|
102
|
+
--glass-overlay-bg: rgba(0, 0, 0, 0.40);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* ─── ユーティリティクラス ─── */
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* .glass
|
|
109
|
+
* 標準ガラス素材。ナビゲーションバー・ツールバー・ピルボタンに。
|
|
110
|
+
*/
|
|
111
|
+
.glass {
|
|
112
|
+
background: var(--glass-bg);
|
|
113
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
114
|
+
backdrop-filter: var(--glass-blur);
|
|
115
|
+
border: 0.5px solid var(--glass-border);
|
|
116
|
+
box-shadow: var(--glass-highlight), var(--glass-shadow);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* .glass-subtle
|
|
121
|
+
* 薄いガラス素材。フローティング要素の背景に軽く使う。
|
|
122
|
+
*/
|
|
123
|
+
.glass-subtle {
|
|
124
|
+
background: var(--glass-bg-subtle);
|
|
125
|
+
-webkit-backdrop-filter: var(--glass-blur-sm);
|
|
126
|
+
backdrop-filter: var(--glass-blur-sm);
|
|
127
|
+
border: 0.5px solid rgba(255, 255, 255, 0.22);
|
|
128
|
+
box-shadow: var(--glass-shadow-sm);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* .glass-medium
|
|
133
|
+
* 中程度ガラス。シート・カードのヘッダー部分等。
|
|
134
|
+
*/
|
|
135
|
+
.glass-medium {
|
|
136
|
+
background: var(--glass-bg-medium);
|
|
137
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
138
|
+
backdrop-filter: var(--glass-blur);
|
|
139
|
+
border: 0.5px solid var(--glass-border);
|
|
140
|
+
box-shadow: var(--glass-highlight), var(--glass-shadow);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* .glass-strong
|
|
145
|
+
* 濃いガラス。アクションシート・確認ダイアログ等の可読性が必要な場面。
|
|
146
|
+
*/
|
|
147
|
+
.glass-strong {
|
|
148
|
+
background: var(--glass-bg-strong);
|
|
149
|
+
-webkit-backdrop-filter: var(--glass-blur-lg);
|
|
150
|
+
backdrop-filter: var(--glass-blur-lg);
|
|
151
|
+
border: 0.5px solid var(--glass-border);
|
|
152
|
+
box-shadow: var(--glass-highlight), var(--glass-shadow-lg);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* .glass-dark
|
|
157
|
+
* ダークコンテンツ上用ガラス(グラデーション・写真上に重ねる)。
|
|
158
|
+
*/
|
|
159
|
+
.glass-dark {
|
|
160
|
+
background: var(--glass-bg-dark);
|
|
161
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
162
|
+
backdrop-filter: var(--glass-blur);
|
|
163
|
+
border: 0.5px solid var(--glass-border-dark);
|
|
164
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12),
|
|
165
|
+
0 8px 32px rgba(0, 0, 0, 0.28);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* .glass-clear
|
|
170
|
+
* Apple HIG のもう一つの素材バリアント「Clear」。フロストを最小限にして
|
|
171
|
+
* 背景のメディアを最大限透過させる。写真・動画・カラフルなアートワーク上の
|
|
172
|
+
* フローティングコントロール向け。
|
|
173
|
+
* - 可読性のため薄い暗色ディミングを内蔵(白文字前提で使う)
|
|
174
|
+
* - レンズ感はリム頼みなので .glass-specular 併用を推奨
|
|
175
|
+
*/
|
|
176
|
+
.glass-clear {
|
|
177
|
+
background: rgba(15, 15, 20, 0.14);
|
|
178
|
+
-webkit-backdrop-filter: blur(6px) saturate(1.6) brightness(1.05);
|
|
179
|
+
backdrop-filter: blur(6px) saturate(1.6) brightness(1.05);
|
|
180
|
+
border: 0.5px solid rgba(255, 255, 255, 0.35);
|
|
181
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.30),
|
|
182
|
+
var(--glass-shadow-sm);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.dark .glass-clear {
|
|
186
|
+
background: rgba(5, 5, 10, 0.25);
|
|
187
|
+
border-color: rgba(255, 255, 255, 0.18);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* .glass-overlay
|
|
192
|
+
* モーダル背景。真っ暗なスクリムの代わりに軽くすりガラス風にぼかす。
|
|
193
|
+
*/
|
|
194
|
+
.glass-overlay {
|
|
195
|
+
background: var(--glass-overlay-bg);
|
|
196
|
+
-webkit-backdrop-filter: var(--glass-overlay-blur);
|
|
197
|
+
backdrop-filter: var(--glass-overlay-blur);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* .glass-accent
|
|
202
|
+
* ブランドカラーを帯びたガラス素材。FAB・主要アクションのフローティング要素に。
|
|
203
|
+
* --Brand-Primary を低透明度で重ねることで、テーマカラーに追従する。
|
|
204
|
+
*/
|
|
205
|
+
.glass-accent {
|
|
206
|
+
background: color-mix(in srgb, var(--Brand-Primary) 15%, rgba(255, 255, 255, 0.12));
|
|
207
|
+
-webkit-backdrop-filter: var(--glass-blur);
|
|
208
|
+
backdrop-filter: var(--glass-blur);
|
|
209
|
+
border: 0.5px solid color-mix(in srgb, var(--Brand-Primary) 30%, rgba(255, 255, 255, 0.30));
|
|
210
|
+
box-shadow: var(--glass-highlight), var(--glass-shadow),
|
|
211
|
+
inset 0 0 0 0.5px color-mix(in srgb, var(--Brand-Primary) 20%, transparent);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.dark .glass-accent {
|
|
215
|
+
background: color-mix(in srgb, var(--Brand-Primary) 20%, rgba(20, 20, 30, 0.40));
|
|
216
|
+
border: 0.5px solid color-mix(in srgb, var(--Brand-Primary) 25%, rgba(255, 255, 255, 0.15));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ─── Specular + rim layer (::before / ::after) ─── */
|
|
220
|
+
/**
|
|
221
|
+
* .glass-specular
|
|
222
|
+
* Liquid Glass の「レンズ感」を追加するヘルパー。2 層で構成:
|
|
223
|
+
* ::before — レンズ上面のスペキュラ(上部の楕円シーン + 下部の淡い
|
|
224
|
+
* 内部反射 + 縁内側の拡散光)。コンテンツの下に敷く。
|
|
225
|
+
* ::after — エッジの屈折リム(--glass-rim の conic リング、太さ
|
|
226
|
+
* --glass-rim-width)。光はガラス表面で反射するため
|
|
227
|
+
* コンテンツより上に重ねる(1px なので操作は阻害しない)。
|
|
228
|
+
*/
|
|
229
|
+
.glass-specular {
|
|
230
|
+
/*
|
|
231
|
+
* Establish a containing block for the ::before highlight.
|
|
232
|
+
* We use `isolation: isolate` instead of `position: relative` so the
|
|
233
|
+
* sheet can stay `position: fixed` when needed (the `.fixed` utility
|
|
234
|
+
* would otherwise be overridden by this rule's same-specificity
|
|
235
|
+
* later-in-stylesheet `position: relative`).
|
|
236
|
+
* Add `position: relative` only when there is no other positioning,
|
|
237
|
+
* via a fallback selector below.
|
|
238
|
+
*/
|
|
239
|
+
isolation: isolate;
|
|
240
|
+
overflow: hidden;
|
|
241
|
+
}
|
|
242
|
+
/*
|
|
243
|
+
* Fallback: if the element is not already positioned (fixed/absolute/sticky),
|
|
244
|
+
* fall back to position: relative so the ::before still anchors correctly.
|
|
245
|
+
*/
|
|
246
|
+
.glass-specular:not(.fixed):not(.absolute):not(.sticky) {
|
|
247
|
+
position: relative;
|
|
248
|
+
}
|
|
249
|
+
.glass-specular::before {
|
|
250
|
+
content: '';
|
|
251
|
+
position: absolute;
|
|
252
|
+
inset: 0;
|
|
253
|
+
border-radius: inherit;
|
|
254
|
+
background:
|
|
255
|
+
radial-gradient(
|
|
256
|
+
140% 95% at 25% -20%,
|
|
257
|
+
rgba(255, 255, 255, 0.36) 0%,
|
|
258
|
+
rgba(255, 255, 255, 0.07) 45%,
|
|
259
|
+
transparent 70%
|
|
260
|
+
),
|
|
261
|
+
radial-gradient(
|
|
262
|
+
120% 65% at 75% 115%,
|
|
263
|
+
rgba(255, 255, 255, 0.16) 0%,
|
|
264
|
+
transparent 55%
|
|
265
|
+
);
|
|
266
|
+
/* 縁の内側に光が拡散して溜まる表現(屈折の擬似) */
|
|
267
|
+
box-shadow:
|
|
268
|
+
inset 0 0 14px rgba(255, 255, 255, 0.09),
|
|
269
|
+
inset 0 -10px 22px -14px rgba(255, 255, 255, 0.45);
|
|
270
|
+
pointer-events: none;
|
|
271
|
+
z-index: 0;
|
|
272
|
+
}
|
|
273
|
+
.dark .glass-specular::before {
|
|
274
|
+
opacity: 0.55;
|
|
275
|
+
}
|
|
276
|
+
.glass-specular::after {
|
|
277
|
+
content: '';
|
|
278
|
+
position: absolute;
|
|
279
|
+
inset: 0;
|
|
280
|
+
border-radius: inherit;
|
|
281
|
+
padding: var(--glass-rim-width);
|
|
282
|
+
background: var(--glass-rim);
|
|
283
|
+
/* padding 部分だけ残すリング状マスク(gradient border の定石) */
|
|
284
|
+
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
|
285
|
+
-webkit-mask-composite: xor;
|
|
286
|
+
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
|
287
|
+
mask-composite: exclude;
|
|
288
|
+
/* リング部分だけ背景を増光サンプリングし、縁が背景色を拾って光る
|
|
289
|
+
「光を導くガラスの切断面」を作る(マスクが backdrop-filter の適用域も
|
|
290
|
+
リングに限定する = progressive blur と同じ原理)。非対応環境では
|
|
291
|
+
conic リムだけが残るので安全に劣化する */
|
|
292
|
+
-webkit-backdrop-filter: blur(4px) saturate(1.8) brightness(1.55);
|
|
293
|
+
backdrop-filter: blur(4px) saturate(1.8) brightness(1.55);
|
|
294
|
+
pointer-events: none;
|
|
295
|
+
z-index: 2;
|
|
296
|
+
}
|
|
297
|
+
.dark .glass-specular::after {
|
|
298
|
+
-webkit-backdrop-filter: blur(4px) saturate(1.6) brightness(1.25);
|
|
299
|
+
backdrop-filter: blur(4px) saturate(1.6) brightness(1.25);
|
|
300
|
+
}
|
|
301
|
+
/*
|
|
302
|
+
* フロー内の子をレンズ層の間(::before z0 の上 / ::after z2 の下)へ持ち上げる。
|
|
303
|
+
* 絶対配置の子(オーバーレイの × 閉じるボタン等)は consumer 側の position /
|
|
304
|
+
* z-index を尊重して除外する — コンテナ自身の :not(.fixed):not(.absolute)
|
|
305
|
+
* :not(.sticky) と同じパターン。
|
|
306
|
+
*
|
|
307
|
+
* 除外しないと回帰が起きる: glass.css は consumer 側で「非レイヤー CSS」として
|
|
308
|
+
* 読まれ、@layer utilities 内の Tailwind `absolute` / `z-*` をカスケードで
|
|
309
|
+
* 踏み潰す(unlayered > layered)。すると絶対配置オーバーレイが relative 化して
|
|
310
|
+
* `right-*` が相対オフセットになり、要素が角からはみ出す(yokoku-app の詳細
|
|
311
|
+
* ドロワー × ボタンが PC で左上角の外へ流れた実害、2026-06)。
|
|
312
|
+
*/
|
|
313
|
+
.glass-specular > *:not(.absolute):not(.fixed):not(.sticky) {
|
|
314
|
+
position: relative;
|
|
315
|
+
z-index: 1;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/* ─── Reduced-transparency fallback ─── */
|
|
319
|
+
/**
|
|
320
|
+
* アクセシビリティ: ユーザーが「透明度を下げる」を有効にしている場合、
|
|
321
|
+
* backdrop-filter を無効化して不透明な背景にフォールバックする。
|
|
322
|
+
*/
|
|
323
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
324
|
+
.glass,
|
|
325
|
+
.glass-subtle,
|
|
326
|
+
.glass-medium,
|
|
327
|
+
.glass-strong,
|
|
328
|
+
.glass-dark,
|
|
329
|
+
.glass-clear,
|
|
330
|
+
.glass-accent {
|
|
331
|
+
-webkit-backdrop-filter: none;
|
|
332
|
+
backdrop-filter: none;
|
|
333
|
+
background: var(--Surface-Primary);
|
|
334
|
+
border-color: var(--Border-Low-Emphasis);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/* 白文字前提のガラスは白背景に落とすとコントラストが消えるため、
|
|
338
|
+
不透明の暗色サーフェスにフォールバックする */
|
|
339
|
+
.glass-dark,
|
|
340
|
+
.glass-clear {
|
|
341
|
+
background: var(--Surface-Inverse);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.dark .glass,
|
|
345
|
+
.dark .glass-subtle,
|
|
346
|
+
.dark .glass-medium,
|
|
347
|
+
.dark .glass-strong,
|
|
348
|
+
.dark .glass-dark,
|
|
349
|
+
.dark .glass-clear,
|
|
350
|
+
.dark .glass-accent {
|
|
351
|
+
background: var(--Surface-Inverse);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/* スペキュラ・リムの装飾層も透明表現の一部なので無効化 */
|
|
355
|
+
.glass-specular::before,
|
|
356
|
+
.glass-specular::after {
|
|
357
|
+
display: none;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.glass-overlay {
|
|
361
|
+
-webkit-backdrop-filter: none;
|
|
362
|
+
backdrop-filter: none;
|
|
363
|
+
background: rgba(0, 0, 0, 0.6);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* =============================================================
|
|
2
|
+
KSK Design System — Primitive Color Tokens
|
|
3
|
+
|
|
4
|
+
Layer 1: 原色パレット
|
|
5
|
+
テーマファイル(src/themes/*.css)で Brand 色を上書きすることで
|
|
6
|
+
全セマンティックトークンが自動的に切り替わる。
|
|
7
|
+
|
|
8
|
+
ベースパレットはニュートラル(Gray, Red, Green, Blue 等)を定義し、
|
|
9
|
+
ブランドカラーはデフォルトテーマ(Blue)を初期値として設定する。
|
|
10
|
+
============================================================= */
|
|
11
|
+
|
|
12
|
+
@theme {
|
|
13
|
+
/* ─── Brand(テーマ差し替え対象) ─── */
|
|
14
|
+
--Primitive-Brand-50: #EFF6FF;
|
|
15
|
+
--Primitive-Brand-100: #DBEAFE;
|
|
16
|
+
--Primitive-Brand-200: #BFDBFE;
|
|
17
|
+
--Primitive-Brand-300: #93C5FD;
|
|
18
|
+
--Primitive-Brand-400: #60A5FA;
|
|
19
|
+
--Primitive-Brand-500: #3B82F6;
|
|
20
|
+
--Primitive-Brand-600: #2563EB;
|
|
21
|
+
--Primitive-Brand-700: #1D4ED8;
|
|
22
|
+
--Primitive-Brand-800: #1E40AF;
|
|
23
|
+
--Primitive-Brand-900: #1E3A8A;
|
|
24
|
+
|
|
25
|
+
/* ─── Gray ─── */
|
|
26
|
+
--Primitive-Gray-50: #F9FAFB;
|
|
27
|
+
--Primitive-Gray-100: #F3F4F6;
|
|
28
|
+
--Primitive-Gray-200: #E5E7EB;
|
|
29
|
+
--Primitive-Gray-300: #D1D5DB;
|
|
30
|
+
--Primitive-Gray-400: #9CA3AF;
|
|
31
|
+
--Primitive-Gray-500: #6B7280;
|
|
32
|
+
--Primitive-Gray-600: #4B5563;
|
|
33
|
+
--Primitive-Gray-700: #374151;
|
|
34
|
+
--Primitive-Gray-800: #1F2937;
|
|
35
|
+
--Primitive-Gray-900: #111827;
|
|
36
|
+
|
|
37
|
+
/* ─── Red(Caution / Destructive) ─── */
|
|
38
|
+
--Primitive-Red-50: #FEF2F2;
|
|
39
|
+
--Primitive-Red-100: #FEE2E2;
|
|
40
|
+
--Primitive-Red-200: #FECACA;
|
|
41
|
+
--Primitive-Red-300: #FCA5A5;
|
|
42
|
+
--Primitive-Red-400: #F87171;
|
|
43
|
+
--Primitive-Red-500: #EF4444;
|
|
44
|
+
--Primitive-Red-600: #DC2626;
|
|
45
|
+
--Primitive-Red-700: #B91C1C;
|
|
46
|
+
--Primitive-Red-800: #991B1B;
|
|
47
|
+
--Primitive-Red-900: #7F1D1D;
|
|
48
|
+
|
|
49
|
+
/* ─── Orange(Warning) ─── */
|
|
50
|
+
--Primitive-Orange-50: #FFF7ED;
|
|
51
|
+
--Primitive-Orange-100: #FFEDD5;
|
|
52
|
+
--Primitive-Orange-200: #FED7AA;
|
|
53
|
+
--Primitive-Orange-300: #FDBA74;
|
|
54
|
+
--Primitive-Orange-400: #FB923C;
|
|
55
|
+
--Primitive-Orange-500: #F97316;
|
|
56
|
+
--Primitive-Orange-600: #EA580C;
|
|
57
|
+
--Primitive-Orange-700: #C2410C;
|
|
58
|
+
--Primitive-Orange-800: #9A3412;
|
|
59
|
+
--Primitive-Orange-900: #7C2D12;
|
|
60
|
+
|
|
61
|
+
/* ─── Amber ─── */
|
|
62
|
+
--Primitive-Amber-50: #FFFBEB;
|
|
63
|
+
--Primitive-Amber-100: #FEF3C7;
|
|
64
|
+
--Primitive-Amber-200: #FDE68A;
|
|
65
|
+
--Primitive-Amber-300: #FCD34D;
|
|
66
|
+
--Primitive-Amber-400: #FBBF24;
|
|
67
|
+
--Primitive-Amber-500: #F59E0B;
|
|
68
|
+
--Primitive-Amber-600: #D97706;
|
|
69
|
+
--Primitive-Amber-700: #B45309;
|
|
70
|
+
--Primitive-Amber-800: #92400E;
|
|
71
|
+
--Primitive-Amber-900: #78350F;
|
|
72
|
+
|
|
73
|
+
/* ─── Green(Success) ─── */
|
|
74
|
+
--Primitive-Green-50: #F0FDF4;
|
|
75
|
+
--Primitive-Green-100: #DCFCE7;
|
|
76
|
+
--Primitive-Green-200: #BBF7D0;
|
|
77
|
+
--Primitive-Green-300: #86EFAC;
|
|
78
|
+
--Primitive-Green-400: #4ADE80;
|
|
79
|
+
--Primitive-Green-500: #22C55E;
|
|
80
|
+
--Primitive-Green-600: #16A34A;
|
|
81
|
+
--Primitive-Green-700: #15803D;
|
|
82
|
+
--Primitive-Green-800: #166534;
|
|
83
|
+
--Primitive-Green-900: #14532D;
|
|
84
|
+
|
|
85
|
+
/* ─── Teal ─── */
|
|
86
|
+
--Primitive-Teal-50: #F0FDFA;
|
|
87
|
+
--Primitive-Teal-100: #CCFBF1;
|
|
88
|
+
--Primitive-Teal-200: #99F6E4;
|
|
89
|
+
--Primitive-Teal-300: #5EEAD4;
|
|
90
|
+
--Primitive-Teal-400: #2DD4BF;
|
|
91
|
+
--Primitive-Teal-500: #14B8A6;
|
|
92
|
+
--Primitive-Teal-600: #0D9488;
|
|
93
|
+
--Primitive-Teal-700: #0F766E;
|
|
94
|
+
--Primitive-Teal-800: #115E59;
|
|
95
|
+
--Primitive-Teal-900: #134E4A;
|
|
96
|
+
|
|
97
|
+
/* ─── Blue(Info) ─── */
|
|
98
|
+
--Primitive-Blue-50: #EFF6FF;
|
|
99
|
+
--Primitive-Blue-100: #DBEAFE;
|
|
100
|
+
--Primitive-Blue-200: #BFDBFE;
|
|
101
|
+
--Primitive-Blue-300: #93C5FD;
|
|
102
|
+
--Primitive-Blue-400: #60A5FA;
|
|
103
|
+
--Primitive-Blue-500: #3B82F6;
|
|
104
|
+
--Primitive-Blue-600: #2563EB;
|
|
105
|
+
--Primitive-Blue-700: #1D4ED8;
|
|
106
|
+
--Primitive-Blue-800: #1E40AF;
|
|
107
|
+
--Primitive-Blue-900: #1E3A8A;
|
|
108
|
+
|
|
109
|
+
/* ─── Violet ─── */
|
|
110
|
+
--Primitive-Violet-50: #F5F3FF;
|
|
111
|
+
--Primitive-Violet-100: #EDE9FE;
|
|
112
|
+
--Primitive-Violet-200: #DDD6FE;
|
|
113
|
+
--Primitive-Violet-300: #C4B5FD;
|
|
114
|
+
--Primitive-Violet-400: #A78BFA;
|
|
115
|
+
--Primitive-Violet-500: #8B5CF6;
|
|
116
|
+
--Primitive-Violet-600: #7C3AED;
|
|
117
|
+
--Primitive-Violet-700: #6D28D9;
|
|
118
|
+
--Primitive-Violet-800: #5B21B6;
|
|
119
|
+
--Primitive-Violet-900: #4C1D95;
|
|
120
|
+
|
|
121
|
+
/* ─── Pink ─── */
|
|
122
|
+
--Primitive-Pink-50: #FDF2F8;
|
|
123
|
+
--Primitive-Pink-100: #FCE7F3;
|
|
124
|
+
--Primitive-Pink-200: #FBCFE8;
|
|
125
|
+
--Primitive-Pink-300: #F9A8D4;
|
|
126
|
+
--Primitive-Pink-400: #F472B6;
|
|
127
|
+
--Primitive-Pink-500: #EC4899;
|
|
128
|
+
--Primitive-Pink-600: #DB2777;
|
|
129
|
+
--Primitive-Pink-700: #BE185D;
|
|
130
|
+
--Primitive-Pink-800: #9D174D;
|
|
131
|
+
--Primitive-Pink-900: #831843;
|
|
132
|
+
|
|
133
|
+
/* ─── Alpha(透過) ─── */
|
|
134
|
+
--Primitive-Gray-Alpha-50: rgba(17, 24, 39, 0.02);
|
|
135
|
+
--Primitive-Gray-Alpha-100: rgba(17, 24, 39, 0.04);
|
|
136
|
+
--Primitive-Gray-Alpha-200: rgba(17, 24, 39, 0.08);
|
|
137
|
+
--Primitive-Gray-Alpha-300: rgba(17, 24, 39, 0.12);
|
|
138
|
+
--Primitive-Gray-Alpha-400: rgba(17, 24, 39, 0.16);
|
|
139
|
+
--Primitive-Gray-Alpha-500: rgba(17, 24, 39, 0.24);
|
|
140
|
+
--Primitive-Gray-Alpha-600: rgba(17, 24, 39, 0.36);
|
|
141
|
+
--Primitive-Gray-Alpha-700: rgba(17, 24, 39, 0.48);
|
|
142
|
+
--Primitive-Gray-Alpha-800: rgba(17, 24, 39, 0.64);
|
|
143
|
+
--Primitive-Gray-Alpha-900: rgba(17, 24, 39, 0.80);
|
|
144
|
+
--Primitive-Gray-Alpha-1000: rgba(17, 24, 39, 0.92);
|
|
145
|
+
|
|
146
|
+
--Primitive-White-Alpha-50: rgba(255, 255, 255, 0.02);
|
|
147
|
+
--Primitive-White-Alpha-100: rgba(255, 255, 255, 0.04);
|
|
148
|
+
--Primitive-White-Alpha-200: rgba(255, 255, 255, 0.08);
|
|
149
|
+
--Primitive-White-Alpha-300: rgba(255, 255, 255, 0.16);
|
|
150
|
+
--Primitive-White-Alpha-400: rgba(255, 255, 255, 0.24);
|
|
151
|
+
--Primitive-White-Alpha-500: rgba(255, 255, 255, 0.36);
|
|
152
|
+
--Primitive-White-Alpha-600: rgba(255, 255, 255, 0.48);
|
|
153
|
+
--Primitive-White-Alpha-700: rgba(255, 255, 255, 0.64);
|
|
154
|
+
--Primitive-White-Alpha-800: rgba(255, 255, 255, 0.80);
|
|
155
|
+
--Primitive-White-Alpha-900: rgba(255, 255, 255, 0.92);
|
|
156
|
+
--Primitive-White-Alpha-1000: rgba(255, 255, 255, 1.00);
|
|
157
|
+
|
|
158
|
+
/* ─── 純色 ─── */
|
|
159
|
+
--Primitive-White: #FFFFFF;
|
|
160
|
+
--Primitive-Black: #000000;
|
|
161
|
+
}
|