@whykusanagi/corrupted-theme 0.1.3 → 0.1.5

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.
@@ -0,0 +1,348 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>NSFW Corruption (18+) - Corrupted Theme</title>
7
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
8
+ <link rel="stylesheet" href="../../src/css/theme.css">
9
+ <style>
10
+ .container {
11
+ max-width: 1000px;
12
+ margin: 0 auto;
13
+ padding: var(--spacing-lg);
14
+ }
15
+
16
+ .example-group {
17
+ margin-bottom: var(--spacing-2xl);
18
+ background: var(--glass);
19
+ border: 1px solid var(--border);
20
+ border-radius: var(--radius-lg);
21
+ padding: var(--spacing-lg);
22
+ }
23
+
24
+ .example-group h3 {
25
+ color: var(--accent);
26
+ margin-bottom: var(--spacing-lg);
27
+ font-size: 1.25rem;
28
+ }
29
+
30
+ .warning-box {
31
+ background: rgba(255, 0, 0, 0.1);
32
+ border: 3px solid var(--corrupted-red);
33
+ border-radius: var(--radius-lg);
34
+ padding: var(--spacing-xl);
35
+ margin-bottom: var(--spacing-2xl);
36
+ box-shadow: 0 0 30px rgba(255, 0, 0, 0.3);
37
+ }
38
+
39
+ .warning-box h2 {
40
+ color: var(--corrupted-red);
41
+ margin-top: 0;
42
+ font-size: 1.75rem;
43
+ text-align: center;
44
+ }
45
+
46
+ .warning-box p {
47
+ color: var(--text);
48
+ line-height: 1.6;
49
+ }
50
+
51
+ .warning-box ul {
52
+ color: var(--text-secondary);
53
+ line-height: 1.8;
54
+ }
55
+
56
+ .demo-area {
57
+ background: var(--bg-secondary);
58
+ border: 1px solid var(--border);
59
+ border-radius: var(--radius-md);
60
+ padding: var(--spacing-xl);
61
+ margin-bottom: var(--spacing-md);
62
+ min-height: 100px;
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ }
67
+
68
+ .typing-output {
69
+ font-size: 1.25rem;
70
+ min-height: 40px;
71
+ letter-spacing: 1px;
72
+ font-family: 'Courier New', monospace;
73
+ text-align: center;
74
+ width: 100%;
75
+ }
76
+
77
+ .controls {
78
+ display: flex;
79
+ gap: var(--spacing-md);
80
+ margin-top: var(--spacing-md);
81
+ flex-wrap: wrap;
82
+ }
83
+
84
+ .code-block {
85
+ background: var(--bg);
86
+ border: 1px solid var(--border);
87
+ border-radius: var(--radius-md);
88
+ padding: var(--spacing-md);
89
+ margin-top: var(--spacing-md);
90
+ font-family: 'Courier New', monospace;
91
+ font-size: 0.875rem;
92
+ color: var(--text-secondary);
93
+ overflow-x: auto;
94
+ }
95
+
96
+ .info-badge {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ gap: var(--spacing-sm);
100
+ background: var(--glass);
101
+ border: 1px solid var(--border);
102
+ border-radius: var(--radius-full);
103
+ padding: var(--spacing-sm) var(--spacing-md);
104
+ font-size: 0.875rem;
105
+ color: var(--text-secondary);
106
+ margin-bottom: var(--spacing-md);
107
+ }
108
+
109
+ .nsfw-badge {
110
+ background: rgba(255, 0, 0, 0.2);
111
+ border-color: var(--corrupted-red);
112
+ color: var(--corrupted-red);
113
+ }
114
+
115
+ .comparison-grid {
116
+ display: grid;
117
+ grid-template-columns: 1fr 1fr;
118
+ gap: var(--spacing-lg);
119
+ margin-bottom: var(--spacing-md);
120
+ }
121
+
122
+ .comparison-box {
123
+ background: var(--bg-secondary);
124
+ border: 2px solid;
125
+ border-radius: var(--radius-md);
126
+ padding: var(--spacing-lg);
127
+ }
128
+
129
+ .comparison-box.sfw {
130
+ border-color: var(--corrupted-magenta2);
131
+ }
132
+
133
+ .comparison-box.nsfw {
134
+ border-color: var(--corrupted-purple);
135
+ }
136
+
137
+ .comparison-box h4 {
138
+ margin-top: 0;
139
+ font-size: 1rem;
140
+ }
141
+
142
+ .comparison-box.sfw h4 {
143
+ color: var(--corrupted-magenta2);
144
+ }
145
+
146
+ .comparison-box.nsfw h4 {
147
+ color: var(--corrupted-purple);
148
+ }
149
+
150
+ @media (max-width: 768px) {
151
+ .comparison-grid {
152
+ grid-template-columns: 1fr;
153
+ }
154
+ }
155
+ </style>
156
+ </head>
157
+ <body>
158
+ <!-- Global Navigation -->
159
+ <nav class="navbar">
160
+ <div class="navbar-content">
161
+ <a href="../index.html" class="navbar-logo"><i class="fas fa-palette"></i> Corrupted Theme</a>
162
+ <ul class="navbar-links">
163
+ <li><a href="../index.html"><i class="fas fa-home"></i> Home</a></li>
164
+ <li><a href="../showcase-complete.html"><i class="fas fa-cube"></i> Components</a></li>
165
+ <li><a href="../extensions-showcase.html"><i class="fas fa-puzzle-piece"></i> Extensions</a></li>
166
+ <li class="has-submenu">
167
+ <a href="#" class="active">
168
+ <i class="fas fa-flask"></i> Examples
169
+ <i class="fas fa-chevron-down" style="font-size: 0.7em; margin-left: 4px;"></i>
170
+ </a>
171
+ <div class="submenu">
172
+ <a href="../nikke-team-builder.html"><i class="fas fa-users"></i> Nikke Team Builder</a>
173
+ <a href="../button.html"><i class="fas fa-hand-pointer"></i> Buttons</a>
174
+ <a href="../card.html"><i class="fas fa-square"></i> Cards</a>
175
+ <a href="../form.html"><i class="fas fa-edit"></i> Forms</a>
176
+ <a href="../layout.html"><i class="fas fa-columns"></i> Layouts</a>
177
+ <a href="../basic/corrupted-text.html"><i class="fas fa-terminal"></i> Character Corruption</a>
178
+ <a href="../basic/typing-animation.html"><i class="fas fa-keyboard"></i> Buffer Corruption</a>
179
+ <a href="nsfw-corruption.html" class="active"><i class="fas fa-exclamation-triangle"></i> NSFW (18+)</a>
180
+ </div>
181
+ </li>
182
+ <li><a href="../showcase-complete.html"><i class="fas fa-book"></i> Docs</a></li>
183
+ </ul>
184
+ </div>
185
+ </nav>
186
+
187
+ <div class="container">
188
+ <!-- Content Warning -->
189
+ <div class="warning-box">
190
+ <h2><i class="fas fa-exclamation-triangle"></i> 18+ Content Warning</h2>
191
+ <p style="text-align: center;"><strong>This page contains explicit mature content (NSFW mode).</strong></p>
192
+ <p>This example demonstrates the NSFW mode of TypingAnimation, which includes:</p>
193
+ <ul>
194
+ <li>Explicit intimate/sexual phrases</li>
195
+ <li>Loss of control themes</li>
196
+ <li>Adult-oriented corruption aesthetics</li>
197
+ </ul>
198
+ <p><strong>NOT suitable for:</strong></p>
199
+ <ul>
200
+ <li>Professional/corporate projects</li>
201
+ <li>Public streams without 18+ rating</li>
202
+ <li>Educational contexts</li>
203
+ <li>All-ages content</li>
204
+ </ul>
205
+ <p style="text-align: center; margin-top: var(--spacing-lg); font-weight: bold;">
206
+ By continuing, you confirm you are 18+ and accept viewing explicit content.
207
+ </p>
208
+ </div>
209
+
210
+ <h1><i class="fas fa-exclamation-triangle"></i> NSFW Buffer Corruption</h1>
211
+ <p style="color: var(--text-secondary); margin-bottom: var(--spacing-lg);">
212
+ Pattern 2: Phrase flickering with explicit adult content (18+ only).
213
+ </p>
214
+
215
+ <div class="info-badge nsfw-badge">
216
+ <i class="fas fa-exclamation-triangle"></i>
217
+ <span>18+ ONLY - Explicit Content</span>
218
+ </div>
219
+
220
+ <!-- SFW vs NSFW Comparison -->
221
+ <section id="comparison" class="example-group">
222
+ <h3>SFW vs NSFW Comparison</h3>
223
+ <p>See the difference between default SFW mode and explicit NSFW mode side-by-side.</p>
224
+
225
+ <div class="comparison-grid">
226
+ <div class="comparison-box sfw">
227
+ <h4><i class="fas fa-check-circle"></i> SFW Mode (Default)</h4>
228
+ <div class="demo-area">
229
+ <div class="typing-output" id="outputSFW"></div>
230
+ </div>
231
+ </div>
232
+ <div class="comparison-box nsfw">
233
+ <h4><i class="fas fa-exclamation-triangle"></i> NSFW Mode (Explicit)</h4>
234
+ <div class="demo-area">
235
+ <div class="typing-output" id="outputNSFW"></div>
236
+ </div>
237
+ </div>
238
+ </div>
239
+
240
+ <div class="controls">
241
+ <button class="btn" onclick="startComparison()">
242
+ <i class="fas fa-play"></i> Start Comparison
243
+ </button>
244
+ </div>
245
+
246
+ <div class="code-block">// SFW mode (default - safe for all audiences)
247
+ const typingSFW = new TypingAnimation(element, {
248
+ nsfw: false // Default behavior
249
+ });
250
+
251
+ // NSFW mode (explicit opt-in required)
252
+ const typingNSFW = new TypingAnimation(element, {
253
+ nsfw: true // ⚠️ Enables 18+ explicit content
254
+ });</div>
255
+ </section>
256
+
257
+ <!-- NSFW-Only Example -->
258
+ <section id="nsfw-only" class="example-group">
259
+ <h3>NSFW-Only Example</h3>
260
+ <p>Pure NSFW buffer corruption with explicit phrases in purple (#8b5cf6).</p>
261
+
262
+ <div class="demo-area">
263
+ <div class="typing-output" id="outputNSFWOnly"></div>
264
+ </div>
265
+
266
+ <div class="controls">
267
+ <button class="btn" onclick="startNSFWOnly()">
268
+ <i class="fas fa-play"></i> Start NSFW Animation
269
+ </button>
270
+ <button class="btn btn-secondary" onclick="stopNSFWOnly()">
271
+ <i class="fas fa-stop"></i> Stop
272
+ </button>
273
+ </div>
274
+
275
+ <div class="code-block">const typing = new TypingAnimation(element, {
276
+ nsfw: true, // ⚠️ NSFW mode enabled
277
+ typingSpeed: 35,
278
+ glitchChance: 0.12
279
+ });
280
+
281
+ typing.start('Neural corruption detected...');</div>
282
+ </section>
283
+
284
+ <!-- Component Info -->
285
+ <section class="example-group">
286
+ <h3><i class="fas fa-info-circle"></i> NSFW Mode Configuration</h3>
287
+ <ul style="color: var(--text-secondary); line-height: 1.8;">
288
+ <li><strong>Requires Explicit Opt-in:</strong> <code>{ nsfw: true }</code></li>
289
+ <li><strong>Phrase Examples:</strong> "壊れちゃう...", "Pleasure protocols loading...", "変態", "えっち"</li>
290
+ <li><strong>Color:</strong> Deep Purple (#8b5cf6) for NSFW corruption</li>
291
+ <li><strong>Default Behavior:</strong> SFW mode (safe for all audiences)</li>
292
+ <li><strong>Content Rating:</strong> 18+ only, explicit intimate content</li>
293
+ </ul>
294
+
295
+ <div class="alert alert-warning" style="margin-top: var(--spacing-md);">
296
+ <i class="fas fa-shield-alt"></i>
297
+ <strong>Important:</strong> NSFW phrases are ONLY shown when <code>nsfw: true</code> is explicitly set.
298
+ The default behavior is always SFW for safety.
299
+ </div>
300
+ </section>
301
+ </div>
302
+
303
+ <script type="module">
304
+ import { TypingAnimation } from '../../src/core/typing-animation.js';
305
+
306
+ // SFW vs NSFW Comparison
307
+ const outputSFW = document.getElementById('outputSFW');
308
+ const outputNSFW = document.getElementById('outputNSFW');
309
+
310
+ window.startComparison = () => {
311
+ // SFW instance
312
+ const typingSFW = new TypingAnimation(outputSFW, {
313
+ nsfw: false,
314
+ glitchChance: 0.10
315
+ });
316
+
317
+ // NSFW instance
318
+ const typingNSFW = new TypingAnimation(outputNSFW, {
319
+ nsfw: true,
320
+ glitchChance: 0.10
321
+ });
322
+
323
+ // Start both simultaneously
324
+ typingSFW.start('System Online');
325
+ typingNSFW.start('System Online');
326
+ };
327
+
328
+ // NSFW-only example
329
+ const outputNSFWOnly = document.getElementById('outputNSFWOnly');
330
+ let typingNSFWOnly = new TypingAnimation(outputNSFWOnly, {
331
+ nsfw: true,
332
+ typingSpeed: 35,
333
+ glitchChance: 0.12
334
+ });
335
+
336
+ window.startNSFWOnly = () => {
337
+ typingNSFWOnly.start('Neural corruption detected... Decoding data buffer...');
338
+ };
339
+
340
+ window.stopNSFWOnly = () => {
341
+ typingNSFWOnly.stop();
342
+ };
343
+
344
+ // Auto-start comparison on load
345
+ setTimeout(() => startComparison(), 1000);
346
+ </script>
347
+ </body>
348
+ </html>
@@ -0,0 +1,254 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Character Corruption - Corrupted Theme</title>
7
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
8
+ <link rel="stylesheet" href="../../src/css/theme.css">
9
+ <style>
10
+ .container {
11
+ max-width: 1000px;
12
+ margin: 0 auto;
13
+ padding: var(--spacing-lg);
14
+ }
15
+
16
+ .example-group {
17
+ margin-bottom: var(--spacing-2xl);
18
+ background: var(--glass);
19
+ border: 1px solid var(--border);
20
+ border-radius: var(--radius-lg);
21
+ padding: var(--spacing-lg);
22
+ }
23
+
24
+ .example-group h3 {
25
+ color: var(--accent);
26
+ margin-bottom: var(--spacing-lg);
27
+ font-size: 1.25rem;
28
+ }
29
+
30
+ .demo-area {
31
+ background: var(--bg-secondary);
32
+ border: 1px solid var(--border);
33
+ border-radius: var(--radius-md);
34
+ padding: var(--spacing-xl);
35
+ margin-bottom: var(--spacing-md);
36
+ min-height: 100px;
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ }
41
+
42
+ .corrupted-text {
43
+ font-size: 2rem;
44
+ font-weight: bold;
45
+ letter-spacing: 2px;
46
+ text-align: center;
47
+ }
48
+
49
+ .controls {
50
+ display: flex;
51
+ gap: var(--spacing-md);
52
+ margin-top: var(--spacing-md);
53
+ flex-wrap: wrap;
54
+ }
55
+
56
+ .code-block {
57
+ background: var(--bg);
58
+ border: 1px solid var(--border);
59
+ border-radius: var(--radius-md);
60
+ padding: var(--spacing-md);
61
+ margin-top: var(--spacing-md);
62
+ font-family: 'Courier New', monospace;
63
+ font-size: 0.875rem;
64
+ color: var(--text-secondary);
65
+ overflow-x: auto;
66
+ }
67
+
68
+ .info-badge {
69
+ display: inline-flex;
70
+ align-items: center;
71
+ gap: var(--spacing-sm);
72
+ background: var(--glass);
73
+ border: 1px solid var(--border);
74
+ border-radius: var(--radius-full);
75
+ padding: var(--spacing-sm) var(--spacing-md);
76
+ font-size: 0.875rem;
77
+ color: var(--text-secondary);
78
+ margin-bottom: var(--spacing-md);
79
+ }
80
+
81
+ .sfw-badge {
82
+ background: rgba(217, 79, 144, 0.2);
83
+ border-color: var(--corrupted-magenta2);
84
+ color: var(--corrupted-magenta2);
85
+ }
86
+ </style>
87
+ </head>
88
+ <body>
89
+ <!-- Global Navigation -->
90
+ <nav class="navbar">
91
+ <div class="navbar-content">
92
+ <a href="../index.html" class="navbar-logo"><i class="fas fa-palette"></i> Corrupted Theme</a>
93
+ <ul class="navbar-links">
94
+ <li><a href="../index.html"><i class="fas fa-home"></i> Home</a></li>
95
+ <li><a href="../showcase-complete.html"><i class="fas fa-cube"></i> Components</a></li>
96
+ <li><a href="../extensions-showcase.html"><i class="fas fa-puzzle-piece"></i> Extensions</a></li>
97
+ <li class="has-submenu">
98
+ <a href="#" class="active">
99
+ <i class="fas fa-flask"></i> Examples
100
+ <i class="fas fa-chevron-down" style="font-size: 0.7em; margin-left: 4px;"></i>
101
+ </a>
102
+ <div class="submenu">
103
+ <a href="../nikke-team-builder.html"><i class="fas fa-users"></i> Nikke Team Builder</a>
104
+ <a href="../button.html"><i class="fas fa-hand-pointer"></i> Buttons</a>
105
+ <a href="../card.html"><i class="fas fa-square"></i> Cards</a>
106
+ <a href="../form.html"><i class="fas fa-edit"></i> Forms</a>
107
+ <a href="../layout.html"><i class="fas fa-columns"></i> Layouts</a>
108
+ <a href="corrupted-text.html" class="active"><i class="fas fa-terminal"></i> Character Corruption</a>
109
+ <a href="typing-animation.html"><i class="fas fa-keyboard"></i> Buffer Corruption</a>
110
+ <a href="../advanced/nsfw-corruption.html"><i class="fas fa-exclamation-triangle"></i> NSFW (18+)</a>
111
+ </div>
112
+ </li>
113
+ <li><a href="../showcase-complete.html"><i class="fas fa-book"></i> Docs</a></li>
114
+ </ul>
115
+ </div>
116
+ </nav>
117
+
118
+ <div class="container">
119
+ <h1><i class="fas fa-terminal"></i> Character Corruption</h1>
120
+ <p style="color: var(--text-secondary); margin-bottom: var(--spacing-lg);">
121
+ Pattern 1: Character-level visual corruption with multi-language cycling.
122
+ </p>
123
+
124
+ <div class="info-badge sfw-badge">
125
+ <i class="fas fa-check-circle"></i>
126
+ <span>SFW - Always Safe</span>
127
+ </div>
128
+
129
+ <!-- Multi-Language Cycling -->
130
+ <section id="multilang" class="example-group">
131
+ <h3>Multi-Language Cycling</h3>
132
+ <p>Cycles through English, Romaji, Hiragana, Katakana, and Kanji variants continuously.</p>
133
+
134
+ <div class="demo-area">
135
+ <span class="corrupted-text corrupted-multilang"
136
+ data-english="Hello World"
137
+ data-romaji="konnichiwa"
138
+ data-hiragana="こんにちは"
139
+ data-katakana="コンニチハ"
140
+ data-kanji="今日は">
141
+ </span>
142
+ </div>
143
+
144
+ <div class="code-block">&lt;span class="corrupted-multilang"
145
+ data-english="Hello World"
146
+ data-romaji="konnichiwa"
147
+ data-hiragana="こんにちは"
148
+ data-katakana="コンニチハ"
149
+ data-kanji="今日は"&gt;
150
+ &lt;/span&gt;</div>
151
+ </section>
152
+
153
+ <!-- English-Only Decoding -->
154
+ <section id="english" class="example-group">
155
+ <h3>English-Only Decoding</h3>
156
+ <p>Decodes from random character chaos to clean English text with manual controls.</p>
157
+
158
+ <div class="demo-area">
159
+ <span class="corrupted-text corrupted-multilang"
160
+ data-english="Neural corruption detected"
161
+ id="example2">
162
+ </span>
163
+ </div>
164
+
165
+ <div class="controls">
166
+ <button class="btn" onclick="restartExample2()">
167
+ <i class="fas fa-redo"></i> Restart
168
+ </button>
169
+ <button class="btn btn-secondary" onclick="settleExample2()">
170
+ <i class="fas fa-stop"></i> Settle
171
+ </button>
172
+ </div>
173
+
174
+ <div class="code-block">// Manual control
175
+ const element = document.getElementById('example2');
176
+ const instance = element.corruptedTextInstance;
177
+
178
+ // Restart corruption
179
+ instance.restart();
180
+
181
+ // Settle on final text
182
+ instance.settle('Neural corruption detected');</div>
183
+ </section>
184
+
185
+ <!-- One-Shot Decoding -->
186
+ <section id="oneshot" class="example-group">
187
+ <h3>One-Shot Decoding (No Loop)</h3>
188
+ <p>Decodes once and settles on the final text without looping.</p>
189
+
190
+ <div class="demo-area">
191
+ <span class="corrupted-text corrupted-multilang"
192
+ data-english="System Online"
193
+ id="example3">
194
+ </span>
195
+ </div>
196
+
197
+ <div class="code-block">// One-shot configuration
198
+ const instance = element.corruptedTextInstance;
199
+ instance.stop();
200
+ instance.options.loop = false;
201
+ instance.options.finalText = 'System Online';
202
+ instance.start();</div>
203
+ </section>
204
+
205
+ <!-- Component Info -->
206
+ <section class="example-group">
207
+ <h3><i class="fas fa-info-circle"></i> Component Information</h3>
208
+ <ul style="color: var(--text-secondary); line-height: 1.8;">
209
+ <li><strong>Type:</strong> Character-Level Corruption (Pattern 1)</li>
210
+ <li><strong>Content:</strong> Always SFW (no phrases, just random characters)</li>
211
+ <li><strong>Character Sets:</strong> Katakana, Hiragana, Romaji, Symbols for visual glitch</li>
212
+ <li><strong>Colors:</strong> Magenta/Purple corruption, White for decoded text</li>
213
+ <li><strong>Auto-initialization:</strong> Elements with class <code>corrupted-multilang</code></li>
214
+ <li><strong>Script:</strong> <code>src/core/corrupted-text.js</code></li>
215
+ </ul>
216
+ </section>
217
+ </div>
218
+
219
+ <script src="../../src/core/corrupted-text.js"></script>
220
+ <script>
221
+ // Example 2: Manual control
222
+ const example2 = document.getElementById('example2');
223
+ let example2Instance = null;
224
+
225
+ // Wait for auto-init, then store reference
226
+ setTimeout(() => {
227
+ example2Instance = example2.corruptedTextInstance;
228
+ }, 100);
229
+
230
+ function restartExample2() {
231
+ if (example2Instance) {
232
+ example2Instance.restart();
233
+ }
234
+ }
235
+
236
+ function settleExample2() {
237
+ if (example2Instance) {
238
+ example2Instance.settle('Neural corruption detected');
239
+ }
240
+ }
241
+
242
+ // Example 3: One-shot configuration
243
+ const example3 = document.getElementById('example3');
244
+ setTimeout(() => {
245
+ if (example3.corruptedTextInstance) {
246
+ example3.corruptedTextInstance.stop();
247
+ example3.corruptedTextInstance.options.loop = false;
248
+ example3.corruptedTextInstance.options.finalText = 'System Online';
249
+ example3.corruptedTextInstance.start();
250
+ }
251
+ }, 100);
252
+ </script>
253
+ </body>
254
+ </html>