From 8ba679afe29914fc5c50d4326f5f03d14334537d Mon Sep 17 00:00:00 2001 From: Luke Hewitt Date: Mon, 22 Jun 2026 18:08:05 +1000 Subject: [PATCH] initial go --- .gitignore | 24 + LICENSE | 9 - README.md | 49 +- SPEAKER_SCRIPT.md | 171 +++++++ index.html | 349 +++++++++++++++ package-lock.json | 911 ++++++++++++++++++++++++++++++++++++++ package.json | 17 + public/favicon.svg | 1 + public/icons.svg | 24 + src/assets/hero.png | Bin 0 -> 13057 bytes src/assets/javascript.svg | 1 + src/assets/vite.svg | 1 + src/main.js | 76 ++++ src/style.css | 623 ++++++++++++++++++++++++++ 14 files changed, 2246 insertions(+), 10 deletions(-) create mode 100644 .gitignore delete mode 100644 LICENSE create mode 100644 SPEAKER_SCRIPT.md create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.svg create mode 100644 public/icons.svg create mode 100644 src/assets/hero.png create mode 100644 src/assets/javascript.svg create mode 100644 src/assets/vite.svg create mode 100644 src/main.js create mode 100644 src/style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 7e89510..0000000 --- a/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) 2026 uncleLukie - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 430677d..e0dc5b0 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,49 @@ -# sparklabs-6-presentation +# The AI Advantage: Rethinking 'Build vs. Buy' in Government IT +This repository contains a Reveal.js presentation designed for 2026 government digital graduates. The presentation challenges the traditional government IT procurement model and argues for **Digital Sovereignty** through open-source foundation software customized using Generative AI. +## 🚀 Running Locally + +1. **Install Dependencies:** + ```bash + npm install + ``` + +2. **Start the Development Server:** + ```bash + npm run dev + ``` + Open your browser and navigate to the address shown in your terminal (usually `http://localhost:5173`). + +3. **Open Speaker Notes:** + Press **`S`** on your keyboard while viewing the slides to open the presenter's control window with the timer, slide previews, and the exact speaker script. + +--- + +## 🎤 Presenter Script +A detailed slide-by-slide word-for-word presenter script is available in the [SPEAKER_SCRIPT.md](file:///home/luke/git/sparklabs-6-presentation/SPEAKER_SCRIPT.md) file. You can read it to practice your timing and pacing for the 30-minute talk. + +--- + +## 🏗️ Building for Production & Cloudflare Pages +To build a static version of the presentation suitable for hosting on Cloudflare Pages, GitHub Pages, or Netlify: + +1. **Compile the Static Site:** + ```bash + npm run build + ``` + This creates a optimized `dist/` directory containing all CSS, JS, and HTML bundles. + +2. **Deploy to Cloudflare Pages:** + * Point your Cloudflare Pages project to this repository. + * Set the **Build Command** to `npm run build`. + * Set the **Output Directory** to `dist`. + * Trigger the deploy. + +--- + +## 🛠️ Tech Stack & Key Files +* **Vite:** High-speed development server and bundler. +* **Reveal.js:** The core HTML presentation engine. +* [index.html](file:///home/luke/git/sparklabs-6-presentation/index.html) - Structural markup and slide layout. +* [src/style.css](file:///home/luke/git/sparklabs-6-presentation/src/style.css) - Custom glassmorphic styles, SVG animations, and color scheme. +* [src/main.js](file:///home/luke/git/sparklabs-6-presentation/src/main.js) - Reveal.js plugin load configuration and slide interactivity script. diff --git a/SPEAKER_SCRIPT.md b/SPEAKER_SCRIPT.md new file mode 100644 index 0000000..7c69ea4 --- /dev/null +++ b/SPEAKER_SCRIPT.md @@ -0,0 +1,171 @@ +Presenter Script: The AI Advantage + +Title: The AI Advantage: Rethinking 'Build vs. Buy' in Government IT + +Format: 30-Minute Presentation to 2026 Government Digital Graduates + +Presentation Framework: Reveal.js (HTML5/CSS3/JS) + +Presentation Setup & Key Controls + +Before presenting, make sure you are comfortable with these built-in Reveal.js controls: + +Open Speaker Notes (The Secret Weapon): Press S on your keyboard. This opens a separate presenter window showing: + +A timer/chronometer to keep track of your 30-minute block. + +The current slide and the next slide preview. + +The complete speaker notes script. + +Full-screen Mode: Press F to go full-screen in your browser. + +Help Overlay: Press ? to toggle the shortcut help menu. + +Pacing & Timing Guide + +Slides 1–3 (The Irony & The Bill): 8 minutes (Setting the scene, the Australian context, and the psychology of procurement). + +Slides 4–6 (Global Proof & The AI Shift): 10 minutes (Germany's exit, what sovereignty actually means, and why AI changes the math). + +Slides 7–9 (The Pushback & The Playbook): 8 minutes (Handling the "support" excuse, keeping money in QLD, and how grads can start). + +Slide 10 (Closing & Discussion Q&A): 4 minutes + remaining time (Final remarks and opening the floor). + +Slide-by-Slide Script + +Slide 1: Title Slide + +Slide Elements: Clean, minimalist titles, subtle dark background. + +Transition: Fade out. + +Speaker Script: + +"Good afternoon, everyone. Thanks for coming to SparkLabs. I want to start by acknowledging the massive, glaring irony of this presentation. + +I am about to give a talk on why government needs to stop relying on mega-vendors. And I am delivering it to you right now over a Microsoft Teams call, while most of you are watching on Windows laptops, probably taking notes in Microsoft OneNote. + +We are completely captured. Today, we are going to talk about how much that capture costs the Australian taxpayer, and how you—as the next generation of IT leaders—can actually do something about it." + +Slide 2: The Megavendor Rent (The Australian Context) + +Slide Elements: Large text showing "VSA6" and "$1.6 Billion". + +Transition: Slide in, fade out. + +Speaker Script: + +"Let's talk about the bill. In July 2026—literally this month—the federal government's new Volume Sourcing Agreement, or VSA6, kicks in. This locks the Commonwealth, and by extension sets the standard for states like Queensland, into the Microsoft ecosystem until 2031. + +In the last agreement, the government proudly announced they secured $1.6 billion in discounts. I want you to think about that. If the discount is 1.6 billion dollars, what is the actual baseline cost? We aren't buying software anymore; we are paying rent. And when your landlord knows you can't afford the moving truck, they can raise the rent whenever they want." + +Slide 3: The Psychology of Procurement (Cover Your Ass) + +Slide Elements: A graphic showing the "Safe Choice" vs the "Sovereign Choice". + +Transition: Slide in, fade out. + +Speaker Script: + +"So why do incredibly smart executives keep signing these deals? Because of the oldest rule in government IT: Nobody ever got fired for buying Microsoft. + +It is a culture of ass-covering. Think back to July 2024. CrowdStrike pushes a bad update to Windows machines and takes down Qantas, the Commonwealth Bank, supermarkets, and government networks. It cost the economy billions. Did any government IT director get fired for that? No, it was an 'industry outage.' + +But if a team of internal grads builds a custom app for QLD Health and it goes down for twenty minutes, someone is getting dragged into a Senate estimates hearing. We outsource to vendors because we are outsourcing the blame." + +Slide 4: Real Sovereignty (The Global Rebellion) + +Slide Elements: Map highlighting Schleswig-Holstein (Germany) and France. + +Transition: Slide in, fade out. + +Speaker Script: + +"But other governments are waking up to this trap. If you think ditching Microsoft is a pipe dream, look at Germany. + +Right now, the German state of Schleswig-Holstein is in the middle of migrating 30,000 public servants off Windows and Microsoft Office, entirely over to Linux and LibreOffice. Why? Their minister explicitly stated it was about 'Digital Sovereignty'. They realized that handing their citizens' data and their government's operational capability to a foreign corporation was a massive national security risk. + +France's national police force did the same thing with GendBuntu, saving millions and taking back control of their infrastructure. It is entirely possible to break the habit." + +Slide 5: The AI Multiplier (Why Now?) + +Slide Elements: Graph showing historical cost of custom dev vs modern AI-assisted dev. + +Transition: Slide in, fade out. + +Speaker Script: + +"The pushback has always been: 'We don't have the armies of developers needed to build and maintain our own stuff.' And five years ago, they were right. Building custom government software was a nightmare. + +But that argument is dead now. Generative AI has permanently changed the math. A small, cross-functional team of BAs, designers, and developers using AI coding assistants can spin up, test, and deploy open-source infrastructure in weeks instead of years. We don't have to force Queensland business processes into rigid, off-the-shelf vendor templates anymore. AI makes building sovereign software cheaper than renting proprietary software." + +Slide 6: The Local Economy (Where Does the Money Go?) + +Slide Elements: Taxpayer money flowing to Seattle vs flowing to Brisbane/Fortitude Valley. + +Transition: Slide in, fade out. + +Speaker Script: + +"And this isn't just a technical argument; it is an economic one. + +When we sign a massive SaaS contract, hundreds of millions of Queensland taxpayer dollars go straight to a server farm in Seattle. If we take even a fraction of that licensing budget and redirect it to building open-source sovereign capability, where does that money go? + +It stays in Queensland. It pays for local graduate jobs. It funds local Brisbane tech startups who we can hire to support our open-source infrastructure. We should be using government tech budgets to build the local economy, not pad the margins of a multinational." + +Slide 7: Debunking the Support Myth + +Slide Elements: Side-by-side comparison of "Vendor Support Ticket" vs "Local Open Source Fix". + +Transition: Slide in, fade out. + +Speaker Script: + +"The moment you suggest open source, someone in management will say, 'But who do we call when it breaks? We need a vendor SLA.' + +Let's be real about what a vendor SLA actually is. When a major cloud provider breaches their uptime, they don't pay us back for the economic damage. They give us a service credit on next month's bill. We lose public trust, they lose a fraction of a percent of profit. + +When you own the code, you own the fix. And with AI tools, our internal teams can diagnose and patch issues faster than waiting three weeks for a vendor's Level 1 support desk to escalate a ticket." + +Slide 8: The Choice for 2026 Grads + +Slide Elements: Two text blocks: "License Administrator" vs "Sovereign Builder". + +Transition: Slide in, fade out. + +Speaker Script: + +"You are the 2026 digital graduates. In five years, you are going to be the lead enterprise architects, the senior BAs, and the design directors for the Queensland government. + +You have a choice on what your career looks like. You can be a professional license administrator—spending the next forty years managing vendor lock-in, configuring dropdowns in proprietary software, and apologizing to users for things you can't fix. + +Or, you can be builders. You can champion open standards, use AI to create incredible local systems, and actually own the infrastructure that runs this state." + +Slide 9: The Playbook + +Slide Elements: 3 steps: 1. Audit the lock-in. 2. Assess Open Source. 3. Build a prototype. + +Transition: Slide in, fade out. + +Speaker Script: + +"How do we actually start? You don't walk into work tomorrow and try to unplug the state's payroll system. + +You start at the project level. For your next assignment, when the team defaults to 'Let's just buy a SaaS product for this,' push back. Mandate an open-source viability assessment. Find a terrible, clunky manual process in your department. Use an AI assistant to scaffold a clean, open-source web app to fix it. + +Senior leadership runs on proof. Show theSpend your career configuring enterprise templates,m a working tool built in three weeks with zero licensing fees, and the vendor lock-in arguments start to fall apart." + +Slide 10: Conclusion + +Slide Elements: Large text: "Public Funds. Public Infrastructure." + +Transition: Fade in. + +Speaker Script: + +"Digital infrastructure is exactly like physical infrastructure. We wouldn't let a private foreign company own the M1 motorway and charge Queenslanders a toll every time they drive to work. We shouldn't let them own the digital highways our citizens rely on either. + +Public funds should build public infrastructure. Let's start building it. + +Thanks for listening. I'd love to open the floor up—what proprietary tools are driving you crazy right now, and what could we replace them with?" diff --git a/index.html b/index.html new file mode 100644 index 0000000..0ea579b --- /dev/null +++ b/index.html @@ -0,0 +1,349 @@ + + + + + + + The AI Advantage: Rethinking 'Build vs. Buy' in Government IT + + + + + + + + + + +
+
+ + +
+
+
+

THE AI ADVANTAGE

+

Rethinking "Build vs. Buy" in Government IT

+
+

A Playbook for Digital Sovereignty in the Generative Era

+
2026 Government Digital Graduates
+
+ + +
+ + +
+

The Mega-Vendor Tax

+ +
+
+
THE BUDGET HOLE
+

Proprietary Licensing

+

Millions of dollars funneled annually to mega-vendors for generic office utilities and closed-source databases.

+ + + + + + + + + Public Funds + Vendor + +
+ +
+
THE STAT
+
80%
+

of typical public IT budgets are locked into maintaining static legacy vendor software with zero active development.

+
+
+ + +
+ + +
+

The Procurement Trap

+

The Cover-Your-Ass (CYA) Lifecycle

+ + +
+
+
01
+
CYA Planning
+
12 - 18 Months
+

Writing 300-page specs to shift liability.

+
+
âž”
+
+
02
+
RFP & Legal
+
6 - 12 Months
+

Mega-vendors dominate with dedicated bidding teams.

+
+
âž”
+
+
03
+
Outdated Launch
+
Day 1
+

Delivered system is obsolete before first login.

+
+
âž”
+
+
04
+
Locked In
+
5+ Year Contract
+

Paying consultants $300/hr for minor edits.

+
+
+ + +
+ + +
+

The Generative Shift

+ +
+
+ + + + + + + + High Cost + $0 + + + 2020 + 2023 (LLM Boom) + 2026 + + + + SaaS Subscription Cost + + + + AI-Assisted Build Cost + +
+ +
+

The Death of the Trade-off

+

Traditional software required a massive engineering budget. Today, AI-powered coding agents dramatically compress development loops.

+
    +
  • âž” 90% Reduction in lines of code written by hand.
  • +
  • âž” Instant Scaffolding of databases & APIs.
  • +
  • âž” Sovereign Hosting on public/internal cloud.
  • +
+
+
+ + +
+ + +
+

Digital Sovereignty

+

Choosing Who Controls Your Infrastructure

+ +
+
+
PROPRIETARY COLONY
+
    +
  • Data processed through black-box vendor APIs
  • +
  • Codebase owned entirely by the supplier
  • +
  • Compulsory SaaS licensing fee increases
  • +
  • Dependency on vendor roadmap for updates
  • +
+
+ +
+
SOVEREIGN STATE
+
    +
  • Self-hosted, transparent open-source LLMs
  • +
  • Full ownership and visibility of the codebase
  • +
  • $0 licensing fees — pay only for compute
  • +
  • Deploy customizations at the speed of command
  • +
+
+
+ + +
+ + +
+

Case Management Reimagined

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CriteriaCommercial SaaS (COTS)Sovereign Build (AI-Driven)
Licensing Cost$180 per user / month$0 (Compute only)
CustomizationPaid contractor config contractsAI code updates in minutes
IntegrationComplex proprietary APIsStandard open-source APIs
Data PrivacyStored in vendor cloud tenantFully isolated in local gov cloud
+ + +
+ + +
+

"But Who Will Support It?"

+

The Myth of Vendor Support Liability

+ +
+
+

The Vendor Support Illusion

+
+
Bug Detected
+
â–Ľ
+
Open Support Ticket
+
â–Ľ
+
Wait 3 Weeks for Escalation
+
â–Ľ
+
"Works as Intended / Paid Request"
+
+
+ +
+

The AI-Powered Sovereign Dev

+
+
Bug Detected
+
â–Ľ
+
AI Agent Diagnoses Trace
+
â–Ľ
+
Dev Reviews Generated Patch
+
â–Ľ
+
Test Passed & Deployed (15 mins)
+
+
+
+ + +
+ + +
+

The Graduate's Choice

+ +
+
+
đź“‹
+

License Administrator

+

Spend your career configuring enterprise templates, filing vendor tickets, and managing access tokens.

+ +
+ +
+
⚡
+

Sovereign Builder

+

Use AI agents to design microservices, customize open-source infrastructure, and deploy real digital products.

+ +
+
+ + +
+ + +
+

The Sovereign Playbook

+

How to Disrupt the Status Quo Tomorrow

+ +
+
+
01
+

Find the excel mess

+

Identify a slow, manual database-in-a-spreadsheet or a paper-and-form process.

+
+
+
02
+

Scaffold open source

+

Use a clean, secure open-source template (Node, Python, Postgres) as your base.

+
+
+
03
+

Code with AI agents

+

Let generative agents write custom business rules, API connectors, and unit tests.

+
+
+
04
+

Ship and show

+

Deploy internally. Show a working tool to leadership before they even write the RFP.

+
+
+ + +
+ + +
+
+
+

PUBLIC FUNDS

+

PUBLIC CODE

+
+

Let's build a sovereign future.

+
Questions & Discussion
+
+ + +
+ +
+
+ + + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fa4f5c0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,911 @@ +{ + "name": "sparklabs-6-presentation", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "sparklabs-6-presentation", + "version": "0.0.0", + "dependencies": { + "reveal.js": "^6.0.1" + }, + "devDependencies": { + "vite": "^8.0.12" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/reveal.js": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/reveal.js/-/reveal.js-6.0.1.tgz", + "integrity": "sha512-9eacArNIgqO2HGWOK+93gJNn+gvdGDVbSq+i2u3Ja9kjiHps0XNLpgYTZTYjKRH91uXy3clGimeGiw4umHG/tg==", + "license": "MIT" + }, + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/vite": { + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..837155d --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "sparklabs-6-presentation", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "vite": "^8.0.12" + }, + "dependencies": { + "reveal.js": "^6.0.1" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..0906f9c --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/src/assets/javascript.svg b/src/assets/javascript.svg new file mode 100644 index 0000000..bebbfc1 --- /dev/null +++ b/src/assets/javascript.svg @@ -0,0 +1 @@ + diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..5c4e83c --- /dev/null +++ b/src/main.js @@ -0,0 +1,76 @@ +import Reveal from 'reveal.js'; +import Notes from 'reveal.js/plugin/notes'; +import Markdown from 'reveal.js/plugin/markdown'; +import Highlight from 'reveal.js/plugin/highlight'; + +// Load styles in order: base, default theme, then custom theme overrides +import 'reveal.js/reveal.css'; +import 'reveal.js/theme/black.css'; +import './style.css'; + +// Initialize Reveal.js deck +const deck = new Reveal({ + plugins: [ Notes, Markdown, Highlight ], + + // Slide dimensions and layout configurations + width: 1080, + height: 720, + margin: 0.08, + minScale: 0.2, + maxScale: 2.0, + + // Navigation & Control Settings + controls: true, + progress: true, + history: true, + center: true, + hash: true, + + // Transition settings (use subtle slides & fades) + transition: 'slide', // none/fade/slide/convex/concave/zoom + transitionSpeed: 'default', // default/fast/slow + backgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom + + // Keyboard configurations + keyboard: true, + + // Help overlay key + help: true, + + // Show notes in presenter view (activated by pressing 'S') + showNotes: false +}); + +deck.initialize().then(() => { + console.log('Reveal.js presentation initialized successfully with plugins.'); + setupChoiceCardsInteractivity(); +}); + +// Setup click interactivity for the Choice cards on Slide 8 +function setupChoiceCardsInteractivity() { + document.addEventListener('click', (e) => { + const adminCard = document.getElementById('choice-admin'); + const builderCard = document.getElementById('choice-builder'); + + if (adminCard && builderCard) { + const clickedCard = e.target.closest('.choice-card'); + if (clickedCard) { + if (clickedCard.id === 'choice-admin') { + // Highlight Admin card, dim Builder card + adminCard.classList.remove('locked-opacity'); + adminCard.classList.add('shadow-red', 'animate-pulse-border'); + + builderCard.classList.add('locked-opacity'); + builderCard.classList.remove('highlight-cyan-glow', 'animate-pulse-border'); + } else if (clickedCard.id === 'choice-builder') { + // Highlight Builder card, dim Admin card + builderCard.classList.remove('locked-opacity'); + builderCard.classList.add('highlight-cyan-glow', 'animate-pulse-border'); + + adminCard.classList.add('locked-opacity'); + adminCard.classList.remove('shadow-red', 'animate-pulse-border'); + } + } + } + }); +} diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..0cbcd83 --- /dev/null +++ b/src/style.css @@ -0,0 +1,623 @@ +/* Custom Reveal.js Styles & Theme Overrides */ + +:root { + /* Reveal overrides */ + --r-background-color: #05070c; + --r-main-font: 'Outfit', sans-serif; + --r-heading-font: 'Space Grotesk', sans-serif; + --r-heading-color: #f3f4f6; + --r-heading-text-transform: none; + --r-heading-font-weight: 700; + --r-main-font-size: 24px; + --r-main-color: #9ca3af; + --r-link-color: #06b6d4; + --r-link-color-hover: #22d3ee; + + /* Custom theme colors */ + --color-bg-dark: #05070c; + --color-bg-card: rgba(13, 18, 30, 0.45); + --color-border: rgba(255, 255, 255, 0.08); + + --cyan-bright: #06b6d4; + --cyan-glow: rgba(6, 182, 212, 0.15); + --cyan-border: rgba(6, 182, 212, 0.4); + + --purple-bright: #a855f7; + --purple-glow: rgba(168, 85, 247, 0.15); + + --red-bright: #ef4444; + --red-glow: rgba(239, 68, 68, 0.15); + --red-border: rgba(239, 68, 68, 0.4); + + --text-white: #f3f4f6; + --text-grey: #6b7280; +} + +/* Base slides adjustments */ +.reveal .slides { + text-align: left; +} + +.reveal .slides section { + padding: 20px 40px; + box-sizing: border-box; +} + +/* Headers & Typography */ +.slide-header { + font-family: var(--r-heading-font); + font-size: 2.2em !important; + font-weight: 700; + margin-bottom: 5px !important; + color: var(--text-white) !important; + letter-spacing: -0.03em; +} + +.slide-subtitle { + font-family: var(--r-heading-font); + font-size: 1.1em; + font-weight: 500; + margin-top: 0; + margin-bottom: 25px; +} + +.font-grotesk { + font-family: var(--r-heading-font); +} + +.text-white { + color: var(--text-white) !important; +} + +.text-grey { + color: var(--text-grey) !important; +} + +.highlight-cyan { + color: var(--cyan-bright) !important; +} + +.text-red { + color: var(--red-bright) !important; +} + +.text-cyan { + color: var(--cyan-bright) !important; +} + +/* Gradients */ +.text-gradient-cyan { + background: linear-gradient(135deg, #22d3ee 0%, #06b6d4 50%, #0891b2 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.text-gradient-purple { + background: linear-gradient(135deg, #c084fc 0%, #a855f7 50%, #7e22ce 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +/* Glow Orbs */ +.glow-orb { + position: absolute; + width: 450px; + height: 450px; + border-radius: 50%; + filter: blur(120px); + z-index: -1; + opacity: 0.25; + pointer-events: none; +} + +#orb-1 { + background: radial-gradient(circle, var(--cyan-bright) 0%, transparent 70%); + top: -10%; + left: -10%; + animation: float-slow 15s infinite alternate; +} + +#orb-2 { + background: radial-gradient(circle, var(--purple-bright) 0%, transparent 70%); + bottom: -10%; + right: -10%; + animation: float-slow 12s infinite alternate-reverse; +} + +@keyframes float-slow { + 0% { transform: translate(0, 0) scale(1); } + 100% { transform: translate(50px, 50px) scale(1.1); } +} + +/* Title Slide Design */ +.title-slide { + height: 100%; + display: flex !important; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center !important; +} + +.title-container { + max-width: 900px; + z-index: 10; +} + +.main-title { + font-family: var(--r-heading-font); + font-size: 3.2em !important; + line-height: 1.05 !important; + font-weight: 800 !important; + letter-spacing: -0.04em !important; + margin-bottom: 10px !important; + color: var(--text-white); + text-shadow: 0 0 40px rgba(255,255,255,0.05); +} + +.main-subtitle { + font-size: 1.4em; + font-weight: 600; + margin-bottom: 25px; + letter-spacing: -0.02em; +} + +.divider { + width: 80px; + height: 4px; + background: linear-gradient(90deg, var(--cyan-bright), var(--purple-bright)); + margin: 20px auto; + border-radius: 2px; +} + +.tagline { + font-size: 0.9em; + color: #9ca3af; + margin-bottom: 35px; +} + +.audience-badge, .q-a-badge { + display: inline-block; + padding: 6px 14px; + border-radius: 20px; + font-size: 0.65em; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + background: rgba(255,255,255,0.04); + border: 1px solid var(--color-border); + color: #9ca3af; +} + +.q-a-badge { + background: var(--cyan-glow); + border-color: var(--cyan-border); + color: var(--cyan-bright); +} + +/* Glassmorphism Cards Layout */ +.grid-2col { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 30px; + margin-top: 20px; + width: 100%; +} + +.align-center { + align-items: center; +} + +.card { + background: var(--color-bg-card); + border: 1px solid var(--color-border); + border-radius: 12px; + padding: 30px; + box-sizing: border-box; + backdrop-filter: blur(16px); + -webkit-backdrop-filter: blur(16px); + position: relative; + transition: all 0.3s ease; +} + +.card-badge { + position: absolute; + top: 15px; + right: 15px; + font-size: 0.55em; + font-weight: 700; + padding: 3px 8px; + border-radius: 4px; + letter-spacing: 0.05em; +} + +.bg-red { + background: rgba(239, 68, 68, 0.15); + color: var(--red-bright); + border: 1px solid rgba(239, 68, 68, 0.3); +} + +.bg-cyan { + background: var(--cyan-glow); + color: var(--cyan-bright); + border: 1px solid var(--cyan-border); +} + +.card-title { + font-size: 1.1em !important; + font-weight: 600; + margin-top: 10px !important; + margin-bottom: 12px !important; +} + +.card-desc { + font-size: 0.75em; + line-height: 1.5; + color: #9ca3af; +} + +/* Glow Borders */ +.shadow-red { + border-color: rgba(239, 68, 68, 0.2); + box-shadow: 0 10px 30px rgba(239, 68, 68, 0.05); +} + +.shadow-cyan { + border-color: rgba(6, 182, 212, 0.2); + box-shadow: 0 10px 30px rgba(6, 182, 212, 0.05); +} + +.highlight-cyan-glow { + border-color: var(--cyan-border); + box-shadow: 0 0 25px rgba(6, 182, 212, 0.1); +} + +.hover-red-glow:hover { + border-color: var(--red-border); + box-shadow: 0 0 25px rgba(239, 68, 68, 0.1); +} + +.animate-pulse-border { + animation: pulse-border 3s infinite alternate; +} + +@keyframes pulse-border { + 0% { border-color: rgba(255, 255, 255, 0.08); } + 100% { border-color: var(--cyan-border); } +} + +/* Big Metric Card */ +.big-metric { + font-family: var(--r-heading-font); + font-size: 3.5em; + font-weight: 800; + line-height: 1; + margin-top: 20px; + margin-bottom: 10px; + letter-spacing: -0.04em; +} + +.metric-label { + font-size: 0.75em; + line-height: 1.5; + color: #9ca3af; +} + +/* Pipeline Flowchart (Slide 3) */ +.pipeline-container { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + margin-top: 40px; +} + +.pipeline-step { + flex: 1; + background: var(--color-bg-card); + border: 1px solid var(--color-border); + border-radius: 8px; + padding: 20px; + text-align: center; + backdrop-filter: blur(8px); + position: relative; + min-height: 150px; + display: flex; + flex-direction: column; + justify-content: center; +} + +.step-num { + font-family: var(--r-heading-font); + font-size: 1.4em; + font-weight: 800; + color: #4b5563; + margin-bottom: 5px; +} + +.step-label { + font-size: 0.75em; + font-weight: 600; + color: var(--text-white); + margin-bottom: 5px; +} + +.step-duration { + font-size: 0.55em; + font-weight: 700; + text-transform: uppercase; + color: #9ca3af; + margin-bottom: 8px; +} + +.step-detail { + font-size: 0.6em; + line-height: 1.4; + color: #6b7280; + margin: 0; +} + +.arrow-connector { + font-size: 1.2em; + color: #374151; + margin: 0 10px; + user-select: none; +} + +.warning-glow { + border-color: var(--red-border); + box-shadow: 0 0 15px rgba(239, 68, 68, 0.08); +} + +/* SVG Chart adjustments */ +.chart-container { + padding: 20px; + border-radius: 12px; + background: rgba(13, 18, 30, 0.6); +} + +.main-svg-chart { + width: 100%; + height: auto; + display: block; +} + +#svg-cost-curve text { + font-family: 'Space Grotesk', sans-serif; +} + +#svg-tax-drain text { + font-family: 'Space Grotesk', sans-serif; + font-weight: 600; +} + +/* Lists styling */ +.text-left { + text-align: left; +} + +.margin-bottom-md { + margin-bottom: 20px !important; +} + +.margin-top-md { + margin-top: 30px !important; +} + +.clean-list { + list-style: none; + padding: 0; + margin: 0; +} + +.clean-list li { + font-size: 0.75em; + margin-bottom: 12px; + color: #9ca3af; + display: flex; + align-items: center; + gap: 10px; +} + +/* Sovereign vs Colony Lists (Slide 5) */ +.sovereign-list { + list-style: none; + padding: 0; + margin: 20px 0 0; +} + +.sovereign-list li { + font-size: 0.75em; + margin-bottom: 16px; + padding-left: 28px; + position: relative; + color: var(--text-white); + line-height: 1.4; +} + +.locked-item::before { + content: 'âś•'; + color: var(--red-bright); + position: absolute; + left: 0; + font-weight: 800; +} + +.free-item::before { + content: 'âś“'; + color: var(--cyan-bright); + position: absolute; + left: 0; + font-weight: 800; +} + +/* Case Study Table */ +.sovereign-table { + width: 100%; + border-collapse: collapse; + font-size: 0.7em; + background: var(--color-bg-card); + backdrop-filter: blur(12px); + border-radius: 8px; + overflow: hidden; + border: 1px solid var(--color-border); +} + +.sovereign-table th, .sovereign-table td { + padding: 15px 20px; + text-align: left; + border-bottom: 1px solid var(--color-border); +} + +.sovereign-table th { + font-family: var(--r-heading-font); + font-weight: 600; + background: rgba(255, 255, 255, 0.02); + color: var(--text-white); +} + +.sovereign-table tr:last-child td { + border-bottom: none; +} + +.table-label { + font-weight: 600; + color: #cbd5e1; +} + +/* Flowchart components (Slide 7) */ +.flow-chart { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + margin-top: 15px; +} + +.flow-node { + width: 80%; + padding: 10px 15px; + border-radius: 6px; + background: rgba(255, 255, 255, 0.02); + border: 1px solid var(--color-border); + font-size: 0.65em; + font-weight: 500; + text-align: center; + color: var(--text-white); +} + +.border-red { + border-color: rgba(239, 68, 68, 0.3); +} + +.border-cyan { + border-color: var(--cyan-border); +} + +.flow-arrow { + font-size: 0.7em; + color: #4b5563; +} + +/* Choice Cards (Slide 8) */ +.choice-card { + padding: 40px 30px; + text-align: center; + cursor: pointer; +} + +.choice-card .card-icon { + font-size: 2em; + margin-bottom: 15px; +} + +.choice-text { + font-size: 0.7em; + line-height: 1.5; + color: #9ca3af; + margin-bottom: 25px; + min-height: 70px; +} + +.choice-footer { + font-family: var(--r-heading-font); + font-size: 0.75em; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.locked-opacity { + opacity: 0.45; + border-color: #2a2a2a; +} + +.locked-opacity:hover { + opacity: 0.6; +} + +/* Playbook Cards (Slide 9) */ +.playbook-steps { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px; + width: 100%; +} + +.playbook-card { + padding: 20px 25px; + display: flex; + gap: 15px; + align-items: flex-start; + min-height: 120px; +} + +.playbook-num { + font-family: var(--r-heading-font); + font-size: 1.4em; + font-weight: 800; + line-height: 1; +} + +.playbook-title { + font-size: 0.85em !important; + font-weight: 600; + margin-top: 0 !important; + margin-bottom: 5px !important; + text-transform: uppercase; + letter-spacing: 0.02em; +} + +.playbook-body { + font-size: 0.65em; + line-height: 1.4; + color: #9ca3af; + margin: 0; +} + +/* Conclusion slide adjustments */ +.big-bold { + font-size: 4em !important; + font-weight: 800 !important; + letter-spacing: -0.05em !important; + margin: 0 !important; + line-height: 0.95 !important; +} + +/* Mobile responsive fixes */ +@media (max-width: 768px) { + .grid-2col { + grid-template-columns: 1fr; + gap: 15px; + } + .pipeline-container { + flex-direction: column; + gap: 10px; + } + .arrow-connector { + transform: rotate(90deg); + } + .playbook-steps { + grid-template-columns: 1fr; + } +}