File size: 50,824 Bytes
1f434f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
696d5cf
1f434f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0d603c0
1f434f8
0d603c0
 
 
1f434f8
 
 
 
 
 
 
 
 
48c6a0e
1f434f8
62520fe
 
fa9dbb0
b052f29
5593afd
 
 
fa9dbb0
5593afd
28b18b5
5593afd
 
 
 
d722e60
5593afd
 
1f434f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5da746f
 
1f434f8
 
7c67643
 
 
 
 
 
1f434f8
 
 
7c67643
 
 
 
1f434f8
 
7c67643
1f434f8
 
 
 
5da746f
 
1f434f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0d603c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
be4e588
 
5da746f
 
 
 
0d603c0
1f434f8
 
 
 
 
 
 
 
 
5da746f
1f434f8
 
 
5da746f
1f434f8
 
 
 
 
 
be4e588
 
 
 
1f434f8
 
37fdb99
 
 
 
 
 
 
 
 
 
f735234
 
 
 
37fdb99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f735234
 
37fdb99
 
 
 
 
 
8eedf00
37fdb99
 
 
 
 
696d5cf
1f434f8
 
696d5cf
37fdb99
1f434f8
 
 
37fdb99
1f434f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ff2065e
1f434f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d3b8adf
1f434f8
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
  <script>
    (function () {
      try {
        var t = localStorage.getItem("nexus_theme");
        if (!t) {
          t = "light";
          localStorage.setItem("nexus_theme", "light");
        }
        document.documentElement.setAttribute("data-theme", t);
      } catch (e) {
        document.documentElement.setAttribute("data-theme", "light");
      }
      document.documentElement.setAttribute("data-nexus-bg", "plain");
      try {
        var vp = localStorage.getItem("nexus_visual_performance");
        if (vp === "reduced") {
          vp = "full";
          localStorage.setItem("nexus_visual_performance", "full");
        }
        if (!vp) vp = localStorage.getItem("nexus_fast_mode") === "on" ? "max" : "full";
        if (vp !== "full" && vp !== "max") vp = "full";
        document.documentElement.setAttribute("data-visual-performance", vp);
        document.documentElement.setAttribute("data-fast-mode", vp === "max" ? "on" : "off");
      } catch (e2) {}
      try {
        var tr = localStorage.getItem("nexus_trail_preset") || "default";
        if (tr && tr !== "default") document.documentElement.setAttribute("data-trail-preset", tr);
        else document.documentElement.removeAttribute("data-trail-preset");
      } catch (e3) {}
      try {
        var hp = localStorage.getItem("nexus_hover_preset") || "default";
        if (hp === "magneta") hp = "magenta";
        if (hp && hp !== "default") document.documentElement.setAttribute("data-hover-preset", hp);
        else document.documentElement.removeAttribute("data-hover-preset");
      } catch (e4) {}
      try {
        var ap = localStorage.getItem("nexus_atom_preset") || "default";
        if (ap === "magneta") ap = "magenta";
        if (ap && ap !== "default") document.documentElement.setAttribute("data-atom-preset", ap);
        else document.documentElement.removeAttribute("data-atom-preset");
      } catch (e5) {}
      try {
        var fsz = localStorage.getItem("nexus_font_size");
        if (!fsz) fsz = "small";
        if (fsz !== "very-small" && fsz !== "small" && fsz !== "medium" && fsz !== "large") fsz = "small";
        document.documentElement.setAttribute("data-font-size", fsz);
      } catch (e6) {}
    })();
  </script>
  <title>Nexus AI — The Intelligent Study Crew</title>
  <link rel="icon" href="/favicon.ico" type="image/png" sizes="any" />
  <link rel="preconnect" href="https://fonts.googleapis.com" />
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
  <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400&display=swap" rel="stylesheet" />
  <link rel="stylesheet" href="style.css" />
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css" crossorigin="anonymous" onerror="this.onerror=null;this.href='/static/vendor/katex.min.css'" />
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js" onerror="this.onerror=null;this.src='/static/vendor/marked.min.js'"></script>
  <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js" crossorigin="anonymous" onerror="this.onerror=null;this.src='/static/vendor/katex.min.js'"></script>
  <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" crossorigin="anonymous" onerror="this.onerror=null;this.src='/static/vendor/auto-render.min.js'"></script>
  <script src="https://cdn.jsdelivr.net/npm/@emailjs/browser@4/dist/email.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
  <script src="https://accounts.google.com/gsi/client" async defer></script>
  <script>
    window.EMAILJS_PUBLIC_KEY = "{{EMAILJS_PUBLIC_KEY}}";
    window.EMAILJS_SERVICE_ID = "{{EMAILJS_SERVICE_ID}}";
    window.EMAILJS_TEMPLATE_ID = "{{EMAILJS_TEMPLATE_ID}}";
    window.EMAILJS_RESET_TEMPLATE_ID = "{{EMAILJS_RESET_TEMPLATE_ID}}";
    window.NEXUS_BLOB_ENABLED = false;
    window.NEXUS_GOOGLE_CLIENT_ID = "{{GOOGLE_OAUTH_CLIENT_ID}}";
  </script>
</head>
<body data-nexus-page="study" data-current-view="study" data-user-logged-in="false">
  <canvas id="bg-canvas"></canvas>
  <div id="bg-ambient" class="bg-ambient" aria-hidden="true">
    <span class="bg-ambient-spin" aria-hidden="true"></span>
  </div>
  <div id="root" class="nexus-loading">
    <header id="app-header" class="app-header app-header--study-glass">
      <div class="app-header-brand-wrap">
        <button type="button" id="study-app-sidebar-toggle" class="study-appbar-hamburger clean-hover" aria-label="Toggle study sidebar" aria-expanded="true" title="Menu">
          <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg>
        </button>
        <div class="header-atom assistant-atom atom-3d" aria-hidden="true">
          <span class="atom-nucleus"></span>
          <span class="atom-ring ring-x"><span class="atom-electron"></span></span>
          <span class="atom-ring ring-y"><span class="atom-electron"></span></span>
          <span class="atom-ring ring-z"><span class="atom-electron"></span></span>
        </div>
        <div class="app-header-brand">Nexus AI</div>
      </div>
      <nav class="header-center-nav" aria-label="Site pages">
        <a href="/" id="header-home-btn" class="header-nav-pill clean-hover header-landing-bar-mobile-hide" title="Landing page">Landing Page</a>
        <span class="header-nav-pill header-nav-pill--current header-loggedin-only" id="header-study-btn" title="Study hub">Study</span>
        <a href="/about" class="header-nav-pill clean-hover header-nav--desktop-only" title="About Nexus AI">About Us</a>
        <a href="/pricing" class="header-nav-pill clean-hover header-nav--desktop-only" title="Pricing and plans">Plans</a>
        <div class="nexus-header-dropdown header-more-wrap header-nav--mobile-only">
          <button type="button" id="header-more-btn" class="header-nav-pill header-more-btn clean-hover" aria-expanded="false" aria-haspopup="true" aria-controls="header-mobile-dropdown" title="More">
            More
            <svg class="header-more-chevron" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg>
          </button>
          <div id="header-mobile-dropdown" class="header-mobile-dropdown nexus-header-dropdown-panel" role="menu" aria-label="More navigation">
            <button type="button" id="header-dropdown-landing-btn" class="header-mobile-dropdown-item header-mobile-dropdown-btn header-loggedin-only" role="menuitem">Landing Page</button>
            <a href="/study" class="header-mobile-dropdown-item" role="menuitem">Study</a>
            <a href="/flashcards" class="header-mobile-dropdown-item header-loggedin-only" role="menuitem">Flashcards</a>
            <a href="/quiz" class="header-mobile-dropdown-item header-loggedin-only" role="menuitem">Quiz</a>
            <a href="/about" class="header-mobile-dropdown-item" role="menuitem">About Us</a>
            <a href="/pricing" class="header-mobile-dropdown-item" role="menuitem">Plans</a>
            <button type="button" class="header-mobile-dropdown-item header-mobile-dropdown-btn header-loggedout-only" role="menuitem" id="header-mobile-auth-btn">Login/SignUp</button>
          </div>
        </div>
      </nav>
      <div class="app-header-end app-header-auth">
        <button type="button" id="header-theme-toggle" class="header-icon-btn header-theme-toggle clean-hover" aria-label="Toggle light or dark theme" title="Theme">
          <svg class="nexus-theme-icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
          <svg class="nexus-theme-icon-moon hidden" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>
        </button>
      </div>
    </header>

    <div id="nexus-command-palette" class="nexus-command-palette hidden" aria-hidden="true">
      <div class="nexus-command-palette-inner">
        <label class="nexus-command-label" for="nexus-command-input"><span class="nexus-command-prompt" aria-hidden="true">nexus@ai</span><span class="nexus-command-dollar">$</span></label>
        <input type="text" id="nexus-command-input" class="nexus-command-input" autocomplete="off" spellcheck="false" aria-autocomplete="list" aria-controls="nexus-command-dropdown" aria-label="Command line" />
      </div>
      <p id="nexus-command-feedback" class="nexus-command-feedback" aria-live="polite"></p>
      <div id="nexus-command-dropdown" class="nexus-command-dropdown hidden" role="listbox" aria-label="Suggestions">
        <div class="nexus-command-dd-head">
          <span class="nexus-command-dd-header"></span>
          <span class="nexus-command-dd-type"></span>
        </div>
        <p class="nexus-command-dd-desc"></p>
        <ul class="nexus-command-dd-list"></ul>
      </div>
    </div>

  <div id="study-area" class="study-page-embed" aria-hidden="false">
    <div class="study-shell">
      <header class="study-chrome-header">
        <button type="button" id="study-sidebar-toggle" class="study-panel-toggle clean-hover" aria-label="Show or hide study sidebar" aria-expanded="true" title="Sidebar">
          <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16"/></svg>
        </button>
        <span class="study-chrome-title">Study hub</span>
        <div class="study-chrome-end">
          <button type="button" id="study-bar-theme" class="header-icon-btn study-bar-theme clean-hover" aria-label="Toggle theme" title="Theme">
            <svg class="nexus-theme-icon-sun study-bar-theme-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
            <svg class="nexus-theme-icon-moon study-bar-theme-moon hidden" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>
          </button>
          <button type="button" id="study-close" class="study-close-soft clean-hover" aria-label="Close study hub" title="Close study hub"><span class="study-close-label">Close</span></button>
        </div>
      </header>
    <div class="study-layout">
      <aside id="study-sidebar-panel" class="study-sidebar" aria-label="Study sidebar">
        <div class="study-sidebar-brand-row">
          <span class="study-brand-atom assistant-atom atom-3d" aria-hidden="true">
            <span class="atom-nucleus"></span>
            <span class="atom-ring ring-x"><span class="atom-electron"></span></span>
            <span class="atom-ring ring-y"><span class="atom-electron"></span></span>
            <span class="atom-ring ring-z"><span class="atom-electron"></span></span>
          </span>
          <span class="study-brand-text">Study</span>
        </div>
        <button type="button" id="btn-new-chat" class="study-btn-new-chat clean-hover" title="Start a new chat conversation">
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M12 5v14M5 12h14"/></svg>
          New conversation
        </button>
        <div class="study-quick-links" role="group" aria-label="Study tools">
          <a href="/flashcards" class="study-quick-link clean-hover" id="study-link-flashcards" title="Open flashcard decks">Flashcards</a>
          <a href="/quiz" class="study-quick-link clean-hover" id="study-link-quiz" title="Open practice quizzes">Quiz</a>
        </div>
        <div class="study-sidebar-scroll">
          <div id="study-sidebar-search-block" class="study-sidebar-extra-block">
            <div class="study-section-label">Search conversations</div>
            <div class="study-sidebar-search">
              <svg class="study-search-icon" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg>
              <input type="text" id="study-convo-search" class="study-search-input" placeholder="Filter conversation history…" autocomplete="off" />
            </div>
          </div>
          <div class="study-section-label">Conversation history</div>
          <div id="study-sidebar-conversations" class="study-conversations-list dash-conversations"></div>
          <div id="study-sidebar-decks" class="study-sidebar-extra-block">
            <div class="study-section-label">Flashcard decks</div>
            <div id="study-sets-list" class="study-sets-list"></div>
          </div>
        </div>
        <div class="study-sidebar-footer">
          <div class="study-sidebar-stats study-sidebar-extra-block">
            <div class="study-stat"><span id="study-stat-sets" class="study-stat-num">0</span><span class="study-stat-label">Decks</span></div>
            <div class="study-stat"><span id="study-stat-cards" class="study-stat-num">0</span><span class="study-stat-label">Cards</span></div>
          </div>
          <div class="study-sidebar-footer-actions">
            <button type="button" id="study-view-plans" class="study-footer-link-btn" title="View subscription plans">View plans</button>
            <button type="button" id="btn-settings" class="study-footer-link-btn study-footer-link-btn--settings" title="Open settings">Settings</button>
          </div>
        </div>
      </aside>
      <main class="study-main">
        <div class="study-main-inner">
          <div id="study-welcome" class="study-welcome">
            <div class="study-welcome-glow" aria-hidden="true"></div>
            <div class="study-welcome-content">
              <div class="study-welcome-icon-wrap">
                <span class="study-welcome-icon-ring" aria-hidden="true"></span>
                <div class="study-welcome-icon" aria-hidden="true">
                  <svg width="36" height="36" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 3h6a4 4 0 014 4v14a3 3 0 00-3-3H2z"/><path d="M22 3h-6a4 4 0 00-4 4v14a3 3 0 013-3h7z"/></svg>
                </div>
              </div>
              <h2>Study with Nexus AI</h2>
              <p>Your hub for decks, quizzes, and the study tutor.</p>
              <div id="study-discover-blocks" class="study-discover-blocks" aria-live="polite">
                <p class="study-hub-label">Quick actions</p>
                <div class="study-quick-actions">
                  <button type="button" id="study-action-flashcards" class="study-action-tile" title="Create flashcards from chat">
                    <span class="study-action-icon" aria-hidden="true">
                      <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="4" y="4" width="16" height="20" rx="2"/><path d="M8 2v4M16 2v4"/><path d="M4 10h16"/></svg>
                    </span>
                    <span class="study-action-title">Create flashcards</span>
                    <span class="study-action-desc">Describe a topic in chat — we’ll build a deck.</span>
                  </button>
                  <button type="button" id="study-action-quiz" class="study-action-tile" title="Take a generated quiz">
                    <span class="study-action-icon study-action-icon-quiz" aria-hidden="true">
                      <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2"/><path d="M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"/><path d="M9 12l2 2 4-4"/></svg>
                    </span>
                    <span class="study-action-title">Take a quiz</span>
                    <span class="study-action-desc">Generate a practice quiz on any topic.</span>
                  </button>
                </div>
                <p class="study-hub-label study-hub-label-topics">Popular topics</p>
                <div class="study-topic-cards">
                  <button type="button" class="study-topic-card" title="Use this topic in chat">WW3</button>
                  <button type="button" class="study-topic-card" title="Use this topic in chat">Egyptian history</button>
                  <button type="button" class="study-topic-card" title="Use this topic in chat">Photosynthesis</button>
                  <button type="button" class="study-topic-card" title="Use this topic in chat">World War II</button>
                  <button type="button" class="study-topic-card" title="Use this topic in chat">Derivatives</button>
                  <button type="button" class="study-topic-card" title="Use this topic in chat">Python basics</button>
                </div>
              </div>
            </div>
          </div>
          <div id="study-carousel-wrap" class="study-carousel-wrap hidden">
            <div class="study-carousel-header">
              <h3 id="study-deck-title" class="study-deck-title">Deck</h3>
              <span id="study-card-counter" class="study-card-counter">0 / 0</span>
            </div>
            <div class="study-carousel-body">
              <button type="button" id="study-nav-prev" class="study-carousel-nav study-nav-prev" aria-label="Previous card" title="Previous card">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M15 18l-6-6 6-6"/></svg>
              </button>
              <div id="study-carousel" class="study-carousel"></div>
              <button type="button" id="study-nav-next" class="study-carousel-nav study-nav-next" aria-label="Next card" title="Next card">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 18l6-6-6-6"/></svg>
              </button>
            </div>
            <div id="study-carousel-dots" class="study-carousel-dots"></div>
          </div>
          <div class="study-chat-area" id="chat-input-area">
            <div class="chat-file-drop-overlay" aria-hidden="true">
              <div class="chat-file-drop-overlay__icon"></div>
              <span>Drop files to attach</span>
            </div>
            <div id="chat-attachments" class="chat-attachments"></div>
            <div id="chat-messages" class="study-chat-messages chat-messages"></div>
            <div class="study-chat-composer-column">
              <div class="nexus-youtube-tool" id="nexus-youtube-tool">
                <button
                  type="button"
                  class="nexus-yt-toggle clean-hover"
                  id="nexus-yt-toggle"
                  aria-expanded="false"
                  aria-controls="nexus-yt-panel"
                >
                  <span class="nexus-yt-toggle-icon" aria-hidden="true">
                    <svg width="18" height="18" viewBox="0 0 24 24" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">
                      <rect x="0.5" y="4" width="23" height="16" rx="3.2" fill="#FF0000" />
                      <path d="M9.5 8.5v7L17 12z" fill="#ffffff" />
                    </svg>
                  </span>
                  <span class="nexus-yt-toggle-label">YouTube</span>
                  <svg class="nexus-yt-chevron" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg>
                </button>
                <div class="nexus-yt-panel" id="nexus-yt-panel" role="region" aria-label="YouTube link" hidden>
                  <label class="nexus-yt-label" for="nexus-yt-url">Video link</label>
                  <input
                    type="url"
                    id="nexus-yt-url"
                    class="nexus-yt-url-input"
                    placeholder="https://www.youtube.com/watch?v=…"
                    inputmode="url"
                    autocomplete="off"
                    spellcheck="false"
                  />
                  <div class="nexus-yt-actions">
                    <button type="button" class="nexus-yt-open-web clean-hover" id="nexus-yt-open-web" title="Open this video on YouTube">
                      Open YouTube
                    </button>
                    <button type="button" class="nexus-yt-copy clean-hover" id="nexus-yt-copy" title="Copy watch link">
                      Copy link
                    </button>
                  </div>
                  <p class="nexus-yt-hint">
                    Paste a link here, type what you want below (e.g. summarize, teach, quiz), then send. If the main box mentions a different video than the field, the message’s link is used for that turn.
                  </p>
                </div>
              </div>
              <div class="study-chat-input-row">
                <div class="study-chat-input-wrap" id="chat-input-wrap">
                <button type="button" id="btn-upload" class="study-upload-btn clean-hover" aria-label="Attach PDF, image, audio, or video" title="Upload PDF, images, MP3, MP4, or other common video formats">
                  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><rect x="4" y="4" width="16" height="16" rx="2"/><path d="M12 8v8M8 12h8"/></svg>
                </button>
                <input type="file" id="file-input" accept=".pdf,application/pdf,.png,.jpg,.jpeg,.gif,.webp,.heic,.heif,image/*,image/heic,image/heic-sequence,video/*,audio/*,.mp3,.mp4,.mov,.webm,.m4v,.mkv,.mpeg,.mpg,.avi,.3gp,.wmv,.ogv,.f4v" multiple hidden />
                <input type="text" id="chat-input" class="study-chat-input chat-input" placeholder="What should Nexus do? (e.g. summarize, teach, explain)…" autocomplete="off" />
                <button type="button" id="chat-send" class="study-send-btn clean-hover chat-input-btn" aria-label="Send message" title="Send">
                  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
                </button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </main>
    </div>
    </div>
  </div>


    <!-- ============ ABOUT US MODAL ============ -->
    <div id="modal-about" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-about-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass modal-about-card">
        <h2 id="modal-about-title">About Nexus AI</h2>
        <p class="modal-about-subhead">Empowering Developers to Dream and Build</p>
        <div class="modal-about-body">
          <p>Nexus AI was born from a simple belief: every developer deserves intelligent tools that amplify their creativity rather than replace it. Our platform combines cutting-edge language models with deep code understanding to deliver a seamless, context-aware coding companion.</p>
          <p>From solo learners to enterprise teams, we provide the AI infrastructure that makes writing, refactoring, and shipping code faster, safer, and more enjoyable. Our mission is to lower the barrier to great software&mdash;one commit at a time.</p>
        </div>
        <div class="modal-actions">
          <button type="button" id="modal-about-close" class="primary-btn clean-hover">Close</button>
        </div>
      </div>
    </div>


    <div id="auth-modal" class="modal" role="dialog" aria-modal="true" aria-labelledby="auth-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass auth-modal-card">
        <div class="auth-aurora-clip" aria-hidden="true">
          <canvas id="auth-aurora-canvas" class="auth-aurora-canvas"></canvas>
        </div>
        <div id="auth-panel" class="auth-panel-inner">
          <h2 id="auth-title">Welcome to Nexus AI</h2>
          <p class="modal-note">Log in or sign up to continue.</p>
          <div class="auth-tabs">
            <button type="button" class="auth-tab active" data-mode="login">Login</button>
            <button type="button" class="auth-tab" data-mode="signup">Sign up</button>
          </div>
          <form id="auth-form" class="auth-form">
            <div id="auth-signup-names" class="auth-names-row hidden">
              <input type="text" id="auth-first-name" placeholder="First name" autocomplete="given-name" />
              <input type="text" id="auth-second-name" placeholder="Second name" autocomplete="family-name" />
            </div>
            <div id="auth-country-wrap" class="hidden">
              <span class="auth-country-label" id="auth-country-label-text">Choose a country:</span>
              <p id="auth-country-error" class="auth-country-error hidden" role="alert"></p>
              <div class="auth-country-select-shell" id="auth-country-root">
              <select id="country" class="auth-country-native-select" name="country" autocomplete="country" tabindex="-1" aria-hidden="true">
                <option value="" selected disabled data-flag="" data-label="">Select a country</option>
              </select>
                <button
                  type="button"
                  id="auth-country-trigger"
                  class="auth-country-custom-trigger"
                  aria-haspopup="listbox"
                  aria-expanded="false"
                  aria-controls="auth-country-dropdown"
                  aria-labelledby="auth-country-label-text auth-country-trigger-label"
                >
                  <span id="auth-country-trigger-label" class="auth-country-custom-text is-placeholder">Select a country</span>
                  <span class="auth-country-select-chevron" aria-hidden="true">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>
                  </span>
                </button>
                <div id="auth-country-dropdown" class="auth-country-dropdown hidden" role="listbox" aria-labelledby="auth-country-label-text">
                  <div class="auth-country-dropdown-search-wrap">
                    <input
                      type="search"
                      id="auth-country-search"
                      class="auth-country-dropdown-search"
                      placeholder="Search countries…"
                      autocomplete="off"
                      aria-label="Search countries"
                    />
                  </div>
                  <div id="auth-country-options" class="auth-country-dropdown-options"></div>
                </div>
              </div>
            </div>
            <input type="email" id="auth-email" placeholder="Email" required autocomplete="email" />
            <div class="auth-password-wrap">
              <input type="password" id="auth-password" placeholder="Password (min 6)" required autocomplete="current-password" minlength="6" />
              <button type="button" id="auth-password-toggle" class="auth-password-toggle" aria-label="Show password">
              <svg class="icon-eye" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>
              <svg class="icon-eye-off hidden" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/><line x1="1" y1="1" x2="23" y2="23"/></svg>
            </button>
            </div>
            <label class="auth-remember-row" id="auth-remember-row">
              <input type="checkbox" id="auth-remember-me" checked />
              <span>Remember me</span>
            </label>
            <div id="auth-forgot-block" class="auth-forgot-block">
              <p class="auth-forgot-row" id="auth-forgot-row">
                <button type="button" id="auth-forgot-trigger" class="auth-forgot-link clean-hover">Forgot password?</button>
              </p>
              <div id="auth-forgot-panel" class="auth-forgot-panel hidden">
                <p id="auth-forgot-intro" class="modal-note">We’ll email you a link to set a new password.</p>
                <button type="button" id="auth-forgot-submit" class="primary-btn clean-hover">Send reset link</button>
                <button type="button" id="auth-forgot-resend" class="secondary-btn clean-hover hidden" aria-label="Resend reset email">Resend email</button>
                <button type="button" id="auth-forgot-back" class="secondary-btn clean-hover">Back to login</button>
                <p id="auth-forgot-status" class="status-text" role="status"></p>
              </div>
            </div>
            <button type="submit" id="auth-submit" class="primary-btn clean-hover">Continue</button>
          </form>
          <p id="auth-error" class="status-text"></p>
          <div class="auth-social-divider"><span>or continue with</span></div>
          <div class="auth-social-row auth-social-row-single">
            <button type="button" id="auth-google-btn" class="auth-social-btn auth-google-btn" title="Continue with Google">
              <svg width="20" height="20" viewBox="0 0 24 24"><path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 01-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z" fill="#4285F4"/><path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" fill="#34A853"/><path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z" fill="#FBBC05"/><path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" fill="#EA4335"/></svg>
              <span>Continue with Google</span>
            </button>
          </div>
        </div>

        <div id="verify-panel" class="hidden auth-panel-inner">
          <h2>Verify your email</h2>
          <p id="verify-email-display" class="modal-note"></p>
          <div id="otp-grid" class="otp-grid">
            <input type="text" class="otp-input" inputmode="numeric" maxlength="1" />
            <input type="text" class="otp-input" inputmode="numeric" maxlength="1" />
            <input type="text" class="otp-input" inputmode="numeric" maxlength="1" />
            <input type="text" class="otp-input" inputmode="numeric" maxlength="1" />
            <input type="text" class="otp-input" inputmode="numeric" maxlength="1" />
            <input type="text" class="otp-input" inputmode="numeric" maxlength="1" />
          </div>
          <div class="verify-actions">
            <button type="button" id="verify-submit" class="primary-btn clean-hover">Verify</button>
            <button type="button" id="verify-resend" class="secondary-btn clean-hover">Resend code</button>
            <button type="button" id="verify-back" class="secondary-btn clean-hover">Back</button>
          </div>
          <p id="verify-error" class="status-text"></p>
        </div>
      </div>
    </div>

    <div id="modal-new-convo" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-new-convo-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass">
        <h2 id="modal-new-convo-title">New conversation</h2>
        <input type="text" id="modal-new-convo-name" class="modal-input" placeholder="Name (optional — auto after 5 messages)" maxlength="80" title="Leave blank to auto-name from your topic after five messages" />
        <div class="modal-actions">
          <button type="button" id="modal-new-convo-cancel" class="secondary-btn clean-hover">Cancel</button>
          <button type="button" id="modal-new-convo-confirm" class="primary-btn clean-hover">Create</button>
        </div>
      </div>
    </div>

    <div id="modal-delete-convo" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-delete-convo-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass">
        <h2 id="modal-delete-convo-title">Delete conversation?</h2>
        <p id="modal-delete-convo-message" class="modal-note">This action cannot be undone.</p>
        <div class="modal-actions">
          <button type="button" id="modal-delete-convo-cancel" class="secondary-btn clean-hover">Cancel</button>
          <button type="button" id="modal-delete-convo-confirm" class="danger-btn clean-hover">Delete</button>
        </div>
      </div>
    </div>

    <div id="modal-bulk-delete-convos" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-bulk-delete-convos-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass">
        <h2 id="modal-bulk-delete-convos-title">Delete selected conversations?</h2>
        <p id="modal-bulk-delete-convos-message" class="modal-note">This will permanently remove the selected chats. This cannot be undone.</p>
        <div class="modal-actions">
          <button type="button" id="modal-bulk-delete-convos-cancel" class="secondary-btn clean-hover">Cancel</button>
          <button type="button" id="modal-bulk-delete-convos-confirm" class="danger-btn clean-hover">Delete all selected</button>
        </div>
      </div>
    </div>

    <div id="modal-rename-convo" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-rename-convo-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass">
        <h2 id="modal-rename-convo-title">Rename conversation</h2>
        <input type="text" id="modal-rename-convo-name" class="modal-input" placeholder="New name" maxlength="80" />
        <div class="modal-actions">
          <button type="button" id="modal-rename-convo-cancel" class="secondary-btn clean-hover">Cancel</button>
          <button type="button" id="modal-rename-convo-confirm" class="primary-btn clean-hover">Rename</button>
        </div>
      </div>
    </div>

    <div id="modal-settings" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-settings-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass">
        <h2 id="modal-settings-title">Settings</h2>
        <p class="modal-note">Customize account, identity, and appearance.</p>
        <div class="settings-sections">
          <div class="settings-section">
            <label class="settings-row">
              <span>Font size</span>
              <select id="settings-font-size" class="settings-select">
                <option value="very-small">Very small</option>
                <option value="small" selected>Small</option>
                <option value="medium">Medium</option>
                <option value="large">Large</option>
              </select>
            </label>
            <label class="settings-row">
              <span>Reading mode</span>
              <select id="settings-reading-mode" class="settings-select">
                <option value="off">Off</option>
                <option value="on">On (wider bubbles, smaller text)</option>
              </select>
            </label>
            <label class="settings-row">
              <span>Theme</span>
              <select id="settings-theme" class="settings-select" title="Light or dark appearance">
                <option value="light">Light</option>
                <option value="dark">Dark</option>
              </select>
            </label>
            <label class="settings-row">
              <span>Visual performance</span>
              <select id="settings-visual-performance" class="settings-select">
                <option value="full">Full (default animations)</option>
                <option value="max">Maximum (minimal motion &amp; effects; best for lag)</option>
              </select>
            </label>
          </div>
          <div class="settings-section">
            <h3 class="settings-section-title">Speak</h3>
            <p class="settings-hint">Speech uses Gemini TTS on the server. Language follows your text automatically unless you turn auto-detect off.</p>
            <label class="settings-row settings-row-checkbox">
              <span>Auto-detect speak language</span>
              <input type="checkbox" id="settings-tts-voice-auto" class="settings-checkbox" checked />
            </label>
            <label class="settings-row" id="settings-tts-lang-row">
              <span>Manual voice language</span>
              <select id="settings-tts-voice-lang" class="settings-select">
                <option value="en">English</option>
                <option value="ar">Arabic</option>
                <option value="fr">French</option>
                <option value="es">Spanish</option>
                <option value="de">German</option>
                <option value="hi">Hindi</option>
                <option value="pt">Portuguese</option>
                <option value="it">Italian</option>
              </select>
            </label>
            <label class="settings-row">
              <span>Voice gender</span>
              <select id="settings-tts-voice-gender" class="settings-select" title="Used for Gemini TTS and browser fallback">
                <option value="auto">Auto (server default)</option>
                <option value="female">Female</option>
                <option value="male">Male</option>
              </select>
            </label>
          </div>
          <div class="settings-section" id="settings-subscription">
            <h3 class="settings-section-title">Manage subscription</h3>
            <p class="settings-hint">Pick a plan or change your subscription on the checkout page.</p>
            <div class="settings-plan-row">
              <a class="settings-plan-link" href="/buy.html?plan=basic">Basic</a>
              <a class="settings-plan-link settings-plan-link-featured" href="/buy.html?plan=standard">Standard</a>
              <a class="settings-plan-link" href="/buy.html?plan=premium">Premium</a>
            </div>
            <button type="button" id="settings-open-plans-landing" class="secondary-btn clean-hover settings-plans-cta">Compare all plans</button>
          </div>
          <div class="settings-section">
            <h3 class="settings-section-title">Account</h3>
            <div class="settings-grid">
              <button type="button" id="settings-hide-email" class="secondary-btn clean-hover">Hide email</button>
              <button type="button" id="settings-hide-avatar" class="secondary-btn clean-hover">Hide avatar</button>
            </div>
          </div>
          <div class="settings-section">
            <h3 class="settings-section-title">Data</h3>
            <div class="settings-grid">
              <button type="button" id="settings-clear-chat" class="secondary-btn clean-hover">Clear chat view</button>
              <button type="button" id="settings-export-session" class="secondary-btn clean-hover">Export session (.txt)</button>
              <button type="button" id="settings-delete-account" class="danger-btn clean-hover">Delete my account and all data</button>
            </div>
            <p class="settings-hint">Deleting your account removes your profile, conversations, and saved progress. This cannot be undone.</p>
          </div>
        </div>
        <div class="modal-actions">
          <button type="button" id="settings-logout" class="danger-btn settings-logout-btn neon-red-logout">Log out</button>
          <button type="button" id="settings-close" class="primary-btn clean-hover">Close</button>
        </div>
      </div>
    </div>

    <div id="modal-quiz" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-quiz-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass quiz-modal-card">
        <div class="modal-quiz-head">
          <h2 id="modal-quiz-title">Quiz generator</h2>
          <button type="button" id="quiz-close" class="modal-quiz-x" aria-label="Close quiz">×</button>
        </div>
        <div id="quiz-setup-panel">
          <div class="quiz-topic-section">
            <label class="quiz-section-label" for="quiz-topic">Topic</label>
            <input type="text" id="quiz-topic" class="modal-input quiz-topic-input" placeholder="Topic, or a YouTube URL — we load the video and quiz you on that content" autocomplete="off" />
            <div class="quiz-upload-row">
              <button type="button" id="quiz-upload-btn" class="secondary-btn clean-hover quiz-upload-btn-inline">Upload file</button>
              <input type="file" id="quiz-file-input" accept=".pdf,application/pdf,.png,.jpg,.jpeg,.gif,.webp" hidden />
              <span id="quiz-file-name" class="quiz-file-label"></span>
            </div>
          </div>
          <div class="quiz-type-section">
            <span class="quiz-section-label">Question types</span>
            <div class="quiz-type-grid" id="quiz-type-grid">
              <label class="quiz-chip"><input type="checkbox" name="quiz-type" value="correct-answer" checked /><span>Multiple choice</span></label>
              <label class="quiz-chip"><input type="checkbox" name="quiz-type" value="true-false" /><span>True / false</span></label>
              <label class="quiz-chip"><input type="checkbox" name="quiz-type" value="complete" /><span>Fill in the blank</span></label>
              <label class="quiz-chip"><input type="checkbox" name="quiz-type" value="scientific-term" /><span>Scientific term</span></label>
              <label class="quiz-chip"><input type="checkbox" name="quiz-type" value="short-answer" /><span>Short answer</span></label>
              <label class="quiz-chip"><input type="checkbox" name="quiz-type" value="matching" /><span>Matching</span></label>
            </div>
          </div>
          <div class="quiz-count-section">
            <span class="quiz-section-label">Number of questions</span>
            <div id="quiz-count-row" class="quiz-count-row">
              <button type="button" class="quiz-count-btn" data-count="5">5</button>
              <button type="button" class="quiz-count-btn" data-count="10">10</button>
              <button type="button" class="quiz-count-btn active" data-count="20">20</button>
              <button type="button" class="quiz-count-btn" data-count="30">30</button>
              <button type="button" class="quiz-count-btn quiz-count-ai" data-count="ai">AI picks</button>
            </div>
          </div>
          <button type="button" id="quiz-generate" class="primary-btn clean-hover quiz-generate-btn nexus-btn-primary-gradient">Generate quiz</button>
        </div>
        <div id="quiz-loading" class="quiz-loading hidden">
          <div class="quiz-loading-atom assistant-atom atom-3d" aria-hidden="true">
            <span class="atom-nucleus"></span>
            <span class="atom-ring ring-x"><span class="atom-electron"></span></span>
            <span class="atom-ring ring-y"><span class="atom-electron"></span></span>
          </div>
          <p>Generating your quiz…</p>
        </div>
        <div id="quiz-display" class="quiz-display hidden"></div>
        <div id="quiz-results" class="quiz-results hidden"></div>
        <div class="quiz-modal-actions">
          <button type="button" id="quiz-submit" class="primary-btn clean-hover hidden nexus-btn-primary-gradient">Submit answers</button>
          <button type="button" id="quiz-retry" class="secondary-btn clean-hover hidden">Try again</button>
        </div>
      </div>
    </div>

    <div id="modal-delete-account" class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-delete-account-title">
      <div class="modal-backdrop"></div>
      <div class="modal-card glass modal-delete-account-card">
        <h2 id="modal-delete-account-title">Delete account permanently</h2>
        <p class="modal-note">
          This permanently deletes your profile, conversations, and saved data. This action cannot be undone.
        </p>
        <label for="modal-delete-account-input" class="modal-note">
          Type <strong>DELETE MY ACCOUNT</strong> to confirm:
        </label>
        <input
          type="text"
          id="modal-delete-account-input"
          class="modal-input"
          placeholder="DELETE MY ACCOUNT"
          autocomplete="off"
          spellcheck="false"
        />
        <p id="modal-delete-account-error" class="modal-note hidden" role="alert"></p>
        <div class="modal-actions">
          <button type="button" id="modal-delete-account-cancel" class="secondary-btn clean-hover">Cancel</button>
          <button type="button" id="modal-delete-account-confirm" class="danger-btn clean-hover" disabled>Delete account</button>
        </div>
      </div>
    </div>

    <button type="button" id="admin-monitor-fab" class="admin-monitor-fab hidden" aria-label="Open admin monitor" title="Developer monitor"></button>

    <div id="admin-monitor" class="admin-monitor admin-monitor--fabbed hidden" aria-label="Admin Monitor">
      <div id="admin-monitor-handle" class="admin-monitor-handle">
        <span>Admin Monitor</span>
        <button type="button" id="admin-monitor-close" aria-label="Close monitor">×</button>
      </div>
      <div class="admin-monitor-body">
        <div class="admin-stat"><span>Thinking Timer</span><strong id="admin-thinking-seconds">0.00s</strong></div>
        <div class="admin-stat"><span>File Status</span><strong id="admin-file-status">N/A</strong></div>
        <div class="admin-stat"><span>File Error</span><strong id="admin-file-error">-</strong></div>
        <div class="admin-stat"><span>Active Users</span><strong id="admin-active-users">0</strong></div>
        <div class="admin-stat"><span>Total Users</span><strong id="admin-total-users">0</strong></div>
        <div class="admin-stat"><span>API Latency</span><strong id="admin-api-latency">0ms</strong></div>
        <div class="admin-stat"><span>Quiz Submit</span><strong id="admin-quiz-submit">idle</strong></div>
        <div class="admin-stat"><span>KV Storage</span><strong id="admin-kv-status">unknown</strong></div>
        <div class="admin-stat"><span>KV Error</span><strong id="admin-kv-error">-</strong></div>
        <div class="admin-stat admin-blob-block">
          <span>Blob (client)</span>
          <strong id="admin-blob-client-error" class="admin-blob-client-error" title="">-</strong>
        </div>
        <div class="admin-stat"><span>Gemini last err</span><strong id="admin-gemini-error" class="admin-gemini-error" title="">-</strong></div>
        <div class="admin-stat admin-stat-wide"><span>Gemini Files API</span><strong id="admin-gemini-compress" class="admin-gemini-compress" title="">-</strong></div>
        <div class="admin-stat"><span>Secret Key</span><strong id="admin-secret-key-status">unknown</strong></div>
        <div class="admin-stat admin-tts-block">
          <span>Gemini TTS</span>
          <strong id="admin-tts-status">idle</strong>
          <span class="admin-tts-error-label">Last error:</span>
          <strong id="admin-tts-error" class="admin-tts-error" title="">-</strong>
          <span class="admin-tts-error-label">Detail:</span>
          <strong id="admin-tts-detail" class="admin-tts-error" title="">-</strong>
        </div>
        <div id="admin-activity-feed" class="admin-activity-feed"></div>
      </div>
      <div id="admin-monitor-resize" class="admin-monitor-resize" aria-hidden="true"></div>
    </div>
  </div>

  <div id="account-created-overlay" class="account-created-overlay hidden" aria-live="polite" aria-hidden="true">
    <div class="account-created-inner">
      <div class="account-created-mark-wrap">
        <svg class="account-created-svg" viewBox="0 0 120 120" aria-hidden="true">
          <circle class="account-created-circle" cx="60" cy="60" r="44" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" />
          <path class="account-created-check" fill="none" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" d="M38 62 L54 78 L86 46" />
        </svg>
      </div>
      <p class="account-created-title">Account created</p>
    </div>
  </div>

  <div id="nexus-theme-transition" class="nexus-theme-transition" aria-hidden="true">
    <div class="nexus-theme-transition__bg" aria-hidden="true"></div>
    <div class="nexus-theme-transition__orb" aria-hidden="true">
      <svg class="nexus-theme-transition__svg" viewBox="0 0 120 120" aria-hidden="true">
        <g class="nexus-theme-transition__sun" fill="none" stroke-width="3" stroke-linecap="round">
          <circle cx="60" cy="60" r="18" fill="#fff" stroke="#0f172a" />
          <path stroke="#0f172a" d="M60 28v-10M60 102v-10M28 60h-10M102 60h-10M38 38l-7-7M89 89l-7-7M38 82l-7 7M89 31l-7 7" />
        </g>
        <path
          class="nexus-theme-transition__moon"
          fill="#f8fafc"
          stroke="#0f172a"
          stroke-width="2.5"
          d="M72 38a22 22 0 1 0 0 44 18 18 0 1 1 0-44z"
        />
      </svg>
    </div>
  </div>


  <script src="/nexus-subpage.js"></script>
  <script src="animations.js"></script>
  <script src="app.js"></script>
</body>
</html>