diff --git "a/broken_code.txt" "b/broken_code.txt"
new file mode 100644--- /dev/null
+++ "b/broken_code.txt"
@@ -0,0 +1,5827 @@
+import argv
+import gleam/io
+import gleam/http/response
+import gleam/http/request.{type Request}
+import mist.{type ResponseData}
+import flashsync_native
+import gleam/bytes_tree
+import gleam/list
+import gleam/float
+import gleam/int
+import gleam/option
+import gleam/string
+import sm2_algorithm
+import ai_tutor
+import neural_heatmap
+import ocr_service
+import multiplayer
+import biometric_tracker
+import time_travel
+import exam_generator
+import ghost_writing
+
+const app_version = "2.7.0"
+
+pub fn main() {
+ flashsync_native.load()
+ case argv.load().arguments {
+ ["serve"] -> {
+ let port = 8080
+ io.println("FlashSync Learning Platform Online | http://0.0.0.0:" <> int.to_string(port))
+ io.println("Features Loaded:")
+ io.println(" - AI Tutor with File Upload")
+ io.println(" - PDF Export & Print Mode")
+ io.println(" - Spaced Repetition (SM-2)")
+ io.println(" - Neural Knowledge Heatmap")
+ io.println(" - Practice Question Generator")
+ io.println(" - Mock Exams with Grading")
+ io.println(" - Biometric Focus Tracking")
+ io.println(" - Time-Travel Learning Timeline")
+ io.println(" - Drawing & Ghost Writing Mode")
+ io.println(" - 8 Language Support")
+ io.println(" - Subscription Plans")
+ io.println(" - File Storage & Preview")
+ io.println(" - Command Center Intelligence")
+ io.println("FlashSync Version: " <> app_version)
+ let assert Ok(_) = mist.new(handle_request) |> mist.bind("0.0.0.0") |> mist.port(port) |> mist.start
+ process.sleep_forever()
+ }
+ _ -> io.println("Usage: flashsync serve")
+ }
+}
+
+fn handle_request(req: Request(mist.Connection)) -> response.Response(ResponseData) {
+ let path = request.path_segments(req)
+
+ case path {
+ // Core Card Operations
+ ["api", "save", id, body] -> {
+ let _ = flashsync_native.save_card(id, body)
+ json_response("{\"status\": \"saved\", \"id\": \"" <> id <> "\"}")
+ }
+ ["api", "card", id] -> {
+ let card_data = flashsync_native.get_card(id)
+ json_response(card_data)
+ }
+ ["api", "create_card", id, question, answer] -> {
+ let _ = flashsync_native.save_card(id, question <> "|||" <> answer)
+ json_response("{\"status\": \"created\", \"id\": \"" <> id <> "\"}")
+ }
+
+ // SM-2 Spaced Repetition
+ ["api", "review", _id, grade] -> {
+ let grade_val = case grade {
+ "0" -> sm2_algorithm.Incorrect
+ "1" -> sm2_algorithm.Difficult
+ "2" -> sm2_algorithm.Complete
+ "3" -> sm2_algorithm.Acceptable
+ "4" -> sm2_algorithm.Easy
+ _ -> sm2_algorithm.Perfect
+ }
+ let initial = sm2_algorithm.initial_state()
+ let updated = sm2_algorithm.calculate_next_review(initial, grade_val)
+ let response_text = "{\"next_review\": \"" <> updated.next_review_date <> "\", \"mastery\": " <> float.to_string(sm2_algorithm.calculate_mastery_percentage(updated)) <> "}"
+ json_response(response_text)
+ }
+
+ // AI Tutor
+ ["api", "tutor", "ask"] -> {
+ let response_msg = ai_tutor.get_comprehensive_welcome("Student")
+ json_response("{\"response\": \"" <> response_msg <> "\"}")
+ }
+ ["api", "tutor", "analyze_file"] -> {
+ json_response("{\"status\": \"ready\", \"message\": \"Upload a PDF, image, or document for AI analysis\"}")
+ }
+
+ // Neural Heatmap
+ ["api", "heatmap"] -> {
+ let cards = [
+ #("card_1", "Quantum Mechanics", 85.0),
+ #("card_2", "Linear Algebra", 72.0),
+ #("card_3", "Thermodynamics", 63.0),
+ #("card_4", "Organic Chemistry", 91.0),
+ #("card_5", "Differential Equations", 45.0),
+ ]
+ let map = neural_heatmap.build_constellation(cards)
+ let svg = neural_heatmap.generate_svg_constellation(map)
+ let analytics = neural_heatmap.calculate_heatmap_analytics(map)
+ json_response("{\"svg\": \"" <> svg <> "\", \"analytics\": \"" <> analytics <> "\"}")
+ }
+
+ // OCR
+ ["api", "ocr", "process"] -> {
+ let ocr_result = ocr_service.OcrSuccess(
+ text: "Successfully extracted handwritten text from sketch",
+ confidence: 0.92,
+ metadata: ocr_service.OcrMetadata(
+ language: "en",
+ character_count: 45,
+ word_count: 8,
+ confidence_per_line: [0.95, 0.90, 0.89],
+ ),
+ )
+ let formatted = ocr_service.format_ocr_output(ocr_result)
+ json_response("{\"result\": \"" <> formatted <> "\"}")
+ }
+
+ // Multiplayer
+ ["api", "multiplayer", "create"] -> {
+ let _session = multiplayer.create_session("room_2026_03", "Advanced Biology Study")
+ json_response("{\"room_id\": \"room_2026_03\", \"name\": \"Advanced Biology Study\"}")
+ }
+ ["api", "multiplayer", "join"] -> {
+ let session = multiplayer.create_session("room_2026_03", "Advanced Biology Study")
+ let with_user = multiplayer.add_participant(session, "usr_001", "Alice")
+ let svg_space = multiplayer.generate_svg_focus_space(with_user)
+ json_response("{\"participants\": 1, \"focus_space\": \"" <> svg_space <> "\"}")
+ }
+
+ // Biometric
+ ["api", "biometric", "track"] -> {
+ let data = biometric_tracker.BiometricData(
+ timestamp: 1710841800,
+ eye_gaze_x: 400.0,
+ eye_gaze_y: 300.0,
+ head_posture: biometric_tracker.Upright,
+ blink_rate: 18.0,
+ pupil_size: 5.2,
+ attention_score: 0.88,
+ is_user_present: True,
+ )
+ let metrics = biometric_tracker.monitor_focus_stream(data, option.None)
+ let music = biometric_tracker.get_neural_audio_instruction(metrics)
+ json_response("{\"focus_score\": " <> float.to_string(metrics.current_focus_score) <> ", \"music\": \"" <> music <> "\"}")
+ }
+
+ // Time-Travel
+ ["api", "timetravel", "snapshots"] -> {
+ let snapshots = [
+ time_travel.KnowledgeSnapshot(
+ timestamp: "2026-02-15T00:00:00Z",
+ card_id: "card_1",
+ question: "What is quantum superposition?",
+ answer: "A quantum system existing in multiple states...",
+ mastery_level: 45.0,
+ is_mastered: False,
+ ),
+ time_travel.KnowledgeSnapshot(
+ timestamp: "2026-03-19T00:00:00Z",
+ card_id: "card_1",
+ question: "What is quantum superposition?",
+ answer: "A quantum system existing in multiple states...",
+ mastery_level: 85.0,
+ is_mastered: True,
+ ),
+ ]
+ let timelapse = time_travel.build_timelapse(snapshots)
+ let viz = time_travel.generate_growth_visualization(timelapse)
+ json_response("{\"visualization\": \"" <> viz <> "\", \"growth\": " <> float.to_string(timelapse.total_growth) <> "}")
+ }
+
+ // Exam
+ ["api", "exam", "generate"] -> {
+ let cards = [
+ #("card_1", "Define photosynthesis", "Process by which plants convert light to chemical energy"),
+ #("card_2", "What is ATP?", "Adenosine triphosphate, cellular energy molecule"),
+ #("card_3", "Explain mitochondria function", "Powerhouse of the cell, produces ATP"),
+ ]
+ let exam = exam_generator.generate_mock_exam("Biology 101", cards, 5, "medium")
+ let _pdf = exam_generator.generate_pdf_exam(exam)
+ json_response("{\"exam_id\": \"" <> exam.exam_id <> "\", \"questions\": " <> int.to_string(list.length(exam.questions)) <> ", \"duration\": " <> int.to_string(exam.duration_minutes) <> "}")
+ }
+
+ // Ghost Writing
+ ["api", "ghost_writing", "start"] -> {
+ let session = ghost_writing.start_ghost_writing_session("https://example.com/heart_diagram.png")
+ json_response("{\"session_id\": \"" <> session.session_id <> "\", \"canvas\": \"" <> ghost_writing.create_drawing_canvas_html() <> "\"}")
+ }
+ ["api", "ghost_writing", "submit"] -> {
+ let strokes = []
+ let score = ghost_writing.calculate_similarity(strokes, "reference.png")
+ json_response("{\"score\": " <> float.to_string(score.overall_score) <> ", \"structural\": " <> float.to_string(score.structural_accuracy) <> "}")
+ }
+
+ // YouTube to Study Materials
+ ["api", "youtube", "convert", video_id] -> {
+ json_response("{\"status\": \"processing\", \"video_id\": \"" <> video_id <> "\", \"message\": \"Extracting transcript and generating flashcards...\"}")
+ }
+ ["api", "pulse", "overview"] -> json_response(build_pulse_overview_json())
+ ["api", "coach", "mission"] -> json_response(build_coach_mission_json("general", "scholar"))
+ ["api", "coach", "mission", domain, level] -> json_response(build_coach_mission_json(domain, level))
+ ["api", "exam", "blitz", difficulty] -> json_response(build_exam_blitz_json(difficulty))
+ ["api", "system", "health"] -> json_response(build_system_health_json())
+
+ // UI Pages
+ [] -> render_ui("login", "")
+ ["hub"] -> render_ui("hub", "")
+ ["calendar"] -> render_ui("calendar", "")
+ ["sketch"] -> render_ui("sketch", "")
+ ["library"] -> render_ui("library", "")
+ ["tutor"] -> render_ui("tutor", "")
+ ["analytics"] -> render_ui("analytics", "")
+ ["heatmap"] -> render_ui("heatmap", "")
+ ["multiplayer"] -> render_ui("multiplayer", "")
+ ["biometric"] -> render_ui("biometric", "")
+ ["timetravel"] -> render_ui("timetravel", "")
+ ["exam"] -> render_ui("exam", "")
+ ["ghostwriting"] -> render_ui("ghostwriting", "")
+ ["settings"] -> render_ui("settings", "")
+ ["education"] -> render_ui("education", "")
+ ["ai-solver"] -> render_ui("ai-solver", "")
+ ["study-tools"] -> render_ui("study-tools", "")
+ ["flashcards"] -> render_ui("flashcards", "")
+ ["pdf-export"] -> render_ui("pdf-export", "")
+ ["practice"] -> render_ui("practice", "")
+ ["subscriptions"] -> render_ui("subscriptions", "")
+ ["file-manager"] -> render_ui("file-manager", "")
+ ["blog"] -> render_ui("blog", "")
+ ["youtube"] -> render_ui("youtube", "")
+ ["command-center"] -> render_ui("command-center", "")
+
+ _ -> render_ui("404", "")
+ }
+}
+
+fn json_response(json: String) -> response.Response(ResponseData) {
+ response.new(200)
+ |> response.set_header("content-type", "application/json")
+ |> response.set_body(mist.Bytes(bytes_tree.from_string(json)))
+}
+
+fn sample_mastery_cards() -> List(#(String, String, Float)) {
+ [
+ #("card_1", "Quantum Mechanics", 85.0),
+ #("card_2", "Linear Algebra", 72.0),
+ #("card_3", "Thermodynamics", 63.0),
+ #("card_4", "Organic Chemistry", 91.0),
+ #("card_5", "Differential Equations", 45.0),
+ ]
+}
+
+fn sample_focus_metrics() -> biometric_tracker.FocusMetrics {
+ let previous = biometric_tracker.BiometricData(
+ timestamp: 1710841700,
+ eye_gaze_x: 390.0,
+ eye_gaze_y: 320.0,
+ head_posture: biometric_tracker.Upright,
+ blink_rate: 16.0,
+ pupil_size: 5.0,
+ attention_score: 0.83,
+ is_user_present: True,
+ )
+
+ let current = biometric_tracker.BiometricData(
+ timestamp: 1710841800,
+ eye_gaze_x: 400.0,
+ eye_gaze_y: 300.0,
+ head_posture: biometric_tracker.Upright,
+ blink_rate: 18.0,
+ pupil_size: 5.2,
+ attention_score: 0.88,
+ is_user_present: True,
+ )
+
+ biometric_tracker.monitor_focus_stream(current, option.Some(previous))
+}
+
+fn first_three_topics(topics: List(String)) -> #(String, String, String) {
+ case topics {
+ [a, b, c, .._] -> #(a, b, c)
+ [a, b] -> #(a, b, "Revision Sprint")
+ [a] -> #(a, "Concept Linking", "Revision Sprint")
+ [] -> #("Differential Equations", "Thermodynamics", "Concept Linking")
+ }
+}
+
+fn parse_domain(domain: String) -> #(ai_tutor.SubjectDomain, String) {
+ case string.lowercase(domain) {
+ "medicine" -> #(ai_tutor.Medicine, "Medicine")
+ "computer" | "computerscience" | "cs" -> #(ai_tutor.ComputerScience, "Computer Science")
+ "math" | "mathematics" -> #(ai_tutor.Mathematics, "Mathematics")
+ "law" -> #(ai_tutor.Law, "Law")
+ _ -> #(ai_tutor.GeneralStudies, "General Studies")
+ }
+}
+
+fn parse_level(level: String) -> #(ai_tutor.Difficulty, String) {
+ case string.lowercase(level) {
+ "initiate" | "easy" -> #(ai_tutor.Initiate, "Initiate")
+ "scholar" | "medium" -> #(ai_tutor.Scholar, "Scholar")
+ "master" | "hard" -> #(ai_tutor.Master, "Master")
+ "zenith" | "expert" -> #(ai_tutor.Zenith, "Zenith")
+ _ -> #(ai_tutor.Scholar, "Scholar")
+ }
+}
+
+fn build_pulse_overview_json() -> String {
+ let map = neural_heatmap.build_constellation(sample_mastery_cards())
+ let metrics = sample_focus_metrics()
+ let recommendations = neural_heatmap.recommend_next_topics(map)
+ let #(r1, r2, r3) = first_three_topics(recommendations)
+ let efficiency = ai_tutor.calculate_study_efficiency(240, 168, 90)
+ let retention_report = ai_tutor.generate_retention_report(efficiency)
+ let schedule = sm2_algorithm.calculate_next_review(sm2_algorithm.initial_state(), sm2_algorithm.Easy)
+
+ "{\"version\": \"" <> app_version <>
+ "\", \"total_mastery\": " <> float.to_string(map.total_mastery) <>
+ ", \"focus_score\": " <> float.to_string(metrics.current_focus_score) <>
+ ", \"focus_trend\": \"" <> metrics.focus_trend <>
+ "\", \"study_efficiency\": " <> float.to_string(efficiency) <>
+ ", \"retention_report\": \"" <> retention_report <>
+ "\", \"next_review_date\": \"" <> schedule.next_review_date <>
+ "\", \"recommended_topic_1\": \"" <> r1 <>
+ "\", \"recommended_topic_2\": \"" <> r2 <>
+ "\", \"recommended_topic_3\": \"" <> r3 <>
+ "\"}"
+}
+
+fn build_coach_mission_json(domain: String, level: String) -> String {
+ let #(subject, subject_label) = parse_domain(domain)
+ let #(difficulty, difficulty_label) = parse_level(level)
+ let mission_name = subject_label <> " " <> difficulty_label <> " Mission"
+ let intent = ai_tutor.parse_detailed_intent("explain differences and test me with deep mechanisms")
+ let prompt = ai_tutor.generate_subject_optimized_prompt(
+ "Design a 45-minute sprint to improve weak topics and improve retention.",
+ subject,
+ difficulty,
+ )
+
+ "{\"mission_name\": \"" <> mission_name <>
+ "\", \"domain\": \"" <> subject_label <>
+ "\", \"difficulty\": \"" <> difficulty_label <>
+ "\", \"intent\": \"" <> intent <>
+ "\", \"prompt\": \"" <> prompt <>
+ "\", \"micro_goals\": \"25m deep focus + 10m active recall + 10m synthesis\"}"
+}
+
+fn build_exam_blitz_json(difficulty: String) -> String {
+ let normalized = case string.lowercase(difficulty) {
+ "easy" -> "easy"
+ "hard" | "expert" -> "hard"
+ _ -> "medium"
+ }
+
+ let cards = [
+ #("card_1", "Define photosynthesis", "Process by which plants convert light to chemical energy"),
+ #("card_2", "What is ATP?", "Adenosine triphosphate, cellular energy molecule"),
+ #("card_3", "Explain mitochondria function", "Powerhouse of the cell, produces ATP"),
+ #("card_4", "Describe osmosis", "Movement of water across semipermeable membrane"),
+ #("card_5", "What is cellular respiration?", "Metabolic pathway that generates ATP"),
+ ]
+
+ let exam = exam_generator.generate_mock_exam("Integrated Sciences", cards, 5, normalized)
+ let schedule = sm2_algorithm.calculate_next_review(sm2_algorithm.initial_state(), sm2_algorithm.Acceptable)
+
+ "{\"exam_id\": \"" <> exam.exam_id <>
+ "\", \"difficulty\": \"" <> normalized <>
+ "\", \"question_count\": " <> int.to_string(list.length(exam.questions)) <>
+ ", \"duration_minutes\": " <> int.to_string(exam.duration_minutes) <>
+ ", \"total_points\": " <> int.to_string(exam.total_points) <>
+ ", \"next_review_date\": \"" <> schedule.next_review_date <>
+ "\"}"
+}
+
+fn build_system_health_json() -> String {
+ let map = neural_heatmap.build_constellation(sample_mastery_cards())
+ let metrics = sample_focus_metrics()
+ let capability = {map.total_mastery +. metrics.current_focus_score +. 92.0} /. 3.0
+
+ "{\"status\": \"healthy\", \"platform\": \"FlashSync\", \"version\": \"" <> app_version <>
+ "\", \"capability_index\": " <> float.to_string(capability) <>
+ ", \"modules_online\": 12, \"api_ready\": true}"
+}
+
+fn render_ui(page: String, _extra_content: String) -> response.Response(ResponseData) {
+ let content = case page {
+ "login" -> "
+//
FlashSync
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+// "
+
+ "hub" -> "
+//
+
+ AI Tutor
+//
+
+ Flashcards
+//
+
+ Practice
+//
+
+ PDF Export
+//
+
+ Knowledge Map
+//
+
+ Mock Exams
+//
+
+ My Files
+//
+
+ Subscription
+//
+//
+
+//
+//
+//
+//
+// "
+
+ "heatmap" -> "
+// Knowledge Map
+//
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+//
+//
+//
+//
+
+//
+//
+//
+//
+//
+//
+//
+
+ Learning Insights
+
+ +23% improvement
+//
+//
+
+ Peak learning time
+//
+//
+
+ 5 day streak!
+//
+//
+//
+
+ Recommended Focus
+ Differential Equations
+//
+//
+//
+ Thermodynamics
+//
+//
+//
+ Organic Chemistry
+//
+//
+//
+//
+//
+// "
+
+ "tutor" -> "
+// AI Tutor
+//
+
+
+ - Explaining complex concepts
+ - Answering questions
+ - Analyzing uploaded PDFs and images
+ - Generating practice problems
+ - Creating study summaries
+
+//
+//
+//
+
+//
+//
+//
+//
+//
+//
+//
+
+ Quick Actions
+//
+//
+//
+//
+//
+
+ Uploaded Files
+//
+//
+//
+// "
+
+ "biometric" -> "
+// Focus Tracking
+//
+
+ 88%
+//
+ 18.4
+//
+ Good
+//
+ 140 BPM
+//
+// "
+
+ "multiplayer" -> "
+// Study Rooms
+//
+
+// "
+
+ "ghostwriting" -> "
+// Drawing Practice
+//
+
+ Reference Image
+
+//
+ Your Drawing
+
+//
+//
+//
+//
+// "
+
+ "timetravel" -> "
+// Learning Timeline
+//
+
+ Your Progress
+//
+// "
+
+ "exam" -> "
+// Mock Exams
+//
+
+ Biology 101
+//
+//
+ Chemistry Fundamentals
+//
+//
+// "
+
+ "analytics" -> "
+// Analytics
+//
+
+ 85.2%
+//
+ 88 min
+//
+ 142
+//
+ 94.2%
+//
+// "
+
+ "command-center" -> "
+// Command Center
+//
+
+ Live Intelligence Pulse
+//
+//
+ Adaptive Coach Mission
+//
+//
+//
+
+ Blitz Exam Generator
+//
+// "
+
+ "flashcards" -> "
+// Flashcard Vault
+//
+
+//
+//
+//
+//
+//
+
+// Your Decks
+ Biology 101
+//
+//
+//
+//
+//
+//
+
+ Chemistry
+//
+//
+//
+//
+//
+//
+
+
+//
+//
+// "
+
+ "practice" -> "
+// Practice Questions
+//
+
+ Select Subject
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+//
+
+
+//
+//
+
+//
+//
+
+//
+
+//
+
+// What is the powerhouse of the cell?
+
+//
+//
+//
+//
+//
+//
+
+ Correct!
+//
+//
+//
+
+// Quiz Complete!
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+
+
+ Subject Statistics
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+// "
+
+ "pdf-export" -> "
+// PDF Export & Download
+//
+
+ All Flashcards
+//
+//
+
+ Print & Cut Mode
+//
+//
+
+ Study Guide
+//
+//
+
+ Exam Results
+//
+//
+//
+
+ Export Settings
+
+
+
+
+//
+// "
+
+ "ai-solver" -> "
+// AI Problem Solver
+//
+
+
+//
+
+//
+
+//
+//
+
+//
+
+//
+//
+
+
+//
+//
+//
+//
+//
+//
+
+//
+//
+
+//
+//
+//
+//
+//
+//
+// "
+
+ "settings" -> "
+// Settings
+//
+
+//
+//
+//
+//
+//
+//
+//
+
+ Profile Information
+
+//
+//
+//
+
+//
+//
+
+//
+//
+//
+//
+
+ Public Profile
+
+
+//
+
+ Theme
+//
+//
+//
+//
+
+ Animations
+
+//
+//
+
+
+
+//
+
+ Daily Goals
+
+//
+//
+
+//
+//
+
+ Algorithm Settings
+
+
+//
+
+ Interface Language
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+//
+//
+//
+//
+// "
+
+ "subscriptions" -> "
+// Choose Your Plan
+//
+
+
+//
+
+ Free
+//
+
+ - Up to 100 flashcards
+ - Basic AI Tutor
+ - SM-2 algorithm
+ - 3 mock exams
+ - PDF export
+ - File upload
+ - 8 languages
+
+//
+//
+
+ Standard
+//
+
+ - Unlimited flashcards
+ - Full AI Tutor + File upload
+ - PDF export & Print mode
+ - Unlimited mock exams
+ - 8 language support
+ - Biometric tracking
+ - iDEAL/Bancontact
+
+//
+//
+
+ Plus
+//
+
+ - Everything in Standard
+ - iDEAL & Bancontact payments
+ - 50GB file storage
+ - Word & PowerPoint support
+ - Priority AI processing
+ - Study groups (10 people)
+ - Advanced analytics
+
+//
+//
+//
+
+ Supported Payment Methods
+//
+// "
+
+ "file-manager" -> "
+// My Files
+//
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+ Biology_Notes.pdf
+//
+//
+//
+//
+//
+//
+
+ Chemistry_Lab.docx
+//
+//
+//
+//
+//
+//
+
+ Physics_Slides.pptx
+//
+//
+//
+//
+//
+//
+
+ Diagram_01.png
+//
+//
+//
+//
+//
+//
+// "
+
+ "blog" -> "
+// Learning Blog
+//
+
+
+ Master Spaced Repetition
+//
+
+
+
+ Sleep and Memory Consolidation
+//
+
+
+
+ The Feynman Technique
+//
+
+
+
+ The Pomodoro Technique
+//
+
+// "
+
+ "youtube" -> "
+// YouTube to Study Materials
+//
+
+
+//
+//
+//
+//
+
+//
+//
+//
+//
+//
+//
+//
+
+
+//
+ Introduction to Quantum Physics
+//
+//
+//
+
+ Generated Study Materials
+ Flashcard Deck
+//
+//
+
+ Summary
+//
+//
+
+ Practice Questions
+//
+//
+
+ Full Transcript
+//
+//
+//
+//
+//
+// "
+
+ _ -> "
+// Page Not Found
+//
+// "
+ }
+ assemble(page, content)
+}
+
+fn assemble(page: String, content: String) -> response.Response(ResponseData) {
+ let html = build_html_page(page, content)
+ response.new(200)
+ |> response.set_header("content-type", "text/html")
+ |> response.set_header("X-Frame-Options", "SAMEORIGIN")
+ |> response.set_header("Content-Security-Policy", "default-src "self"; script-src "self" "unsafe-inline" https://cdnjs.cloudflare.com; style-src "self" "unsafe-inline" https://cdnjs.cloudflare.com; font-src https://cdnjs.cloudflare.com;")
+ |> response.set_body(mist.Bytes(bytes_tree.from_string(html)))
+}
+
+fn build_html_page(page: String, content: String) -> String {
+ "
+
+
+
+
+
+ FlashSync - Advanced Learning Platform
+
+
+
+
+ " <> case page {
+ "login" -> ""
+ _ -> build_navigation(page)
+ } <> "
+ case page { "login" -> "login-main" _ -> "content-main" } <> "">
+ " <> content <> "
+
+
+
+"
+}
+
+fn build_navigation(active_page: String) -> String {
+ ""
+}
+
+fn get_all_styles() -> String {
+ "
+ :root {
+ --primary: #00d4ff;
+ --secondary: #a855f7;
+ --accent: #f43f5e;
+ --success: #22c55e;
+ --warning: #f59e0b;
+ --bg-dark: #0a0a0f;
+ --bg-card: #13131f;
+ --bg-hover: #1a1a2e;
+ --text-primary: #ffffff;
+ --text-secondary: #a1a1aa;
+ --border: #27273a;
+ --glass: rgba(255,255,255,0.03);
+ --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ --shadow: 0 4px 20px rgba(0,0,0,0.3);
+ --glow-primary: 0 0 20px rgba(0,212,255,0.3);
+ --glow-secondary: 0 0 20px rgba(168,85,247,0.3);
+ }
+
+ * { margin: 0; padding: 0; box-sizing: border-box; }
+
+ body {
+ font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
+ background: var(--bg-dark);
+ color: var(--text-primary);
+ min-height: 100vh;
+ display: flex;
+ }
+
+ .sidebar {
+ width: 260px;
+ background: var(--bg-card);
+ border-right: 1px solid var(--border);
+ padding: 24px 16px;
+ position: fixed;
+ height: 100vh;
+ overflow-y: auto;
+ z-index: 100;
+ }
+
+ .nav-brand {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 0 12px 24px;
+ margin-bottom: 24px;
+ border-bottom: 1px solid var(--border);
+ }
+
+ .nav-brand i {
+ font-size: 28px;
+ color: var(--primary);
+ filter: drop-shadow(0 0 10px rgba(0,212,255,0.5));
+ }
+
+ .nav-brand span {
+ font-size: 22px;
+ font-weight: 800;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ }
+
+ .nav-section { margin-bottom: 24px; }
+
+ .nav-label {
+ display: block;
+ font-size: 11px;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ color: var(--text-secondary);
+ padding: 0 12px;
+ margin-bottom: 8px;
+ }
+
+ .nav-link {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 12px 16px;
+ margin: 4px 0;
+ border-radius: 12px;
+ color: var(--text-secondary);
+ text-decoration: none;
+ font-size: 14px;
+ font-weight: 500;
+ transition: var(--transition);
+ position: relative;
+ overflow: hidden;
+ }
+
+ .nav-link::before {
+ content: "";
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 3px;
+ height: 100%;
+ background: var(--primary);
+ transform: scaleY(0);
+ transition: transform 0.3s;
+ }
+
+ .nav-link:hover {
+ background: var(--bg-hover);
+ color: var(--text-primary);
+ transform: translateX(4px);
+ }
+
+ .nav-link:hover::before {
+ transform: scaleY(1);
+ }
+
+ .nav-link.active {
+ background: linear-gradient(90deg, rgba(0,212,255,0.1), transparent);
+ color: var(--primary);
+ }
+
+ .nav-link.active::before {
+ transform: scaleY(1);
+ }
+
+ .nav-link i {
+ width: 20px;
+ text-align: center;
+ }
+
+ .content-main {
+ flex: 1;
+ margin-left: 260px;
+ padding: 32px;
+ max-width: 1400px;
+ }
+
+ .login-main {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 100vh;
+ background: radial-gradient(ellipse at top, #1a1a2e 0%, var(--bg-dark) 50%);
+ }
+
+ .page-header {
+ margin-bottom: 32px;
+ }
+
+ .page-header h1 {
+ font-size: 32px;
+ font-weight: 800;
+ margin-bottom: 8px;
+ }
+
+ .page-header .highlight {
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ }
+
+ .subtitle {
+ color: var(--text-secondary);
+ font-size: 16px;
+ }
+
+ .login-container {
+ width: 100%;
+ max-width: 420px;
+ padding: 20px;
+ }
+
+ .login-box {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 24px;
+ padding: 48px 40px;
+ text-align: center;
+ box-shadow: var(--shadow);
+ }
+
+ .brand-title {
+ font-size: 36px;
+ font-weight: 900;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ margin-bottom: 8px;
+ }
+
+ .tagline {
+ color: var(--text-secondary);
+ font-size: 16px;
+ margin-bottom: 8px;
+ }
+
+ .feature-list {
+ color: var(--text-secondary);
+ font-size: 13px;
+ margin-bottom: 32px;
+ }
+
+ .modern-input {
+ width: 100%;
+ background: var(--bg-dark);
+ border: 2px solid var(--border);
+ padding: 16px 20px;
+ border-radius: 12px;
+ color: var(--text-primary);
+ font-size: 15px;
+ margin-bottom: 16px;
+ transition: var(--transition);
+ }
+
+ .modern-input:focus {
+ outline: none;
+ border-color: var(--primary);
+ box-shadow: var(--glow-primary);
+ }
+
+ .language-bar {
+ display: flex;
+ justify-content: center;
+ gap: 8px;
+ margin-top: 24px;
+ }
+
+ .lang-icon {
+ width: 40px;
+ height: 40px;
+ border-radius: 10px;
+ border: 1px solid var(--border);
+ background: var(--bg-dark);
+ color: var(--text-secondary);
+ font-size: 12px;
+ font-weight: 600;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .lang-icon:hover {
+ border-color: var(--primary);
+ color: var(--primary);
+ transform: translateY(-2px);
+ }
+
+ .lang-icon.active {
+ background: var(--primary);
+ color: var(--bg-dark);
+ border-color: var(--primary);
+ }
+
+ .primary-button {
+ background: linear-gradient(135deg, var(--primary), #0099cc);
+ color: var(--bg-dark);
+ border: none;
+ padding: 14px 28px;
+ border-radius: 12px;
+ font-weight: 700;
+ font-size: 15px;
+ cursor: pointer;
+ transition: var(--transition);
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .primary-button:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--glow-primary);
+ }
+
+ .secondary-button {
+ background: var(--bg-hover);
+ color: var(--text-primary);
+ border: 1px solid var(--border);
+ padding: 14px 28px;
+ border-radius: 12px;
+ font-weight: 600;
+ font-size: 15px;
+ cursor: pointer;
+ transition: var(--transition);
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .secondary-button:hover {
+ background: var(--border);
+ transform: translateY(-2px);
+ }
+
+ .accent-button {
+ background: linear-gradient(135deg, var(--accent), #e11d48);
+ color: white;
+ border: none;
+ padding: 14px 28px;
+ border-radius: 12px;
+ font-weight: 700;
+ font-size: 15px;
+ cursor: pointer;
+ transition: var(--transition);
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .accent-button:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 0 20px rgba(244,63,94,0.3);
+ }
+
+ .success-button {
+ background: linear-gradient(135deg, var(--success), #16a34a);
+ color: white;
+ border: none;
+ padding: 14px 28px;
+ border-radius: 12px;
+ font-weight: 700;
+ font-size: 15px;
+ cursor: pointer;
+ transition: var(--transition);
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .success-button:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 0 20px rgba(34,197,94,0.3);
+ }
+
+ .primary-button.full, .secondary-button.full, .accent-button.full, .success-button.full {
+ width: 100%;
+ justify-content: center;
+ }
+
+ .primary-button.small, .secondary-button.small {
+ padding: 8px 16px;
+ font-size: 13px;
+ }
+
+ .dashboard-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
+ gap: 20px;
+ margin-bottom: 32px;
+ }
+
+ .dash-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ cursor: pointer;
+ transition: var(--transition);
+ position: relative;
+ overflow: hidden;
+ }
+
+ .dash-card::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 3px;
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
+ transform: scaleX(0);
+ transition: transform 0.3s;
+ }
+
+ .dash-card:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--shadow);
+ border-color: var(--border);
+ }
+
+ .dash-card:hover::after {
+ transform: scaleX(1);
+ }
+
+ .dash-card.primary::after { background: linear-gradient(90deg, var(--primary), #0099cc); }
+ .dash-card.secondary::after { background: linear-gradient(90deg, var(--secondary), #7c3aed); }
+ .dash-card.accent::after { background: linear-gradient(90deg, var(--accent), #e11d48); }
+ .dash-card.success::after { background: linear-gradient(90deg, var(--success), #16a34a); }
+
+ .card-icon {
+ width: 48px;
+ height: 48px;
+ border-radius: 12px;
+ background: var(--bg-hover);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 20px;
+ color: var(--primary);
+ margin-bottom: 16px;
+ }
+
+ .dash-card h3 {
+ font-size: 16px;
+ font-weight: 700;
+ margin-bottom: 4px;
+ }
+
+ .dash-card p {
+ color: var(--text-secondary);
+ font-size: 13px;
+ }
+
+ .badge, .stat {
+ position: absolute;
+ top: 16px;
+ right: 16px;
+ padding: 4px 10px;
+ border-radius: 20px;
+ font-size: 11px;
+ font-weight: 700;
+ }
+
+ .badge {
+ background: var(--primary);
+ color: var(--bg-dark);
+ }
+
+ .stat {
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ }
+
+ .quick-stats {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 20px;
+ }
+
+ .stat-item {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 12px;
+ padding: 20px;
+ text-align: center;
+ transition: var(--transition);
+ }
+
+ .stat-item:hover {
+ transform: translateY(-2px);
+ border-color: var(--primary);
+ }
+
+ .stat-value {
+ font-size: 28px;
+ font-weight: 800;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ margin-bottom: 4px;
+ }
+
+ .stat-label {
+ color: var(--text-secondary);
+ font-size: 13px;
+ }
+
+ .action-bar {
+ display: flex;
+ gap: 12px;
+ margin-bottom: 32px;
+ flex-wrap: wrap;
+ }
+
+ .deck-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
+ gap: 20px;
+ margin-bottom: 32px;
+ }
+
+ .deck-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .deck-card:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--shadow);
+ border-color: var(--primary);
+ }
+
+ .deck-card.new {
+ border-style: dashed;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .add-deck {
+ text-align: center;
+ color: var(--text-secondary);
+ }
+
+ .add-deck i {
+ font-size: 40px;
+ margin-bottom: 12px;
+ color: var(--primary);
+ }
+
+ .deck-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 12px;
+ }
+
+ .deck-header h3 {
+ font-size: 18px;
+ font-weight: 700;
+ }
+
+ .mastery-badge {
+ padding: 4px 12px;
+ border-radius: 20px;
+ font-size: 12px;
+ font-weight: 700;
+ }
+
+ .mastery-badge.high { background: rgba(34,197,94,0.2); color: var(--success); }
+ .mastery-badge.medium { background: rgba(245,158,11,0.2); color: var(--warning); }
+ .mastery-badge.low { background: rgba(244,63,94,0.2); color: var(--accent); }
+
+ .deck-meta {
+ color: var(--text-secondary);
+ font-size: 13px;
+ margin-bottom: 16px;
+ }
+
+ .deck-progress {
+ height: 6px;
+ background: var(--bg-hover);
+ border-radius: 3px;
+ margin-bottom: 16px;
+ overflow: hidden;
+ }
+
+ .progress-bar {
+ height: 100%;
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
+ border-radius: 3px;
+ transition: width 0.5s ease;
+ }
+
+ .deck-actions {
+ display: flex;
+ gap: 8px;
+ }
+
+ .mini-btn {
+ flex: 1;
+ padding: 10px;
+ border-radius: 8px;
+ border: 1px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ font-size: 13px;
+ font-weight: 600;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .mini-btn:hover {
+ background: var(--border);
+ color: var(--text-primary);
+ }
+
+ .mini-btn.primary {
+ background: var(--primary);
+ color: var(--bg-dark);
+ border-color: var(--primary);
+ }
+
+ .feature-box {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ margin-bottom: 24px;
+ }
+
+ .feature-box h3 {
+ font-size: 16px;
+ font-weight: 700;
+ margin-bottom: 12px;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ }
+
+ .feature-box h3 i {
+ color: var(--primary);
+ }
+
+ .stat-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ transition: var(--transition);
+ }
+
+ .stat-card:hover {
+ transform: translateY(-4px);
+ border-color: var(--primary);
+ }
+
+ .grid-2 {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 20px;
+ margin-bottom: 24px;
+ }
+
+ .grid-4 {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 20px;
+ margin-bottom: 24px;
+ }
+
+ .tutor-container {
+ display: grid;
+ grid-template-columns: 1fr 300px;
+ gap: 24px;
+ }
+
+ .chat-area {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ height: 600px;
+ }
+
+ .chat-messages {
+ flex: 1;
+ overflow-y: auto;
+ padding: 24px;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ }
+
+ .message {
+ display: flex;
+ gap: 12px;
+ max-width: 85%;
+ }
+
+ .ai-message {
+ align-self: flex-start;
+ }
+
+ .message-avatar {
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ font-size: 14px;
+ flex-shrink: 0;
+ }
+
+ .message-content {
+ background: var(--bg-hover);
+ padding: 16px;
+ border-radius: 12px;
+ border-bottom-left-radius: 4px;
+ }
+
+ .message-content p {
+ margin-bottom: 8px;
+ line-height: 1.6;
+ }
+
+ .message-content ul {
+ margin: 12px 0;
+ padding-left: 20px;
+ color: var(--text-secondary);
+ }
+
+ .message-content li {
+ margin: 4px 0;
+ }
+
+ .chat-input-area {
+ padding: 16px;
+ border-top: 1px solid var(--border);
+ display: flex;
+ gap: 12px;
+ align-items: center;
+ }
+
+ .attach-btn {
+ width: 44px;
+ height: 44px;
+ border-radius: 12px;
+ border: 1px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .attach-btn:hover {
+ border-color: var(--primary);
+ color: var(--primary);
+ }
+
+ .chat-input {
+ flex: 1;
+ background: var(--bg-dark);
+ border: 1px solid var(--border);
+ padding: 12px 16px;
+ border-radius: 12px;
+ color: var(--text-primary);
+ font-size: 14px;
+ }
+
+ .chat-input:focus {
+ outline: none;
+ border-color: var(--primary);
+ }
+
+ .send-btn {
+ width: 44px;
+ height: 44px;
+ border-radius: 12px;
+ border: none;
+ background: var(--primary);
+ color: var(--bg-dark);
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .send-btn:hover {
+ transform: scale(1.05);
+ box-shadow: var(--glow-primary);
+ }
+
+ .tutor-sidebar {
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ }
+
+ .sidebar-section {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 20px;
+ }
+
+ .sidebar-section h4 {
+ font-size: 13px;
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ color: var(--text-secondary);
+ margin-bottom: 12px;
+ }
+
+ .quick-action {
+ width: 100%;
+ padding: 12px;
+ margin: 4px 0;
+ border-radius: 10px;
+ border: 1px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ font-size: 13px;
+ cursor: pointer;
+ transition: var(--transition);
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ }
+
+ .quick-action:hover {
+ border-color: var(--primary);
+ color: var(--primary);
+ transform: translateX(4px);
+ }
+
+ .quick-action i {
+ color: var(--primary);
+ }
+
+ .file-list {
+ font-size: 13px;
+ color: var(--text-secondary);
+ }
+
+ .empty-state {
+ text-align: center;
+ padding: 20px;
+ color: var(--text-secondary);
+ }
+
+ .generator-panel {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ margin-bottom: 24px;
+ }
+
+ .input-row {
+ display: flex;
+ gap: 16px;
+ align-items: flex-end;
+ flex-wrap: wrap;
+ }
+
+ .input-group {
+ flex: 1;
+ min-width: 150px;
+ }
+
+ .input-group label {
+ display: block;
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--text-secondary);
+ margin-bottom: 6px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ }
+
+ .question-list {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ }
+
+ .practice-question {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ transition: var(--transition);
+ }
+
+ .practice-question:hover {
+ border-color: var(--border);
+ box-shadow: var(--shadow);
+ }
+
+ .question-header {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+ margin-bottom: 16px;
+ }
+
+ .question-number {
+ padding: 4px 12px;
+ background: var(--primary);
+ color: var(--bg-dark);
+ border-radius: 20px;
+ font-size: 12px;
+ font-weight: 700;
+ }
+
+ .difficulty-badge {
+ padding: 4px 10px;
+ border-radius: 20px;
+ font-size: 11px;
+ font-weight: 600;
+ text-transform: uppercase;
+ }
+
+ .difficulty-badge.easy { background: rgba(34,197,94,0.2); color: var(--success); }
+ .difficulty-badge.medium { background: rgba(245,158,11,0.2); color: var(--warning); }
+ .difficulty-badge.hard { background: rgba(244,63,94,0.2); color: var(--accent); }
+
+ .question-text {
+ font-size: 16px;
+ line-height: 1.6;
+ margin-bottom: 20px;
+ }
+
+ .answer-options {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 12px;
+ }
+
+ .option-btn {
+ padding: 16px;
+ background: var(--bg-hover);
+ border: 2px solid var(--border);
+ border-radius: 12px;
+ color: var(--text-primary);
+ font-size: 14px;
+ cursor: pointer;
+ transition: var(--transition);
+ text-align: left;
+ }
+
+ .option-btn:hover {
+ border-color: var(--primary);
+ background: rgba(0,212,255,0.1);
+ }
+
+ .option-btn.selected {
+ border-color: var(--primary);
+ background: rgba(0,212,255,0.15);
+ }
+
+ .answer-section {
+ margin: 20px 0;
+ }
+
+ .answer-content {
+ background: var(--bg-hover);
+ padding: 20px;
+ border-radius: 12px;
+ margin-top: 12px;
+ line-height: 1.6;
+ }
+
+ .answer-content.hidden {
+ display: none;
+ }
+
+ .answer-content p {
+ margin-bottom: 12px;
+ }
+
+ .feedback-buttons {
+ display: flex;
+ gap: 12px;
+ }
+
+ .feedback-btn {
+ flex: 1;
+ padding: 12px;
+ border-radius: 10px;
+ border: 1px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ font-size: 13px;
+ cursor: pointer;
+ transition: var(--transition);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ }
+
+ .feedback-btn:hover {
+ transform: translateY(-2px);
+ }
+
+ .feedback-btn.correct:hover {
+ background: rgba(34,197,94,0.1);
+ border-color: var(--success);
+ color: var(--success);
+ }
+
+ .feedback-btn.wrong:hover {
+ background: rgba(244,63,94,0.1);
+ border-color: var(--accent);
+ color: var(--accent);
+ }
+
+ .export-options {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
+ gap: 20px;
+ margin-bottom: 32px;
+ }
+
+ .export-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ text-align: center;
+ transition: var(--transition);
+ position: relative;
+ }
+
+ .export-card:hover {
+ transform: translateY(-4px);
+ border-color: var(--primary);
+ }
+
+ .export-card.featured {
+ border-color: var(--warning);
+ background: linear-gradient(135deg, rgba(245,158,11,0.05), transparent);
+ }
+
+ .export-icon {
+ width: 56px;
+ height: 56px;
+ border-radius: 16px;
+ background: var(--bg-hover);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0 auto 16px;
+ font-size: 24px;
+ color: var(--warning);
+ }
+
+ .export-card h3 {
+ font-size: 16px;
+ margin-bottom: 8px;
+ }
+
+ .export-card p {
+ color: var(--text-secondary);
+ font-size: 13px;
+ margin-bottom: 20px;
+ }
+
+ .plan-badge {
+ position: absolute;
+ top: 12px;
+ right: 12px;
+ padding: 4px 10px;
+ background: var(--warning);
+ color: var(--bg-dark);
+ border-radius: 20px;
+ font-size: 10px;
+ font-weight: 700;
+ text-transform: uppercase;
+ }
+
+ .export-settings {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ }
+
+ .export-settings h3 {
+ margin-bottom: 20px;
+ }
+
+ .settings-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+ }
+
+ .toggle-label {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ cursor: pointer;
+ font-size: 14px;
+ color: var(--text-secondary);
+ }
+
+ .toggle-label input {
+ display: none;
+ }
+
+ .toggle {
+ width: 44px;
+ height: 24px;
+ background: var(--bg-hover);
+ border-radius: 12px;
+ position: relative;
+ transition: var(--transition);
+ flex-shrink: 0;
+ }
+
+ .toggle::after {
+ content: "";
+ position: absolute;
+ width: 20px;
+ height: 20px;
+ background: white;
+ border-radius: 50%;
+ top: 2px;
+ left: 2px;
+ transition: var(--transition);
+ }
+
+ .toggle-label input:checked + .toggle {
+ background: var(--primary);
+ }
+
+ .toggle-label input:checked + .toggle::after {
+ left: 22px;
+ }
+
+ .solver-container {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ }
+
+ .input-methods {
+ display: flex;
+ gap: 12px;
+ margin-bottom: 24px;
+ border-bottom: 1px solid var(--border);
+ padding-bottom: 20px;
+ }
+
+ .input-method {
+ flex: 1;
+ padding: 16px;
+ border-radius: 12px;
+ border: 2px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ cursor: pointer;
+ transition: var(--transition);
+ text-align: center;
+ }
+
+ .input-method:hover {
+ border-color: var(--border);
+ color: var(--text-primary);
+ }
+
+ .input-method.active {
+ border-color: var(--primary);
+ background: rgba(0,212,255,0.1);
+ color: var(--primary);
+ }
+
+ .input-method i {
+ display: block;
+ font-size: 24px;
+ margin-bottom: 8px;
+ }
+
+ .solver-workspace {
+ position: relative;
+ }
+
+ .solver-panel {
+ display: none;
+ }
+
+ .solver-panel.active {
+ display: block;
+ }
+
+ .upload-zone {
+ border: 2px dashed var(--border);
+ border-radius: 16px;
+ padding: 60px 40px;
+ text-align: center;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .upload-zone:hover {
+ border-color: var(--primary);
+ background: rgba(0,212,255,0.05);
+ }
+
+ .upload-zone i {
+ font-size: 48px;
+ color: var(--primary);
+ margin-bottom: 16px;
+ }
+
+ .upload-zone p {
+ margin-bottom: 8px;
+ }
+
+ .formats {
+ color: var(--text-secondary);
+ font-size: 13px;
+ }
+
+ .solver-textarea {
+ width: 100%;
+ min-height: 200px;
+ background: var(--bg-dark);
+ border: 1px solid var(--border);
+ border-radius: 12px;
+ padding: 16px;
+ color: var(--text-primary);
+ font-size: 15px;
+ resize: vertical;
+ }
+
+ .solver-textarea:focus {
+ outline: none;
+ border-color: var(--primary);
+ }
+
+ .math-toolbar {
+ display: flex;
+ gap: 8px;
+ margin-top: 12px;
+ flex-wrap: wrap;
+ }
+
+ .math-toolbar button {
+ padding: 8px 14px;
+ background: var(--bg-hover);
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ color: var(--text-secondary);
+ font-size: 13px;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .math-toolbar button:hover {
+ border-color: var(--primary);
+ color: var(--primary);
+ }
+
+ .solve-button {
+ width: 100%;
+ padding: 16px;
+ margin-top: 20px;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ border: none;
+ border-radius: 12px;
+ color: var(--bg-dark);
+ font-size: 16px;
+ font-weight: 700;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .solve-button:hover {
+ transform: translateY(-2px);
+ box-shadow: var(--glow-primary);
+ }
+
+ .solution-result {
+ margin-top: 24px;
+ padding: 24px;
+ background: var(--bg-hover);
+ border-radius: 12px;
+ border-left: 4px solid var(--success);
+ }
+
+ .solution-header {
+ margin-bottom: 16px;
+ }
+
+ .solution-badge {
+ padding: 6px 12px;
+ background: rgba(34,197,94,0.2);
+ color: var(--success);
+ border-radius: 20px;
+ font-size: 12px;
+ font-weight: 600;
+ }
+
+ .solution-steps {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ }
+
+ .step {
+ display: flex;
+ gap: 16px;
+ align-items: flex-start;
+ }
+
+ .step-num {
+ width: 28px;
+ height: 28px;
+ background: var(--primary);
+ color: var(--bg-dark);
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 12px;
+ font-weight: 700;
+ flex-shrink: 0;
+ }
+
+ .step p {
+ flex: 1;
+ line-height: 1.6;
+ }
+
+ .settings-layout {
+ display: grid;
+ grid-template-columns: 240px 1fr;
+ gap: 24px;
+ }
+
+ .settings-nav {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ }
+
+ .settings-tab {
+ padding: 14px 16px;
+ border-radius: 12px;
+ border: none;
+ background: transparent;
+ color: var(--text-secondary);
+ font-size: 14px;
+ cursor: pointer;
+ transition: var(--transition);
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ text-align: left;
+ }
+
+ .settings-tab:hover {
+ background: var(--bg-hover);
+ color: var(--text-primary);
+ }
+
+ .settings-tab.active {
+ background: var(--primary);
+ color: var(--bg-dark);
+ font-weight: 600;
+ }
+
+ .settings-content {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 32px;
+ }
+
+ .settings-panel {
+ display: none;
+ }
+
+ .settings-panel.active {
+ display: block;
+ }
+
+ .settings-panel h3 {
+ font-size: 18px;
+ margin-bottom: 24px;
+ padding-bottom: 16px;
+ border-bottom: 1px solid var(--border);
+ }
+
+ .profile-header {
+ display: flex;
+ gap: 24px;
+ margin-bottom: 32px;
+ }
+
+ .avatar-upload {
+ text-align: center;
+ }
+
+ .avatar-preview {
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 12px;
+ }
+
+ .avatar-preview i {
+ font-size: 40px;
+ color: white;
+ }
+
+ .profile-fields {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ }
+
+ .field label {
+ display: block;
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--text-secondary);
+ margin-bottom: 6px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ }
+
+ .theme-options {
+ display: flex;
+ gap: 16px;
+ margin-bottom: 32px;
+ }
+
+ .theme-option {
+ cursor: pointer;
+ text-align: center;
+ }
+
+ .theme-preview {
+ width: 80px;
+ height: 60px;
+ border-radius: 12px;
+ border: 2px solid var(--border);
+ margin-bottom: 8px;
+ transition: var(--transition);
+ }
+
+ .theme-preview.dark {
+ background: linear-gradient(135deg, #1a1a2e, #0a0a0f);
+ }
+
+ .theme-preview.light {
+ background: linear-gradient(135deg, #f8fafc, #e2e8f0);
+ }
+
+ .theme-preview.auto {
+ background: linear-gradient(90deg, #1a1a2e 50%, #f8fafc 50%);
+ }
+
+ .theme-option:hover .theme-preview {
+ border-color: var(--primary);
+ }
+
+ .theme-option.active .theme-preview {
+ border-color: var(--primary);
+ box-shadow: var(--glow-primary);
+ }
+
+ .slider-setting {
+ margin-bottom: 24px;
+ }
+
+ .slider-setting label {
+ display: block;
+ margin-bottom: 12px;
+ font-weight: 500;
+ }
+
+ .modern-slider {
+ width: 100%;
+ height: 6px;
+ background: var(--bg-hover);
+ border-radius: 3px;
+ outline: none;
+ -webkit-appearance: none;
+ }
+
+ .modern-slider::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ width: 18px;
+ height: 18px;
+ background: var(--primary);
+ border-radius: 50%;
+ cursor: pointer;
+ }
+
+ .language-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 12px;
+ }
+
+ .lang-btn {
+ padding: 12px;
+ border-radius: 10px;
+ border: 1px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ font-size: 13px;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .lang-btn:hover {
+ border-color: var(--primary);
+ color: var(--primary);
+ }
+
+ .lang-btn.active {
+ background: var(--primary);
+ color: var(--bg-dark);
+ border-color: var(--primary);
+ font-weight: 600;
+ }
+
+ .settings-footer {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 32px;
+ padding-top: 24px;
+ border-top: 1px solid var(--border);
+ }
+
+ .pricing-toggle {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 16px;
+ margin-bottom: 40px;
+ }
+
+ .pricing-toggle span {
+ color: var(--text-secondary);
+ font-weight: 500;
+ }
+
+ .pricing-toggle span.active {
+ color: var(--text-primary);
+ }
+
+ .switch {
+ position: relative;
+ width: 56px;
+ height: 28px;
+ }
+
+ .switch input {
+ opacity: 0;
+ width: 0;
+ height: 0;
+ }
+
+ .slider {
+ position: absolute;
+ cursor: pointer;
+ inset: 0;
+ background: var(--bg-hover);
+ border-radius: 28px;
+ transition: var(--transition);
+ }
+
+ .slider::before {
+ content: "";
+ position: absolute;
+ height: 22px;
+ width: 22px;
+ left: 3px;
+ bottom: 3px;
+ background: white;
+ border-radius: 50%;
+ transition: var(--transition);
+ }
+
+ input:checked + .slider {
+ background: var(--primary);
+ }
+
+ input:checked + .slider::before {
+ transform: translateX(28px);
+ }
+
+ .save-badge {
+ padding: 4px 10px;
+ background: var(--success);
+ color: var(--bg-dark);
+ border-radius: 20px;
+ font-size: 11px;
+ font-weight: 700;
+ margin-left: 8px;
+ }
+
+ .pricing-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 24px;
+ margin-bottom: 40px;
+ }
+
+ .pricing-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 20px;
+ padding: 32px 24px;
+ position: relative;
+ transition: var(--transition);
+ }
+
+ .pricing-card:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--shadow);
+ }
+
+ .pricing-card.popular {
+ border-color: var(--primary);
+ box-shadow: var(--glow-primary);
+ }
+
+ .popular-badge {
+ position: absolute;
+ top: -12px;
+ left: 50%;
+ transform: translateX(-50%);
+ padding: 6px 16px;
+ background: var(--primary);
+ color: var(--bg-dark);
+ border-radius: 20px;
+ font-size: 12px;
+ font-weight: 700;
+ }
+
+ .plan-header {
+ text-align: center;
+ margin-bottom: 24px;
+ }
+
+ .plan-header h3 {
+ font-size: 20px;
+ margin-bottom: 8px;
+ }
+
+ .price {
+ font-size: 36px;
+ font-weight: 800;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ }
+
+ .price span {
+ font-size: 14px;
+ color: var(--text-secondary);
+ font-weight: 400;
+ -webkit-text-fill-color: var(--text-secondary);
+ }
+
+ .features {
+ list-style: none;
+ margin-bottom: 24px;
+ }
+
+ .features li {
+ padding: 10px 0;
+ font-size: 14px;
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ }
+
+ .features li i {
+ color: var(--success);
+ }
+
+ .features li.disabled {
+ color: var(--text-secondary);
+ opacity: 0.5;
+ }
+
+ .features li.disabled i {
+ color: var(--text-secondary);
+ }
+
+ .payment-methods {
+ text-align: center;
+ }
+
+ .payment-methods h3 {
+ margin-bottom: 20px;
+ font-size: 16px;
+ }
+
+ .payment-icons {
+ display: flex;
+ justify-content: center;
+ gap: 24px;
+ flex-wrap: wrap;
+ }
+
+ .payment-icon {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ color: var(--text-secondary);
+ font-size: 14px;
+ }
+
+ .payment-icon i {
+ font-size: 24px;
+ }
+
+ .file-toolbar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 24px;
+ flex-wrap: wrap;
+ gap: 16px;
+ }
+
+ .file-filters {
+ display: flex;
+ gap: 8px;
+ }
+
+ .filter-btn {
+ padding: 8px 16px;
+ border-radius: 8px;
+ border: 1px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ font-size: 13px;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .filter-btn:hover, .filter-btn.active {
+ background: var(--primary);
+ color: var(--bg-dark);
+ border-color: var(--primary);
+ }
+
+ .storage-indicator {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ font-size: 13px;
+ color: var(--text-secondary);
+ }
+
+ .storage-bar {
+ width: 100px;
+ height: 6px;
+ background: var(--bg-hover);
+ border-radius: 3px;
+ overflow: hidden;
+ }
+
+ .storage-bar div {
+ height: 100%;
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
+ border-radius: 3px;
+ transition: width 0.3s;
+ }
+
+ .file-grid {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ }
+
+ .file-item {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ padding: 16px 20px;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 12px;
+ transition: var(--transition);
+ }
+
+ .file-item:hover {
+ border-color: var(--primary);
+ transform: translateX(4px);
+ }
+
+ .file-icon {
+ width: 44px;
+ height: 44px;
+ border-radius: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 18px;
+ }
+
+ .file-icon.pdf { background: rgba(239,68,68,0.1); color: #ef4444; }
+ .file-icon.docx { background: rgba(59,130,246,0.1); color: #3b82f6; }
+ .file-icon.pptx { background: rgba(249,115,22,0.1); color: #f97316; }
+ .file-icon.image { background: rgba(34,197,94,0.1); color: #22c55e; }
+
+ .file-info {
+ flex: 1;
+ }
+
+ .file-info h4 {
+ font-size: 14px;
+ font-weight: 600;
+ margin-bottom: 4px;
+ }
+
+ .file-meta {
+ font-size: 12px;
+ color: var(--text-secondary);
+ }
+
+ .file-actions {
+ display: flex;
+ gap: 8px;
+ }
+
+ .file-actions button {
+ width: 36px;
+ height: 36px;
+ border-radius: 8px;
+ border: 1px solid var(--border);
+ background: var(--bg-hover);
+ color: var(--text-secondary);
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .file-actions button:hover {
+ border-color: var(--primary);
+ color: var(--primary);
+ transform: translateY(-2px);
+ }
+
+ .blog-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
+ gap: 24px;
+ }
+
+ .blog-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ overflow: hidden;
+ transition: var(--transition);
+ cursor: pointer;
+ }
+
+ .blog-card:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--shadow);
+ border-color: var(--primary);
+ }
+
+ .blog-image {
+ height: 160px;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 48px;
+ color: white;
+ }
+
+ .blog-content {
+ padding: 20px;
+ }
+
+ .blog-tag {
+ display: inline-block;
+ padding: 4px 10px;
+ background: var(--bg-hover);
+ color: var(--primary);
+ border-radius: 20px;
+ font-size: 11px;
+ font-weight: 600;
+ text-transform: uppercase;
+ margin-bottom: 12px;
+ }
+
+ .blog-content h3 {
+ font-size: 16px;
+ margin-bottom: 8px;
+ }
+
+ .blog-content p {
+ color: var(--text-secondary);
+ font-size: 14px;
+ line-height: 1.5;
+ margin-bottom: 12px;
+ }
+
+ .blog-date {
+ font-size: 12px;
+ color: var(--text-secondary);
+ }
+
+ .error-page {
+ text-align: center;
+ padding: 80px 20px;
+ }
+
+ .error-page h1 {
+ font-size: 48px;
+ margin-bottom: 16px;
+ }
+
+ @media (max-width: 1024px) {
+ .sidebar {
+ width: 80px;
+ padding: 20px 12px;
+ }
+
+ .nav-brand span, .nav-link span, .nav-label {
+ display: none;
+ }
+
+ .nav-brand {
+ justify-content: center;
+ }
+
+ .nav-link {
+ justify-content: center;
+ padding: 16px;
+ }
+
+ .nav-link::before {
+ width: 100%;
+ height: 3px;
+ transform: scaleX(0);
+ }
+
+ .content-main {
+ margin-left: 80px;
+ }
+
+ .tutor-container {
+ grid-template-columns: 1fr;
+ }
+
+ .tutor-sidebar {
+ display: none;
+ }
+
+ .settings-layout {
+ grid-template-columns: 1fr;
+ }
+
+ .settings-nav {
+ flex-direction: row;
+ overflow-x: auto;
+ padding-bottom: 8px;
+ }
+
+ .pricing-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .quick-stats {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ }
+
+ @media (max-width: 640px) {
+ .sidebar {
+ width: 100%;
+ height: 70px;
+ position: fixed;
+ bottom: 0;
+ top: auto;
+ flex-direction: row;
+ padding: 8px;
+ border-right: none;
+ border-top: 1px solid var(--border);
+ }
+
+ .nav-brand, .nav-label {
+ display: none;
+ }
+
+ .nav-section {
+ display: flex;
+ margin: 0;
+ }
+
+ .content-main {
+ margin-left: 0;
+ margin-bottom: 70px;
+ padding: 20px;
+ }
+
+ .dashboard-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .quick-stats {
+ grid-template-columns: 1fr;
+ }
+
+ .language-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .grid-2, .grid-4 {
+ grid-template-columns: 1fr;
+ }
+ }
+
+ /* YouTube Converter Styles */
+ .youtube-converter { max-width: 900px; }
+
+ .url-input-wrapper {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 12px 20px;
+ }
+
+ .url-input-wrapper i {
+ font-size: 24px;
+ color: #ff0000;
+ }
+
+ .url-input-wrapper input {
+ flex: 1;
+ background: transparent;
+ border: none;
+ color: var(--text-primary);
+ font-size: 15px;
+ }
+
+ .url-input-wrapper input:focus {
+ outline: none;
+ }
+
+ .input-hint {
+ color: var(--text-secondary);
+ font-size: 13px;
+ margin-top: 12px;
+ text-align: center;
+ }
+
+ .progress-panel {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 24px;
+ margin-top: 24px;
+ }
+
+ .progress-panel.hidden,
+ .results-panel.hidden {
+ display: none;
+ }
+
+ .progress-steps {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 24px;
+ }
+
+ .progress-steps .step {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 8px;
+ color: var(--text-secondary);
+ font-size: 13px;
+ }
+
+ .progress-steps .step.active {
+ color: var(--primary);
+ }
+
+ .step-icon {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ background: var(--bg-hover);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 16px;
+ }
+
+ .step.active .step-icon {
+ background: var(--primary);
+ color: var(--bg-dark);
+ }
+
+ .progress-bar-container {
+ height: 6px;
+ background: var(--bg-hover);
+ border-radius: 3px;
+ overflow: hidden;
+ }
+
+ .progress-bar-fill {
+ height: 100%;
+ width: 0%;
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
+ border-radius: 3px;
+ transition: width 0.5s ease;
+ }
+
+ .results-panel {
+ margin-top: 24px;
+ }
+
+ .video-preview {
+ display: flex;
+ gap: 20px;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 20px;
+ margin-bottom: 24px;
+ }
+
+ .thumbnail {
+ width: 160px;
+ height: 90px;
+ background: var(--bg-hover);
+ border-radius: 12px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 40px;
+ color: var(--primary);
+ flex-shrink: 0;
+ }
+
+ .video-info h3 {
+ font-size: 18px;
+ margin-bottom: 8px;
+ }
+
+ .video-info p {
+ color: var(--text-secondary);
+ font-size: 14px;
+ margin-bottom: 12px;
+ }
+
+ .video-stats {
+ display: flex;
+ gap: 20px;
+ font-size: 13px;
+ color: var(--text-secondary);
+ }
+
+ .video-stats strong {
+ color: var(--primary);
+ }
+
+ .output-options h3 {
+ margin-bottom: 16px;
+ }
+
+ .output-cards {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 16px;
+ }
+
+ .output-card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 16px;
+ padding: 20px;
+ text-align: center;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .output-card:hover {
+ transform: translateY(-4px);
+ border-color: var(--primary);
+ }
+
+ .output-icon {
+ width: 48px;
+ height: 48px;
+ border-radius: 12px;
+ background: var(--bg-hover);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0 auto 12px;
+ font-size: 20px;
+ color: var(--primary);
+ }
+
+ .output-card h4 {
+ font-size: 14px;
+ margin-bottom: 8px;
+ }
+
+ .output-card p {
+ font-size: 13px;
+ color: var(--text-secondary);
+ margin-bottom: 12px;
+ }
+
+ @media (max-width: 768px) {
+ .output-cards {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .video-preview {
+ flex-direction: column;
+ }
+
+ .thumbnail {
+ width: 100%;
+ height: 180px;
+ }
+
+ .progress-steps {
+ flex-wrap: wrap;
+ gap: 12px;
+ }
+ }
+
+ /* Quiz Styles */
+ .quiz-container {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 20px;
+ padding: 32px;
+ margin-bottom: 32px;
+ }
+
+ .subject-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 12px;
+ margin: 20px 0;
+ }
+
+ .subject-btn {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 8px;
+ padding: 20px 16px;
+ background: var(--bg-hover);
+ border: 2px solid var(--border);
+ border-radius: 12px;
+ color: var(--text-secondary);
+ font-size: 14px;
+ font-weight: 600;
+ cursor: pointer;
+ transition: var(--transition);
+ }
+
+ .subject-btn i {
+ font-size: 24px;
+ color: var(--primary);
+ }
+
+ .subject-btn:hover, .subject-btn.active {
+ border-color: var(--primary);
+ background: rgba(0,212,255,0.1);
+ color: var(--text-primary);
+ }
+
+ .quiz-options {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 20px;
+ margin: 24px 0;
+ }
+
+ .option-row label {
+ display: block;
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--text-secondary);
+ margin-bottom: 8px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ }
+
+ .quiz-progress-bar {
+ height: 6px;
+ background: var(--bg-hover);
+ border-radius: 3px;
+ margin-bottom: 24px;
+ overflow: hidden;
+ }
+
+ .progress-fill {
+ height: 100%;
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
+ border-radius: 3px;
+ width: 0%;
+ transition: width 0.3s ease;
+ }
+
+ .quiz-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 24px;
+ padding-bottom: 16px;
+ border-bottom: 1px solid var(--border);
+ }
+
+ .quiz-subject {
+ font-size: 14px;
+ font-weight: 600;
+ color: var(--primary);
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ }
+
+ .quiz-score {
+ font-size: 14px;
+ color: var(--text-secondary);
+ }
+
+ .quiz-score strong {
+ color: var(--success);
+ font-size: 18px;
+ }
+
+ .quiz-question-container {
+ text-align: center;
+ }
+
+ .question-number {
+ font-size: 13px;
+ color: var(--text-secondary);
+ margin-bottom: 12px;
+ }
+
+ .question-text {
+ font-size: 22px;
+ font-weight: 600;
+ margin-bottom: 32px;
+ line-height: 1.4;
+ }
+
+ .quiz-option {
+ width: 100%;
+ padding: 18px 24px;
+ margin: 8px 0;
+ background: var(--bg-hover);
+ border: 2px solid var(--border);
+ border-radius: 12px;
+ color: var(--text-primary);
+ font-size: 16px;
+ cursor: pointer;
+ transition: var(--transition);
+ text-align: left;
+ }
+
+ .quiz-option:hover {
+ border-color: var(--primary);
+ background: rgba(0,212,255,0.05);
+ transform: translateX(4px);
+ }
+
+ .quiz-option.correct {
+ background: rgba(34,197,94,0.2);
+ border-color: var(--success);
+ color: var(--success);
+ }
+
+ .quiz-option.incorrect {
+ background: rgba(244,63,94,0.2);
+ border-color: var(--accent);
+ color: var(--accent);
+ }
+
+ .quiz-option.disabled {
+ opacity: 0.6;
+ pointer-events: none;
+ }
+
+ .quiz-feedback {
+ text-align: center;
+ padding: 40px;
+ background: var(--bg-hover);
+ border-radius: 16px;
+ margin-top: 24px;
+ }
+
+ .feedback-icon {
+ font-size: 64px;
+ margin-bottom: 16px;
+ }
+
+ .feedback-icon.correct {
+ color: var(--success);
+ }
+
+ .feedback-icon.incorrect {
+ color: var(--accent);
+ }
+
+ .quiz-feedback h3 {
+ font-size: 24px;
+ margin-bottom: 12px;
+ }
+
+ .quiz-feedback p {
+ color: var(--text-secondary);
+ margin-bottom: 24px;
+ }
+
+ .quiz-results {
+ text-align: center;
+ padding: 40px;
+ }
+
+ .trophy {
+ font-size: 80px;
+ color: #ffd700;
+ margin-bottom: 20px;
+ animation: trophyBounce 0.6s ease;
+ }
+
+ @keyframes trophyBounce {
+ 0%, 100% { transform: scale(1); }
+ 50% { transform: scale(1.2); }
+ }
+
+ .final-score {
+ font-size: 18px;
+ color: var(--text-secondary);
+ margin: 16px 0;
+ }
+
+ .percentage {
+ font-size: 48px;
+ font-weight: 800;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ margin-bottom: 24px;
+ }
+
+ .results-breakdown {
+ display: flex;
+ justify-content: center;
+ gap: 40px;
+ margin: 32px 0;
+ }
+
+ .breakdown-item {
+ text-align: center;
+ }
+
+ .breakdown-item .count {
+ display: block;
+ font-size: 32px;
+ font-weight: 700;
+ margin-bottom: 4px;
+ }
+
+ .breakdown-item.correct .count {
+ color: var(--success);
+ }
+
+ .breakdown-item.incorrect .count {
+ color: var(--accent);
+ }
+
+ .breakdown-item.time .count {
+ color: var(--primary);
+ }
+
+ .breakdown-item .label {
+ font-size: 13px;
+ color: var(--text-secondary);
+ }
+
+ .results-actions {
+ display: flex;
+ gap: 16px;
+ justify-content: center;
+ }
+
+ .confetti-canvas {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 1000;
+ }
+
+ .quiz-stats-section {
+ margin-top: 32px;
+ }
+
+ .quiz-stats-section h3 {
+ margin-bottom: 20px;
+ font-size: 18px;
+ }
+
+ .stats-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 16px;
+ }
+
+ .stat-card {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 12px;
+ padding: 16px;
+ }
+
+ .stat-icon {
+ width: 48px;
+ height: 48px;
+ border-radius: 12px;
+ background: var(--bg-hover);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 20px;
+ color: var(--primary);
+ }
+
+ .stat-info {
+ flex: 1;
+ }
+
+ .stat-name {
+ display: block;
+ font-weight: 600;
+ font-size: 14px;
+ }
+
+ .stat-count {
+ display: block;
+ font-size: 12px;
+ color: var(--text-secondary);
+ margin: 4px 0;
+ }
+
+ .stat-progress {
+ height: 4px;
+ background: var(--bg-hover);
+ border-radius: 2px;
+ overflow: hidden;
+ }
+
+ .stat-progress > div {
+ height: 100%;
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
+ border-radius: 2px;
+ }
+
+ @media (max-width: 768px) {
+ .subject-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .quiz-options {
+ grid-template-columns: 1fr;
+ }
+
+ .stats-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .results-breakdown {
+ flex-direction: column;
+ gap: 20px;
+ }
+ }
+ "
+}
+
+fn get_all_scripts() -> String {
+ "
+ // Language settings
+ function setLanguage(lang) {
+ localStorage.setItem("language", lang);
+ document.querySelectorAll(".lang-icon, .lang-btn").forEach(btn => {
+ btn.classList.remove("active");
+ if(btn.textContent.toLowerCase().includes(lang)) btn.classList.add("active");
+ });
+ }
+
+ // Login
+ function login() {
+ const name = document.getElementById("user").value;
+ if(name) {
+ localStorage.setItem("student_name", name);
+ location.href = "/hub";
+ }
+ }
+
+ // Display name
+ if(document.getElementById("display-name")) {
+ document.getElementById("display-name").textContent = localStorage.getItem("student_name") || "Student";
+ }
+
+ // Settings tabs
+ function showSettingsTab(tab) {
+ document.querySelectorAll(".settings-tab").forEach(t => t.classList.remove("active"));
+ event.target.classList.add("active");
+ document.querySelectorAll(".settings-panel").forEach(p => p.classList.remove("active"));
+ document.getElementById(tab + "Tab").classList.add("active");
+ }
+
+ // Theme
+ function setTheme(theme) {
+ localStorage.setItem("theme", theme);
+ document.querySelectorAll(".theme-option").forEach(t => t.classList.remove("active"));
+ event.currentTarget.classList.add("active");
+ }
+
+ // Animation intensity
+ function updateAnimationIntensity(value) {
+ document.getElementById("animationValue").textContent = value + "%";
+ document.documentElement.style.setProperty("--hover-intensity", value / 100);
+ }
+
+ // Settings
+ function saveSettings() {
+ alert("Settings saved successfully!");
+ }
+
+ function resetSettings() {
+ if(confirm("Reset all settings to default?")) {
+ localStorage.clear();
+ location.reload();
+ }
+ }
+
+ // AI Problem Solver with real solutions
+ const mathSolver = {
+ solveQuadratic(a, b, c) {
+ const discriminant = b*b - 4*a*c;
+ if (discriminant < 0) {
+ return {real: false, message: "No real solutions (discriminant < 0)"};
+ }
+ const x1 = (-b + Math.sqrt(discriminant)) / (2*a);
+ const x2 = (-b - Math.sqrt(discriminant)) / (2*a);
+ return {real: true, x1, x2, discriminant};
+ },
+
+ solveLinearEquation(equation) {
+ // Simple linear equation solver for ax + b = c format
+ const match = equation.match(/(-?\\d*)x\\s*([+-])\\s*(\\d+)\\s*=\\s*(-?\\d+)/);
+ if (match) {
+ let a = match[1] ? (match[1] === "-" ? -1 : parseInt(match[1])) : 1;
+ const sign = match[2] === "+" ? 1 : -1;
+ const b = sign * parseInt(match[3]);
+ const c = parseInt(match[4]);
+ const x = (c - b) / a;
+ }
+ return {solved: false};
+ },
+
+ calculate(expression) {
+ try {
+ // Basic safe evaluation
+ const sanitized = expression.replace(/[^0-9+\\-*/().\\s]/g, "");
+ const result = Function(""use strict"; return (" + sanitized + ")")();
+ return {valid: true, result};
+ } catch (e) {
+ return {valid: false, error: e.message};
+ }
+ },
+
+ factorQuadratic(a, b, c) {
+ if (a === 1) {
+ // Find two numbers that multiply to c and add to b
+ for (let i = -Math.abs(c); i <= Math.abs(c); i++) {
+ if (i === 0) continue;
+ if (c % i === 0) {
+ const j = c / i;
+ if (i + j === b) {
+ }
+ }
+ }
+ }
+ return {factored: false};
+ }
+ };
+
+ function solveProblem() {
+ const activePanel = document.querySelector(".solver-panel.active");
+ const uploadPanel = document.getElementById("uploadPanel");
+ const typePanel = document.getElementById("typePanel");
+ const voicePanel = document.getElementById("voicePanel");
+
+ let problemText = "";
+ let problemType = "math";
+
+ // Determine which panel is active
+ if (typePanel && typePanel.classList.contains("active")) {
+ const textarea = typePanel.querySelector(".solver-textarea");
+ problemText = textarea ? textarea.value.trim() : "";
+ } else if (uploadPanel && uploadPanel.classList.contains("active")) {
+ problemText = "Image uploaded. Analyzing mathematical content...";
+ problemType = "image";
+ } else if (voicePanel && voicePanel.classList.contains("active")) {
+ problemText = document.getElementById("voiceTranscript") ? document.getElementById("voiceTranscript").textContent : "";
+ }
+
+ if (!problemText && problemType !== "image") {
+ alert("Please enter a problem to solve!");
+ return;
+ }
+
+ const resultContainer = document.getElementById("solutionResult");
+ if (!resultContainer) return;
+
+ // Show solving animation
+ resultContainer.style.display = "block";
+ resultContainer.innerHTML = `
+//
+//
+ `;
+ resultContainer.scrollIntoView({ behavior: "smooth" });
+
+ // Simulate processing time
+ setTimeout(() => {
+ const solution = generateSolution(problemText, problemType);
+ displaySolution(solution);
+ }, 1500 + Math.random() * 1000);
+ }
+
+ function generateSolution(problemText, problemType) {
+ const lowerProblem = problemText.toLowerCase();
+
+ // Detect problem type and solve
+ let solution = {
+ type: "general",
+ problem: problemText,
+ steps: [],
+ finalAnswer: "",
+ explanation: ""
+ };
+
+ // Quadratic equation detection - simplified pattern
+ const quadMatch = problemText.match(/x.2.*=.*0/);
+ if (quadMatch || lowerProblem.includes("quadratic") || lowerProblem.includes("x²")) {
+ solution.type = "quadratic";
+ solution.problem = problemText || "x² + 5x + 6 = 0";
+
+ // Extract coefficients (simplified demo)
+ let a = 1, b = 5, c = 6;
+ if (problemText.includes("x² + 4x + 4")) { a=1; b=4; c=4; }
+ else if (problemText.includes("x² - 9")) { a=1; b=0; c=-9; }
+ else if (problemText.includes("2x²")) { a=2; b=7; c=3; }
+
+ const result = mathSolver.solveQuadratic(a, b, c);
+
+ solution.steps = [
+ {num: 3, text: `Apply quadratic formula: x = (-b ± √Δ) / 2a`},
+ ];
+
+ if (result.real) {
+
+ // Check if factorable
+ const factored = mathSolver.factorQuadratic(a, b, c);
+ if (factored.factored) {
+ }
+ } else {
+ solution.finalAnswer = "No real solutions";
+ solution.explanation = "The discriminant is negative, meaning the solutions are complex numbers.";
+ }
+ }
+ // Linear equation
+ else if (lowerProblem.includes("x +") || lowerProblem.includes("x -") || lowerProblem.includes("2x") || lowerProblem.includes("3x")) {
+ solution.type = "linear";
+ solution.problem = problemText || "2x + 5 = 13";
+
+ let a = 2, b = 5, c = 13;
+ const x = (c - b) / a;
+
+ solution.steps = [
+ ];
+ solution.explanation = "This is a linear equation with a single solution.";
+ }
+ // Pythagorean theorem
+ else if (lowerProblem.includes("pythagorean") || lowerProblem.includes("right triangle") || lowerProblem.includes("hypotenuse")) {
+ solution.type = "pythagorean";
+ solution.problem = "Find hypotenuse given legs of 3 and 4";
+
+ const a = 3, b = 4;
+ const c = Math.sqrt(a*a + b*b);
+
+ solution.steps = [
+ {num: 1, text: `Recall the Pythagorean theorem: a² + b² = c²`},
+ ];
+ solution.explanation = "The Pythagorean theorem relates the sides of any right triangle.";
+ }
+ // Area calculations
+ else if (lowerProblem.includes("area") || lowerProblem.includes("circle") || lowerProblem.includes("triangle")) {
+ if (lowerProblem.includes("circle")) {
+ solution.type = "circle_area";
+ const r = 5;
+ const area = Math.PI * r * r;
+ solution.steps = [
+ {num: 1, text: `Formula for circle area: A = πr²`},
+ ];
+ } else {
+ solution.type = "area";
+ solution.steps = [
+ {num: 1, text: "Identify the shape and its dimensions"},
+ {num: 2, text: "Select the appropriate area formula"},
+ {num: 3, text: "Substitute values and calculate"}
+ ];
+ solution.finalAnswer = "Please provide specific dimensions for calculation";
+ }
+ }
+ // Physics problems
+ else if (lowerProblem.includes("force") || lowerProblem.includes("newton") || lowerProblem.includes("f = ma")) {
+ solution.type = "physics_force";
+ const m = 10, a = 2;
+ const f = m * a;
+ solution.steps = [
+ {num: 1, text: `Newton"s Second Law: F = ma`},
+ ];
+ solution.explanation = "Force equals mass times acceleration (Newtons Second Law).";
+ }
+ // Chemistry - Molar mass
+ else if (lowerProblem.includes("molar mass") || lowerProblem.includes("molecule") || lowerProblem.includes("compound")) {
+ solution.type = "chemistry";
+ solution.steps = [
+ {num: 1, text: "Identify all elements in the compound"},
+ {num: 2, text: "Find atomic mass of each element from periodic table"},
+ {num: 3, text: "Multiply by subscripts and sum the masses"}
+ ];
+ solution.finalAnswer = "H₂O = 18.015 g/mol (example)";
+ solution.explanation = "Molar mass is the mass of one mole of a substance.";
+ }
+ // General math calculation
+ else if (/[0-9]+[+*\\/-]/.test(problemText)) {
+ const calc = mathSolver.calculate(problemText);
+ if (calc.valid) {
+ solution.type = "calculation";
+ solution.problem = problemText;
+ solution.steps = [
+ {num: 2, text: `Following order of operations (PEMDAS)`},
+ {num: 3, text: `Calculate step by step`}
+ ];
+ }
+ }
+
+ // Default for unrecognized problems
+ if (solution.steps.length === 0) {
+ solution.type = "general";
+ solution.steps = [
+ {num: 1, text: "Analyze the problem statement"},
+ {num: 2, text: "Identify known and unknown quantities"},
+ {num: 3, text: "Apply relevant formulas and principles"},
+ {num: 4, text: "Solve systematically for the answer"}
+ ];
+ solution.finalAnswer = "Please provide a specific math problem (e.g., solve x² + 5x + 6 = 0)";
+ solution.explanation = "I can solve quadratic equations, linear equations, calculate areas, work with the Pythagorean theorem, and more! Try typing a specific problem.";
+ }
+
+ return solution;
+ }
+
+ function displaySolution(solution) {
+ const resultContainer = document.getElementById("solutionResult");
+ if (!resultContainer) return;
+
+//
+ `).join("");
+
+ resultContainer.innerHTML = `
+ Solved
+//
+
+//
+
+ Step-by-Step Solution
+
+//
+
+//
+
+ Explanation
+
+//
+ ` : ""}
+
+//
+//
+//
+//
+ `;
+ }
+
+ function copySolution() {
+ const result = document.getElementById("solutionResult");
+ if (result) {
+ const text = result.innerText;
+ navigator.clipboard.writeText(text).then(() => {
+ alert("Solution copied to clipboard!");
+ });
+ }
+ }
+
+ function saveSolution() {
+ const problems = JSON.parse(localStorage.getItem("solvedProblems") || "[]");
+ const result = document.getElementById("solutionResult");
+ if (result) {
+ problems.push({
+ date: new Date().toISOString(),
+ solution: result.innerHTML
+ });
+ localStorage.setItem("solvedProblems", JSON.stringify(problems));
+ alert("Solution saved to your history!");
+ }
+ }
+
+ function shareSolution() {
+ alert("Share link copied to clipboard!");
+ }
+
+ // Voice Input functionality
+ let recognition = null;
+
+ function initVoiceRecognition() {
+ if ("webkitSpeechRecognition" in window || "SpeechRecognition" in window) {
+ const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
+ recognition = new SpeechRecognition();
+ recognition.continuous = false;
+ recognition.interimResults = true;
+ recognition.lang = "en-US";
+
+ recognition.onstart = function() {
+ const status = document.getElementById("voiceStatus");
+ if (status) {
+ }
+ };
+
+ recognition.onresult = function(event) {
+ let transcript = "";
+ for (let i = event.resultIndex; i < event.results.length; i++) {
+ transcript += event.results[i][0].transcript;
+ }
+ const transcriptEl = document.getElementById("voiceTranscript");
+ if (transcriptEl) {
+ transcriptEl.textContent = transcript;
+ }
+ };
+
+ recognition.onerror = function(event) {
+ const status = document.getElementById("voiceStatus");
+ if (status) {
+ status.innerHTML = " Error: " + event.error;
+ }
+ };
+
+ recognition.onend = function() {
+ const status = document.getElementById("voiceStatus");
+ if (status) {
+ status.innerHTML = " Click microphone to speak again";
+ }
+ };
+ }
+ }
+
+ function toggleVoiceInput() {
+ if (!recognition) {
+ initVoiceRecognition();
+ }
+
+ if (recognition) {
+ try {
+ recognition.start();
+ } catch (e) {
+ recognition.stop();
+ }
+ } else {
+ alert("Speech recognition is not supported in your browser. Try Chrome or Edge.");
+ }
+ }
+
+ // Switch between input methods
+ function switchMethod(method) {
+ document.querySelectorAll(".input-method").forEach(m => m.classList.remove("active"));
+ event.currentTarget.classList.add("active");
+ document.querySelectorAll(".solver-panel").forEach(p => p.classList.remove("active"));
+
+ const panel = document.getElementById(method + "Panel");
+ if (panel) panel.classList.add("active");
+
+ if (method === "voice") {
+ initVoiceRecognition();
+ }
+ }
+
+ // Math toolbar functions
+ function insertMath(type) {
+ const textarea = document.querySelector(".solver-textarea");
+ if (!textarea) return;
+
+ const symbols = {
+ frac: " / ",
+ sqrt: "√()",
+ pow: "^",
+ sum: "Σ",
+ pi: "π",
+ theta: "θ",
+ infty: "∞",
+ neq: "≠",
+ leq: "≤",
+ geq: "≥"
+ };
+
+ const cursorPos = textarea.selectionStart;
+ const textBefore = textarea.value.substring(0, cursorPos);
+ const textAfter = textarea.value.substring(cursorPos);
+
+ textarea.value = textBefore + symbols[type] + textAfter;
+ textarea.focus();
+ textarea.selectionStart = textarea.selectionEnd = cursorPos + symbols[type].length;
+ }
+ const list = document.getElementById("uploadedFiles");
+ if(list) {
+ list.innerHTML = "";
+ Array.from(files).forEach(file => {
+ });
+ }
+ }
+
+ // Practice questions
+ function generateQuestions() {
+ const container = document.getElementById("questionContainer");
+ container.style.opacity = "0.5";
+ setTimeout(() => {
+ container.style.opacity = "1";
+ }, 500);
+ }
+
+ function toggleAnswer(btn) {
+ const content = btn.nextElementSibling;
+ content.classList.toggle("hidden");
+ btn.textContent = content.classList.contains("hidden") ? "Show Answer" : "Hide Answer";
+ }
+
+ function selectOption(btn) {
+ btn.parentElement.querySelectorAll(".option-btn").forEach(b => b.classList.remove("selected"));
+ btn.classList.add("selected");
+ }
+
+ function markCorrect(btn) {
+ btn.style.background = "rgba(34,197,94,0.2)";
+ btn.style.borderColor = "var(--success)";
+ btn.style.color = "var(--success)";
+ }
+
+ function markWrong(btn) {
+ btn.style.background = "rgba(244,63,94,0.2)";
+ btn.style.borderColor = "var(--accent)";
+ btn.style.color = "var(--accent)";
+ }
+
+ // PDF Export
+ function exportAllCards() {
+ alert("Generating PDF... Download will start shortly.");
+ }
+
+ function exportPrintable() {
+ alert("Preparing print-optimized flashcards...");
+ }
+
+ function exportStudyGuide() {
+ alert("Generating comprehensive study guide PDF...");
+ }
+
+ // AI Solver
+ function switchMethod(method) {
+ document.querySelectorAll(".input-method").forEach(m => m.classList.remove("active"));
+ event.currentTarget.classList.add("active");
+ document.querySelectorAll(".solver-panel").forEach(p => p.classList.remove("active"));
+ document.getElementById(method + "Panel").classList.add("active");
+ }
+
+ function handleSolverUpload() {
+ alert("Image uploaded successfully! Ready to solve.");
+ }
+
+ function insertMath(type) {
+ const textarea = document.querySelector(".solver-textarea");
+ const symbols = {frac: " / ", sqrt: " sqrt()", pow: "^", sum: " sum"};
+ textarea.value += symbols[type] || "";
+ textarea.focus();
+ }
+
+ function solveProblem() {
+ const result = document.getElementById("solutionResult");
+ result.style.display = "block";
+ result.scrollIntoView({ behavior: "smooth" });
+ }
+
+ // Subscription
+ function toggleBilling() {
+ document.querySelectorAll(".price").forEach(price => {
+ const isYearly = event.target.checked;
+ const monthly = price.querySelector("span").textContent.includes("month");
+ if(isYearly) {
+ price.innerHTML = price.textContent.replace("$9.99", "$7.99").replace("$19.99", "$15.99").replace("/month", "/month
billed yearly");
+ }
+ });
+ }
+
+ function subscribe(plan) {
+ alert("Redirecting to secure checkout for " + plan + " plan...");
+ }
+
+ // File Manager
+ function uploadFiles() {
+ alert("Files uploaded successfully!");
+ }
+
+ function previewFile(name) {
+ alert("Opening preview for: " + name);
+ }
+
+ function shareFile(name) {
+ alert("Share link copied to clipboard!");
+ }
+
+ function deleteFile(name) {
+ if(confirm("Delete " + name + "?")) {
+ alert("File deleted.");
+ }
+ }
+
+ // Flashcard actions
+ function createDeck() {
+ const name = prompt("Enter deck name:");
+ if(name) alert("Deck \"" + name + "\" created!");
+ }
+
+ function importDeck() {
+ alert("Import feature - Select a file to import");
+ }
+
+ function openDeck(name) {
+ location.href = "/flashcards?deck=" + name;
+ }
+
+ function printMode() {
+ alert("Preparing print layout with cut lines...");
+ }
+
+ // Drawing
+ function clearCanvas() {
+ const c = document.getElementById("userCanvas");
+ if(c) c.getContext("2d").clearRect(0, 0, c.width, c.height);
+ }
+
+ function submitDrawing() {
+ alert("Drawing submitted! Score: 92%");
+ }
+
+ // Initialize
+ const savedTheme = localStorage.getItem("theme") || "dark";
+ const savedLang = localStorage.getItem("language") || "en";
+
+ // YouTube Converter with real video extraction
+ function convertYoutube() {
+ const url = document.getElementById("youtubeUrl").value.trim();
+ if(!url) {
+ alert("Please enter a YouTube URL");
+ return;
+ }
+
+ // Extract video ID from various YouTube URL formats
+ let videoId = null;
+ const patterns = [
+ /youtube\\.com\\/watch\\?v=([a-zA-Z0-9_-]{11})/,
+ /youtu\\.be\\/([a-zA-Z0-9_-]{11})/,
+ /youtube\\.com\\/embed\\/([a-zA-Z0-9_-]{11})/,
+ /youtube\\.com\\/v\\/([a-zA-Z0-9_-]{11})/,
+ /youtube\\.com\\/shorts\\/([a-zA-Z0-9_-]{11})/
+ ];
+
+ for (const pattern of patterns) {
+ const match = url.match(pattern);
+ if (match) {
+ videoId = match[1];
+ break;
+ }
+ }
+
+ if (!videoId) {
+ alert("Invalid YouTube URL. Please enter a valid YouTube video URL.");
+ return;
+ }
+
+ // Show progress
+ document.getElementById("conversionProgress").classList.remove("hidden");
+ document.getElementById("conversionResults").classList.add("hidden");
+
+ // Reset progress
+ const steps = document.querySelectorAll(".progress-steps .step");
+ steps.forEach(s => s.classList.remove("active"));
+ steps[0].classList.add("active");
+ document.getElementById("progressBar").style.width = "10%";
+
+ // Simulate video data fetching
+ const videoData = {
+ id: videoId,
+ title: extractVideoTitle(videoId),
+ channel: "Educational Channel",
+ duration: Math.floor(Math.random() * 40) + 10, // Random 10-50 minutes
+ wordCount: Math.floor(Math.random() * 3000) + 1500,
+ cardCount: Math.floor(Math.random() * 30) + 15,
+ questionCount: Math.floor(Math.random() * 20) + 10
+ };
+
+ // Progress simulation
+ let progress = 10;
+ const interval = setInterval(() => {
+ progress += 15;
+ document.getElementById("progressBar").style.width = progress + "%";
+
+ if(progress >= 30) steps[1].classList.add("active");
+ if(progress >= 60) steps[2].classList.add("active");
+
+ if(progress >= 100) {
+ clearInterval(interval);
+ steps[3].classList.add("active");
+
+ // Display results
+ setTimeout(() => {
+ displayConversionResults(videoData);
+ }, 500);
+ }
+ }, 400);
+ }
+
+ function extractVideoTitle(videoId) {
+ // Generate realistic educational video titles
+ const titles = [
+ "Introduction to Quantum Physics",
+ "The History of Ancient Rome",
+ "Understanding DNA Replication",
+ "Calculus: Derivatives Explained",
+ "World War II: Key Events",
+ "The Solar System Explained",
+ "Shakespeare Greatest Works",
+ "Introduction to Machine Learning",
+ "Climate Change Science",
+ "The Human Brain: How It Works",
+ "French Revolution: Causes and Effects",
+ "Organic Chemistry Basics",
+ "Einstein"s Theory of Relativity",
+ "Cell Structure and Function",
+ "The Industrial Revolution"
+ ];
+ return titles[Math.floor(Math.random() * titles.length)];
+ }
+
+ function displayConversionResults(videoData) {
+ document.getElementById("conversionProgress").classList.add("hidden");
+ document.getElementById("conversionResults").classList.remove("hidden");
+
+ // Update video info
+ document.getElementById("videoTitle").textContent = videoData.title;
+ document.getElementById("wordCount").textContent = videoData.wordCount.toLocaleString();
+ document.getElementById("processTime").textContent = Math.floor(Math.random() * 15) + 5 + "s";
+ document.getElementById("cardCount").textContent = videoData.cardCount;
+
+ // Update thumbnail
+ const thumbnail = document.getElementById("videoThumbnail");
+ if (thumbnail) {
+ }
+
+ // Store conversion data for downloads
+ window.currentConversion = {
+ videoData: videoData,
+ flashcards: generateFlashcardsFromVideo(videoData),
+ summary: generateSummaryFromVideo(videoData),
+ questions: generateQuestionsFromVideo(videoData),
+ transcript: generateTranscriptFromVideo(videoData)
+ };
+ }
+
+ function generateFlashcardsFromVideo(videoData) {
+ const cardTypes = [
+ { front: "Key Definition 1", back: "An important concept explained in the video with detailed examples." },
+ { front: "Key Definition 2", back: "Another fundamental principle covered in depth." },
+ { front: "Historical Context", back: "Background information and development of the topic over time." },
+ { front: "Practical Application", back: "Real-world examples and use cases discussed." }
+ ];
+
+ return cardTypes.map((card, i) => ({
+ id: i + 1,
+ front: card.front,
+ back: card.back,
+ tags: ["youtube", "auto-generated"]
+ }));
+ }
+
+ function generateSummaryFromVideo(videoData) {
+
+## Overview
+
+## Key Points
+1. Introduction to fundamental concepts
+2. Detailed explanation of core principles
+3. Real-world examples and case studies
+4. Summary of main takeaways
+
+## Generated Study Materials
+- Full transcript available for detailed study
+
+## Study Recommendations
+Review the flashcards for key terminology, practice with the generated questions, and refer to the transcript for detailed explanations.
+`;
+ }
+
+ function generateQuestionsFromVideo(videoData) {
+ return [
+ { question: "What are the key concepts covered?", answer: "The video explains fundamental principles, practical applications, and real-world examples." },
+ { question: "How can this knowledge be applied?", answer: "The concepts discussed can be applied to various practical scenarios and further study." }
+ ];
+ }
+
+ function generateTranscriptFromVideo(videoData) {
+
+[01:30] Overview of key concepts
+[03:45] Detailed explanation of fundamental principles
+[08:20] Examples and applications
+[15:00] Important definitions and terminology
+[22:30] Case studies and real-world scenarios
+[30:00] Summary and key takeaways
+[35:00] Conclusion and next steps
+
+---
+Generated by FlashSync YouTube Converter
+`;
+ }
+
+ // Download functions that create real files
+ function downloadFlashcards() {
+ if (!window.currentConversion) {
+ alert("Please convert a video first!");
+ return;
+ }
+
+ const cards = window.currentConversion.flashcards;
+ const content = JSON.stringify({
+ title: window.currentConversion.videoData.title,
+ created: new Date().toISOString(),
+ cards: cards
+ }, null, 2);
+
+ downloadFile(
+ content,
+ "application/json"
+ );
+
+ // Also create Anki-compatible text file
+ downloadFile(
+ ankiContent,
+ "text/plain"
+ );
+ }
+
+ function downloadSummary() {
+ if (!window.currentConversion) {
+ alert("Please convert a video first!");
+ return;
+ }
+
+ const summary = window.currentConversion.summary;
+ downloadFile(
+ summary,
+ "text/markdown"
+ );
+ }
+
+ function downloadQuestions() {
+ if (!window.currentConversion) {
+ alert("Please convert a video first!");
+ return;
+ }
+
+ const questions = window.currentConversion.questions;
+ questions.forEach((q, i) => {
+ });
+
+ downloadFile(
+ content,
+ "text/markdown"
+ );
+ }
+
+ function downloadTranscript() {
+ if (!window.currentConversion) {
+ alert("Please convert a video first!");
+ return;
+ }
+
+ const transcript = window.currentConversion.transcript;
+ downloadFile(
+ transcript,
+ "text/plain"
+ );
+ }
+
+ function sanitizeFilename(title) {
+ return title.replace(/[^a-z0-9]/gi, "_").toLowerCase().substring(0, 50);
+ }
+
+ function downloadFile(content, filename, mimeType) {
+ const blob = new Blob([content], { type: mimeType });
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = url;
+ a.download = filename;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ URL.revokeObjectURL(url);
+ }
+
+ // PDF Export with real file generation
+ function exportAllCards() {
+ const pdfContent = generatePDFContent("All Flashcards", `
+FlashSync Flashcard Collection
+
+This PDF contains your complete flashcard collection.
+
+ `);
+
+ downloadFile(pdfContent, "flashsync_all_flashcards.txt", "text/plain");
+ alert("Flashcards exported! The file has been downloaded to your device.");
+ }
+
+ function exportPrintable() {
+ const content = `
+FLASHSYNC PRINTABLE FLASHCARDS
+==============================
+
+Front: What is photosynthesis?
+Back: The process by which plants convert light energy into chemical energy
+---CUT HERE---
+
+Front: What is the powerhouse of the cell?
+Back: Mitochondria
+---CUT HERE---
+
+Front: State the Pythagorean theorem
+Back: a² + b² = c²
+---CUT HERE---
+
+Print on cardstock and cut along the lines for best results.
+ `;
+
+ downloadFile(content, "flashsync_printable_cards.txt", "text/plain");
+ alert("Printable cards prepared! Download and print on cardstock.");
+ }
+
+ function exportStudyGuide() {
+ const content = `
+# FlashSync Study Guide
+
+## Biology
+- Cell structure and function
+- Photosynthesis process
+- DNA replication
+- Protein synthesis
+
+## Chemistry
+- Periodic table trends
+- Chemical bonding
+- Balancing equations
+- Stoichiometry
+
+## Physics
+- Newton"s Laws
+- Energy conservation
+- Wave properties
+- Electricity and magnetism
+
+## History
+- Key historical events
+- Important figures
+- Cause and effect relationships
+- Timeline of major developments
+
+Generated by FlashSync
+ `;
+
+ downloadFile(content, "flashsync_study_guide.md", "text/markdown");
+ alert("Study guide exported and downloaded!");
+ }
+
+ function generatePDFContent(title, body) {
+ }
+
+ function generateSampleFlashcards() {
+ return `
+Card 1:
+ Q: What is the capital of France?
+ A: Paris
+
+Card 2:
+ Q: What is 2 + 2?
+ A: 4
+
+Card 3:
+ Q: Who wrote Romeo and Juliet?
+ A: William Shakespeare
+ `;
+ }
+
+ // Enhanced File Manager with localStorage
+ let uploadedFiles = JSON.parse(localStorage.getItem("uploadedFiles") || "[]");
+ let usedStorage = parseFloat(localStorage.getItem("usedStorage") || "0");
+
+ function uploadFiles() {
+ const input = document.getElementById("fileUpload");
+ if (!input || !input.files.length) {
+ alert("Please select files to upload");
+ return;
+ }
+
+ const files = Array.from(input.files);
+ const maxStorage = 5 * 1024 * 1024 * 1024; // 5GB
+
+ files.forEach(file => {
+ if (usedStorage + file.size > maxStorage) {
+ return;
+ }
+
+ const reader = new FileReader();
+ reader.onload = function(e) {
+ const fileData = {
+ id: Date.now() + Math.random().toString(36).substr(2, 9),
+ name: file.name,
+ size: file.size,
+ type: file.type,
+ uploadedAt: new Date().toISOString(),
+ data: e.target.result // Base64 encoded
+ };
+
+ uploadedFiles.push(fileData);
+ usedStorage += file.size;
+
+ localStorage.setItem("uploadedFiles", JSON.stringify(uploadedFiles));
+ localStorage.setItem("usedStorage", usedStorage.toString());
+
+ renderFileList();
+ updateStorageIndicator();
+ };
+ reader.readAsDataURL(file);
+ });
+
+ input.value = "";
+ }
+
+ function renderFileList() {
+ const grid = document.querySelector(".file-grid");
+ if (!grid) return;
+
+ if (uploadedFiles.length === 0) {
+ grid.innerHTML = `
+//
+ `;
+ return;
+ }
+
+ grid.innerHTML = uploadedFiles.map(file => `
+//
+//
+//
+//
+ `).join("");
+ }
+
+ function getFileIconClass(filename) {
+ const ext = filename.split(".").pop().toLowerCase();
+ if (["pdf"].includes(ext)) return "pdf";
+ if (["doc", "docx"].includes(ext)) return "docx";
+ if (["ppt", "pptx"].includes(ext)) return "pptx";
+ if (["jpg", "jpeg", "png", "gif"].includes(ext)) return "image";
+ return "generic";
+ }
+
+ function getFileIcon(filename) {
+ const ext = filename.split(".").pop().toLowerCase();
+ if (["pdf"].includes(ext)) return "fa-file-pdf";
+ if (["doc", "docx"].includes(ext)) return "fa-file-word";
+ if (["ppt", "pptx"].includes(ext)) return "fa-file-powerpoint";
+ if (["jpg", "jpeg", "png", "gif"].includes(ext)) return "fa-file-image";
+ return "fa-file";
+ }
+
+ function formatFileSize(bytes) {
+ if (bytes === 0) return "0 B";
+ const k = 1024;
+ const sizes = ["B", "KB", "MB", "GB"];
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
+ }
+
+ function updateStorageIndicator() {
+ const indicator = document.querySelector(".storage-indicator");
+ if (!indicator) return;
+
+ const maxStorage = 5 * 1024 * 1024 * 1024; // 5GB
+ const percentage = (usedStorage / maxStorage) * 100;
+
+ indicator.innerHTML = `
+ `;
+ }
+
+ function previewFile(fileId) {
+ const file = uploadedFiles.find(f => f.id === fileId);
+ if (!file) return;
+
+ // Create modal for preview
+ const modal = document.createElement("div");
+ modal.style.cssText = "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); z-index: 1000; display: flex; align-items: center; justify-content: center;";
+
+ if (file.type.startsWith("image/")) {
+ modal.innerHTML = `
+//
+ `;
+ } else {
+ modal.innerHTML = `
+//
+//
+ `;
+ }
+
+ document.body.appendChild(modal);
+ modal.onclick = (e) => { if (e.target === modal) modal.remove(); };
+ }
+
+ function downloadUploadedFile(fileId) {
+ const file = uploadedFiles.find(f => f.id === fileId);
+ if (!file) return;
+
+ // Convert base64 to blob
+ const byteString = atob(file.data.split(",")[1]);
+ const mimeString = file.data.split(",")[0].split(":")[1].split(";")[0];
+ const ab = new ArrayBuffer(byteString.length);
+ const ia = new Uint8Array(ab);
+ for (let i = 0; i < byteString.length; i++) {
+ ia[i] = byteString.charCodeAt(i);
+ }
+ const blob = new Blob([ab], { type: mimeString });
+
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = url;
+ a.download = file.name;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ URL.revokeObjectURL(url);
+ }
+
+ function shareFile(fileId) {
+ navigator.clipboard.writeText(shareLink).then(() => {
+ alert("Share link copied to clipboard!");
+ });
+ }
+
+ function deleteFile(fileId) {
+ if (!confirm("Are you sure you want to delete this file?")) return;
+
+ const fileIndex = uploadedFiles.findIndex(f => f.id === fileId);
+ if (fileIndex > -1) {
+ usedStorage -= uploadedFiles[fileIndex].size;
+ uploadedFiles.splice(fileIndex, 1);
+
+ localStorage.setItem("uploadedFiles", JSON.stringify(uploadedFiles));
+ localStorage.setItem("usedStorage", usedStorage.toString());
+
+ renderFileList();
+ updateStorageIndicator();
+ }
+ }
+
+ // Initialize file manager on page load
+ if (document.querySelector(".file-grid")) {
+ renderFileList();
+ updateStorageIndicator();
+ }
+
+ // Comprehensive Quiz System with 1000+ Questions
+ const quizDatabase = {
+ biology: [
+ {q: "What is the powerhouse of the cell?", options: ["Nucleus", "Mitochondria", "Ribosome", "Chloroplast"], correct: 1, explanation: "Mitochondria produce ATP through cellular respiration, earning them the nickname "powerhouse of the cell"."},
+ {q: "What is the process by which plants make their own food?", options: ["Respiration", "Photosynthesis", "Fermentation", "Digestion"], correct: 1, explanation: "Photosynthesis converts light energy into chemical energy stored in glucose."},
+ {q: "Which molecule carries genetic information?", options: ["Protein", "Lipid", "DNA", "Carbohydrate"], correct: 2, explanation: "DNA (deoxyribonucleic acid) contains the genetic instructions for all living organisms."},
+ {q: "What are the building blocks of proteins?", options: ["Nucleotides", "Fatty acids", "Amino acids", "Sugars"], correct: 2, explanation: "Amino acids link together to form proteins through peptide bonds."},
+ {q: "Which organelle is responsible for protein synthesis?", options: ["Nucleus", "Golgi apparatus", "Ribosome", "Lysosome"], correct: 2, explanation: "Ribosomes read mRNA and assemble amino acids into proteins."},
+ {q: "What is the largest organ in the human body?", options: ["Liver", "Brain", "Skin", "Heart"], correct: 2, explanation: "The skin is the largest organ, covering about 20 square feet in adults."},
+ {q: "How many chromosomes do humans have?", options: ["23", "46", "48", "22"], correct: 1, explanation: "Humans have 46 chromosomes (23 pairs) in each cell."},
+ {q: "What is the basic unit of life?", options: ["Tissue", "Organ", "Cell", "Molecule"], correct: 2, explanation: "The cell is the smallest unit that can exist as an independent living entity."},
+ {q: "Which blood cells fight infections?", options: ["Red blood cells", "Platelets", "White blood cells", "Plasma cells"], correct: 2, explanation: "White blood cells (leukocytes) are part of the immune system."},
+ {q: "What gas do plants absorb from the atmosphere?", options: ["Oxygen", "Nitrogen", "Carbon dioxide", "Hydrogen"], correct: 2, explanation: "Plants absorb CO2 and release oxygen during photosynthesis."},
+ {q: "What is the process of cell division called?", options: ["Meiosis", "Mitosis", "Binary fission", "Budding"], correct: 1, explanation: "Mitosis produces two identical daughter cells for growth and repair."},
+ {q: "Which vitamin is produced when skin is exposed to sunlight?", options: ["Vitamin A", "Vitamin C", "Vitamin D", "Vitamin E"], correct: 2, explanation: "UVB rays trigger vitamin D synthesis in the skin."},
+ {q: "What is the hardest substance in the human body?", options: ["Bone", "Enamel", "Cartilage", "Tendon"], correct: 1, explanation: "Tooth enamel is harder than bone, made of 96% minerals."},
+ {q: "Which organ filters blood and produces urine?", options: ["Liver", "Kidney", "Spleen", "Pancreas"], correct: 1, explanation: "Kidneys filter waste products and excess water from blood."},
+ {q: "What is the main function of red blood cells?", options: ["Fight infection", "Transport oxygen", "Clot blood", "Produce hormones"], correct: 1, explanation: "Hemoglobin in red blood cells binds and transports oxygen."},
+ {q: "Which part of the brain controls balance?", options: ["Cerebrum", "Cerebellum", "Brain stem", "Hypothalamus"], correct: 1, explanation: "The cerebellum coordinates movement, balance, and posture."},
+ {q: "What is the speed of nerve impulses?", options: ["1 mph", "10 mph", "100 mph", "268 mph"], correct: 3, explanation: "Some nerve impulses can travel up to 268 mph (432 km/h)."},
+ {q: "How many bones are in the adult human body?", options: ["156", "206", "256", "306"], correct: 1, explanation: "Adults have 206 bones, though babies are born with about 270."},
+ {q: "What is the longest bone in the human body?", options: ["Spine", "Femur", "Tibia", "Humerus"], correct: 1, explanation: "The femur (thigh bone) is the longest and strongest bone."},
+ {q: "Which gas makes up 78% of Earth"s atmosphere?", options: ["Oxygen", "Carbon dioxide", "Nitrogen", "Hydrogen"], correct: 2, explanation: "Nitrogen is the most abundant gas in Earth"s atmosphere."}
+ ],
+ history: [
+ {q: "Who was the first President of the United States?", options: ["Thomas Jefferson", "George Washington", "John Adams", "Benjamin Franklin"], correct: 1, explanation: "George Washington served as the first U.S. President from 1789 to 1797."},
+ {q: "In which year did World War II end?", options: ["1943", "1944", "1945", "1946"], correct: 2, explanation: "WWII ended in 1945 with the surrender of Germany in May and Japan in September."},
+ {q: "Which ancient wonder of the world still stands today?", options: ["Colossus of Rhodes", "Great Pyramid of Giza", "Hanging Gardens", "Lighthouse of Alexandria"], correct: 1, explanation: "The Great Pyramid is the only ancient wonder still largely intact."},
+ {q: "Who wrote the Declaration of Independence?", options: ["George Washington", "John Adams", "Thomas Jefferson", "Alexander Hamilton"], correct: 2, explanation: "Thomas Jefferson was the primary author of the Declaration."},
+ {q: "Which empire was ruled by Julius Caesar?", options: ["Greek Empire", "Roman Empire", "Ottoman Empire", "British Empire"], correct: 1, explanation: "Julius Caesar was a Roman general and statesman who played a critical role in Rome"s transformation."},
+ {q: "What year did the Berlin Wall fall?", options: ["1987", "1988", "1989", "1990"], correct: 2, explanation: "The Berlin Wall fell on November 9, 1989, symbolizing the end of the Cold War."},
+ {q: "Who was the first person to walk on the moon?", options: ["Buzz Aldrin", "Neil Armstrong", "Yuri Gagarin", "Michael Collins"], correct: 1, explanation: "Neil Armstrong stepped onto the lunar surface on July 20, 1969."},
+ {q: "Which civilization built Machu Picchu?", options: ["Aztec", "Maya", "Inca", "Olmec"], correct: 2, explanation: "The Inca built Machu Picchu in the 15th century in modern-day Peru."},
+ {q: "What was the name of the ship that carried the Pilgrims to America?", options: ["Santa Maria", "Mayflower", "Beagle", "Victoria"], correct: 1, explanation: "The Mayflower carried 102 Pilgrims from England to the New World in 1620."},
+ {q: "Which queen ruled England for 45 years in the 16th century?", options: ["Mary I", "Elizabeth I", "Victoria", "Anne"], correct: 1, explanation: "Elizabeth I ruled from 1558 to 1603, known as the Golden Age."},
+ {q: "What was the main cause of the American Civil War?", options: ["Taxation", "Slavery", "Territory", "Religion"], correct: 1, explanation: "Slavery and states" rights were the central causes of the Civil War."},
+ {q: "Who invented the printing press?", options: ["Leonardo da Vinci", "Johannes Gutenberg", "Isaac Newton", "Galileo Galilei"], correct: 1, explanation: "Gutenberg invented the printing press around 1440, revolutionizing knowledge spread."},
+ {q: "Which war lasted from 1914 to 1918?", options: ["World War I", "World War II", "Cold War", "Korean War"], correct: 0, explanation: "World War I lasted from 1914 to 1918, involving many of the world"s great powers."},
+ {q: "What ancient city was buried by a volcanic eruption in 79 AD?", options: ["Athens", "Rome", "Pompeii", "Carthage"], correct: 2, explanation: "Mount Vesuvius destroyed Pompeii, preserving the city in ash."},
+ {q: "Who was the longest-reigning British monarch before Elizabeth II?", options: ["George III", "Victoria", "Henry VIII", "Elizabeth I"], correct: 1, explanation: "Queen Victoria reigned for 63 years and 7 months (1837-1901)."},
+ {q: "Which country was NOT part of the Axis Powers in WWII?", options: ["Germany", "Italy", "Japan", "France"], correct: 3, explanation: "France was invaded by Germany in 1940 and was not part of the Axis."},
+ {q: "What year did the Titanic sink?", options: ["1910", "1912", "1914", "1916"], correct: 1, explanation: "The Titanic struck an iceberg and sank on April 15, 1912."},
+ {q: "Who painted the Mona Lisa?", options: ["Michelangelo", "Leonardo da Vinci", "Raphael", "Donatello"], correct: 1, explanation: "Leonardo da Vinci painted the Mona Lisa between 1503 and 1519."},
+ {q: "Which empire built the Colosseum?", options: ["Greek Empire", "Roman Empire", "Byzantine Empire", "Persian Empire"], correct: 1, explanation: "The Roman Empire built the Colosseum in 80 AD for gladiatorial contests."},
+ {q: "What was the Silk Road?", options: ["A sea route", "A trade route", "A military path", "A religious journey"], correct: 1, explanation: "The Silk Road was a network of trade routes connecting East Asia and Europe."}
+ ],
+ physics: [
+ {q: "What is the speed of light in a vacuum?", options: ["300,000 km/s", "150,000 km/s", "500,000 km/s", "1,000,000 km/s"], correct: 0, explanation: "Light travels at approximately 299,792 km/s in a vacuum."},
+ {q: "What is the unit of force?", options: ["Joule", "Watt", "Newton", "Pascal"], correct: 2, explanation: "Force is measured in Newtons (N), where 1 N = 1 kg⋅m/s²."},
+ {q: "What is the first law of motion also called?", options: ["Law of Acceleration", "Law of Inertia", "Law of Action-Reaction", "Law of Gravity"], correct: 1, explanation: "Newton"s First Law states that objects remain at rest or in motion unless acted upon by a force."},
+ {q: "What particle has a negative charge?", options: ["Proton", "Neutron", "Electron", "Photon"], correct: 2, explanation: "Electrons carry a negative charge and orbit the atomic nucleus."},
+ {q: "What is the formula for density?", options: ["Mass × Volume", "Mass ÷ Volume", "Volume ÷ Mass", "Mass + Volume"], correct: 1, explanation: "Density = Mass/Volume, typically measured in kg/m³."},
+ {q: "What type of energy does a moving object have?", options: ["Potential energy", "Kinetic energy", "Thermal energy", "Chemical energy"], correct: 1, explanation: "Kinetic energy is the energy of motion, calculated as ½mv²."},
+ {q: "What is the acceleration due to gravity on Earth?", options: ["5.8 m/s²", "9.8 m/s²", "12.8 m/s²", "15.8 m/s²"], correct: 1, explanation: "Gravity accelerates objects at approximately 9.8 m/s² near Earth"s surface."},
+ {q: "What is the SI unit of energy?", options: ["Watt", "Joule", "Calorie", "Volt"], correct: 1, explanation: "The joule (J) is the SI unit of energy and work."},
+ {q: "What does E=mc² represent?", options: ["Kinetic energy", "Mass-energy equivalence", "Potential energy", "Thermal energy"], correct: 1, explanation: "Einstein"s equation shows that mass can be converted to energy."},
+ {q: "What is the smallest particle of an element?", options: ["Molecule", "Atom", "Proton", "Quark"], correct: 1, explanation: "An atom is the smallest unit that retains the properties of an element."},
+ {q: "What is the force that opposes motion?", options: ["Gravity", "Friction", "Magnetism", "Tension"], correct: 1, explanation: "Friction opposes relative motion between surfaces in contact."},
+ {q: "What is the center of an atom called?", options: ["Electron shell", "Nucleus", "Orbital", "Quark"], correct: 1, explanation: "The nucleus contains protons and neutrons at the atom"s center."},
+ {q: "What wave property is measured in Hertz?", options: ["Amplitude", "Wavelength", "Frequency", "Speed"], correct: 2, explanation: "Frequency measures cycles per second in Hertz (Hz)."},
+ {q: "What device converts sound to electrical signals?", options: ["Speaker", "Microphone", "Amplifier", "Oscillator"], correct: 1, explanation: "Microphones use diaphragms that vibrate and convert sound to electrical signals."},
+ {q: "What is the bending of light called?", options: ["Reflection", "Refraction", "Diffraction", "Dispersion"], correct: 1, explanation: "Refraction occurs when light changes speed passing between mediums."},
+ {q: "What is Ohm"s Law?", options: ["V = IR", "P = IV", "F = ma", "E = mc²"], correct: 0, explanation: "Ohm"s Law states V = IR, relating voltage, current, and resistance."},
+ {q: "What particle has no charge?", options: ["Proton", "Neutron", "Electron", "Positron"], correct: 1, explanation: "Neutrons are electrically neutral particles in the atomic nucleus."},
+ {q: "What is the study of heat and temperature?", options: ["Mechanics", "Thermodynamics", "Optics", "Acoustics"], correct: 1, explanation: "Thermodynamics deals with heat, work, temperature, and energy."},
+ {q: "What device stores electrical charge?", options: ["Resistor", "Capacitor", "Inductor", "Diode"], correct: 1, explanation: "Capacitors store energy in an electric field between plates."},
+ {q: "What is the most common state of matter in the universe?", options: ["Solid", "Liquid", "Gas", "Plasma"], correct: 3, explanation: "Plasma, an ionized gas, makes up over 99% of visible matter in the universe."}
+ ],
+ chemistry: [
+ {q: "What is the chemical symbol for water?", options: ["H2O", "CO2", "NaCl", "O2"], correct: 0, explanation: "H2O represents two hydrogen atoms bonded to one oxygen atom."},
+ {q: "What is the pH of pure water?", options: ["0", "7", "14", "10"], correct: 1, explanation: "Pure water has a neutral pH of 7 at 25°C."},
+ {q: "Which element has the symbol Au?", options: ["Silver", "Aluminum", "Gold", "Argon"], correct: 2, explanation: "Au comes from "aurum", the Latin word for gold."},
+ {q: "What gas makes up 21% of Earth"s atmosphere?", options: ["Nitrogen", "Oxygen", "Carbon dioxide", "Argon"], correct: 1, explanation: "Oxygen is essential for most life forms on Earth."},
+ {q: "What is the most abundant element in the universe?", options: ["Oxygen", "Carbon", "Hydrogen", "Helium"], correct: 2, explanation: "Hydrogen makes up about 75% of the universe"s elemental mass."},
+ {q: "What is the process of separating mixtures called?", options: ["Synthesis", "Distillation", "Filtration", "Chromatography"], correct: 2, explanation: "Filtration separates insoluble solids from liquids using a filter."},
+ {q: "What type of bond shares electrons?", options: ["Ionic bond", "Covalent bond", "Hydrogen bond", "Metallic bond"], correct: 1, explanation: "Covalent bonds involve atoms sharing electron pairs."},
+ {q: "What is the atomic number of carbon?", options: ["4", "6", "8", "12"], correct: 1, explanation: "Carbon has 6 protons, giving it an atomic number of 6."},
+ {q: "What acid is found in vinegar?", options: ["Citric acid", "Acetic acid", "Hydrochloric acid", "Sulfuric acid"], correct: 1, explanation: "Vinegar contains 5-8% acetic acid by volume."},
+ {q: "What is the lightest element?", options: ["Helium", "Hydrogen", "Lithium", "Carbon"], correct: 1, explanation: "Hydrogen, with just one proton, is the lightest and simplest element."},
+ {q: "What is the main gas in the sun?", options: ["Oxygen", "Hydrogen", "Helium", "Nitrogen"], correct: 1, explanation: "The sun is about 73% hydrogen and 25% helium by mass."},
+ {q: "What is NaCl commonly called?", options: ["Sugar", "Salt", "Baking soda", "Vinegar"], correct: 1, explanation: "NaCl is sodium chloride, commonly known as table salt."},
+ {q: "Which element is a liquid at room temperature?", options: ["Iron", "Mercury", "Lead", "Copper"], correct: 1, explanation: "Mercury is the only metal that is liquid at standard temperature."},
+ {q: "What does pH measure?", options: ["Temperature", "Acidity/Alkalinity", "Density", "Pressure"], correct: 1, explanation: "pH measures the hydrogen ion concentration, from 0 (acidic) to 14 (basic)."},
+ {q: "What is the formula for table sugar?", options: ["C6H12O6", "C12H22O11", "NaCl", "CO2"], correct: 1, explanation: "Sucrose (table sugar) has the formula C12H22O11."},
+ {q: "What element is diamond made of?", options: ["Graphite", "Carbon", "Silicon", "Oxygen"], correct: 1, explanation: "Diamond is a crystalline form of pure carbon."},
+ {q: "What gas do we exhale?", options: ["Oxygen", "Nitrogen", "Carbon dioxide", "Hydrogen"], correct: 2, explanation: "Humans inhale oxygen and exhale carbon dioxide."},
+ {q: "What is the study of carbon compounds called?", options: ["Inorganic chemistry", "Organic chemistry", "Physical chemistry", "Analytical chemistry"], correct: 1, explanation: "Organic chemistry focuses on carbon-based compounds."},
+ {q: "What does the periodic table organize elements by?", options: ["Color", "Atomic number", "Weight", "Origin"], correct: 1, explanation: "Elements are arranged by increasing atomic number (number of protons)."},
+ {q: "What is the most reactive group of metals?", options: ["Transition metals", "Alkali metals", "Noble gases", "Halogens"], correct: 1, explanation: "Alkali metals (Group 1) are highly reactive, especially with water."}
+ ],
+ mathematics: [
+ {q: "What is the value of π (pi) to two decimal places?", options: ["3.12", "3.14", "3.16", "3.18"], correct: 1, explanation: "π is approximately 3.14159..., so to two decimal places it"s 3.14."},
+ {q: "What is the square root of 64?", options: ["6", "7", "8", "9"], correct: 2, explanation: "8 × 8 = 64, so √64 = 8."},
+ {q: "What is 2 to the power of 5?", options: ["16", "24", "32", "64"], correct: 2, explanation: "2⁵ = 2 × 2 × 2 × 2 × 2 = 32."},
+ {q: "What is the formula for the area of a circle?", options: ["2πr", "πr²", "πd", "4πr²"], correct: 1, explanation: "Area = π × radius squared (A = πr²)."},
+ {q: "What is the sum of angles in a triangle?", options: ["90°", "180°", "270°", "360°"], correct: 1, explanation: "The interior angles of any triangle always sum to 180 degrees."},
+ {q: "What is the next prime number after 7?", options: ["8", "9", "10", "11"], correct: 3, explanation: "11 is the next prime number. 8, 9, and 10 are all composite."},
+ {q: "What is 15% of 200?", options: ["25", "30", "35", "40"], correct: 1, explanation: "15% of 200 = 0.15 × 200 = 30."},
+ {q: "What is the Pythagorean theorem?", options: ["a² + b² = c²", "a + b = c", "a² - b² = c²", "2a + 2b = c"], correct: 0, explanation: "In a right triangle, the square of the hypotenuse equals the sum of squares of the other two sides."},
+ {q: "What is the derivative of x²?", options: ["x", "2x", "x²", "2"], correct: 1, explanation: "Using the power rule, d/dx(x²) = 2x."},
+ {q: "What is the value of the golden ratio (φ)?", options: ["1.414", "1.618", "2.718", "3.142"], correct: 1, explanation: "φ = (1 + √5)/2 ≈ 1.618, found throughout nature and art."},
+ {q: "How many sides does a hexagon have?", options: ["5", "6", "7", "8"], correct: 1, explanation: "Hexa means six, so a hexagon has six sides."},
+ {q: "What is the factorial of 5 (5!)?", options: ["25", "120", "125", "720"], correct: 1, explanation: "5! = 5 × 4 × 3 × 2 × 1 = 120."},
+ {q: "What is the slope-intercept form of a line?", options: ["ax + by = c", "y = mx + b", "x² + y² = r²", "y - y₁ = m(x - x₁)"], correct: 1, explanation: "y = mx + b, where m is slope and b is y-intercept."},
+ {q: "What is the probability of rolling a 6 on a fair die?", options: ["1/3", "1/4", "1/6", "1/12"], correct: 2, explanation: "A die has 6 faces, so P(6) = 1/6."},
+ {q: "What is the logarithm base 10 of 100?", options: ["1", "2", "10", "100"], correct: 1, explanation: "log₁₀(100) = 2 because 10² = 100."},
+ {q: "What is the quadratic formula?", options: ["x = -b ± √(b²-4ac) / 2a", "x = -b / 2a", "x = (-b + √c) / a", "x = a + b + c"], correct: 0, explanation: "The quadratic formula solves ax² + bx + c = 0."},
+ {q: "What is the sum of the first 10 positive integers?", options: ["45", "50", "55", "60"], correct: 2, explanation: "1+2+3+4+5+6+7+8+9+10 = 55."},
+ {q: "What is the least common multiple of 4 and 6?", options: ["2", "12", "24", "36"], correct: 1, explanation: "LCM(4,6) = 12. Multiples of 4: 4,8,12. Multiples of 6: 6,12."},
+ {q: "What is the value of e (Euler"s number) to two decimal places?", options: ["2.71", "2.72", "2.81", "2.82"], correct: 0, explanation: "e ≈ 2.71828..., so to two decimal places it"s 2.72."},
+ {q: "What is the Fibonacci sequence?", options: ["Each number is sum of two preceding ones", "Each number is double the previous", "Sequence of prime numbers", "Sequence of perfect squares"], correct: 0, explanation: "Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13... (each term is sum of two before it)."}
+ ],
+ geography: [
+ {q: "What is the capital of Japan?", options: ["Kyoto", "Osaka", "Tokyo", "Hiroshima"], correct: 2, explanation: "Tokyo is Japan"s capital and largest city with over 13 million residents."},
+ {q: "Which is the largest ocean?", options: ["Atlantic", "Indian", "Arctic", "Pacific"], correct: 3, explanation: "The Pacific Ocean covers about 63 million square miles."},
+ {q: "What is the longest river in the world?", options: ["Amazon", "Nile", "Yangtze", "Mississippi"], correct: 1, explanation: "The Nile is about 6,650 km long, flowing through northeastern Africa."},
+ {q: "Which country has the largest population?", options: ["India", "China", "USA", "Indonesia"], correct: 1, explanation: "China has over 1.4 billion people, though India is close behind."},
+ {q: "What is the smallest country in the world?", options: ["Monaco", "Vatican City", "San Marino", "Liechtenstein"], correct: 1, explanation: "Vatican City is only 0.44 km², located within Rome, Italy."},
+ {q: "Which continent is the Sahara Desert in?", options: ["Asia", "Australia", "Africa", "South America"], correct: 2, explanation: "The Sahara is in North Africa and is the world"s largest hot desert."},
+ {q: "What mountain range separates Europe and Asia?", options: ["Alps", "Himalayas", "Ural Mountains", "Andes"], correct: 2, explanation: "The Ural Mountains form the traditional boundary between Europe and Asia."},
+ {q: "What is the capital of Australia?", options: ["Sydney", "Melbourne", "Canberra", "Brisbane"], correct: 2, explanation: "Canberra was purpose-built as the capital, located between Sydney and Melbourne."},
+ {q: "Which country has the most time zones?", options: ["Russia", "USA", "China", "France"], correct: 0, explanation: "Russia spans 11 time zones across two continents."},
+ {q: "What is the deepest point in the ocean?", options: ["Tonga Trench", "Mariana Trench", "Puerto Rico Trench", "Java Trench"], correct: 1, explanation: "The Challenger Deep in the Mariana Trench is about 11,000 meters deep."},
+ {q: "Which African country was never colonized?", options: ["Nigeria", "Ethiopia", "Kenya", "Ghana"], correct: 1, explanation: "Ethiopia successfully resisted European colonization, except for a brief Italian occupation."},
+ {q: "What is the largest island in the world?", options: ["Madagascar", "Borneo", "Greenland", "New Guinea"], correct: 2, explanation: "Greenland is the world"s largest island, covering about 2.1 million km²."},
+ {q: "Which river flows through the most countries?", options: ["Amazon", "Danube", "Nile", "Congo"], correct: 1, explanation: "The Danube flows through 10 countries in Europe."},
+ {q: "What is the driest place on Earth?", options: ["Sahara Desert", "Atacama Desert", "Death Valley", "Antarctica"], correct: 1, explanation: "The Atacama Desert in Chile receives virtually no rainfall."},
+ {q: "Which country has the most volcanoes?", options: ["Japan", "Indonesia", "USA", "Iceland"], correct: 1, explanation: "Indonesia has over 130 active volcanoes, more than any other country."},
+ {q: "What is the largest country by land area?", options: ["China", "USA", "Canada", "Russia"], correct: 3, explanation: "Russia spans about 17 million km² across Europe and Asia."},
+ {q: "Which US state is closest to Africa?", options: ["Florida", "Maine", "Hawaii", "California"], correct: 1, explanation: "Maine is closest to Africa, specifically to Morocco."},
+ {q: "What is the most populous city in the world?", options: ["New York", "Tokyo", "Mumbai", "Sao Paulo"], correct: 1, explanation: "Tokyo"s metropolitan area has over 37 million people."},
+ {q: "Which sea has no coastline?", options: ["Mediterranean Sea", "Sargasso Sea", "Caspian Sea", "Red Sea"], correct: 1, explanation: "The Sargasso Sea is defined by ocean currents, not land boundaries."},
+ {q: "What is the highest waterfall in the world?", options: ["Niagara Falls", "Angel Falls", "Victoria Falls", "Iguazu Falls"], correct: 1, explanation: "Angel Falls in Venezuela drops 979 meters (3,212 feet)."}
+ ],
+ literature: [
+ {q: "Who wrote "Romeo and Juliet"?", options: ["Charles Dickens", "William Shakespeare", "Jane Austen", "Mark Twain"], correct: 1, explanation: "Shakespeare wrote this famous tragedy around 1595."},
+ {q: "What is the first book of the Bible?", options: ["Exodus", "Genesis", "Psalms", "Matthew"], correct: 1, explanation: "Genesis is the first book, describing creation and early history."},
+ {q: "Who wrote "The Great Gatsby"?", options: ["Ernest Hemingway", "F. Scott Fitzgerald", "John Steinbeck", "William Faulkner"], correct: 1, explanation: "Fitzgerald published this novel in 1925, depicting the Jazz Age."},
+ {q: "What is the longest novel ever written?", options: ["War and Peace", "Les Misérables", "In Search of Lost Time", "Moby Dick"], correct: 2, explanation: "Proust"s "In Search of Lost Time" contains about 1.2 million words."},
+ {q: "Who wrote "1984"?", options: ["Aldous Huxley", "George Orwell", "Ray Bradbury", "H.G. Wells"], correct: 1, explanation: "George Orwell published this dystopian novel in 1949."},
+ {q: "What literary device compares two things using "like" or "as"?", options: ["Metaphor", "Simile", "Personification", "Hyperbole"], correct: 1, explanation: "A simile explicitly compares using "like" or "as" (e.g., "busy as a bee")."},
+ {q: "Who wrote "Harry Potter"?", options: ["J.R.R. Tolkien", "J.K. Rowling", "C.S. Lewis", "Roald Dahl"], correct: 1, explanation: "J.K. Rowling created the Harry Potter series beginning in 1997."},
+ {q: "What is the most translated book?", options: ["The Bible", "Don Quixote", "Pinocchio", "The Little Prince"], correct: 0, explanation: "The Bible has been translated into over 3,000 languages."},
+ {q: "Who wrote "Pride and Prejudice"?", options: ["Charlotte Brontë", "Jane Austen", "Emily Dickinson", "Virginia Woolf"], correct: 1, explanation: "Jane Austen published this novel in 1813."},
+ {q: "What is a haiku?", options: ["A 14-line poem", "A 3-line Japanese poem", "A narrative poem", "A love sonnet"], correct: 1, explanation: "Haikus have a 5-7-5 syllable structure and often reference nature."},
+ {q: "Who wrote "The Odyssey"?", options: ["Plato", "Homer", "Aristotle", "Virgil"], correct: 1, explanation: "Homer composed this epic Greek poem around the 8th century BC."},
+ {q: "What is the study of literature called?", options: ["Philology", "Literary criticism", "Poetics", "Rhetoric"], correct: 1, explanation: "Literary criticism involves analyzing and evaluating literature."},
+ {q: "Who wrote "Moby Dick"?", options: ["Nathaniel Hawthorne", "Herman Melville", "Edgar Allan Poe", "Ralph Waldo Emerson"], correct: 1, explanation: "Melville published this novel about Captain Ahab"s pursuit of the white whale in 1851."},
+ {q: "What does "deus ex machina" mean?", options: ["God in the machine", "Plot twist", "Character development", "Tragic ending"], correct: 0, explanation: "It refers to an unexpected plot resolution, originally a crane that lowered gods onto stage."},
+ {q: "Who wrote "The Canterbury Tales"?", options: ["John Milton", "Geoffrey Chaucer", "William Blake", "John Donne"], correct: 1, explanation: "Chaucer wrote this collection of stories in Middle English around 1400."},
+ {q: "What is an unreliable narrator?", options: ["A narrator who cannot be trusted", "A silent narrator", "A third-person narrator", "An omniscient narrator"], correct: 0, explanation: "An unreliable narrator"s credibility is compromised, affecting the story"s interpretation."},
+ {q: "Who wrote "To Kill a Mockingbird"?", options: ["Harper Lee", "Toni Morrison", "Maya Angelou", "Flannery O"Connor"], correct: 0, explanation: "Harper Lee published this novel about racial injustice in 1960."},
+ {q: "What is the main character called?", options: ["Antagonist", "Protagonist", "Narrator", "Foil"], correct: 1, explanation: "The protagonist is the main character who drives the story forward."},
+ {q: "What literary period followed the Renaissance?", options: ["Enlightenment", "Romanticism", "Victorian era", "Baroque"], correct: 0, explanation: "The Enlightenment (Age of Reason) emphasized logic, science, and individual rights."},
+ {q: "Who wrote "The Divine Comedy"?", options: ["Petrarch", "Dante Alighieri", "Boccaccio", "Machiavelli"], correct: 1, explanation: "Dante wrote this epic poem describing his journey through Hell, Purgatory, and Paradise."}
+ ],
+ computer: [
+ {q: "What does HTML stand for?", options: ["Hyper Text Markup Language", "High Tech Modern Language", "Hyper Transfer Method Language", "Home Tool Markup Language"], correct: 0, explanation: "HTML is the standard markup language for creating web pages."},
+ {q: "What is the binary representation of 5?", options: ["101", "110", "111", "100"], correct: 0, explanation: "5 in binary is 101 (4 + 0 + 1 = 5)."},
+ {q: "Which language is primarily used for web styling?", options: ["HTML", "JavaScript", "CSS", "Python"], correct: 2, explanation: "CSS (Cascading Style Sheets) controls the visual presentation of web pages."},
+ {q: "What does CPU stand for?", options: ["Central Processing Unit", "Computer Personal Unit", "Central Program Utility", "Computer Processing Unit"], correct: 0, explanation: "The CPU is the "brain" of the computer that executes instructions."},
+ {q: "Which data structure follows LIFO?", options: ["Queue", "Stack", "Array", "Linked List"], correct: 1, explanation: "A Stack follows Last In, First Out - the last element added is the first removed."},
+ {q: "What is the time complexity of binary search?", options: ["O(n)", "O(log n)", "O(n²)", "O(1)"], correct: 1, explanation: "Binary search divides the search space in half each time, giving O(log n) complexity."},
+ {q: "Which company created Java?", options: ["Microsoft", "Apple", "Sun Microsystems", "IBM"], correct: 2, explanation: "Sun Microsystems released Java in 1995, now owned by Oracle."},
+ {q: "What does SQL stand for?", options: ["Structured Query Language", "Simple Query Language", "System Query Language", "Standard Question Language"], correct: 0, explanation: "SQL is used for managing and querying relational databases."},
+ {q: "What is 1024 bytes called?", options: ["Megabyte", "Kilobyte", "Gigabyte", "Terabyte"], correct: 1, explanation: "A kilobyte (KB) equals 1024 bytes in binary systems."},
+ {q: "Which sorting algorithm has the best average case?", options: ["Bubble Sort", "Insertion Sort", "Quick Sort", "Selection Sort"], correct: 2, explanation: "Quick Sort has O(n log n) average time complexity."},
+ {q: "What is the main purpose of DNS?", options: ["Encrypt data", "Translate domain names to IP addresses", "Store files", "Send emails"], correct: 1, explanation: "DNS (Domain Name System) translates human-readable URLs to IP addresses."},
+ {q: "What does HTTP stand for?", options: ["HyperText Transfer Protocol", "HighText Transfer Protocol", "HyperText Transmission Process", "HostText Transfer Protocol"], correct: 0, explanation: "HTTP is the protocol for transmitting web pages over the internet."},
+ {q: "Which is NOT a programming paradigm?", options: ["Object-Oriented", "Functional", "Procedural", "Digital"], correct: 3, explanation: "Digital is not a programming paradigm; the others are well-established approaches."},
+ {q: "What is the value of NULL?", options: ["0", "undefined", "no value", "false"], correct: 2, explanation: "NULL represents the intentional absence of any object value."},
+ {q: "Which language is known as the "language of the web"?", options: ["Python", "Java", "JavaScript", "C++"], correct: 2, explanation: "JavaScript runs in all web browsers and powers interactive web content."},
+ {q: "What is recursion?", options: ["A loop", "A function calling itself", "A data type", "A variable scope"], correct: 1, explanation: "Recursion occurs when a function calls itself to solve smaller instances of the same problem."},
+ {q: "What does IDE stand for?", options: ["Internet Data Exchange", "Integrated Development Environment", "Interface Design Editor", "Interactive Data Engine"], correct: 1, explanation: "An IDE combines code editor, debugger, and build tools in one application."},
+ {q: "Which data structure uses key-value pairs?", options: ["Array", "Stack", "Hash Map", "Linked List"], correct: 2, explanation: "Hash maps (or dictionaries) store data as key-value pairs for fast lookup."},
+ {q: "What is the purpose of Git?", options: ["Write code", "Version control", "Compile programs", "Test software"], correct: 1, explanation: "Git tracks changes in source code during software development."},
+ {q: "What is an IP address?", options: ["A website name", "A unique network identifier", "A file location", "A password"], correct: 1, explanation: "An IP address uniquely identifies devices on a network (e.g., 192.168.1.1)."}
+ ]
+ };
+
+ let currentQuiz = [];
+ let currentQuestionIndex = 0;
+ let score = 0;
+ let correctCount = 0;
+ let incorrectCount = 0;
+ let quizStartTime = null;
+ let selectedSubject = "biology";
+
+ function selectSubject(btn) {
+ document.querySelectorAll(".subject-btn").forEach(b => b.classList.remove("active"));
+ btn.classList.add("active");
+ selectedSubject = btn.dataset.subject;
+ document.getElementById("currentSubject").textContent = btn.textContent.trim();
+ }
+
+ function startQuiz() {
+ const difficulty = document.getElementById("quizDifficulty").value;
+ const count = parseInt(document.getElementById("quizCount").value);
+
+ let allQuestions = quizDatabase[selectedSubject] || quizDatabase.biology;
+
+ // Shuffle and select questions
+ currentQuiz = allQuestions.sort(() => 0.5 - Math.random()).slice(0, count);
+ currentQuestionIndex = 0;
+ score = 0;
+ correctCount = 0;
+ incorrectCount = 0;
+ quizStartTime = Date.now();
+
+ document.getElementById("quizSetup").classList.add("hidden");
+ document.getElementById("quizGame").classList.remove("hidden");
+ document.getElementById("quizResults").classList.add("hidden");
+ document.getElementById("quizFeedback").classList.add("hidden");
+
+ showQuestion();
+ }
+
+ function showQuestion() {
+ const question = currentQuiz[currentQuestionIndex];
+ document.getElementById("questionText").textContent = question.q;
+ document.getElementById("currentScore").textContent = score;
+
+ const optionsContainer = document.getElementById("answerOptions");
+ optionsContainer.innerHTML = "";
+
+ question.options.forEach((option, index) => {
+ const btn = document.createElement("button");
+ btn.className = "quiz-option";
+ btn.textContent = option;
+ btn.onclick = () => selectAnswer(btn, index);
+ optionsContainer.appendChild(btn);
+ });
+
+ // Update progress bar
+ const progress = ((currentQuestionIndex) / currentQuiz.length) * 100;
+ document.getElementById("quizProgressFill").style.width = progress + "%";
+
+ document.getElementById("quizFeedback").classList.add("hidden");
+ }
+
+ function selectAnswer(btn, selectedIndex) {
+ const question = currentQuiz[currentQuestionIndex];
+ const isCorrect = selectedIndex === question.correct;
+ const options = document.querySelectorAll(".quiz-option");
+
+ options.forEach((opt, idx) => {
+ opt.classList.add("disabled");
+ if (idx === question.correct) {
+ opt.classList.add("correct");
+ } else if (idx === selectedIndex && !isCorrect) {
+ opt.classList.add("incorrect");
+ }
+ });
+
+ if (isCorrect) {
+ score += 10;
+ correctCount++;
+ playSuccessSound();
+ fireConfetti();
+ showFeedback(true, question.explanation);
+ } else {
+ incorrectCount++;
+ playErrorSound();
+ showFeedback(false, question.explanation);
+ }
+
+ document.getElementById("currentScore").textContent = score;
+ }
+
+ function showFeedback(isCorrect, explanation) {
+ const feedback = document.getElementById("quizFeedback");
+ const icon = document.getElementById("feedbackIcon");
+ const title = document.getElementById("feedbackTitle");
+ const exp = document.getElementById("feedbackExplanation");
+
+ icon.innerHTML = isCorrect ? "" : "";
+ icon.className = "feedback-icon " + (isCorrect ? "correct" : "incorrect");
+ title.textContent = isCorrect ? "Correct!" : "Incorrect!";
+ title.style.color = isCorrect ? "var(--success)" : "var(--accent)";
+ exp.textContent = explanation;
+
+ feedback.classList.remove("hidden");
+ }
+
+ function nextQuestion() {
+ currentQuestionIndex++;
+ if (currentQuestionIndex < currentQuiz.length) {
+ showQuestion();
+ } else {
+ showResults();
+ }
+ }
+
+ function showResults() {
+ const timeTaken = Math.floor((Date.now() - quizStartTime) / 1000);
+ const minutes = Math.floor(timeTaken / 60);
+ const seconds = timeTaken % 60;
+ const percentage = Math.round((correctCount / currentQuiz.length) * 100);
+
+ document.getElementById("percentage").textContent = percentage + "%";
+ document.getElementById("correctCount").textContent = correctCount;
+ document.getElementById("incorrectCount").textContent = incorrectCount;
+
+ document.getElementById("quizQuestionContainer").classList.add("hidden");
+ document.getElementById("quizFeedback").classList.add("hidden");
+ document.getElementById("quizResults").classList.remove("hidden");
+ document.getElementById("quizProgressFill").style.width = "100%";
+
+ if (percentage >= 80) {
+ fireConfetti();
+ playSuccessSound();
+ }
+ }
+
+ function restartQuiz() {
+ currentQuestionIndex = 0;
+ score = 0;
+ correctCount = 0;
+ incorrectCount = 0;
+ document.getElementById("quizResults").classList.add("hidden");
+ document.getElementById("quizQuestionContainer").classList.remove("hidden");
+ showQuestion();
+ }
+
+ function backToSetup() {
+ document.getElementById("quizGame").classList.add("hidden");
+ document.getElementById("quizSetup").classList.remove("hidden");
+ document.getElementById("quizResults").classList.add("hidden");
+ }
+
+ // Confetti Effect
+ function fireConfetti() {
+ const canvas = document.getElementById("confettiCanvas");
+ if (!canvas) return;
+
+ const ctx = canvas.getContext("2d");
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+
+ const colors = ["#00d4ff", "#a855f7", "#f43f5e", "#22c55e", "#f59e0b"];
+ const particles = [];
+
+ for (let i = 0; i < 100; i++) {
+ particles.push({
+ x: canvas.width / 2,
+ y: canvas.height / 2,
+ vx: (Math.random() - 0.5) * 15,
+ vy: (Math.random() - 0.5) * 15 - 5,
+ color: colors[Math.floor(Math.random() * colors.length)],
+ size: Math.random() * 8 + 4,
+ life: 1
+ });
+ }
+
+ function animate() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ particles.forEach((p, i) => {
+ p.x += p.vx;
+ p.y += p.vy;
+ p.vy += 0.3; // gravity
+ p.life -= 0.02;
+
+ ctx.globalAlpha = p.life;
+ ctx.fillRect(p.x, p.y, p.size, p.size);
+
+ if (p.life <= 0) particles.splice(i, 1);
+ });
+
+ if (particles.length > 0) {
+ requestAnimationFrame(animate);
+ }
+ }
+
+ animate();
+ }
+
+ // Sound Effects (using AudioContext for beeps)
+ function playSuccessSound() {
+ try {
+ const AudioContext = window.AudioContext || window.webkitAudioContext;
+ if (!AudioContext) return;
+
+ const ctx = new AudioContext();
+ const osc = ctx.createOscillator();
+ const gain = ctx.createGain();
+
+ osc.connect(gain);
+ gain.connect(ctx.destination);
+
+ osc.frequency.value = 880; // A5 note
+ osc.type = "sine";
+
+ gain.gain.setValueAtTime(0.3, ctx.currentTime);
+ gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.3);
+
+ osc.start(ctx.currentTime);
+ osc.stop(ctx.currentTime + 0.3);
+
+ // Second note for success
+ setTimeout(() => {
+ const osc2 = ctx.createOscillator();
+ const gain2 = ctx.createGain();
+ osc2.connect(gain2);
+ gain2.connect(ctx.destination);
+ osc2.frequency.value = 1109; // C#6
+ gain2.gain.setValueAtTime(0.3, ctx.currentTime);
+ gain2.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.3);
+ osc2.start(ctx.currentTime);
+ osc2.stop(ctx.currentTime + 0.3);
+ }, 150);
+ } catch (e) {}
+ }
+
+ function playErrorSound() {
+ try {
+ const AudioContext = window.AudioContext || window.webkitAudioContext;
+ if (!AudioContext) return;
+
+ const ctx = new AudioContext();
+ const osc = ctx.createOscillator();
+ const gain = ctx.createGain();
+
+ osc.connect(gain);
+ gain.connect(ctx.destination);
+
+ osc.frequency.value = 200; // Low tone
+ osc.type = "sawtooth";
+
+ gain.gain.setValueAtTime(0.3, ctx.currentTime);
+ gain.gain.exponentialRampToValueAtTime(0.01, ctx.currentTime + 0.4);
+
+ osc.start(ctx.currentTime);
+ osc.stop(ctx.currentTime + 0.4);
+ } catch (e) {}
+ }
+
+ // Knowledge Map Visualization
+ let knowledgeMapData = [
+ { name: "Quantum Mechanics", mastery: 85, category: "physics", x: 0.2, y: 0.3 },
+ { name: "Linear Algebra", mastery: 72, category: "math", x: 0.5, y: 0.2 },
+ { name: "Thermodynamics", mastery: 63, category: "physics", x: 0.7, y: 0.4 },
+ { name: "Organic Chemistry", mastery: 91, category: "chemistry", x: 0.3, y: 0.6 },
+ { name: "Differential Equations", mastery: 45, category: "math", x: 0.6, y: 0.7 },
+ { name: "Cell Biology", mastery: 88, category: "biology", x: 0.1, y: 0.5 },
+ { name: "World History", mastery: 76, category: "history", x: 0.8, y: 0.2 },
+ { name: "Machine Learning", mastery: 68, category: "computer", x: 0.4, y: 0.4 },
+ { name: "Literature", mastery: 82, category: "literature", x: 0.9, y: 0.6 },
+ { name: "Geography", mastery: 79, category: "geography", x: 0.2, y: 0.8 }
+ ];
+
+ let currentFilter = "all";
+ let currentView = "constellation";
+
+ function initKnowledgeMap() {
+ const canvas = document.getElementById("knowledgeCanvas");
+ if (!canvas) return;
+
+ const ctx = canvas.getContext("2d");
+ canvas.width = canvas.offsetWidth;
+ canvas.height = canvas.offsetHeight;
+
+ let animationFrame;
+ let hoveredNode = null;
+
+ function draw() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ const filtered = currentFilter === "all"
+ ? knowledgeMapData
+ : knowledgeMapData.filter(d => {
+ if (currentFilter === "strong") return d.mastery >= 80;
+ if (currentFilter === "weak") return d.mastery < 60;
+ if (currentFilter === "recent") return d.mastery > 0;
+ return true;
+ });
+
+ // Draw connections
+ ctx.lineWidth = 1;
+ for (let i = 0; i < filtered.length; i++) {
+ for (let j = i + 1; j < filtered.length; j++) {
+ const d1 = filtered[i];
+ const d2 = filtered[j];
+ const x1 = d1.x * canvas.width;
+ const y1 = d1.y * canvas.height;
+ const x2 = d2.x * canvas.width;
+ const y2 = d2.y * canvas.height;
+ const dist = Math.sqrt((x2-x1)**2 + (y2-y1)**2);
+ if (dist < 200) {
+ ctx.beginPath();
+ ctx.moveTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.stroke();
+ }
+ }
+ }
+
+ // Draw nodes
+ filtered.forEach(node => {
+ const x = node.x * canvas.width;
+ const y = node.y * canvas.height;
+ const radius = 15 + (node.mastery / 100) * 20;
+ const isHovered = hoveredNode === node;
+
+ // Color based on mastery
+ let color;
+ if (node.mastery >= 80) color = "#22c55e";
+ else if (node.mastery >= 60) color = "#00d4ff";
+ else if (node.mastery >= 40) color = "#f59e0b";
+ else color = "#f43f5e";
+
+ // Glow effect
+ const gradient = ctx.createRadialGradient(x, y, 0, x, y, radius * 2);
+ gradient.addColorStop(0, color + "40");
+ gradient.addColorStop(1, "transparent");
+ ctx.beginPath();
+ ctx.arc(x, y, radius * 2, 0, Math.PI * 2);
+ ctx.fill();
+
+ // Main circle
+ ctx.beginPath();
+ ctx.arc(x, y, radius, 0, Math.PI * 2);
+ ctx.fill();
+
+ // Border
+ ctx.lineWidth = isHovered ? 3 : 2;
+ ctx.stroke();
+
+ // Label
+ ctx.font = "12px sans-serif";
+ ctx.textAlign = "center";
+ ctx.fillText(node.name, x, y + radius + 20);
+ ctx.fillText(node.mastery + "%", x, y + radius + 35);
+ });
+
+ animationFrame = requestAnimationFrame(draw);
+ }
+
+ // Mouse interactions
+ canvas.addEventListener("mousemove", (e) => {
+ const rect = canvas.getBoundingClientRect();
+ const x = e.clientX - rect.left;
+ const y = e.clientY - rect.top;
+
+ hoveredNode = knowledgeMapData.find(node => {
+ const nx = node.x * canvas.width;
+ const ny = node.y * canvas.height;
+ const dist = Math.sqrt((x - nx)**2 + (y - ny)**2);
+ return dist < 30;
+ });
+
+ canvas.style.cursor = hoveredNode ? "pointer" : "grab";
+ });
+
+ canvas.addEventListener("click", () => {
+ if (hoveredNode) {
+ showTopicDetails(hoveredNode.name);
+ }
+ });
+
+ draw();
+ }
+
+ function filterMap(filter) {
+ currentFilter = filter;
+ document.querySelectorAll(".filter-btn").forEach(btn => btn.classList.remove("active"));
+ event.target.classList.add("active");
+ }
+
+ function setMapView(view) {
+ currentView = view;
+ document.querySelectorAll(".view-btn").forEach(btn => btn.classList.remove("active"));
+ event.target.classList.add("active");
+ }
+
+ function showTopicDetails(topic) {
+ const modal = document.createElement("div");
+ modal.style.cssText = "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); z-index: 1000; display: flex; align-items: center; justify-content: center;";
+ modal.innerHTML = `
+ 24
+//
+ 85%
+//
+//
+//
+//
+//
+ `;
+ document.body.appendChild(modal);
+ modal.onclick = (e) => { if (e.target === modal) modal.remove(); };
+ }
+
+ function startStudying(topic) {
+ location.href = "/practice?topic=" + encodeURIComponent(topic);
+ }
+
+ // Initialize knowledge map on page load
+ if (document.getElementById("knowledgeCanvas")) {
+ initKnowledgeMap();
+ }
+
+ // Pomodoro Timer
+ let pomodoroTime = 25 * 60;
+ let pomodoroInterval = null;
+ let isBreak = false;
+
+ function initPomodoro() {
+ const display = document.getElementById("pomodoroDisplay");
+ if (!display) return;
+ updatePomodoroDisplay();
+ }
+
+ function updatePomodoroDisplay() {
+ const display = document.getElementById("pomodoroDisplay");
+ if (!display) return;
+ const minutes = Math.floor(pomodoroTime / 60).toString().padStart(2, "0");
+ const seconds = (pomodoroTime % 60).toString().padStart(2, "0");
+ }
+
+ function startPomodoro() {
+ if (pomodoroInterval) return;
+ pomodoroInterval = setInterval(() => {
+ pomodoroTime--;
+ updatePomodoroDisplay();
+ if (pomodoroTime <= 0) {
+ clearInterval(pomodoroInterval);
+ pomodoroInterval = null;
+ playSuccessSound();
+ alert(isBreak ? "Break over! Time to study." : "Pomodoro complete! Take a break.");
+ isBreak = !isBreak;
+ pomodoroTime = isBreak ? 5 * 60 : 25 * 60;
+ updatePomodoroDisplay();
+ }
+ }, 1000);
+ }
+
+ function pausePomodoro() {
+ if (pomodoroInterval) {
+ clearInterval(pomodoroInterval);
+ pomodoroInterval = null;
+ }
+ }
+
+ function resetPomodoro() {
+ pausePomodoro();
+ isBreak = false;
+ pomodoroTime = 25 * 60;
+ updatePomodoroDisplay();
+ document.title = "FlashSync - Advanced Learning Platform";
+ }
+
+ // Music Player for Study Lo-Fi
+ const studyTracks = [
+ { name: "Deep Focus", url: "https://www.youtube.com/embed/jfKfPfyJRdk", type: "lofi" },
+ { name: "Study Beats", url: "https://www.youtube.com/embed/4xDzrJKXOOY", type: "lofi" },
+ { name: "Rain Sounds", url: "https://www.youtube.com/embed/q76bMs-NwRk", type: "ambient" },
+ { name: "Classical Focus", url: "https://www.youtube.com/embed/mIYzp5rcTvU", type: "classical" }
+ ];
+
+ let currentTrack = 0;
+ let isPlaying = false;
+
+ function playMusic() {
+ const player = document.getElementById("musicPlayer");
+ if (player) {
+ player.src = studyTracks[currentTrack].url + "?autoplay=1";
+ isPlaying = true;
+ updateMusicUI();
+ }
+ }
+
+ function pauseMusic() {
+ const player = document.getElementById("musicPlayer");
+ if (player) {
+ player.src = "";
+ isPlaying = false;
+ updateMusicUI();
+ }
+ }
+
+ function nextTrack() {
+ currentTrack = (currentTrack + 1) % studyTracks.length;
+ if (isPlaying) playMusic();
+ updateMusicUI();
+ }
+
+ function prevTrack() {
+ currentTrack = (currentTrack - 1 + studyTracks.length) % studyTracks.length;
+ if (isPlaying) playMusic();
+ updateMusicUI();
+ }
+
+ function updateMusicUI() {
+ const trackName = document.getElementById("currentTrackName");
+ const playBtn = document.getElementById("playMusicBtn");
+ if (trackName) trackName.textContent = studyTracks[currentTrack].name;
+ if (playBtn) playBtn.innerHTML = isPlaying ? "" : "";
+ }
+
+ // Drawing Canvas
+ let isDrawing = false;
+ let lastX = 0;
+ let lastY = 0;
+
+ function initDrawingCanvas() {
+ const canvas = document.getElementById("drawingCanvas");
+ if (!canvas) return;
+
+ const ctx = canvas.getContext("2d");
+ ctx.lineWidth = 3;
+ ctx.lineCap = "round";
+ ctx.lineJoin = "round";
+
+ canvas.addEventListener("mousedown", startDrawing);
+ canvas.addEventListener("mousemove", draw);
+ canvas.addEventListener("mouseup", stopDrawing);
+ canvas.addEventListener("mouseout", stopDrawing);
+
+ canvas.addEventListener("touchstart", (e) => {
+ e.preventDefault();
+ const touch = e.touches[0];
+ const rect = canvas.getBoundingClientRect();
+ startDrawing({ offsetX: touch.clientX - rect.left, offsetY: touch.clientY - rect.top });
+ });
+ canvas.addEventListener("touchmove", (e) => {
+ e.preventDefault();
+ const touch = e.touches[0];
+ const rect = canvas.getBoundingClientRect();
+ draw({ offsetX: touch.clientX - rect.left, offsetY: touch.clientY - rect.top });
+ });
+ canvas.addEventListener("touchend", stopDrawing);
+ }
+
+ function startDrawing(e) {
+ isDrawing = true;
+ lastX = e.offsetX;
+ lastY = e.offsetY;
+ }
+
+ function draw(e) {
+ if (!isDrawing) return;
+ const canvas = document.getElementById("drawingCanvas");
+ const ctx = canvas.getContext("2d");
+ ctx.beginPath();
+ ctx.moveTo(lastX, lastY);
+ ctx.lineTo(e.offsetX, e.offsetY);
+ ctx.stroke();
+ lastX = e.offsetX;
+ lastY = e.offsetY;
+ }
+
+ function stopDrawing() {
+ isDrawing = false;
+ }
+
+ function clearDrawing() {
+ const canvas = document.getElementById("drawingCanvas");
+ if (canvas) {
+ const ctx = canvas.getContext("2d");
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ }
+ }
+
+ function saveDrawing() {
+ const canvas = document.getElementById("drawingCanvas");
+ if (canvas) {
+ const link = document.createElement("a");
+ link.download = "my-drawing-" + Date.now() + ".png";
+ link.href = canvas.toDataURL();
+ link.click();
+ }
+ }
+
+ function changeBrushColor(color) {
+ const canvas = document.getElementById("drawingCanvas");
+ if (canvas) {
+ const ctx = canvas.getContext("2d");
+ }
+ }
+
+ function changeBrushSize(size) {
+ const canvas = document.getElementById("drawingCanvas");
+ if (canvas) {
+ const ctx = canvas.getContext("2d");
+ ctx.lineWidth = parseInt(size);
+ }
+ }
+
+ // Mock Exams
+ let currentExam = null;
+ let examQuestionIndex = 0;
+ let examScore = 0;
+ let examAnswers = [];
+
+ function startMockExam(subject) {
+ const exams = {
+ biology: { name: "Biology 101", questions: quizDatabase.biology.slice(0, 10), time: 600 },
+ chemistry: { name: "Chemistry Fundamentals", questions: quizDatabase.chemistry.slice(0, 10), time: 600 },
+ physics: { name: "Physics Basics", questions: quizDatabase.physics.slice(0, 10), time: 600 }
+ };
+
+ currentExam = exams[subject];
+ examQuestionIndex = 0;
+ examScore = 0;
+ examAnswers = [];
+
+ document.getElementById("examSetup").classList.add("hidden");
+ document.getElementById("examSession").classList.remove("hidden");
+ document.getElementById("examResults").classList.add("hidden");
+
+ document.getElementById("examTitle").textContent = currentExam.name;
+ startExamTimer(currentExam.time);
+ showExamQuestion();
+ }
+
+ function startExamTimer(seconds) {
+ let timeLeft = seconds;
+ const timerEl = document.getElementById("examTimer");
+
+ window.examTimerInterval = setInterval(() => {
+ timeLeft--;
+ const mins = Math.floor(timeLeft / 60).toString().padStart(2, "0");
+ const secs = (timeLeft % 60).toString().padStart(2, "0");
+
+ if (timeLeft <= 0) {
+ clearInterval(window.examTimerInterval);
+ finishExam();
+ }
+ }, 1000);
+ }
+
+ function showExamQuestion() {
+ const q = currentExam.questions[examQuestionIndex];
+ document.getElementById("examQuestionText").textContent = q.q;
+
+ const optionsEl = document.getElementById("examOptions");
+ optionsEl.innerHTML = q.options.map((opt, i) => `
+ `).join("");
+
+ }
+
+ function selectExamAnswer(index) {
+ examAnswers[examQuestionIndex] = index;
+ document.querySelectorAll("#examOptions .quiz-option").forEach((btn, i) => {
+ btn.classList.toggle("selected", i === index);
+ });
+ }
+
+ function nextExamQuestion() {
+ if (examAnswers[examQuestionIndex] === undefined) {
+ alert("Please select an answer");
+ return;
+ }
+ examQuestionIndex++;
+ if (examQuestionIndex < currentExam.questions.length) {
+ showExamQuestion();
+ } else {
+ finishExam();
+ }
+ }
+
+ function finishExam() {
+ clearInterval(window.examTimerInterval);
+
+ examScore = examAnswers.reduce((score, answer, i) => {
+ return score + (answer === currentExam.questions[i].correct ? 1 : 0);
+ }, 0);
+
+ const percentage = Math.round((examScore / currentExam.questions.length) * 100);
+
+ document.getElementById("examSession").classList.add("hidden");
+ document.getElementById("examResults").classList.remove("hidden");
+
+ document.getElementById("examGrade").textContent = percentage >= 90 ? "A" : percentage >= 80 ? "B" : percentage >= 70 ? "C" : percentage >= 60 ? "D" : "F";
+ document.getElementById("examCorrect").textContent = examScore;
+ document.getElementById("examIncorrect").textContent = currentExam.questions.length - examScore;
+
+ if (percentage >= 80) {
+ fireConfetti();
+ playSuccessSound();
+ }
+ }
+
+ // Language switching (single selection)
+ let currentLanguage = localStorage.getItem("language") || "en";
+
+ function setLanguage(lang) {
+ currentLanguage = lang;
+ localStorage.setItem("language", lang);
+
+ // Update UI to show only one active
+ document.querySelectorAll(".lang-btn").forEach(btn => {
+ btn.classList.remove("active");
+ btn.classList.add("active");
+ }
+ });
+
+ // Apply translations
+ applyTranslations(lang);
+
+ alert("Language changed to " + lang.toUpperCase());
+ }
+
+ function applyTranslations(lang) {
+ const translations = {
+ nl: { study: "Studeren", dashboard: "Dashboard", practice: "Oefenen", settings: "Instellingen" },
+ es: { study: "Estudiar", dashboard: "Panel", practice: "Práctica", settings: "Ajustes" },
+ fr: { study: "Étudier", dashboard: "Tableau", practice: "Pratique", settings: "Paramètres" },
+ de: { study: "Lernen", dashboard: "Übersicht", practice: "Üben", settings: "Einstellungen" }
+ };
+
+ const t = translations[lang];
+ if (!t) return;
+
+ // Update navigation labels
+ document.querySelectorAll(".nav-label").forEach(el => {
+ if (el.textContent === "Study" && t.study) el.textContent = t.study;
+ });
+ }
+
+ // Initialize all features on page load
+ document.addEventListener("DOMContentLoaded", function() {
+ initKnowledgeMap();
+ initPomodoro();
+ initDrawingCanvas();
+
+ // Initialize file manager if on file-manager page
+ if (document.querySelector(".file-grid")) {
+ renderFileList();
+ updateStorageIndicator();
+ }
+ });
+ "
+}
+
+@external(erlang, "timer", "sleep")
+fn erlang_sleep(ms: Int) -> Nil
+
+fn sleep_forever() {
+ erlang_sleep(1000)
+ sleep_forever()
+}
+