Interactive Quiz Builder
Run ID: 69cd02ce3e7fb09ff16a71782026-04-01Education
PantheraHive BOS
BOS Dashboard

Interactive Quiz Builder: Design & Requirements Specification (Step 1 of 3)

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and UX recommendations for the "Interactive Quiz Builder" application. This foundational research ensures a robust, intuitive, and engaging platform for creating and managing quizzes.


1. Detailed Design Specifications

This section covers the core functional and non-functional requirements that will guide the development of the Interactive Quiz Builder.

1.1. Functional Requirements

The system shall allow users (quiz creators) to:

  • User Authentication & Authorization:

* Register and log in securely.

* Manage their profile (name, email, password).

* Access features based on their role (e.g., creator, administrator).

  • Quiz Creation & Management:

* Create New Quizzes: Start a new quiz with a title, description, and optional cover image.

* Add/Edit Questions:

* Support multiple question types:

* Multiple Choice (single correct answer)

* Multiple Select (multiple correct answers)

* True/False

* Short Answer (free text input, optional keyword matching for auto-grading)

* Long Answer (essay-style, manual grading required)

* Image-based questions (upload image, user answers based on image)

* For each question:

* Input question text.

* Add media (images, videos, audio) to questions.

* Define possible answers (for MCQ/MSQ).

* Mark correct answers.

* Provide optional explanation/feedback for correct/incorrect answers.

* Assign points/weight to each question.

* Organize Questions: Reorder, duplicate, or delete questions within a quiz.

* Quiz Settings:

* Visibility: Public, Private (link-only), Password Protected.

* Time Limits: Overall quiz timer, per-question timer (optional).

* Scoring: Automatic grading for objective questions, manual grading for subjective.

* Feedback: Show correct answers immediately, show explanations, show overall score at the end.

* Attempts: Limit the number of attempts per user.

* Start/End Dates: Schedule quiz availability.

* Randomization: Randomize question order, randomize answer order.

* Certificates: Option to generate a customizable certificate upon completion (e.g., passing score).

  • Quiz Deployment & Sharing:

* Generate a unique shareable link for each quiz.

* Embed quiz widget into external websites (optional).

* Preview the quiz as a participant.

  • Participant Management & Tracking:

* View a list of participants for each quiz.

* Track individual participant scores and progress.

* Review answers for subjective questions and provide manual grades.

* Export participant data (CSV, Excel).

  • Reporting & Analytics:

* Dashboard overview of all quizzes.

* Aggregate quiz performance statistics (average score, completion rate).

* Question-level performance analysis (e.g., most missed questions).

* Participant leaderboards.

1.2. Non-Functional Requirements

  • Performance:

* Pages should load within 2 seconds on a standard broadband connection.

* Quiz submission should be processed within 1 second.

* System should support at least 100 concurrent quiz takers without degradation.

  • Security:

* All data transmission (e.g., user credentials, quiz data) must be encrypted (HTTPS).

* Protection against common web vulnerabilities (XSS, CSRF, SQL Injection).

* Strong password policies and secure authentication mechanisms.

* Role-based access control.

  • Usability:

* Intuitive and easy-to-navigate interface for quiz creators and participants.

* Clear feedback for user actions (e.g., success messages, error handling).

* Minimal learning curve for new users.

  • Reliability:

* High availability (e.g., 99.9% uptime).

* Robust error handling and data recovery mechanisms.

  • Scalability:

* Architecture designed to accommodate a growing number of users and quizzes.

* Ability to scale horizontally and vertically.

  • Compatibility:

* Cross-browser compatibility (Chrome, Firefox, Safari, Edge).

* Responsive design for various devices (desktop, tablet, mobile).

  • Maintainability:

* Well-documented code and clear architecture for future enhancements and bug fixes.


2. Wireframe Descriptions

The following descriptions outline the key screens and their primary elements for the Interactive Quiz Builder. These are conceptual representations to guide UI development.

2.1. Dashboard (Creator's Home Screen)

  • Layout: Left-aligned navigation sidebar, main content area for statistics and quiz list.
  • Elements:

* Header: Logo, User Profile (avatar, dropdown menu for settings/logout), "Create New Quiz" button.

* Sidebar Navigation: Links to "Dashboard," "My Quizzes," "Analytics," "Settings," "Help."

* Main Content Area:

* Overview Cards: Quick stats (e.g., "Total Quizzes," "Total Participants," "Average Score Across All Quizzes").

* Recent Activity Feed: Latest quiz submissions, new participants.

* "My Quizzes" List: Table or card view of all created quizzes.

* Columns/Cards: Quiz Title, Status (Draft, Published, Archived), Number of Participants, Average Score, Actions (Edit, Preview, Share, Duplicate, Delete, View Results).

* Call to Action: Prominent "Create Your First Quiz" if no quizzes exist.

2.2. Quiz Editor: Quiz Details & Settings

  • Layout: Multi-step form or tabbed interface.
  • Elements:

* Header: Quiz Title (editable), "Save Draft," "Publish," "Preview" buttons.

* Navigation Tabs/Steps: "Details," "Questions," "Settings," "Participants," "Results."

* "Details" Section:

* Quiz Title (text input)

* Quiz Description (rich text editor)

* Cover Image Upload

* Categories/Tags (for organization)

* "Settings" Section:

* General: Visibility (Public/Private), Password Protection (input field).

* Timing: Overall Quiz Timer (toggle, duration input), Per-Question Timer (toggle, duration input).

* Scoring: Passing Score (%), Enable Certificate (toggle).

* Feedback: Show Answers After Submission (toggle), Show Explanations (toggle).

* Attempts: Number of Attempts Allowed (dropdown/input).

* Scheduling: Start Date/Time, End Date/Time (date/time pickers).

* Randomization: Randomize Question Order (toggle), Randomize Answer Order (toggle).

2.3. Quiz Editor: Question Management

  • Layout: Vertical list of questions, with an "Add Question" button.
  • Elements:

* Header: Quiz Title, "Save Draft," "Publish," "Preview" buttons.

* Question List:

* Each question displayed as a collapsible card/panel.

* Card elements: Question Type, Question Text Snippet, Points, Actions (Edit, Duplicate, Delete, Reorder handles).

* "Add Question" Button: Opens a modal or expands a section to choose question type.

* Question Creation/Edit Modal (for each type):

* Question Text (rich text editor, image/video/audio upload buttons).

* For MCQ/MSQ:

* List of Answer Options (text input with radio button/checkbox for correct answer).

* "Add Answer Option" button.

* For True/False:

* Toggle for "True" or "False" as correct.

* For Short/Long Answer:

* Optional: Keyword matching input for short answers.

* Common: Points for Question, Optional Feedback/Explanation (rich text editor).

* "Save Question" / "Cancel" buttons.

2.4. Quiz Play Interface (Participant View)

  • Layout: Clean, minimalist design, focusing on the question.
  • Elements:

* Header: Quiz Title, Progress Bar (e.g., "Question 3 of 10"), Timer (if enabled).

* Question Area:

* Question Number.

* Question Text (large, clear font).

* Embedded media (if applicable).

* Answer Area:

* Input fields corresponding to question type (radio buttons, checkboxes, text areas).

* Navigation: "Previous," "Next" buttons (or "Submit" on final question).

* Optional: "Skip Question" (if enabled).

2.5. Quiz Results & Analytics (Creator View)

  • Layout: Overview section, followed by detailed participant list and question analysis.
  • Elements:

* Header: Quiz Title, "Export Data" button.

* Overview Statistics:

* Average Score, Highest Score, Lowest Score.

* Completion Rate, Number of Participants.

* Chart: Score distribution (e.g., histogram).

* Participant List:

* Table with columns: Participant Name/ID, Score, Completion Time, Status (Completed, In Progress), Actions (View Details, Grade Manual Questions).

* Question Analysis:

* List of all questions.

* For each question: Correct Answer Rate (%), Common Incorrect Answers (for MCQ/MSQ).

* Link to view individual answers for a specific question.


3. Color Palettes

A professional, clean, and engaging color palette will be used to ensure clarity and improve user experience.

3.1. Primary Palette

  • Primary Brand Color (e.g., Deep Teal): #00796B

* Usage: Main navigation, primary buttons (e.g., "Create New Quiz," "Publish"), active states, prominent headings. Conveys professionalism, trust, and intelligence.

  • Secondary Brand Color (e.g., Medium Blue): #2196F3

* Usage: Accent elements, secondary buttons ("Save Draft," "Edit"), links, progress indicators. Provides a friendly and dynamic contrast to the primary color.

3.2. Accent & Feedback Colors

  • Success (Green): #4CAF50

* Usage: Success messages, correct answer indicators, positive feedback.

  • Warning (Orange): #FFC107

* Usage: Warning messages, pending actions, attention-grabbing but not critical.

  • Error (Red): #F44336

* Usage: Error messages, incorrect answer indicators, destructive actions (e.g., "Delete").

  • Information (Light Blue): #03A9F4

* Usage: Informational tips, hints, non-critical alerts.

3.3. Neutral Palette

  • Dark Text/Heading: #212121

* Usage: Primary text, main headings. Ensures high readability.

  • Secondary Text/Icons: #757575

* Usage: Subheadings, helper text, disabled states, less prominent icons.

  • Light Background: #F5F5F5

* Usage: General page backgrounds, card backgrounds, subtle distinction from white.

  • White: #FFFFFF

* Usage: Primary content areas, modals, forms, elements requiring high contrast.

  • Borders/Dividers: #E0E0E0

* Usage: Separators, input field borders, table borders.


4. UX Recommendations

User experience is paramount for both quiz creators and participants. These recommendations focus on intuitive design, accessibility, and efficiency.

4.1. User Flow & Navigation

  • Clear Onboarding: For new quiz creators, a quick guided tour or a "Getting Started" checklist to familiarize them with key features.
  • Consistent Navigation: Global navigation (sidebar/header) should remain consistent across all main sections.
  • Breadcrumbs: Implement breadcrumbs for multi-level navigation (e.g., Dashboard > My Quizzes > Quiz Title > Edit Questions) to help users understand their location.
  • Contextual Actions: Place relevant actions close to the elements they affect (e.g., "Edit" button next to a question in the list).
  • Progressive Disclosure: Initially show only essential options; reveal advanced settings or features only when needed to prevent overwhelming the user.

4.2. Interface Design & Interaction

  • Drag-and-Drop: Implement drag-and-drop functionality for reordering questions, answer options, and potentially quiz items on the dashboard.
  • Real-time Feedback: Provide immediate visual feedback for user actions (e.g., a checkmark for "Saved," a spinner for "Loading").
  • Rich Text Editor: Utilize a robust rich text editor for question and description fields, supporting formatting, links, and media embeds.
  • Preview Mode: Offer a prominent "Preview" option at any stage of quiz creation to allow creators to experience the quiz from a participant's perspective.
  • Undo/Redo: Implement undo/redo functionality for critical actions within the quiz editor.
  • Modals for Focus: Use modals for focused tasks like adding/editing a question to keep the user's context clear.
  • Empty States: Design engaging empty states for sections like "My Quizzes" or "Participants" with clear calls to action (e.g., "No quizzes yet. Start building one!").

4.3. Accessibility

  • High Contrast: Ensure sufficient color contrast for text and interactive elements to meet WCAG 2.1 AA standards.
  • Keyboard Navigation: All interactive elements must be fully navigable and operable via keyboard.
  • ARIA Labels: Use ARIA attributes to provide semantic information for screen readers, especially for dynamic content and custom controls.
  • Form Labels: All form inputs should have visible and correctly associated labels.
  • Error Identification: Clearly indicate form errors with visual cues (e.g., red borders, error messages) and inform screen reader users.
  • Scalable Text: Allow users to adjust text size without breaking the layout.

4.4. Mobile Responsiveness

  • Fluid Layouts: Design layouts to adapt gracefully to different screen sizes, ensuring all content and functionality are accessible on mobile devices.
  • Touch-Friendly Elements: Ensure buttons, links, and interactive elements are large enough and spaced appropriately for touch interactions.
  • Optimized Inputs: Use appropriate input types for mobile (e.g., type="email", type="number") to trigger optimized keyboards.
  • Performance on Mobile: Optimize
gemini Output

Interactive Quiz Builder: Design Specifications & UX Recommendations

This document outlines the detailed design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Interactive Quiz Builder" application, tailored to provide a professional and engaging platform for quiz creation and delivery. The core theme for this design is clarity, engagement, and ease of use.


1. Project Overview & Goals

The Interactive Quiz Builder aims to provide a robust yet intuitive platform for users to create, manage, and deploy engaging quizzes on various topics. The "test input for topic" will be used as a placeholder for dynamic content, ensuring the design accommodates diverse subject matter.

Key Goals:

  • Empower Creators: Provide powerful tools for quiz creation, including diverse question types and multimedia integration.
  • Engage Takers: Deliver a seamless, interactive, and visually appealing quiz-taking experience.
  • Simplify Management: Offer clear dashboards and analytics for creators to track quiz performance.
  • Ensure Accessibility: Design for a broad user base, considering various devices and accessibility needs.

2. Detailed Design Specifications

2.1 Core Functionality

2.1.1 Quiz Creation & Management (Creator View)

  • Dashboard:

* "Create New Quiz" prominent Call-to-Action (CTA).

* List of existing quizzes with status (Draft, Published, Archived).

* Quick actions for each quiz: Edit, Preview, Publish/Unpublish, Share, View Results, Duplicate, Delete.

* Search and filter capabilities (by topic, status, date created).

  • Quiz Editor:

* Quiz Details: Fields for Quiz Title, Description, Topic Tags, Cover Image/Video upload.

* Question Types:

* Multiple Choice (Single/Multiple Answer): Question text, up to 6 answer options, radio buttons/checkboxes, correct answer selection, optional explanation/feedback for each answer.

* True/False: Question text, True/False buttons, correct answer selection, optional explanation.

* Short Answer/Open-ended: Question text, input field for taker, optional correct answer (for auto-grading simple cases) or manual grading flag.

* Image-based Question: Upload image, add question text, choose answer type (e.g., multiple choice about the image).

* Question Management: Add New Question, Reorder (drag-and-drop), Duplicate, Delete.

* Media Integration: Upload images (JPG, PNG, GIF), embed videos (YouTube, Vimeo) directly into questions or answer options.

* Rich Text Editor: For question and answer text (bold, italic, links, lists).

* Save & Preview: Auto-save functionality, dedicated Preview button to see the quiz as a taker.

2.1.2 Quiz Settings

  • General:

* Visibility: Public, Private (link-only), Password Protected.

* Time Limit: Per question or for the entire quiz (optional).

* Attempts: Unlimited, Single, or specific number of attempts.

* Question Order: Sequential, Randomize.

* Answer Order: Randomize answer options.

  • Scoring & Feedback:

* Scoring Method: Points per question, percentage.

* Pass/Fail Threshold: Define a passing score.

* Show Results to Taker: Immediately after completion, or not at all.

* Show Correct Answers: After completion, or never.

* Custom Completion Message: For passing and failing scores.

  • Branding (Optional Add-on): Upload logo, custom background image/color.

2.1.3 Quiz Publishing & Sharing

  • Publish Button: Makes the quiz live.
  • Shareable Link: Unique URL for the quiz.
  • Embed Code: HTML snippet for embedding the quiz on other websites.
  • Social Media Sharing Options: Direct sharing to popular platforms (Facebook, Twitter, LinkedIn).

2.1.4 Quiz Taking Experience (Taker View)

  • Pre-Quiz Screen: Quiz Title, Description, Cover Image, estimated time, number of questions, Start Quiz button.
  • Question Display:

* One question per screen for focused engagement.

* Clear progress indicator (e.g., "Question 3 of 10").

* Timer (if enabled) prominently displayed.

* Clear selection mechanisms (radio buttons, checkboxes, input fields).

* "Next" and "Previous" buttons (if enabled).

* "Submit Quiz" button on the final question.

  • Interactive Elements: Smooth transitions between questions, subtle animations on selection.
  • Responsive Design: Optimized for desktop, tablet, and mobile devices.

2.1.5 Results & Analytics

  • Taker's Results Screen:

* Overall Score/Percentage.

* Pass/Fail status.

* Time taken.

* Summary of correct/incorrect answers.

* Optional: Review answers (showing what they picked vs. correct answer, and explanations).

* Call-to-action: "Share Score," "Retake Quiz" (if allowed).

  • Creator's Analytics Dashboard:

* Overview: Total attempts, average score, completion rate.

* Participant List: List of takers, their scores, time taken, and completion status.

* Question Performance: Which questions were most/least answered correctly.

* Export Data: CSV export of results.


3. Wireframe Descriptions (Key Screens)

3.1 Creator Dashboard

  • Layout: Header (Logo, User Avatar, "Create Quiz" CTA), Sidebar Navigation (Dashboard, My Quizzes, Analytics, Settings), Main Content Area.
  • Main Content:

* Large, prominent "Create New Quiz" button at the top.

* "My Quizzes" section: A card-based or list view displaying each quiz.

* Each card/row includes: Quiz Title, Status (Draft, Published), Number of Questions, Date Created/Last Edited, Actions (Edit, Share, Results, Delete).

* Search bar and filters (by Topic, Status).

3.2 Quiz Editor Screen

  • Layout: Header (Quiz Title, Save Status, Preview Button, Publish Button), Left Panel (Quiz Settings/Navigation to Questions), Main Content Area (Question Editor).
  • Left Panel:

* "Quiz Details" section (Title, Description, Cover Image).

* List of questions: Each question represented by a small card with its type (e.g., "Q1: Multiple Choice"). Drag-and-drop handles for reordering. "Add New Question" button at the bottom.

  • Main Content Area (Question Editor):

* Question Type Selector (Dropdown/Buttons: Multiple Choice, True/False, Short Answer).

* Text area for Question Text (Rich Text Editor).

* "Add Media" button (Image/Video).

* Answer Options Section:

* For Multiple Choice: Input fields for each option, radio button/checkbox to mark correct, "Add Option" button, "Remove Option" button.

* For True/False: Two buttons (True, False) to mark correct.

* Optional: "Explanation/Feedback" text area.

* "Delete Question" button.

3.3 Quiz Taking Screen

  • Layout: Minimalist header (Quiz Title, Progress Indicator "X of Y", Timer if enabled), Main Content Area (Question), Footer (Navigation Buttons).
  • Main Content:

* Large, clear display of the current question text.

* Embedded media (image/video) if applicable.

* Answer input area:

* Radio buttons for single-choice multiple choice.

* Checkboxes for multiple-choice with multiple answers.

* Text input field for short answer.

* Clear visual feedback on selection.

  • Footer:

* "Previous" button (if enabled).

* "Next" button (changes to "Submit Quiz" on the last question).

* Clear visual distinction between "Next" and "Submit Quiz".

3.4 Quiz Results Screen (Taker)

  • Layout: Prominent header (Quiz Title, "Congratulations!" or "Quiz Completed!"), Main Content Area (Results Summary), Footer (CTAs).
  • Main Content:

* Large, central display of Score (e.g., "85%", "8/10 Correct").

* Pass/Fail status (e.g., "You Passed!" with a checkmark, or "You Did Not Pass" with an 'x').

* Time taken.

* Optional: Breakdown of correct vs. incorrect answers.

* Optional: "Review Answers" button to see detailed question-by-question feedback.

  • Footer:

* "Share My Score" button.

* "Retake Quiz" button (if allowed).

* "Back to Home" or "Explore More Quizzes" button.


4. Color Palettes

A professional, clean, and engaging color palette is crucial for user experience. This palette aims for clarity and a modern aesthetic.

4.1 Primary Palette

  • Brand Primary (Action & Highlight): #007BFF (A vibrant, trustworthy blue)

Usage:* Main CTA buttons, active navigation items, progress bars, key highlights.

  • Brand Secondary (Accent & Support): #6C757D (A sophisticated, neutral gray)

Usage:* Secondary buttons, subtle borders, inactive states, icons.

4.2 Neutral Palette

  • Background Light: #F8F9FA (Soft off-white)

Usage:* Main content backgrounds, card backgrounds.

  • Background Dark: #E9ECEF (Slightly darker gray)

Usage:* Section separators, subtle background variations.

  • Text Primary: #212529 (Dark charcoal for high readability)

Usage:* Headings, main body text.

  • Text Secondary: #495057 (Softer gray for less prominent text)

Usage:* Descriptions, helper text, timestamps.

  • Border/Divider: #DEE2E6 (Light gray for subtle separation)

Usage:* Input field borders, dividers between sections.

4.3 Feedback & Status Palette

  • Success: #28A745 (Vibrant green)

Usage:* Correct answers, successful actions, "Quiz Passed" messages.

  • Warning: #FFC107 (Warm yellow)

Usage:* Pending actions, important notices, "Review Needed" flags.

  • Error: #DC3545 (Bold red)

Usage:* Incorrect answers, validation errors, "Quiz Failed" messages.

  • Info: #17A2B8 (Calm teal)

Usage:* Informational messages, tips.


5. UX Recommendations

5.1 Simplicity & Intuition

  • Clear Labeling: Use concise and unambiguous labels for all actions, buttons, and fields.
  • Minimalist Design: Avoid clutter. Focus on essential elements for each screen to reduce cognitive load.
  • Consistent Navigation: Place navigation elements in predictable locations and ensure they function consistently across the application.
  • "What You See Is What You Get" (WYSIWYG): For the quiz editor, aim to provide a preview that closely resembles the final quiz taker experience.

5.2 Visual Hierarchy & Feedback

  • Prominent CTAs: Use distinct colors and sizes for primary call-to-action buttons (e.g., "Create New Quiz," "Publish," "Submit Quiz").
  • Visual Grouping: Use cards, subtle background shades, and spacing to group related content together.
  • Loading States: Provide clear visual feedback (spinners, skeleton loaders) during data fetching or processing.
  • Hover States: Implement distinct hover states for interactive elements (buttons, links, selectable items) to indicate interactivity.
  • Form Validation: Provide immediate, clear, and actionable feedback for form errors (e.g., "This field is required," "Invalid email format").

5.3 Responsiveness & Accessibility

  • Mobile-First Design: Prioritize the mobile experience during design to ensure usability on smaller screens, then scale up for tablets and desktops.
  • Touch-Friendly Targets: Ensure all interactive elements (buttons, checkboxes, radio buttons) have sufficient size and spacing for easy touch interaction.
  • Color Contrast: Adhere to WCAG guidelines for color contrast ratios to ensure readability for users with visual impairments.
  • Keyboard Navigation: All interactive elements should be reachable and operable via keyboard (Tab, Enter, Spacebar).
  • ARIA Attributes: Implement appropriate ARIA (Accessible Rich Internet Applications) attributes for complex components to convey their purpose and state to screen readers.
  • Alternative Text: Provide descriptive alt text for all images and multimedia content.

5.4 Engagement & Guidance

  • Progress Indicators: For quiz creation and taking, clearly show progress (e.g., "Step 1 of 3," "Question 5/10") to manage user expectations.
  • Onboarding/Tooltips: For first-time users or complex features, offer brief, dismissible tooltips or a guided tour.
  • Micro-interactions: Use subtle animations and transitions (e.g., button presses, question transitions, correct/incorrect answer feedback) to make the experience more delightful and responsive.
  • Confirmation Dialogs: For destructive actions (e.g., deleting a quiz), always ask for user confirmation.
  • **Undo Function
gemini Output

Finalized Design Assets: Interactive Quiz Builder

This document outlines the comprehensive design specifications, wireframe descriptions, color palettes, and user experience (UX) recommendations for the "Interactive Quiz Builder". This deliverable provides a detailed blueprint for the visual and interactive aspects of the platform, ensuring a professional, engaging, and intuitive experience for both quiz creators and participants.


1. Project Overview

The Interactive Quiz Builder is a robust platform designed to empower users to create, manage, and deploy engaging quizzes across various topics. The system will support multiple question types, provide detailed analytics, and offer a seamless experience for quiz takers. This final design package aims to provide a clear, actionable guide for development, ensuring a cohesive and high-quality product.


2. Core Design Principles

Our design approach for the Interactive Quiz Builder is guided by the following principles:

  • Intuitive & User-Friendly: The interface must be easy to navigate and understand for users of all technical proficiencies, minimizing the learning curve for quiz creation.
  • Engaging & Interactive: Visuals and interactions should captivate users, making the quiz-taking and creation processes enjoyable.
  • Clear & Concise: Information should be presented clearly, reducing cognitive load and highlighting essential data.
  • Professional & Modern: The aesthetic will be clean, contemporary, and trustworthy, reflecting a high-quality educational or training tool.
  • Flexible & Scalable: The design will accommodate various quiz topics, question types, and future feature expansions.

3. Visual Design Specifications

3.1. Color Palette

The chosen color palette is designed to be vibrant, professional, and accessible, ensuring a pleasant visual experience while maintaining high contrast for readability.

  • Primary Accent: #3498DB (Vibrant Blue) - Used for primary calls-to-action (CTAs), active states, branding elements, and key interactive components.
  • Secondary Accent: #2ECC71 (Emerald Green) - Used for success indicators, "add new" actions, positive feedback, and complementary highlights.
  • Neutral Dark: #2C3E50 (Dark Charcoal) - Used for primary text, main headers, and important informational elements. Provides strong contrast.
  • Neutral Medium: #7F8C8D (Medium Gray) - Used for secondary text, disabled states, borders, and subtle background elements.
  • Neutral Light: #ECF0F1 (Light Gray) - Used for backgrounds, card elements, and subtle dividers.
  • Alert/Error: #E74C3C (Alizarin Red) - Used for error messages, destructive actions (e.g., delete), and warnings.
  • Warning: #F39C12 (Orange Yellow) - Used for warning messages and cautionary indicators.

Accessibility Note: All color combinations will be checked against WCAG 2.1 AA standards for contrast ratios to ensure readability for all users.

3.2. Typography

A clean, modern sans-serif font family will be used to ensure excellent readability across all screen sizes and contexts.

  • Primary Font Family: 'Inter' (or similar, e.g., Open Sans, Lato)

* Headings (H1, H2, H3): Bold or Semi-Bold weight. Used for page titles, section headers, and prominent text.

* Body Text (Paragraphs, Labels): Regular or Medium weight. Used for general content, descriptions, and form labels.

* Small Text (Captions, Meta-data): Light or Regular weight, slightly reduced size. Used for less critical information.

  • Monospace Font (Optional): 'Roboto Mono' (or similar) - For code snippets or specific technical displays if required.

Hierarchy Example:

  • H1: Inter Bold, 32px
  • H2: Inter Semi-Bold, 24px
  • H3: Inter Medium, 18px
  • Body: Inter Regular, 16px
  • Small: Inter Regular, 13px

3.3. Iconography

A consistent, modern, and easily recognizable icon set will be used to enhance navigation and convey meaning quickly.

  • Style: Line-art or flat, filled icons. Consistency in stroke weight and corner radius.
  • Source: Font Awesome, Material Icons, or a custom SVG icon set.
  • Usage: For navigation, actions (edit, delete, add), status indicators, and question types.
  • Examples: + (Add), βš™οΈ (Settings), ✏️ (Edit), πŸ—‘οΈ (Delete), πŸ“Š (Analytics), βœ… (Correct), ❌ (Incorrect).

3.4. Imagery Style

Imagery will be used sparingly and strategically to enhance understanding and engagement without overwhelming the user.

  • Quiz Media: High-quality, relevant images or videos uploaded by creators for questions or explanations.
  • Illustrations: Modern, abstract, or metaphorical illustrations for empty states, onboarding, or celebratory screens. Consistent artistic style (e.g., flat, minimalist, geometric).
  • Photography: If stock photography is used, it should be professional, diverse, and contextually relevant, avoiding generic or dated imagery.

4. Wireframe Descriptions (Key Screens)

This section details the layout and functionality of the most critical screens within the Interactive Quiz Builder.

4.1. Dashboard / My Quizzes Screen

  • Purpose: Central hub for creators to view, manage, and create quizzes.
  • Layout:

* Header Bar:

* Logo (left aligned).

* Global Search Bar (center).

* User Profile/Account Menu (right aligned - avatar, name, dropdown for settings, logout).

* "Create New Quiz" button (prominent, primary accent color).

* Sidebar Navigation (Left):

* Dashboard (Home)

* My Quizzes

* Analytics

* Settings

* Help/Support

* Main Content Area:

* Welcome Message / Quick Stats: "Welcome back, [User Name]! You have X active quizzes."

* Quiz List View:

* Can be toggled between Card View (default, visually appealing) and Table View (for dense data).

* Filters/Sort: Dropdowns for "Status (All, Draft, Published)", "Topic", "Date Created/Modified", "Search by Title".

* Each Quiz Card/Row:

* Quiz Title

* Description Snippet

* Status (Draft/Published - visual tag)

* Number of Questions

* Last Modified Date

* Actions: "Edit Quiz", "Preview", "View Results", "Share/Embed", "Duplicate", "Delete" (via ellipsis menu or dedicated buttons).

* "Create New Quiz" Button: Also present prominently within the main content area, especially if no quizzes exist.

4.2. Quiz Creation / Editing Screen

  • Purpose: Dedicated interface for building and modifying quizzes.
  • Layout:

* Header Bar:

* "Back to My Quizzes" link.

* Quiz Title (editable input field).

* "Save Draft" button (secondary accent).

* "Preview Quiz" button (secondary accent).

* "Publish Quiz" button (primary accent, prominent).

* Left Panel (Navigation & Settings):

* Quiz Details:

* Title (pre-filled from header, editable)

* Description (rich text editor)

* Topic/Category (dropdown/tag input)

* Tags (multi-select input)

* Thumbnail Image Upload

* Quiz Settings:

* Toggle: "Randomize Question Order"

* Toggle: "Show Answers After Submission"

* Toggle: "Allow Multiple Attempts"

* Input: "Time Limit (minutes)"

* Input: "Passing Score (%)"

* Custom Completion Message (rich text editor)

* Question List (Accordion/Collapsible):

* Displays a list of all questions added, showing question number and type.

* Reorder handle for drag-and-drop reordering.

* Each item has "Edit" and "Delete" actions.

* Main Content Area (Question Editor):

* "Add New Question" Button: Prominent, leading to question type selection.

* Question Type Selector (Modal/Drawer):

* Options: Multiple Choice, True/False, Fill-in-the-Blank, Short Answer, Image Hotspot, Matching, etc. (each with a descriptive icon).

* Question Editor (Contextual based on type selected):

* Example: Multiple Choice Question Editor:

* Question Text: Rich text editor (bold, italics, links, lists).

* Media Upload: Option to add Image/Video/Audio to the question.

* Answer Options:

* List of input fields for each option.

* Radio button/checkbox next to each option to mark as correct.

* "Add Option" button.

* "Remove Option" button for each.

* Feedback (Optional): Input fields for "Feedback for Correct Answer" and "Feedback for Incorrect Answer".

* Point Value: Numeric input for question scoring.

* "Save Question" / "Cancel" buttons.

4.3. Quiz Playback Screen (User View)

  • Purpose: The interface for participants to take the quiz.
  • Layout:

* Header Bar:

* Quiz Title (static).

* Progress Indicator: "Question X of Y" (e.g., a progress bar or text).

* Timer (if enabled): Displays remaining time (e.g., "Time Remaining: 09:45").

* Main Content Area (Question Display):

* Question Number: Prominently displayed.

* Question Text: Clearly presented, potentially with associated media (image, video).

* Answer Area: (Dynamically rendered based on question type)

* Multiple Choice: Radio buttons (single select) or checkboxes (multi-select) with options.

* True/False: Two radio buttons: "True" and "False".

* Fill-in-the-Blank: Text input field(s).

* Short Answer: Multi-line text area.

* Navigation Buttons:

* "Previous Question" (disabled on first question).

* "Next Question" (changes to "Submit Quiz" on the final question).

* Optional: "Review Quiz" Button: Before final submission, allows users to revisit questions.

* Footer (Optional): Branding or legal disclaimers.

4.4. Results / Analytics Screen

  • Purpose: To provide quiz creators with insights into participant performance.
  • Layout:

* Header Bar:

* Quiz Title (static).

* "Back to My Quizzes" / "Edit Quiz" buttons.

* "Export Data" button (CSV/Excel).

* Main Content Area:

interactive_quiz_builder.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

) } export default App "); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e} .app{min-height:100vh;display:flex;flex-direction:column} .app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px} h1{font-size:2.5rem;font-weight:700} "); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` ## Open in IDE Open the project folder in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview" }, "dependencies": { "vue": "^3.5.13", "vue-router": "^4.4.5", "pinia": "^2.3.0", "axios": "^1.7.9" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.1", "typescript": "~5.7.3", "vite": "^6.0.5", "vue-tsc": "^2.2.0" } } '); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': resolve(__dirname,'src') } } }) "); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]} '); zip.file(folder+"tsconfig.app.json",'{ "compilerOptions":{ "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"], "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true, "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue", "strict":true,"paths":{"@/*":["./src/*"]} }, "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"] } '); zip.file(folder+"env.d.ts","/// "); zip.file(folder+"index.html"," "+slugTitle(pn)+"
"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' import './assets/main.css' const app = createApp(App) app.use(createPinia()) app.mount('#app') "); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue"," "); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547} "); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` Open in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test" }, "dependencies": { "@angular/animations": "^19.0.0", "@angular/common": "^19.0.0", "@angular/compiler": "^19.0.0", "@angular/core": "^19.0.0", "@angular/forms": "^19.0.0", "@angular/platform-browser": "^19.0.0", "@angular/platform-browser-dynamic": "^19.0.0", "@angular/router": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { "@angular-devkit/build-angular": "^19.0.0", "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "typescript": "~5.6.0" } } '); zip.file(folder+"angular.json",'{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "'+pn+'": { "projectType": "application", "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/'+pn+'", "index": "src/index.html", "browser": "src/main.ts", "tsConfig": "tsconfig.app.json", "styles": ["src/styles.css"], "scripts": [] } }, "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"} } } } } '); zip.file(folder+"tsconfig.json",'{ "compileOnSave": false, "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]}, "references":[{"path":"./tsconfig.app.json"}] } '); zip.file(folder+"tsconfig.app.json",'{ "extends":"./tsconfig.json", "compilerOptions":{"outDir":"./dist/out-tsc","types":[]}, "files":["src/main.ts"], "include":["src/**/*.d.ts"] } '); zip.file(folder+"src/index.html"," "+slugTitle(pn)+" "); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) .catch(err => console.error(err)); "); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; } "); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = '"+pn+"'; } "); zip.file(folder+"src/app/app.component.html","

"+slugTitle(pn)+"

Built with PantheraHive BOS

"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1} "); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ] }; "); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router'; export const routes: Routes = []; "); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install ng serve # or: npm start ``` ## Build ```bash ng build ``` Open in VS Code with Angular Language Service extension. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local .angular/ "); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join(" "):"# add dependencies here "; zip.file(folder+"main.py",src||"# "+title+" # Generated by PantheraHive BOS print(title+" loaded") "); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Run ```bash python main.py ``` "); zip.file(folder+".gitignore",".venv/ __pycache__/ *.pyc .env .DS_Store "); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+" "; zip.file(folder+"package.json",pkgJson); var fallback="const express=require("express"); const app=express(); app.use(express.json()); app.get("/",(req,res)=>{ res.json({message:""+title+" API"}); }); const PORT=process.env.PORT||3000; app.listen(PORT,()=>console.log("Server on port "+PORT)); "; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000 "); zip.file(folder+".gitignore","node_modules/ .env .DS_Store "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash npm install ``` ## Run ```bash npm run dev ``` "); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:" "+title+" "+code+" "; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" β€” styles */ *{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e} "); zip.file(folder+"script.js","/* "+title+" β€” scripts */ "); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Open Double-click `index.html` in your browser. Or serve locally: ```bash npx serve . # or python3 -m http.server 3000 ``` "); zip.file(folder+".gitignore",".DS_Store node_modules/ .env "); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed β€” check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/**(.+?)**/g,"$1"); hc=hc.replace(/ {2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. Files: - "+app+".md (Markdown) - "+app+".html (styled HTML) "); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); }function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}