code-abyss 1.6.16 → 1.7.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.
Files changed (97) hide show
  1. package/README.md +8 -6
  2. package/bin/install.js +59 -163
  3. package/bin/lib/ccline.js +82 -0
  4. package/bin/lib/utils.js +61 -0
  5. package/package.json +5 -2
  6. package/skills/SKILL.md +24 -16
  7. package/skills/domains/ai/SKILL.md +2 -2
  8. package/skills/domains/ai/prompt-and-eval.md +279 -0
  9. package/skills/domains/architecture/SKILL.md +2 -3
  10. package/skills/domains/architecture/security-arch.md +87 -0
  11. package/skills/domains/data-engineering/SKILL.md +188 -26
  12. package/skills/domains/development/SKILL.md +1 -4
  13. package/skills/domains/devops/SKILL.md +3 -5
  14. package/skills/domains/devops/performance.md +63 -0
  15. package/skills/domains/devops/testing.md +97 -0
  16. package/skills/domains/frontend-design/SKILL.md +12 -3
  17. package/skills/domains/frontend-design/claymorphism/SKILL.md +117 -0
  18. package/skills/domains/frontend-design/claymorphism/references/tokens.css +52 -0
  19. package/skills/domains/frontend-design/engineering.md +287 -0
  20. package/skills/domains/frontend-design/glassmorphism/SKILL.md +138 -0
  21. package/skills/domains/frontend-design/glassmorphism/references/tokens.css +32 -0
  22. package/skills/domains/frontend-design/liquid-glass/SKILL.md +135 -0
  23. package/skills/domains/frontend-design/liquid-glass/references/tokens.css +81 -0
  24. package/skills/domains/frontend-design/neubrutalism/SKILL.md +141 -0
  25. package/skills/domains/frontend-design/neubrutalism/references/tokens.css +44 -0
  26. package/skills/domains/infrastructure/SKILL.md +174 -34
  27. package/skills/domains/mobile/SKILL.md +211 -21
  28. package/skills/domains/orchestration/SKILL.md +1 -0
  29. package/skills/domains/security/SKILL.md +4 -6
  30. package/skills/domains/security/blue-team.md +57 -0
  31. package/skills/domains/security/red-team.md +54 -0
  32. package/skills/domains/security/threat-intel.md +50 -0
  33. package/skills/orchestration/multi-agent/SKILL.md +195 -46
  34. package/skills/run_skill.js +139 -0
  35. package/skills/tools/gen-docs/SKILL.md +6 -4
  36. package/skills/tools/gen-docs/scripts/doc_generator.js +363 -0
  37. package/skills/tools/lib/shared.js +98 -0
  38. package/skills/tools/verify-change/SKILL.md +8 -6
  39. package/skills/tools/verify-change/scripts/change_analyzer.js +289 -0
  40. package/skills/tools/verify-module/SKILL.md +6 -4
  41. package/skills/tools/verify-module/scripts/module_scanner.js +171 -0
  42. package/skills/tools/verify-quality/SKILL.md +5 -3
  43. package/skills/tools/verify-quality/scripts/quality_checker.js +337 -0
  44. package/skills/tools/verify-security/SKILL.md +7 -5
  45. package/skills/tools/verify-security/scripts/security_scanner.js +283 -0
  46. package/skills/__pycache__/run_skill.cpython-312.pyc +0 -0
  47. package/skills/domains/COVERAGE_PLAN.md +0 -232
  48. package/skills/domains/ai/model-evaluation.md +0 -790
  49. package/skills/domains/ai/prompt-engineering.md +0 -703
  50. package/skills/domains/architecture/compliance.md +0 -299
  51. package/skills/domains/architecture/data-security.md +0 -184
  52. package/skills/domains/data-engineering/data-pipeline.md +0 -762
  53. package/skills/domains/data-engineering/data-quality.md +0 -894
  54. package/skills/domains/data-engineering/stream-processing.md +0 -791
  55. package/skills/domains/development/dart.md +0 -963
  56. package/skills/domains/development/kotlin.md +0 -834
  57. package/skills/domains/development/php.md +0 -659
  58. package/skills/domains/development/swift.md +0 -755
  59. package/skills/domains/devops/e2e-testing.md +0 -914
  60. package/skills/domains/devops/performance-testing.md +0 -734
  61. package/skills/domains/devops/testing-strategy.md +0 -667
  62. package/skills/domains/frontend-design/build-tools.md +0 -743
  63. package/skills/domains/frontend-design/performance.md +0 -734
  64. package/skills/domains/frontend-design/testing.md +0 -699
  65. package/skills/domains/infrastructure/gitops.md +0 -735
  66. package/skills/domains/infrastructure/iac.md +0 -855
  67. package/skills/domains/infrastructure/kubernetes.md +0 -1018
  68. package/skills/domains/mobile/android-dev.md +0 -979
  69. package/skills/domains/mobile/cross-platform.md +0 -795
  70. package/skills/domains/mobile/ios-dev.md +0 -931
  71. package/skills/domains/security/secrets-management.md +0 -834
  72. package/skills/domains/security/supply-chain.md +0 -931
  73. package/skills/domains/security/threat-modeling.md +0 -828
  74. package/skills/run_skill.py +0 -153
  75. package/skills/tests/README.md +0 -225
  76. package/skills/tests/SUMMARY.md +0 -362
  77. package/skills/tests/__init__.py +0 -3
  78. package/skills/tests/__pycache__/test_change_analyzer.cpython-312.pyc +0 -0
  79. package/skills/tests/__pycache__/test_doc_generator.cpython-312.pyc +0 -0
  80. package/skills/tests/__pycache__/test_module_scanner.cpython-312.pyc +0 -0
  81. package/skills/tests/__pycache__/test_quality_checker.cpython-312.pyc +0 -0
  82. package/skills/tests/__pycache__/test_security_scanner.cpython-312.pyc +0 -0
  83. package/skills/tests/test_change_analyzer.py +0 -558
  84. package/skills/tests/test_doc_generator.py +0 -538
  85. package/skills/tests/test_module_scanner.py +0 -376
  86. package/skills/tests/test_quality_checker.py +0 -516
  87. package/skills/tests/test_security_scanner.py +0 -426
  88. package/skills/tools/gen-docs/scripts/__pycache__/doc_generator.cpython-312.pyc +0 -0
  89. package/skills/tools/gen-docs/scripts/doc_generator.py +0 -520
  90. package/skills/tools/verify-change/scripts/__pycache__/change_analyzer.cpython-312.pyc +0 -0
  91. package/skills/tools/verify-change/scripts/change_analyzer.py +0 -529
  92. package/skills/tools/verify-module/scripts/__pycache__/module_scanner.cpython-312.pyc +0 -0
  93. package/skills/tools/verify-module/scripts/module_scanner.py +0 -321
  94. package/skills/tools/verify-quality/scripts/__pycache__/quality_checker.cpython-312.pyc +0 -0
  95. package/skills/tools/verify-quality/scripts/quality_checker.py +0 -481
  96. package/skills/tools/verify-security/scripts/__pycache__/security_scanner.cpython-312.pyc +0 -0
  97. package/skills/tools/verify-security/scripts/security_scanner.py +0 -374
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: glassmorphism
3
+ description: Glassmorphism design system skill. Use when building frosted-glass UI components with blur, transparency, and layered depth effects.
4
+ license: MIT
5
+ ---
6
+
7
+ # Glassmorphism Design Spec
8
+
9
+ ## 4 Core Elements
10
+
11
+ 1. **Transparency** — Semi-transparent backgrounds using `rgba()` or `hsla()` with alpha `0.05–0.4`
12
+ 2. **Blur** — `backdrop-filter: blur()` ranging 8–40px for frosted-glass effect
13
+ 3. **Border** — Subtle semi-transparent borders (`1px solid rgba(255,255,255,0.18)`) to define edges
14
+ 4. **Shadow** — Soft layered `box-shadow` for depth separation from background
15
+
16
+ ## CSS Tokens
17
+
18
+ Reference: [references/tokens.css](references/tokens.css)
19
+
20
+ Use CSS custom properties from `tokens.css` for consistent theming:
21
+
22
+ ```css
23
+ @import 'references/tokens.css';
24
+
25
+ .glass-card {
26
+ background: var(--glass-bg);
27
+ backdrop-filter: var(--glass-blur);
28
+ -webkit-backdrop-filter: var(--glass-blur);
29
+ border: var(--glass-border);
30
+ border-radius: var(--glass-radius);
31
+ box-shadow: var(--glass-shadow);
32
+ }
33
+ ```
34
+
35
+ ## Component Examples
36
+
37
+ ### Card
38
+ ```css
39
+ .glass-card {
40
+ background: var(--glass-bg);
41
+ backdrop-filter: var(--glass-blur);
42
+ -webkit-backdrop-filter: var(--glass-blur);
43
+ border: var(--glass-border);
44
+ border-radius: var(--glass-radius);
45
+ box-shadow: var(--glass-shadow);
46
+ padding: 1.5rem;
47
+ }
48
+ ```
49
+
50
+ ### Navbar
51
+ ```css
52
+ .glass-nav {
53
+ background: var(--glass-bg-heavy);
54
+ backdrop-filter: var(--glass-blur-strong);
55
+ -webkit-backdrop-filter: var(--glass-blur-strong);
56
+ border-bottom: var(--glass-border);
57
+ box-shadow: var(--glass-shadow);
58
+ position: sticky;
59
+ top: 0;
60
+ z-index: 100;
61
+ }
62
+ ```
63
+
64
+ ### Modal Overlay
65
+ ```css
66
+ .glass-modal-backdrop {
67
+ background: rgba(0, 0, 0, 0.4);
68
+ backdrop-filter: blur(4px);
69
+ }
70
+ .glass-modal {
71
+ background: var(--glass-bg-heavy);
72
+ backdrop-filter: var(--glass-blur-strong);
73
+ -webkit-backdrop-filter: var(--glass-blur-strong);
74
+ border: var(--glass-border);
75
+ border-radius: var(--glass-radius-lg);
76
+ box-shadow: var(--glass-shadow-elevated);
77
+ }
78
+ ```
79
+
80
+ ### Button
81
+ ```css
82
+ .glass-btn {
83
+ background: var(--glass-bg-light);
84
+ backdrop-filter: var(--glass-blur-light);
85
+ -webkit-backdrop-filter: var(--glass-blur-light);
86
+ border: var(--glass-border);
87
+ border-radius: var(--glass-radius);
88
+ transition: background 0.2s;
89
+ }
90
+ .glass-btn:hover {
91
+ background: var(--glass-bg);
92
+ }
93
+ ```
94
+
95
+ ## Browser Compatibility
96
+
97
+ | Feature | Chrome | Firefox | Safari | Edge |
98
+ |---------|--------|---------|--------|------|
99
+ | `backdrop-filter` | 76+ | 103+ | 9+ (`-webkit-`) | 79+ |
100
+ | `rgba()` backgrounds | All | All | All | All |
101
+
102
+ - Always include `-webkit-backdrop-filter` for Safari support
103
+ - Firefox <103: use `@supports` fallback with solid semi-transparent bg
104
+ - Fallback pattern:
105
+
106
+ ```css
107
+ .glass-card {
108
+ background: rgba(255, 255, 255, 0.85); /* fallback */
109
+ }
110
+ @supports (backdrop-filter: blur(1px)) {
111
+ .glass-card {
112
+ background: var(--glass-bg);
113
+ backdrop-filter: var(--glass-blur);
114
+ }
115
+ }
116
+ ```
117
+
118
+ ## Accessibility Notes
119
+
120
+ - Ensure **contrast ratio ≥ 4.5:1** for text over glass surfaces — test against all possible backgrounds
121
+ - Provide `prefers-reduced-transparency` media query to disable blur/transparency for users who need it
122
+ - Avoid placing critical text on highly transparent surfaces without a fallback
123
+ - Use `prefers-contrast: more` to increase border opacity and reduce transparency
124
+
125
+ ```css
126
+ @media (prefers-reduced-transparency: reduce) {
127
+ .glass-card {
128
+ background: rgba(255, 255, 255, 0.92);
129
+ backdrop-filter: none;
130
+ }
131
+ }
132
+ @media (prefers-contrast: more) {
133
+ .glass-card {
134
+ background: rgba(255, 255, 255, 0.85);
135
+ border: 1px solid rgba(0, 0, 0, 0.3);
136
+ }
137
+ }
138
+ ```
@@ -0,0 +1,32 @@
1
+ :root {
2
+ /* Backgrounds */
3
+ --glass-bg-light: rgba(255, 255, 255, 0.08);
4
+ --glass-bg: rgba(255, 255, 255, 0.15);
5
+ --glass-bg-heavy: rgba(255, 255, 255, 0.25);
6
+
7
+ /* Blur */
8
+ --glass-blur-light: blur(8px);
9
+ --glass-blur: blur(16px);
10
+ --glass-blur-strong: blur(32px);
11
+
12
+ /* Border */
13
+ --glass-border: 1px solid rgba(255, 255, 255, 0.18);
14
+
15
+ /* Radius */
16
+ --glass-radius: 12px;
17
+ --glass-radius-lg: 20px;
18
+
19
+ /* Shadow */
20
+ --glass-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
21
+ --glass-shadow-elevated: 0 8px 40px rgba(0, 0, 0, 0.15);
22
+ }
23
+
24
+ /* Dark theme overrides */
25
+ [data-theme="dark"] {
26
+ --glass-bg-light: rgba(255, 255, 255, 0.04);
27
+ --glass-bg: rgba(255, 255, 255, 0.08);
28
+ --glass-bg-heavy: rgba(255, 255, 255, 0.14);
29
+ --glass-border: 1px solid rgba(255, 255, 255, 0.12);
30
+ --glass-shadow: 0 4px 30px rgba(0, 0, 0, 0.3);
31
+ --glass-shadow-elevated: 0 8px 40px rgba(0, 0, 0, 0.4);
32
+ }
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: liquid-glass
3
+ description: Apple Liquid Glass design system. Use when building UI with translucent, depth-aware glass morphism following Apple's design language. Provides CSS tokens, component patterns, dark/light mode, and animation specs.
4
+ license: MIT
5
+ ---
6
+
7
+ # Liquid Glass Design System
8
+
9
+ Apple-inspired translucent glass UI with depth, refraction, and ambient light response.
10
+
11
+ ## Core Principles
12
+
13
+ 1. **Translucency** — Surfaces reveal layered content beneath via backdrop blur
14
+ 2. **Depth** — Elements float on distinct z-layers with realistic shadows
15
+ 3. **Ambient Response** — Glass tints shift based on underlying content color
16
+ 4. **Minimal Chrome** — Borders are subtle; shape and blur define boundaries
17
+ 5. **Motion** — Transitions feel physical: spring-based, with inertia
18
+
19
+ ## Usage
20
+
21
+ Import the token file in your CSS:
22
+
23
+ ```css
24
+ @import 'references/tokens.css';
25
+ ```
26
+
27
+ ## CSS Tokens Reference
28
+
29
+ All tokens are defined in `references/tokens.css`. Key categories:
30
+
31
+ | Category | Prefix | Example |
32
+ |---|---|---|
33
+ | Glass backgrounds | `--lg-bg-*` | `--lg-bg-primary` |
34
+ | Blur | `--lg-blur-*` | `--lg-blur-md` |
35
+ | Borders | `--lg-border-*` | `--lg-border-color` |
36
+ | Shadows | `--lg-shadow-*` | `--lg-shadow-elevated` |
37
+ | Radius | `--lg-radius-*` | `--lg-radius-lg` |
38
+ | Animation | `--lg-duration-*` | `--lg-duration-normal` |
39
+
40
+ ## Component Patterns
41
+
42
+ ### Glass Card
43
+
44
+ ```css
45
+ .glass-card {
46
+ background: var(--lg-bg-primary);
47
+ backdrop-filter: blur(var(--lg-blur-md));
48
+ -webkit-backdrop-filter: blur(var(--lg-blur-md));
49
+ border: 1px solid var(--lg-border-color);
50
+ border-radius: var(--lg-radius-lg);
51
+ box-shadow: var(--lg-shadow-elevated);
52
+ transition: transform var(--lg-duration-normal) var(--lg-easing-spring);
53
+ }
54
+
55
+ .glass-card:hover {
56
+ transform: translateY(-2px);
57
+ box-shadow: var(--lg-shadow-high);
58
+ }
59
+ ```
60
+
61
+ ### Glass Toolbar
62
+
63
+ ```css
64
+ .glass-toolbar {
65
+ background: var(--lg-bg-toolbar);
66
+ backdrop-filter: blur(var(--lg-blur-lg)) saturate(var(--lg-saturate));
67
+ -webkit-backdrop-filter: blur(var(--lg-blur-lg)) saturate(var(--lg-saturate));
68
+ border-bottom: 1px solid var(--lg-border-subtle);
69
+ }
70
+ ```
71
+
72
+ ### Glass Button
73
+
74
+ ```css
75
+ .glass-btn {
76
+ background: var(--lg-bg-interactive);
77
+ backdrop-filter: blur(var(--lg-blur-sm));
78
+ border: 1px solid var(--lg-border-color);
79
+ border-radius: var(--lg-radius-md);
80
+ transition: all var(--lg-duration-fast) var(--lg-easing-spring);
81
+ }
82
+
83
+ .glass-btn:active {
84
+ transform: scale(0.97);
85
+ background: var(--lg-bg-pressed);
86
+ }
87
+ ```
88
+
89
+ ### Glass Modal Overlay
90
+
91
+ ```css
92
+ .glass-overlay {
93
+ background: var(--lg-bg-scrim);
94
+ backdrop-filter: blur(var(--lg-blur-xl));
95
+ }
96
+
97
+ .glass-modal {
98
+ background: var(--lg-bg-elevated);
99
+ border: 1px solid var(--lg-border-color);
100
+ border-radius: var(--lg-radius-xl);
101
+ box-shadow: var(--lg-shadow-high);
102
+ }
103
+ ```
104
+
105
+ ## Dark / Light Mode
106
+
107
+ Tokens auto-switch via `prefers-color-scheme`. Light mode uses white-tinted glass; dark mode uses dark-tinted glass with higher blur to maintain readability.
108
+
109
+ ```css
110
+ /* Force a mode on a subtree */
111
+ .light-glass { color-scheme: light; }
112
+ .dark-glass { color-scheme: dark; }
113
+ ```
114
+
115
+ ## Animations
116
+
117
+ Use spring-based easing for physical feel:
118
+
119
+ ```css
120
+ /* Entry */
121
+ @keyframes glass-enter {
122
+ from { opacity: 0; transform: scale(0.95) translateY(8px); }
123
+ to { opacity: 1; transform: scale(1) translateY(0); }
124
+ }
125
+
126
+ .glass-animate-in {
127
+ animation: glass-enter var(--lg-duration-normal) var(--lg-easing-spring) both;
128
+ }
129
+ ```
130
+
131
+ ## Accessibility
132
+
133
+ - Ensure `contrast-ratio ≥ 4.5:1` for text over glass surfaces
134
+ - Respect `prefers-reduced-motion` — disable blur animations, use opacity-only transitions
135
+ - Provide `prefers-contrast: high` overrides that replace translucent backgrounds with solid ones
@@ -0,0 +1,81 @@
1
+ /* Liquid Glass Design Tokens */
2
+
3
+ :root {
4
+ color-scheme: light dark;
5
+
6
+ /* Blur */
7
+ --lg-blur-sm: 8px;
8
+ --lg-blur-md: 16px;
9
+ --lg-blur-lg: 32px;
10
+ --lg-blur-xl: 48px;
11
+
12
+ /* Saturation */
13
+ --lg-saturate: 1.8;
14
+
15
+ /* Radius */
16
+ --lg-radius-sm: 8px;
17
+ --lg-radius-md: 12px;
18
+ --lg-radius-lg: 16px;
19
+ --lg-radius-xl: 24px;
20
+
21
+ /* Shadows */
22
+ --lg-shadow-subtle: 0 1px 3px rgba(0,0,0,0.08);
23
+ --lg-shadow-elevated: 0 4px 16px rgba(0,0,0,0.1);
24
+ --lg-shadow-high: 0 8px 32px rgba(0,0,0,0.15);
25
+
26
+ /* Animation */
27
+ --lg-duration-fast: 150ms;
28
+ --lg-duration-normal: 300ms;
29
+ --lg-duration-slow: 500ms;
30
+ --lg-easing-spring: cubic-bezier(0.22, 1, 0.36, 1);
31
+
32
+ /* Light mode (default) */
33
+ --lg-bg-primary: rgba(255,255,255,0.72);
34
+ --lg-bg-elevated: rgba(255,255,255,0.82);
35
+ --lg-bg-toolbar: rgba(255,255,255,0.65);
36
+ --lg-bg-interactive: rgba(255,255,255,0.5);
37
+ --lg-bg-pressed: rgba(255,255,255,0.35);
38
+ --lg-bg-scrim: rgba(0,0,0,0.25);
39
+ --lg-border-color: rgba(255,255,255,0.45);
40
+ --lg-border-subtle: rgba(0,0,0,0.06);
41
+ }
42
+
43
+ @media (prefers-color-scheme: dark) {
44
+ :root {
45
+ --lg-bg-primary: rgba(30,30,30,0.65);
46
+ --lg-bg-elevated: rgba(40,40,40,0.75);
47
+ --lg-bg-toolbar: rgba(25,25,25,0.6);
48
+ --lg-bg-interactive: rgba(255,255,255,0.1);
49
+ --lg-bg-pressed: rgba(255,255,255,0.06);
50
+ --lg-bg-scrim: rgba(0,0,0,0.5);
51
+ --lg-border-color: rgba(255,255,255,0.12);
52
+ --lg-border-subtle: rgba(255,255,255,0.06);
53
+ --lg-shadow-subtle: 0 1px 3px rgba(0,0,0,0.3);
54
+ --lg-shadow-elevated: 0 4px 16px rgba(0,0,0,0.4);
55
+ --lg-shadow-high: 0 8px 32px rgba(0,0,0,0.5);
56
+ }
57
+ }
58
+
59
+ @media (prefers-contrast: high) {
60
+ :root {
61
+ --lg-bg-primary: rgba(255,255,255,0.95);
62
+ --lg-bg-elevated: rgba(255,255,255,0.98);
63
+ --lg-border-color: rgba(0,0,0,0.3);
64
+ }
65
+ }
66
+
67
+ @media (prefers-contrast: high) and (prefers-color-scheme: dark) {
68
+ :root {
69
+ --lg-bg-primary: rgba(20,20,20,0.95);
70
+ --lg-bg-elevated: rgba(25,25,25,0.98);
71
+ --lg-border-color: rgba(255,255,255,0.3);
72
+ }
73
+ }
74
+
75
+ @media (prefers-reduced-motion: reduce) {
76
+ :root {
77
+ --lg-duration-fast: 0ms;
78
+ --lg-duration-normal: 0ms;
79
+ --lg-duration-slow: 0ms;
80
+ }
81
+ }
@@ -0,0 +1,141 @@
1
+ ---
2
+ name: neubrutalism
3
+ description: Neubrutalism design system skill. Use when building bold UI with thick borders, offset solid shadows, high saturation colors, and minimal border radius.
4
+ license: MIT
5
+ ---
6
+
7
+ # Neubrutalism Design Spec
8
+
9
+ ## Core Principles
10
+
11
+ 1. **Thick Borders** — Bold `3–5px solid` black outlines on all elements
12
+ 2. **Offset Solid Shadows** — Hard-edge `box-shadow` with zero blur (e.g. `5px 5px 0 #000`)
13
+ 3. **High Saturation Colors** — Vivid, punchy fills: pinks, yellows, blues, greens
14
+ 4. **Minimal Radius** — `0–8px` border-radius; sharp or barely rounded corners
15
+ 5. **Flat Aesthetic** — No gradients, no blur, no transparency
16
+
17
+ ## CSS Tokens
18
+
19
+ Reference: [references/tokens.css](references/tokens.css)
20
+
21
+ ```css
22
+ @import 'references/tokens.css';
23
+
24
+ .nb-card {
25
+ background: var(--nb-yellow);
26
+ border: var(--nb-border-thick);
27
+ border-radius: var(--nb-radius);
28
+ box-shadow: var(--nb-shadow);
29
+ }
30
+ ```
31
+
32
+ ## Component Examples
33
+
34
+ ### Card
35
+ ```css
36
+ .nb-card {
37
+ background: var(--nb-white);
38
+ border: var(--nb-border-thick);
39
+ border-radius: var(--nb-radius);
40
+ box-shadow: var(--nb-shadow);
41
+ padding: 1.5rem;
42
+ }
43
+ ```
44
+
45
+ ### Button
46
+ ```css
47
+ .nb-btn {
48
+ background: var(--nb-yellow);
49
+ border: var(--nb-border);
50
+ border-radius: var(--nb-radius);
51
+ box-shadow: var(--nb-shadow-sm);
52
+ padding: 0.6rem 1.4rem;
53
+ font-family: var(--nb-font);
54
+ font-weight: var(--nb-font-weight);
55
+ cursor: pointer;
56
+ transition: transform 0.1s, box-shadow 0.1s;
57
+ }
58
+ .nb-btn:hover {
59
+ transform: translate(-2px, -2px);
60
+ box-shadow: var(--nb-shadow);
61
+ }
62
+ .nb-btn:active {
63
+ transform: translate(3px, 3px);
64
+ box-shadow: none;
65
+ }
66
+ ```
67
+
68
+ ### Navbar
69
+ ```css
70
+ .nb-nav {
71
+ background: var(--nb-bg);
72
+ border-bottom: var(--nb-border-thick);
73
+ padding: 1rem 2rem;
74
+ position: sticky;
75
+ top: 0;
76
+ z-index: 100;
77
+ }
78
+ ```
79
+
80
+ ### Input
81
+ ```css
82
+ .nb-input {
83
+ background: var(--nb-white);
84
+ border: var(--nb-border);
85
+ border-radius: var(--nb-radius);
86
+ box-shadow: var(--nb-shadow-sm);
87
+ padding: 0.6rem 1rem;
88
+ font-family: var(--nb-font);
89
+ font-weight: var(--nb-font-weight-body);
90
+ }
91
+ .nb-input:focus {
92
+ outline: none;
93
+ box-shadow: var(--nb-shadow);
94
+ }
95
+ ```
96
+
97
+ ### Badge
98
+ ```css
99
+ .nb-badge {
100
+ background: var(--nb-pink);
101
+ border: var(--nb-border);
102
+ border-radius: var(--nb-radius);
103
+ padding: 0.2rem 0.8rem;
104
+ font-family: var(--nb-font);
105
+ font-weight: var(--nb-font-weight);
106
+ font-size: 0.85rem;
107
+ }
108
+ ```
109
+
110
+ ## Typography
111
+
112
+ - Use bold, geometric sans-serif fonts (Space Grotesk, Inter, etc.)
113
+ - Headings: `font-weight: 700`, `letter-spacing: -0.02em`
114
+ - Body: `font-weight: 500`
115
+ - Uppercase sparingly for labels/badges
116
+
117
+ ```css
118
+ h1, h2, h3 {
119
+ font-family: var(--nb-font-heading);
120
+ font-weight: var(--nb-font-weight);
121
+ letter-spacing: var(--nb-letter-spacing);
122
+ }
123
+ body {
124
+ font-family: var(--nb-font);
125
+ font-weight: var(--nb-font-weight-body);
126
+ }
127
+ ```
128
+
129
+ ## Accessibility Notes
130
+
131
+ - Thick borders provide strong visual boundaries — good for low-vision users
132
+ - Ensure color contrast ≥ 4.5:1 for text on colored backgrounds
133
+ - Active/hover states use `transform` shifts — provide `prefers-reduced-motion` fallback
134
+
135
+ ```css
136
+ @media (prefers-reduced-motion: reduce) {
137
+ .nb-btn:hover, .nb-btn:active {
138
+ transform: none;
139
+ }
140
+ }
141
+ ```
@@ -0,0 +1,44 @@
1
+ :root {
2
+ /* Borders */
3
+ --nb-border: 3px solid #000;
4
+ --nb-border-thick: 5px solid #000;
5
+
6
+ /* Shadows (offset solid, no blur) */
7
+ --nb-shadow-sm: 3px 3px 0 #000;
8
+ --nb-shadow: 5px 5px 0 #000;
9
+ --nb-shadow-lg: 8px 8px 0 #000;
10
+
11
+ /* Radius */
12
+ --nb-radius: 4px;
13
+ --nb-radius-lg: 8px;
14
+
15
+ /* Colors — high saturation */
16
+ --nb-pink: #ff6b9d;
17
+ --nb-yellow: #ffd43b;
18
+ --nb-blue: #4dabf7;
19
+ --nb-green: #51cf66;
20
+ --nb-orange: #ff922b;
21
+ --nb-purple: #cc5de8;
22
+ --nb-red: #ff6b6b;
23
+ --nb-white: #fff;
24
+ --nb-black: #000;
25
+ --nb-bg: #f5f0e8;
26
+
27
+ /* Typography */
28
+ --nb-font: 'Space Grotesk', 'Inter', system-ui, sans-serif;
29
+ --nb-font-heading: 'Space Grotesk', 'Inter', system-ui, sans-serif;
30
+ --nb-font-weight: 700;
31
+ --nb-font-weight-body: 500;
32
+ --nb-letter-spacing: -0.02em;
33
+ }
34
+
35
+ [data-theme="dark"] {
36
+ --nb-border: 3px solid #fff;
37
+ --nb-border-thick: 5px solid #fff;
38
+ --nb-shadow-sm: 3px 3px 0 #fff;
39
+ --nb-shadow: 5px 5px 0 #fff;
40
+ --nb-shadow-lg: 8px 8px 0 #fff;
41
+ --nb-bg: #1a1a2e;
42
+ --nb-black: #fff;
43
+ --nb-white: #1a1a2e;
44
+ }