@whykusanagi/corrupted-theme 0.1.1 → 0.1.3

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 (52) hide show
  1. package/CHANGELOG.md +253 -0
  2. package/README.md +97 -7
  3. package/docs/CAPABILITIES.md +209 -0
  4. package/docs/CHARACTER_LEVEL_CORRUPTION.md +264 -0
  5. package/docs/COMPONENTS_REFERENCE.md +295 -8
  6. package/docs/CORRUPTION_PHRASES.md +529 -0
  7. package/docs/FUTURE_WORK.md +189 -0
  8. package/docs/IMPLEMENTATION_VALIDATION.md +401 -0
  9. package/docs/LLM_PROVIDERS.md +345 -0
  10. package/docs/PERSONALITY.md +128 -0
  11. package/docs/ROADMAP.md +266 -0
  12. package/docs/ROUTING.md +324 -0
  13. package/docs/STYLE_GUIDE.md +605 -0
  14. package/docs/brand/BRAND_OVERVIEW.md +413 -0
  15. package/docs/brand/COLOR_SYSTEM.md +583 -0
  16. package/docs/brand/DESIGN_TOKENS.md +1009 -0
  17. package/docs/brand/TRANSLATION_FAILURE_AESTHETIC.md +525 -0
  18. package/docs/brand/TYPOGRAPHY.md +624 -0
  19. package/docs/components/ANIMATION_GUIDELINES.md +901 -0
  20. package/docs/components/COMPONENT_LIBRARY.md +1061 -0
  21. package/docs/components/GLASSMORPHISM.md +602 -0
  22. package/docs/components/INTERACTIVE_STATES.md +766 -0
  23. package/docs/governance/CONTRIBUTION_GUIDELINES.md +593 -0
  24. package/docs/governance/DESIGN_SYSTEM_GOVERNANCE.md +451 -0
  25. package/docs/governance/VERSION_MANAGEMENT.md +447 -0
  26. package/docs/governance/VERSION_REFERENCES.md +229 -0
  27. package/docs/platforms/CLI_IMPLEMENTATION.md +1025 -0
  28. package/docs/platforms/COMPONENT_MAPPING.md +579 -0
  29. package/docs/platforms/NPM_PACKAGE.md +854 -0
  30. package/docs/platforms/WEB_IMPLEMENTATION.md +1221 -0
  31. package/docs/standards/ACCESSIBILITY.md +715 -0
  32. package/docs/standards/ANTI_PATTERNS.md +554 -0
  33. package/docs/standards/SPACING_SYSTEM.md +549 -0
  34. package/examples/assets/celeste-avatar.png +0 -0
  35. package/examples/button.html +22 -10
  36. package/examples/card.html +22 -9
  37. package/examples/extensions-showcase.html +716 -0
  38. package/examples/form.html +22 -9
  39. package/examples/index.html +619 -396
  40. package/examples/layout.html +22 -8
  41. package/examples/nikke-team-builder.html +23 -9
  42. package/examples/showcase-complete.html +884 -28
  43. package/examples/showcase.html +21 -8
  44. package/package.json +14 -5
  45. package/src/css/components.css +676 -0
  46. package/src/css/extensions.css +933 -0
  47. package/src/css/theme.css +6 -74
  48. package/src/css/typography.css +5 -0
  49. package/src/lib/character-corruption.js +563 -0
  50. package/src/lib/components.js +283 -0
  51. package/src/lib/countdown-widget.js +609 -0
  52. package/src/lib/gallery.js +481 -0
@@ -0,0 +1,264 @@
1
+ # Character-Level Corruption - Implementation Guide
2
+
3
+ **Date**: 2025-12-12
4
+ **Issue Fixed**: Dashboard titles now use character-level Japanese mixing instead of word replacement
5
+
6
+ ---
7
+
8
+ ## The Problem
9
+
10
+ The old dashboard had Japanese characters mixed **INTO** English words like:
11
+ ```
12
+ 👁️ US使AGE ANア統LYTICS 👁️
13
+ ```
14
+
15
+ But the implementation was using word-level replacement:
16
+ ```
17
+ 👁️ 使用 tōkei 👁️ (replaces whole words)
18
+ ```
19
+
20
+ This didn't match the style guide examples like:
21
+ - `"loaディング"` - Japanese mixed into "loading"
22
+ - `"pro理cessing"` - Japanese mixed into "processing"
23
+ - `"ana分lysing"` - Japanese mixed into "analyzing"
24
+
25
+ ---
26
+
27
+ ## The Solution
28
+
29
+ ### New Function: `CorruptTextJapanese()`
30
+
31
+ **Location**: `cmd/celeste/tui/streaming.go` (line 252) and `cmd/celeste/commands/corruption.go`
32
+
33
+ This function mixes Japanese characters **INTO** English words at the character level:
34
+
35
+ ```go
36
+ func CorruptTextJapanese(text string, intensity float64) string {
37
+ katakana := []rune("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン")
38
+ kanjiFragments := []rune("壊虚深淵闇処理分析監視接続統計使用読込実行")
39
+
40
+ // For each character:
41
+ // 50% chance: Replace with Katakana
42
+ // 25% chance: Replace with Kanji
43
+ // 25% chance: Keep + maybe insert Katakana after
44
+ }
45
+ ```
46
+
47
+ ### Example Outputs
48
+
49
+ **Input**: `"USAGE ANALYTICS"`
50
+ **Intensity**: `0.35`
51
+
52
+ **Possible outputs** (randomized each time):
53
+ ```
54
+ "US使AGE ANア統LYTICS"
55
+ "USアGE AN統AL読TICSカ"
56
+ "USカGE 分NALYTI監S"
57
+ "U接AGE処A壊ALYTICS"
58
+ ```
59
+
60
+ The Japanese characters are mixed IN, making it readable but glitchy!
61
+
62
+ ---
63
+
64
+ ## Files Updated
65
+
66
+ ### 1. `cmd/celeste/commands/corruption.go`
67
+
68
+ **Added** (line 124):
69
+ ```go
70
+ func corruptTextCharacterLevel(text string, intensity float64) string {
71
+ // Character-level Japanese mixing
72
+ // Same implementation as CorruptTextJapanese
73
+ }
74
+ ```
75
+
76
+ ### 2. `cmd/celeste/commands/stats.go`
77
+
78
+ **Changed** (line 194):
79
+ ```go
80
+ // OLD (word replacement):
81
+ title := corruptTextSimple("USAGE ANALYTICS", 0.40)
82
+
83
+ // NEW (character mixing):
84
+ title := corruptTextCharacterLevel("USAGE ANALYTICS", 0.35)
85
+ ```
86
+
87
+ ### 3. `cmd/celeste/tui/streaming.go`
88
+
89
+ **Added** (line 252):
90
+ ```go
91
+ func CorruptTextJapanese(text string, intensity float64) string {
92
+ // Character-level Japanese mixing
93
+ // Available throughout TUI
94
+ }
95
+ ```
96
+
97
+ **Kept** (line 233):
98
+ ```go
99
+ func CorruptText(text string, intensity float64) string {
100
+ // Block character corruption (█▓▒░)
101
+ // For skill execution, heavy glitching
102
+ }
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Two Corruption Types
108
+
109
+ ### Type 1: Character-Level Japanese Mixing ✨ **NEW**
110
+
111
+ **Function**: `CorruptTextJapanese()` or `corruptTextCharacterLevel()`
112
+ **Output**: `"US使AGE ANア統LYTICS"` (readable with Japanese)
113
+ **Use for**: Dashboard titles, section headers, any text that should stay readable
114
+
115
+ ```go
116
+ // Dashboard header
117
+ title := tui.CorruptTextJapanese("USAGE ANALYTICS", 0.35)
118
+
119
+ // Section header
120
+ section := tui.CorruptTextJapanese("PROVIDER BREAKDOWN", 0.30)
121
+ ```
122
+
123
+ **Intensity Guide**:
124
+ - `0.25-0.30`: Light corruption (25-30% chars replaced)
125
+ - `0.30-0.35`: Medium corruption (30-35% chars replaced) ← **Recommended for titles**
126
+ - `0.35-0.40`: Heavy corruption (35-40% chars replaced)
127
+
128
+ ### Type 2: Block Character Corruption
129
+
130
+ **Function**: `CorruptText()`
131
+ **Output**: `"tar▓█_r▒ad░ng"` (hard to read, heavy glitching)
132
+ **Use for**: Skill names during execution, loading animations
133
+
134
+ ```go
135
+ // Skill execution (strikethrough + corruption)
136
+ skillName := tui.CorruptText("tarot_reading", 0.40)
137
+
138
+ // Loading state
139
+ loading := tui.CorruptText("Loading...", 0.30)
140
+ ```
141
+
142
+ **Intensity Guide**:
143
+ - `0.30-0.35`: Light block corruption
144
+ - `0.35-0.40`: Medium block corruption ← **Recommended for skills**
145
+ - `0.40-0.50`: Heavy block corruption
146
+
147
+ ---
148
+
149
+ ## When to Use Each Function
150
+
151
+ | Context | Function | Intensity | Example |
152
+ |---------|----------|-----------|---------|
153
+ | Dashboard title | `CorruptTextJapanese` | 0.35 | "US使AGE ANア統LYTICS" |
154
+ | Section header | `CorruptTextJapanese` | 0.30 | "PROバIDERア BREア統KDOWN" |
155
+ | Subsection | `CorruptTextJapanese` | 0.25 | "TO監AL SEセSSI使NS" |
156
+ | Skill executing | `CorruptText` | 0.40 | "tar▓█_r▒ad░ng" |
157
+ | Loading animation | `CorruptText` | 0.30 | "L▓ad█ng..." |
158
+ | Status phrases | Neither (use phrase bank) | N/A | "処理 processing purosesu..." |
159
+
160
+ ---
161
+
162
+ ## Testing the Fix
163
+
164
+ ### Before (Word Replacement):
165
+ ```bash
166
+ celeste chat
167
+ /stats
168
+ ```
169
+ Output was:
170
+ ```
171
+ 👁️ 使用 tōkei 👁️ (whole words replaced)
172
+ ```
173
+
174
+ ### After (Character Mixing):
175
+ ```bash
176
+ celeste chat
177
+ /stats
178
+ ```
179
+ Output is now (randomized):
180
+ ```
181
+ 👁️ US使AGE ANア統LYTICS 👁️ (Japanese mixed in)
182
+ ```
183
+
184
+ Each time you run `/stats`, the corruption is randomized, so you'll see different variations like:
185
+ - `"US使AGE ANア統LYTICS"`
186
+ - `"USアGE AN統AL読TICSカ"`
187
+ - `"USカGE 分NALYTI監S"`
188
+
189
+ ---
190
+
191
+ ## Visual Comparison
192
+
193
+ ### Old Implementation (Word-Level)
194
+ ```
195
+ ▓▒░ ═══════════════════════════════════════ ░▒▓
196
+ 👁️ 使用 統計 👁️
197
+ ⟨ tōkei dēta wo... fuhai sasete iru... ⟩
198
+ ▓▒░ ═══════════════════════════════════════ ░▒▓
199
+ ```
200
+ **Problem**: Entire words replaced, not mixed
201
+
202
+ ### New Implementation (Character-Level)
203
+ ```
204
+ ▓▒░ ═══════════════════════════════════════ ░▒▓
205
+ 👁️ US使AGE ANア統LYTICS 👁️
206
+ ⟨ tōkei dēta wo... fuhai sasete iru... ⟩
207
+ ▓▒░ ═══════════════════════════════════════ ░▒▓
208
+ ```
209
+ **Solution**: Japanese characters mixed INTO English ✓
210
+
211
+ ---
212
+
213
+ ## Matches Style Guide Examples
214
+
215
+ The new implementation now matches all the examples from `STYLE_GUIDE.md`:
216
+
217
+ ✅ `"loading"` → `"loaディング"`
218
+ ✅ `"processing"` → `"pro理cessing"`
219
+ ✅ `"analyzing"` → `"ana分lysing"`
220
+ ✅ `"corrupting"` → `"cor壊rupting"`
221
+ ✅ `"statistics"` → `"sta計stics"`
222
+
223
+ And the dashboard title:
224
+ ✅ `"USAGE ANALYTICS"` → `"US使AGE ANア統LYTICS"`
225
+
226
+ ---
227
+
228
+ ## Implementation Notes
229
+
230
+ ### Why Two Functions?
231
+
232
+ 1. **Readable corruption** (Japanese mixing) - For UI text users need to read
233
+ 2. **Heavy corruption** (block characters) - For dramatic effect when readability isn't critical
234
+
235
+ ### Why the Old Implementation Was Wrong
236
+
237
+ The old `corruptTextSimple()` function did **semantic word replacement**:
238
+ - "USAGE" → `"使用"` (whole word)
239
+ - "ANALYTICS" → `"統計"` (whole word)
240
+
241
+ This was more of a **translation** than **corruption**. The aesthetic requires **glitchy mixing** where Japanese interrupts English mid-word.
242
+
243
+ ### Performance
244
+
245
+ Character-level mixing is slightly more expensive than word replacement, but the difference is negligible:
246
+ - Dashboard renders once per `/stats` command
247
+ - Randomization happens at display time
248
+ - No caching needed (variations are a feature!)
249
+
250
+ ---
251
+
252
+ ## Related Files
253
+
254
+ - **Implementation**: `tui/streaming.go:252` and `commands/corruption.go:124`
255
+ - **Usage**: `commands/stats.go:194`
256
+ - **Style Guide**: `docs/STYLE_GUIDE.md`
257
+ - **Phrase Library**: `docs/CORRUPTION_PHRASES.md`
258
+ - **Validation**: `docs/IMPLEMENTATION_VALIDATION.md`
259
+
260
+ ---
261
+
262
+ **Status**: ✅ **FIXED** - Dashboard now uses character-level corruption
263
+ **Tested**: Visual output matches style guide examples
264
+ **Impact**: All dashboard headers now have proper translation-failure aesthetic
@@ -17,6 +17,12 @@ This document provides a comprehensive reference for all components available in
17
17
  6. [API Documentation](#api-documentation)
18
18
  7. [Nikke Components](#nikke-components)
19
19
  8. [Background & Images](#background--images)
20
+ 9. [Extension Components](#extension-components)
21
+ - [Gallery System](#gallery-system)
22
+ - [Lightbox](#lightbox)
23
+ - [NSFW Content Blur](#nsfw-content-blur)
24
+ - [Social Links List](#social-links-list)
25
+ - [Countdown Widget](#countdown-widget)
20
26
 
21
27
  ---
22
28
 
@@ -445,7 +451,7 @@ Complete API documentation components for building readable API docs.
445
451
 
446
452
  ## Nikke Components
447
453
 
448
- Game-specific components for Nikke applications. See [NIKKE_COMPONENTS.md](./NIKKE_COMPONENTS.md) for complete documentation.
454
+ Game-specific components for Nikke applications.
449
455
 
450
456
  ### Element Badges
451
457
 
@@ -632,7 +638,7 @@ All components follow accessibility best practices:
632
638
 
633
639
  ## Customization
634
640
 
635
- All components use CSS variables for easy customization. See [VARIABLES_REFERENCE.md](./VARIABLES_REFERENCE.md) for complete variable list.
641
+ All components use CSS variables for easy customization. See `src/css/variables.css` for the complete variable list.
636
642
 
637
643
  ```css
638
644
  :root {
@@ -644,16 +650,297 @@ All components use CSS variables for easy customization. See [VARIABLES_REFERENC
644
650
 
645
651
  ---
646
652
 
653
+ ## Extension Components
654
+
655
+ Production-tested components from whykusanagi.xyz for galleries, social links, countdowns, and more. Import via `extensions.css` (included in `theme.css`) or individually.
656
+
657
+ ### Gallery System
658
+
659
+ Responsive gallery grid with filtering and lightbox integration.
660
+
661
+ **Filter Bar:**
662
+ ```html
663
+ <div class="filter-bar">
664
+ <button class="filter-btn active" data-filter="all">All</button>
665
+ <button class="filter-btn" data-filter="photos">Photos</button>
666
+ <button class="filter-btn" data-filter="art">Art</button>
667
+ </div>
668
+ ```
669
+
670
+ **Gallery Container:**
671
+ ```html
672
+ <div class="gallery-container" id="my-gallery">
673
+ <div class="gallery-item" data-tags="photos">
674
+ <img src="image.jpg" alt="Description">
675
+ <div class="gallery-caption">
676
+ <div class="title">Image Title</div>
677
+ <div class="meta">Category • Date</div>
678
+ </div>
679
+ </div>
680
+ </div>
681
+ ```
682
+
683
+ **Variants:**
684
+ - `.gallery-container.compact` - Smaller grid items (200px min)
685
+ - `.gallery-container.large` - Larger grid items (350px min)
686
+ - `.gallery-item.square` - 1:1 aspect ratio
687
+ - `.gallery-item.portrait` - 3:4 aspect ratio
688
+ - `.gallery-item.landscape` - 16:9 aspect ratio
689
+ - `.filter-bar.left` - Left-aligned filters
690
+ - `.filter-bar.right` - Right-aligned filters
691
+
692
+ **JavaScript Integration:**
693
+ ```javascript
694
+ import { initGallery } from '@whykusanagi/corrupted-theme/gallery';
695
+
696
+ const gallery = initGallery('#my-gallery', {
697
+ filterBarSelector: '.filter-bar .filter-btn',
698
+ enableLightbox: true,
699
+ enableNsfw: true,
700
+ filterAnimation: true,
701
+ onFilter: (filter) => console.log('Filtered:', filter)
702
+ });
703
+
704
+ // Manual filter
705
+ gallery.filter('photos');
706
+ ```
707
+
708
+ ---
709
+
710
+ ### Lightbox
711
+
712
+ Fullscreen image viewer with keyboard navigation and touch gestures.
713
+
714
+ ```html
715
+ <!-- Lightbox is auto-created by gallery.js -->
716
+ <!-- Manual creation (if needed): -->
717
+ <div class="lightbox" id="my-lightbox">
718
+ <button class="lightbox-close">&times;</button>
719
+ <button class="lightbox-prev"><i class="fas fa-chevron-left"></i></button>
720
+ <img class="lightbox-image" src="" alt="">
721
+ <button class="lightbox-next"><i class="fas fa-chevron-right"></i></button>
722
+ <div class="lightbox-caption"></div>
723
+ <div class="lightbox-counter"></div>
724
+ </div>
725
+ ```
726
+
727
+ **Features:**
728
+ - Keyboard navigation (Arrow keys, Escape)
729
+ - Touch swipe gestures on mobile
730
+ - Click outside to close
731
+ - Image counter display
732
+ - Automatic caption display
733
+
734
+ **JavaScript API:**
735
+ ```javascript
736
+ const gallery = initGallery('#gallery');
737
+
738
+ // Open specific image
739
+ gallery.openLightbox(0);
740
+
741
+ // Close lightbox
742
+ gallery.closeLightbox();
743
+ ```
744
+
745
+ ---
746
+
747
+ ### NSFW Content Blur
748
+
749
+ Content warning overlay with click-to-reveal functionality.
750
+
751
+ ```html
752
+ <!-- Default warning text -->
753
+ <div class="gallery-item nsfw-content">
754
+ <img src="sensitive-image.jpg" alt="Description">
755
+ </div>
756
+
757
+ <!-- Custom warning text -->
758
+ <div class="gallery-item nsfw-content" data-warning="Sensitive Content">
759
+ <img src="image.jpg" alt="Description">
760
+ </div>
761
+ ```
762
+
763
+ **States:**
764
+ - Default: Blurred with "18+ Click to View" overlay
765
+ - `.revealed`: Blur removed, overlay hidden
766
+
767
+ **JavaScript API:**
768
+ ```javascript
769
+ const gallery = initGallery('#gallery', {
770
+ enableNsfw: true,
771
+ nsfwWarning: 'Click to View',
772
+ onNsfwReveal: (element) => console.log('Revealed:', element)
773
+ });
774
+
775
+ // Manual reveal
776
+ gallery.revealNsfw(element);
777
+ ```
778
+
779
+ ---
780
+
781
+ ### Social Links List
782
+
783
+ Link-in-bio style layout for social profiles.
784
+
785
+ ```html
786
+ <div class="social-links-container">
787
+ <img src="avatar.jpg" alt="Profile" class="profile-avatar">
788
+ <h1 class="profile-name">@username</h1>
789
+ <p class="profile-bio">Your bio text here.</p>
790
+
791
+ <div class="link-list">
792
+ <!-- Platform-specific hover colors -->
793
+ <a href="#" class="link-item twitter">
794
+ <i class="fab fa-twitter"></i> Twitter
795
+ </a>
796
+ <a href="#" class="link-item instagram">
797
+ <i class="fab fa-instagram"></i> Instagram
798
+ </a>
799
+ <a href="#" class="link-item youtube">
800
+ <i class="fab fa-youtube"></i> YouTube
801
+ </a>
802
+ <a href="#" class="link-item github">
803
+ <i class="fab fa-github"></i> GitHub
804
+ </a>
805
+ <a href="#" class="link-item discord">
806
+ <i class="fab fa-discord"></i> Discord
807
+ </a>
808
+ <a href="#" class="link-item twitch">
809
+ <i class="fab fa-twitch"></i> Twitch
810
+ </a>
811
+ <!-- Default accent color -->
812
+ <a href="#" class="link-item">
813
+ <i class="fas fa-globe"></i> Website
814
+ </a>
815
+ </div>
816
+ </div>
817
+ ```
818
+
819
+ **Avatar Sizes:**
820
+ - `.profile-avatar.sm` - 100px diameter
821
+ - `.profile-avatar` - 140px diameter (default)
822
+ - `.profile-avatar.lg` - 180px diameter
823
+
824
+ **Platform Classes:**
825
+ Each platform class applies branded hover colors:
826
+ - `.twitter` - Twitter blue
827
+ - `.instagram` - Instagram gradient
828
+ - `.youtube` - YouTube red
829
+ - `.github` - GitHub dark
830
+ - `.discord` - Discord purple
831
+ - `.twitch` - Twitch purple
832
+
833
+ ---
834
+
835
+ ### Countdown Widget
836
+
837
+ Event countdown with configurable shapes and animations.
838
+
839
+ **HTML Container:**
840
+ ```html
841
+ <div id="countdown-widget"></div>
842
+ ```
843
+
844
+ **JavaScript Initialization:**
845
+ ```javascript
846
+ import { initCountdown } from '@whykusanagi/corrupted-theme/countdown';
847
+
848
+ // Inline configuration
849
+ initCountdown({
850
+ config: {
851
+ title: 'Product Launch',
852
+ eventDate: '2025-04-01T00:00:00-07:00',
853
+ completedMessage: 'Now Available!',
854
+ character: {
855
+ image: 'character.png',
856
+ rotation: 0,
857
+ background: {
858
+ type: 'diamond',
859
+ color: 'radial-gradient(circle, rgba(54, 83, 161, 0.6), rgba(217, 79, 144, 0.6))',
860
+ borderColor: '#4c2967'
861
+ },
862
+ overlay: {
863
+ image: 'overlay.png',
864
+ position: 'behind',
865
+ animation: 'float'
866
+ }
867
+ },
868
+ popup: {
869
+ message: '<strong>Pre-order now!</strong>',
870
+ frequency: 15000,
871
+ duration: 5000
872
+ }
873
+ }
874
+ });
875
+
876
+ // Or load from JSON via URL parameter
877
+ // Access: page.html?event=kirara loads /data/countdown/kirara.json
878
+ initCountdown();
879
+ ```
880
+
881
+ **Shape Types:**
882
+ - `diamond` - Rotated square (default)
883
+ - `circle` - Round container
884
+ - `heart` - Heart shape
885
+ - `star` - 5-point star
886
+ - `hexagon` - 6-sided polygon
887
+ - `octagon` - 8-sided polygon
888
+
889
+ **Configuration Schema:**
890
+ ```javascript
891
+ {
892
+ title: string, // Display title
893
+ eventDate: string, // ISO 8601 date
894
+ completedMessage: string, // Message when countdown ends
895
+ character: {
896
+ image: string, // Image URL
897
+ rotation: number, // Degrees (0-360)
898
+ objectPosition: string, // CSS object-position
899
+ background: {
900
+ type: string, // Shape type
901
+ color: string, // CSS background
902
+ borderColor: string // Hex color
903
+ },
904
+ overlay: {
905
+ image: string, // Overlay image URL
906
+ position: 'behind'|'front',
907
+ animation: 'float'|null,
908
+ rotation: number
909
+ }
910
+ },
911
+ popup: {
912
+ message: string, // HTML content
913
+ frequency: number, // Ms between popups
914
+ duration: number, // Ms popup visible
915
+ colors: {
916
+ bg: string,
917
+ border: string,
918
+ text: string
919
+ }
920
+ }
921
+ }
922
+ ```
923
+
924
+ **CSS Classes:**
925
+ - `.countdown-container` - Main wrapper (600×600px)
926
+ - `.shape-container` - Shape wrapper (375×375px)
927
+ - `.shape-container.diamond|circle|heart|star|hexagon|octagon`
928
+ - `.countdown-box` - Timer display
929
+ - `.countdown-popup` - Popup message
930
+ - `.countdown-character` - Character image
931
+ - `.countdown-overlay-wrapper` - Overlay container
932
+
933
+ ---
934
+
647
935
  ## Related Documentation
648
936
 
649
- - [VARIABLES_REFERENCE.md](./VARIABLES_REFERENCE.md) - Complete CSS variables reference
650
- - [NIKKE_COMPONENTS.md](./NIKKE_COMPONENTS.md) - Nikke-specific components
651
- - [CUSTOMIZATION.md](./CUSTOMIZATION.md) - Customization guide
652
- - [ACCESSIBILITY.md](./ACCESSIBILITY.md) - Accessibility standards
937
+ - [README.md](../README.md) - Main documentation and quick start guide
938
+ - [Variables Reference](#customization) - CSS variables for customization (see Customization section above)
939
+ - [Nikke Components](#nikke-components) - Game-specific components (see section above)
653
940
 
654
941
  ---
655
942
 
656
- **Last Updated:** 2025-11-24
657
- **Version:** 1.0
943
+ **Last Updated:** 2025-11-26
944
+ **Version:** 1.1
658
945
  **Status:** Complete and Production Ready
659
946