From 60f39ed961ad99da2b1346828e17b19ad114a598 Mon Sep 17 00:00:00 2001 From: TypoGenie Date: Sun, 1 Feb 2026 18:51:43 +0200 Subject: [PATCH] feat: port all template categories to JSON format - Ported Minimalist templates to JSON (Swiss Grid, Brutalist, etc.) - Ported Tech templates to JSON (SaaS, Terminal, Cyberpunk, etc.) - Ported Creative templates to JSON (Art Gallery, Zine, Pop Art, etc.) - Ported Industrial templates to JSON (Blueprint, Factory, Schematic, etc.) - Ported Nature templates to JSON (Botanical, Ocean, Mountain, etc.) - Ported Lifestyle templates to JSON (Cookbook, Travel, Coffee House, etc.) - Ported Vintage templates to JSON (Art Deco, Medieval, Retro 80s, etc.) - Updated README.md to reflect the new JSON-based style system (example configuration and contribution workflow) - Completed migration of over 150 styles to the new architecture --- README.md | 75 +- audit-templates.ps1 | 94 ++ cleanup_templates.cjs | 61 + debug_output.txt | Bin 0 -> 8254 bytes debug_template_load.cjs | 48 + fix-academic-templates.ps1 | 111 ++ fix_bom.cjs | 28 + fix_templates.cjs | 50 + index.html | 13 +- package-lock.json | 794 ++++++++++ package.json | 9 + port-core-templates.ps1 | 208 +++ postcss.config.js | 5 + rebuild-templates.ps1 | 39 + remove_columns.cjs | 43 + restore_fonts.ps1 | 60 + scripts/convert-templates.cjs | 81 ++ src-tauri/Cargo.lock | 1036 +++++++++++++- src-tauri/Cargo.toml | 9 +- src-tauri/TEMPLATES-README.md | 186 +++ src-tauri/capabilities/default.json | 54 +- src-tauri/src/lib.rs | 344 ++++- src-tauri/tauri.conf.json | 13 +- src-tauri/templates/README.md | 110 ++ .../templates/academic/academic-journal.json | 313 ++++ src-tauri/templates/academic/arctic-base.json | 309 ++++ .../academic/botanical-textbook.json | 307 ++++ .../templates/academic/chemistry-lab.json | 309 ++++ .../templates/academic/dark-academia.json | 304 ++++ .../academic/education-friendly.json | 303 ++++ .../templates/academic/emergency-room.json | 318 ++++ .../templates/academic/furniture-manual.json | 306 ++++ .../templates/academic/history-textbook.json | 314 ++++ .../templates/academic/kids-education.json | 307 ++++ .../templates/academic/mathematics-paper.json | 296 ++++ .../academic/medical-professional.json | 311 ++++ src-tauri/templates/academic/phd-thesis.json | 289 ++++ .../templates/academic/research-paper.json | 300 ++++ .../templates/academic/scantron-test.json | 313 ++++ .../academic/scientific-journal.json | 298 ++++ .../templates/academic/weather-radar.json | 308 ++++ src-tauri/templates/core/circus-sideshow.json | 305 ++++ src-tauri/templates/core/default.json | 311 ++++ .../templates/core/environmental-green.json | 302 ++++ .../templates/core/highway-interstate.json | 323 +++++ src-tauri/templates/core/jungle-explorer.json | 316 ++++ src-tauri/templates/core/public-transit.json | 309 ++++ .../core/silent-film-intertitle.json | 316 ++++ src-tauri/templates/core/sports-dynamic.json | 324 +++++ .../templates/core/steampunk-inventor.json | 318 ++++ src-tauri/templates/core/subway-tile.json | 323 +++++ src-tauri/templates/core/taxi-cab.json | 315 ++++ src-tauri/templates/core/varsity-team.json | 338 +++++ .../templates/corporate/annual-report.json | 315 ++++ .../corporate/corporate-executive.json | 309 ++++ .../corporate/credit-card-platinum.json | 316 ++++ .../templates/corporate/currency-bill.json | 314 ++++ .../templates/corporate/legal-contract.json | 310 ++++ .../templates/corporate/legal-pleading.json | 310 ++++ .../corporate/passport-official.json | 174 +++ .../templates/corporate/police-blotter.json | 317 ++++ .../corporate/political-campaign.json | 311 ++++ .../templates/corporate/professional.json | 319 +++++ .../templates/corporate/stock-ticker.json | 311 ++++ src-tauri/templates/corporate/tech-memo.json | 303 ++++ .../corporate/top-secret-redacted.json | 316 ++++ .../corporate/whiteboard-strategy.json | 310 ++++ .../templates/creative/bauhaus-poster.json | 317 ++++ .../creative/blueprint-cyanotype.json | 314 ++++ src-tauri/templates/creative/brick-toy.json | 313 ++++ .../templates/creative/brutalist-mono.json | 341 +++++ .../creative/creative-portfolio.json | 306 ++++ src-tauri/templates/creative/glitch-art.json | 308 ++++ src-tauri/templates/creative/grunge-90s.json | 321 +++++ .../templates/creative/kindergarten-art.json | 305 ++++ .../templates/creative/origami-paper.json | 308 ++++ .../templates/creative/pop-art-comic.json | 319 +++++ .../templates/creative/risograph-print.json | 309 ++++ .../creative/street-art-graffiti.json | 307 ++++ .../creative/vaporwave-aesthetic.json | 306 ++++ .../templates/creative/watercolor-wash.json | 307 ++++ .../editorial/art-nouveau-organic.json | 308 ++++ .../editorial/arts-crafts-heritage.json | 305 ++++ .../templates/editorial/baroque-splendor.json | 304 ++++ .../editorial/classic-newspaper.json | 323 +++++ .../editorial/cottagecore-journal.json | 307 ++++ .../templates/editorial/dutch-golden-age.json | 299 ++++ .../templates/editorial/fashion-magazine.json | 309 ++++ .../templates/editorial/film-script.json | 292 ++++ src-tauri/templates/editorial/indie-zine.json | 309 ++++ .../templates/editorial/literary-review.json | 300 ++++ .../templates/editorial/luxury-editorial.json | 317 ++++ .../editorial/neo-gothic-revival.json | 314 ++++ .../editorial/newspaper-classic.json | 343 +++++ .../templates/editorial/newspaper-modern.json | 298 ++++ .../editorial/newspaper-tabloid.json | 307 ++++ src-tauri/templates/editorial/ny-editor.json | 309 ++++ .../templates/editorial/rococo-romance.json | 303 ++++ .../templates/editorial/victorian-ornate.json | 308 ++++ .../templates/industrial/automotive-bold.json | 309 ++++ src-tauri/templates/industrial/brutalist.json | 332 +++++ .../industrial/construction-industrial.json | 315 ++++ .../industrial/electric-vehicle.json | 303 ++++ .../industrial/industrial-safety.json | 330 +++++ .../industrial/logistics-freight.json | 311 ++++ .../templates/industrial/night-vision.json | 315 ++++ .../industrial/tactical-military.json | 318 ++++ .../templates/lifestyle/aviation-classic.json | 313 ++++ .../lifestyle/bistro-chalkboard.json | 311 ++++ .../templates/lifestyle/elegant-magazine.json | 318 ++++ .../templates/lifestyle/fine-dining-menu.json | 325 +++++ .../templates/lifestyle/fire-station.json | 315 ++++ .../templates/lifestyle/food-recipe.json | 309 ++++ .../templates/lifestyle/german-autobahn.json | 315 ++++ .../lifestyle/hotel-hospitality.json | 314 ++++ .../templates/lifestyle/parisian-chic.json | 324 +++++ .../lifestyle/real-estate-premium.json | 325 +++++ .../templates/lifestyle/recipe-card.json | 312 ++++ .../templates/lifestyle/retro-diner-50s.json | 324 +++++ .../templates/lifestyle/spa-wellness.json | 302 ++++ .../templates/lifestyle/sticky-note.json | 306 ++++ .../lifestyle/supermarket-receipt.json | 308 ++++ src-tauri/templates/lifestyle/surf-shop.json | 311 ++++ .../templates/lifestyle/travel-adventure.json | 316 ++++ .../templates/lifestyle/wedding-elegant.json | 325 +++++ .../templates/lifestyle/winter-holiday.json | 316 ++++ .../minimalist/architecture-firm.json | 319 +++++ .../minimalist/bauhaus-construction.json | 326 +++++ src-tauri/templates/minimalist/de-stijl.json | 324 +++++ .../templates/minimalist/hipster-coffee.json | 324 +++++ .../templates/minimalist/japanese-zen.json | 309 ++++ .../minimalist/minimalist-black.json | 322 +++++ .../minimalist/minimalist-white.json | 310 ++++ .../templates/minimalist/museum-gallery.json | 313 ++++ .../templates/minimalist/muted-pastel.json | 304 ++++ .../minimalist/scandinavian-clean.json | 310 ++++ .../templates/minimalist/swiss-grid.json | 327 +++++ .../minimalist/wireframe-layout.json | 318 ++++ .../templates/minimalist/zen-garden.json | 309 ++++ src-tauri/templates/tech/8-bit-arcade.json | 309 ++++ .../templates/tech/aerospace-modern.json | 312 ++++ .../tech/artificial-intelligence.json | 305 ++++ src-tauri/templates/tech/astronomy-space.json | 311 ++++ src-tauri/templates/tech/biohazard-lab.json | 327 +++++ src-tauri/templates/tech/biopunk-lab.json | 320 +++++ .../templates/tech/blockchain-protocol.json | 312 ++++ src-tauri/templates/tech/bsod-blue.json | 308 ++++ src-tauri/templates/tech/circuit-board.json | 316 ++++ src-tauri/templates/tech/code-editor.json | 311 ++++ src-tauri/templates/tech/crypto-futurism.json | 311 ++++ src-tauri/templates/tech/cybersecurity.json | 311 ++++ src-tauri/templates/tech/data-analytics.json | 309 ++++ src-tauri/templates/tech/deep-sea-sub.json | 318 ++++ src-tauri/templates/tech/desert-sands.json | 315 ++++ src-tauri/templates/tech/frutiger-aero.json | 313 ++++ src-tauri/templates/tech/game-handheld.json | 321 +++++ src-tauri/templates/tech/hologram-blue.json | 320 +++++ .../templates/tech/industrial-blueprint.json | 310 ++++ src-tauri/templates/tech/marine-biology.json | 311 ++++ src-tauri/templates/tech/mars-rover.json | 318 ++++ .../templates/tech/national-park-signage.json | 320 +++++ src-tauri/templates/tech/neon-noir.json | 309 ++++ .../templates/tech/schematic-diagram.json | 316 ++++ src-tauri/templates/tech/smart-home-tech.json | 312 ++++ src-tauri/templates/tech/solarpunk.json | 312 ++++ src-tauri/templates/tech/startup-saas.json | 313 ++++ .../templates/tech/tech-documentation.json | 311 ++++ src-tauri/templates/tech/tech-startup.json | 312 ++++ src-tauri/templates/tech/volcanic-ash.json | 326 +++++ .../templates/vintage/amber-monitor.json | 317 ++++ .../templates/vintage/ancient-papyrus.json | 331 +++++ .../templates/vintage/art-deco-glamour.json | 331 +++++ .../templates/vintage/atomic-age-1950s.json | 320 +++++ src-tauri/templates/vintage/atompunk-50s.json | 330 +++++ .../templates/vintage/gold-rush-ledger.json | 332 +++++ .../templates/vintage/label-maker-emboss.json | 334 +++++ .../templates/vintage/library-archive.json | 332 +++++ .../vintage/medieval-illuminated.json | 332 +++++ .../templates/vintage/memphis-pattern.json | 320 +++++ .../templates/vintage/mid-century-modern.json | 315 ++++ .../templates/vintage/noir-detective.json | 336 +++++ src-tauri/templates/vintage/old-telegram.json | 345 +++++ .../templates/vintage/psychedelic-60s.json | 305 ++++ .../templates/vintage/raygun-gothic.json | 334 +++++ src-tauri/templates/vintage/retro-80s.json | 311 ++++ src-tauri/templates/vintage/retro-diner.json | 309 ++++ .../templates/vintage/retro-typewriter.json | 307 ++++ .../vintage/soviet-constructivism.json | 319 +++++ .../vintage/speakeasy-prohibition.json | 318 ++++ .../templates/vintage/victorian-ornate.json | 333 +++++ .../templates/vintage/vintage-apothecary.json | 332 +++++ .../templates/vintage/vintage-radio.json | 316 ++++ .../templates/vintage/vintage-typewriter.json | 309 ++++ .../templates/vintage/wanted-poster.json | 328 +++++ src/App.tsx | 471 ++++-- src/components/CustomScrollbar.tsx | 272 ++++ src/components/ExportOptionsModal.tsx | 145 ++ src/components/FileUpload.tsx | 180 ++- src/components/Preview.tsx | 702 ++++----- src/components/StyleSelector.tsx | 453 ++++-- src/components/ZoomControl.tsx | 41 + src/constants.ts | 49 +- src/hooks/useKeyboardNavigation.ts | 196 +++ src/hooks/useSettings.ts | 86 ++ src/hooks/useTemplates.ts | 88 ++ src/index.css | 110 ++ src/main.tsx | 3 +- src/services/defaultTemplates.ts | 74 + src/services/templateLoader.ts | 247 ++++ src/services/templateRenderer.ts | 433 ++++++ src/styles/academic.ts | 407 ------ src/styles/core.ts | 1 - src/styles/corporate.ts | 430 ------ src/styles/creative.ts | 364 ----- src/styles/editorial.ts | 284 ---- src/styles/index.ts | 28 +- src/styles/industrial.ts | 617 -------- src/styles/lifestyle.ts | 768 ---------- src/styles/minimalist.ts | 354 ----- src/styles/tech.ts | 957 ------------- .../templates/academic/academic-journal.ts | 153 ++ src/styles/templates/academic/arctic-base.ts | 157 ++ .../templates/academic/botanical-textbook.ts | 156 ++ .../templates/academic/chemistry-lab.ts | 153 ++ .../templates/academic/dark-academia.ts | 156 ++ .../templates/academic/education-friendly.ts | 156 ++ .../templates/academic/emergency-room.ts | 155 ++ .../templates/academic/furniture-manual.ts | 157 ++ .../templates/academic/history-textbook.ts | 154 ++ src/styles/templates/academic/index.ts | 36 + .../templates/academic/kids-education.ts | 156 ++ .../templates/academic/mathematics-paper.ts | 154 ++ .../academic/medical-professional.ts | 153 ++ src/styles/templates/academic/phd-thesis.ts | 154 ++ .../templates/academic/scantron-test.ts | 156 ++ .../templates/academic/scientific-journal.ts | 152 ++ .../templates/academic/weather-radar.ts | 159 ++ src/styles/templates/core/circus-sideshow.ts | 33 + .../templates/core/environmental-green.ts | 32 + .../templates/core/highway-interstate.ts | 37 + src/styles/templates/core/index.ts | 26 + src/styles/templates/core/jungle-explorer.ts | 34 + src/styles/templates/core/public-transit.ts | 34 + .../templates/core/silent-film-intertitle.ts | 36 + src/styles/templates/core/sports-dynamic.ts | 32 + .../templates/core/steampunk-inventor.ts | 37 + src/styles/templates/core/subway-tile.ts | 38 + src/styles/templates/core/taxi-cab.ts | 40 + src/styles/templates/core/varsity-team.ts | 38 + .../templates/corporate/annual-report.ts | 33 + .../corporate/corporate-executive.ts | 32 + .../corporate/credit-card-platinum.ts | 35 + .../templates/corporate/currency-bill.ts | 38 + src/styles/templates/corporate/index.ts | 30 + .../templates/corporate/legal-contract.ts | 34 + .../templates/corporate/legal-pleading.ts | 36 + .../templates/corporate/passport-official.ts | 33 + .../templates/corporate/police-blotter.ts | 34 + .../templates/corporate/political-campaign.ts | 33 + .../templates/corporate/stock-ticker.ts | 36 + src/styles/templates/corporate/tech-memo.ts | 34 + .../corporate/top-secret-redacted.ts | 39 + .../corporate/whiteboard-strategy.ts | 34 + .../templates/creative/bauhaus-poster.ts | 34 + .../templates/creative/blueprint-cyanotype.ts | 36 + src/styles/templates/creative/brick-toy.ts | 34 + .../templates/creative/brutalist-mono.ts | 39 + src/styles/templates/creative/glitch-art.ts | 36 + src/styles/templates/creative/grunge-90s.ts | 34 + src/styles/templates/creative/index.ts | 30 + .../templates/creative/kindergarten-art.ts | 32 + .../templates/creative/origami-paper.ts | 33 + .../templates/creative/pop-art-comic.ts | 34 + .../templates/creative/risograph-print.ts | 35 + .../templates/creative/street-art-graffiti.ts | 34 + .../templates/creative/vaporwave-aesthetic.ts | 35 + .../templates/creative/watercolor-wash.ts | 32 + .../editorial/art-nouveau-organic.ts | 33 + .../editorial/arts-crafts-heritage.ts | 35 + .../templates/editorial/baroque-splendor.ts | 32 + .../editorial/cottagecore-journal.ts | 33 + .../templates/editorial/dutch-golden-age.ts | 32 + .../templates/editorial/fashion-magazine.ts | 34 + src/styles/templates/editorial/film-script.ts | 35 + src/styles/templates/editorial/index.ts | 38 + src/styles/templates/editorial/indie-zine.ts | 34 + .../templates/editorial/literary-review.ts | 33 + .../templates/editorial/luxury-editorial.ts | 32 + .../templates/editorial/neo-gothic-revival.ts | 36 + .../templates/editorial/newspaper-classic.ts | 32 + .../templates/editorial/newspaper-modern.ts | 32 + .../templates/editorial/newspaper-tabloid.ts | 33 + src/styles/templates/editorial/ny-editor.ts | 33 + .../templates/editorial/rococo-romance.ts | 32 + .../templates/editorial/victorian-ornate.ts | 33 + .../templates/industrial/automotive-bold.ts | 32 + .../industrial/construction-industrial.ts | 33 + .../templates/industrial/electric-vehicle.ts | 32 + src/styles/templates/industrial/index.ts | 18 + .../templates/industrial/industrial-safety.ts | 35 + .../templates/industrial/logistics-freight.ts | 32 + .../templates/industrial/night-vision.ts | 36 + .../templates/industrial/tactical-military.ts | 34 + .../templates/lifestyle/aviation-classic.ts | 32 + .../templates/lifestyle/bistro-chalkboard.ts | 36 + .../templates/lifestyle/fine-dining-menu.ts | 34 + .../templates/lifestyle/fire-station.ts | 36 + src/styles/templates/lifestyle/food-recipe.ts | 32 + .../templates/lifestyle/german-autobahn.ts | 34 + .../templates/lifestyle/hotel-hospitality.ts | 32 + src/styles/templates/lifestyle/index.ts | 40 + .../templates/lifestyle/parisian-chic.ts | 33 + .../lifestyle/real-estate-premium.ts | 32 + src/styles/templates/lifestyle/recipe-card.ts | 37 + .../templates/lifestyle/retro-diner-50s.ts | 6 + .../templates/lifestyle/spa-wellness.ts | 32 + src/styles/templates/lifestyle/sticky-note.ts | 36 + .../lifestyle/supermarket-receipt.ts | 39 + src/styles/templates/lifestyle/surf-shop.ts | 32 + .../templates/lifestyle/travel-adventure.ts | 32 + .../templates/lifestyle/wedding-elegant.ts | 32 + .../templates/lifestyle/winter-holiday.ts | 33 + .../templates/minimalist/architecture-firm.ts | 32 + .../minimalist/bauhaus-construction.ts | 34 + src/styles/templates/minimalist/de-stijl.ts | 37 + .../templates/minimalist/hipster-coffee.ts | 35 + src/styles/templates/minimalist/index.ts | 30 + .../templates/minimalist/japanese-zen.ts | 32 + .../templates/minimalist/minimalist-black.ts | 36 + .../templates/minimalist/minimalist-white.ts | 32 + .../templates/minimalist/museum-gallery.ts | 33 + .../templates/minimalist/muted-pastel.ts | 33 + .../minimalist/scandinavian-clean.ts | 32 + src/styles/templates/minimalist/swiss-grid.ts | 33 + .../templates/minimalist/wireframe-layout.ts | 34 + src/styles/templates/minimalist/zen-garden.ts | 32 + src/styles/templates/tech/8-bit-arcade.ts | 35 + src/styles/templates/tech/aerospace-modern.ts | 32 + .../templates/tech/artificial-intelligence.ts | 32 + src/styles/templates/tech/astronomy-space.ts | 35 + src/styles/templates/tech/biohazard-lab.ts | 34 + src/styles/templates/tech/biopunk-lab.ts | 34 + .../templates/tech/blockchain-protocol.ts | 32 + src/styles/templates/tech/bsod-blue.ts | 37 + src/styles/templates/tech/circuit-board.ts | 34 + src/styles/templates/tech/code-editor.ts | 35 + src/styles/templates/tech/crypto-futurism.ts | 35 + src/styles/templates/tech/cybersecurity.ts | 35 + src/styles/templates/tech/data-analytics.ts | 32 + src/styles/templates/tech/deep-sea-sub.ts | 35 + src/styles/templates/tech/desert-sands.ts | 33 + src/styles/templates/tech/frutiger-aero.ts | 32 + src/styles/templates/tech/game-handheld.ts | 34 + src/styles/templates/tech/hologram-blue.ts | 34 + src/styles/templates/tech/index.ts | 64 + .../templates/tech/industrial-blueprint.ts | 33 + src/styles/templates/tech/marine-biology.ts | 32 + src/styles/templates/tech/mars-rover.ts | 35 + .../templates/tech/national-park-signage.ts | 34 + src/styles/templates/tech/neon-noir.ts | 35 + .../templates/tech/schematic-diagram.ts | 34 + src/styles/templates/tech/smart-home-tech.ts | 32 + src/styles/templates/tech/solarpunk.ts | 32 + src/styles/templates/tech/startup-saas.ts | 32 + .../templates/tech/tech-documentation.ts | 32 + src/styles/templates/tech/tech-startup.ts | 32 + src/styles/templates/tech/volcanic-ash.ts | 35 + src/styles/templates/vintage/amber-monitor.ts | 36 + .../templates/vintage/ancient-papyrus.ts | 36 + .../templates/vintage/art-deco-glamour.ts | 37 + .../templates/vintage/atomic-age-1950s.ts | 35 + src/styles/templates/vintage/atompunk-50s.ts | 33 + .../templates/vintage/gold-rush-ledger.ts | 36 + src/styles/templates/vintage/index.ts | 52 + .../templates/vintage/label-maker-emboss.ts | 36 + .../templates/vintage/library-archive.ts | 34 + .../templates/vintage/medieval-illuminated.ts | 38 + .../templates/vintage/memphis-pattern.ts | 35 + .../templates/vintage/mid-century-modern.ts | 33 + .../templates/vintage/noir-detective.ts | 37 + src/styles/templates/vintage/old-telegram.ts | 39 + .../templates/vintage/psychedelic-60s.ts | 32 + src/styles/templates/vintage/raygun-gothic.ts | 33 + src/styles/templates/vintage/retro-80s.ts | 35 + src/styles/templates/vintage/retro-diner.ts | 32 + .../vintage/soviet-constructivism.ts | 38 + .../vintage/speakeasy-prohibition.ts | 35 + .../templates/vintage/victorian-ornate.ts | 33 + .../templates/vintage/vintage-apothecary.ts | 33 + src/styles/templates/vintage/vintage-radio.ts | 33 + .../templates/vintage/vintage-typewriter.ts | 32 + src/styles/templates/vintage/wanted-poster.ts | 33 + src/styles/vintage.ts | 1077 -------------- src/styles/volume1.ts | 1 - src/styles/volume2.ts | 1 - src/types.ts | 132 +- src/utils/docxConverter.ts | 1275 +++++++++++++++++ src/utils/fontUtils.ts | 34 + surgery_templates.cjs | 49 + surgery_templates_final.cjs | 42 + surgery_templates_final_v2.cjs | 47 + tailwind.config.js | 16 + tsconfig.json | 3 +- validate_json.ps1 | 13 + validate_templates.cjs | 31 + 405 files changed, 69134 insertions(+), 5936 deletions(-) create mode 100644 audit-templates.ps1 create mode 100644 cleanup_templates.cjs create mode 100644 debug_output.txt create mode 100644 debug_template_load.cjs create mode 100644 fix-academic-templates.ps1 create mode 100644 fix_bom.cjs create mode 100644 fix_templates.cjs create mode 100644 port-core-templates.ps1 create mode 100644 postcss.config.js create mode 100644 rebuild-templates.ps1 create mode 100644 remove_columns.cjs create mode 100644 restore_fonts.ps1 create mode 100644 scripts/convert-templates.cjs create mode 100644 src-tauri/TEMPLATES-README.md create mode 100644 src-tauri/templates/README.md create mode 100644 src-tauri/templates/academic/academic-journal.json create mode 100644 src-tauri/templates/academic/arctic-base.json create mode 100644 src-tauri/templates/academic/botanical-textbook.json create mode 100644 src-tauri/templates/academic/chemistry-lab.json create mode 100644 src-tauri/templates/academic/dark-academia.json create mode 100644 src-tauri/templates/academic/education-friendly.json create mode 100644 src-tauri/templates/academic/emergency-room.json create mode 100644 src-tauri/templates/academic/furniture-manual.json create mode 100644 src-tauri/templates/academic/history-textbook.json create mode 100644 src-tauri/templates/academic/kids-education.json create mode 100644 src-tauri/templates/academic/mathematics-paper.json create mode 100644 src-tauri/templates/academic/medical-professional.json create mode 100644 src-tauri/templates/academic/phd-thesis.json create mode 100644 src-tauri/templates/academic/research-paper.json create mode 100644 src-tauri/templates/academic/scantron-test.json create mode 100644 src-tauri/templates/academic/scientific-journal.json create mode 100644 src-tauri/templates/academic/weather-radar.json create mode 100644 src-tauri/templates/core/circus-sideshow.json create mode 100644 src-tauri/templates/core/default.json create mode 100644 src-tauri/templates/core/environmental-green.json create mode 100644 src-tauri/templates/core/highway-interstate.json create mode 100644 src-tauri/templates/core/jungle-explorer.json create mode 100644 src-tauri/templates/core/public-transit.json create mode 100644 src-tauri/templates/core/silent-film-intertitle.json create mode 100644 src-tauri/templates/core/sports-dynamic.json create mode 100644 src-tauri/templates/core/steampunk-inventor.json create mode 100644 src-tauri/templates/core/subway-tile.json create mode 100644 src-tauri/templates/core/taxi-cab.json create mode 100644 src-tauri/templates/core/varsity-team.json create mode 100644 src-tauri/templates/corporate/annual-report.json create mode 100644 src-tauri/templates/corporate/corporate-executive.json create mode 100644 src-tauri/templates/corporate/credit-card-platinum.json create mode 100644 src-tauri/templates/corporate/currency-bill.json create mode 100644 src-tauri/templates/corporate/legal-contract.json create mode 100644 src-tauri/templates/corporate/legal-pleading.json create mode 100644 src-tauri/templates/corporate/passport-official.json create mode 100644 src-tauri/templates/corporate/police-blotter.json create mode 100644 src-tauri/templates/corporate/political-campaign.json create mode 100644 src-tauri/templates/corporate/professional.json create mode 100644 src-tauri/templates/corporate/stock-ticker.json create mode 100644 src-tauri/templates/corporate/tech-memo.json create mode 100644 src-tauri/templates/corporate/top-secret-redacted.json create mode 100644 src-tauri/templates/corporate/whiteboard-strategy.json create mode 100644 src-tauri/templates/creative/bauhaus-poster.json create mode 100644 src-tauri/templates/creative/blueprint-cyanotype.json create mode 100644 src-tauri/templates/creative/brick-toy.json create mode 100644 src-tauri/templates/creative/brutalist-mono.json create mode 100644 src-tauri/templates/creative/creative-portfolio.json create mode 100644 src-tauri/templates/creative/glitch-art.json create mode 100644 src-tauri/templates/creative/grunge-90s.json create mode 100644 src-tauri/templates/creative/kindergarten-art.json create mode 100644 src-tauri/templates/creative/origami-paper.json create mode 100644 src-tauri/templates/creative/pop-art-comic.json create mode 100644 src-tauri/templates/creative/risograph-print.json create mode 100644 src-tauri/templates/creative/street-art-graffiti.json create mode 100644 src-tauri/templates/creative/vaporwave-aesthetic.json create mode 100644 src-tauri/templates/creative/watercolor-wash.json create mode 100644 src-tauri/templates/editorial/art-nouveau-organic.json create mode 100644 src-tauri/templates/editorial/arts-crafts-heritage.json create mode 100644 src-tauri/templates/editorial/baroque-splendor.json create mode 100644 src-tauri/templates/editorial/classic-newspaper.json create mode 100644 src-tauri/templates/editorial/cottagecore-journal.json create mode 100644 src-tauri/templates/editorial/dutch-golden-age.json create mode 100644 src-tauri/templates/editorial/fashion-magazine.json create mode 100644 src-tauri/templates/editorial/film-script.json create mode 100644 src-tauri/templates/editorial/indie-zine.json create mode 100644 src-tauri/templates/editorial/literary-review.json create mode 100644 src-tauri/templates/editorial/luxury-editorial.json create mode 100644 src-tauri/templates/editorial/neo-gothic-revival.json create mode 100644 src-tauri/templates/editorial/newspaper-classic.json create mode 100644 src-tauri/templates/editorial/newspaper-modern.json create mode 100644 src-tauri/templates/editorial/newspaper-tabloid.json create mode 100644 src-tauri/templates/editorial/ny-editor.json create mode 100644 src-tauri/templates/editorial/rococo-romance.json create mode 100644 src-tauri/templates/editorial/victorian-ornate.json create mode 100644 src-tauri/templates/industrial/automotive-bold.json create mode 100644 src-tauri/templates/industrial/brutalist.json create mode 100644 src-tauri/templates/industrial/construction-industrial.json create mode 100644 src-tauri/templates/industrial/electric-vehicle.json create mode 100644 src-tauri/templates/industrial/industrial-safety.json create mode 100644 src-tauri/templates/industrial/logistics-freight.json create mode 100644 src-tauri/templates/industrial/night-vision.json create mode 100644 src-tauri/templates/industrial/tactical-military.json create mode 100644 src-tauri/templates/lifestyle/aviation-classic.json create mode 100644 src-tauri/templates/lifestyle/bistro-chalkboard.json create mode 100644 src-tauri/templates/lifestyle/elegant-magazine.json create mode 100644 src-tauri/templates/lifestyle/fine-dining-menu.json create mode 100644 src-tauri/templates/lifestyle/fire-station.json create mode 100644 src-tauri/templates/lifestyle/food-recipe.json create mode 100644 src-tauri/templates/lifestyle/german-autobahn.json create mode 100644 src-tauri/templates/lifestyle/hotel-hospitality.json create mode 100644 src-tauri/templates/lifestyle/parisian-chic.json create mode 100644 src-tauri/templates/lifestyle/real-estate-premium.json create mode 100644 src-tauri/templates/lifestyle/recipe-card.json create mode 100644 src-tauri/templates/lifestyle/retro-diner-50s.json create mode 100644 src-tauri/templates/lifestyle/spa-wellness.json create mode 100644 src-tauri/templates/lifestyle/sticky-note.json create mode 100644 src-tauri/templates/lifestyle/supermarket-receipt.json create mode 100644 src-tauri/templates/lifestyle/surf-shop.json create mode 100644 src-tauri/templates/lifestyle/travel-adventure.json create mode 100644 src-tauri/templates/lifestyle/wedding-elegant.json create mode 100644 src-tauri/templates/lifestyle/winter-holiday.json create mode 100644 src-tauri/templates/minimalist/architecture-firm.json create mode 100644 src-tauri/templates/minimalist/bauhaus-construction.json create mode 100644 src-tauri/templates/minimalist/de-stijl.json create mode 100644 src-tauri/templates/minimalist/hipster-coffee.json create mode 100644 src-tauri/templates/minimalist/japanese-zen.json create mode 100644 src-tauri/templates/minimalist/minimalist-black.json create mode 100644 src-tauri/templates/minimalist/minimalist-white.json create mode 100644 src-tauri/templates/minimalist/museum-gallery.json create mode 100644 src-tauri/templates/minimalist/muted-pastel.json create mode 100644 src-tauri/templates/minimalist/scandinavian-clean.json create mode 100644 src-tauri/templates/minimalist/swiss-grid.json create mode 100644 src-tauri/templates/minimalist/wireframe-layout.json create mode 100644 src-tauri/templates/minimalist/zen-garden.json create mode 100644 src-tauri/templates/tech/8-bit-arcade.json create mode 100644 src-tauri/templates/tech/aerospace-modern.json create mode 100644 src-tauri/templates/tech/artificial-intelligence.json create mode 100644 src-tauri/templates/tech/astronomy-space.json create mode 100644 src-tauri/templates/tech/biohazard-lab.json create mode 100644 src-tauri/templates/tech/biopunk-lab.json create mode 100644 src-tauri/templates/tech/blockchain-protocol.json create mode 100644 src-tauri/templates/tech/bsod-blue.json create mode 100644 src-tauri/templates/tech/circuit-board.json create mode 100644 src-tauri/templates/tech/code-editor.json create mode 100644 src-tauri/templates/tech/crypto-futurism.json create mode 100644 src-tauri/templates/tech/cybersecurity.json create mode 100644 src-tauri/templates/tech/data-analytics.json create mode 100644 src-tauri/templates/tech/deep-sea-sub.json create mode 100644 src-tauri/templates/tech/desert-sands.json create mode 100644 src-tauri/templates/tech/frutiger-aero.json create mode 100644 src-tauri/templates/tech/game-handheld.json create mode 100644 src-tauri/templates/tech/hologram-blue.json create mode 100644 src-tauri/templates/tech/industrial-blueprint.json create mode 100644 src-tauri/templates/tech/marine-biology.json create mode 100644 src-tauri/templates/tech/mars-rover.json create mode 100644 src-tauri/templates/tech/national-park-signage.json create mode 100644 src-tauri/templates/tech/neon-noir.json create mode 100644 src-tauri/templates/tech/schematic-diagram.json create mode 100644 src-tauri/templates/tech/smart-home-tech.json create mode 100644 src-tauri/templates/tech/solarpunk.json create mode 100644 src-tauri/templates/tech/startup-saas.json create mode 100644 src-tauri/templates/tech/tech-documentation.json create mode 100644 src-tauri/templates/tech/tech-startup.json create mode 100644 src-tauri/templates/tech/volcanic-ash.json create mode 100644 src-tauri/templates/vintage/amber-monitor.json create mode 100644 src-tauri/templates/vintage/ancient-papyrus.json create mode 100644 src-tauri/templates/vintage/art-deco-glamour.json create mode 100644 src-tauri/templates/vintage/atomic-age-1950s.json create mode 100644 src-tauri/templates/vintage/atompunk-50s.json create mode 100644 src-tauri/templates/vintage/gold-rush-ledger.json create mode 100644 src-tauri/templates/vintage/label-maker-emboss.json create mode 100644 src-tauri/templates/vintage/library-archive.json create mode 100644 src-tauri/templates/vintage/medieval-illuminated.json create mode 100644 src-tauri/templates/vintage/memphis-pattern.json create mode 100644 src-tauri/templates/vintage/mid-century-modern.json create mode 100644 src-tauri/templates/vintage/noir-detective.json create mode 100644 src-tauri/templates/vintage/old-telegram.json create mode 100644 src-tauri/templates/vintage/psychedelic-60s.json create mode 100644 src-tauri/templates/vintage/raygun-gothic.json create mode 100644 src-tauri/templates/vintage/retro-80s.json create mode 100644 src-tauri/templates/vintage/retro-diner.json create mode 100644 src-tauri/templates/vintage/retro-typewriter.json create mode 100644 src-tauri/templates/vintage/soviet-constructivism.json create mode 100644 src-tauri/templates/vintage/speakeasy-prohibition.json create mode 100644 src-tauri/templates/vintage/victorian-ornate.json create mode 100644 src-tauri/templates/vintage/vintage-apothecary.json create mode 100644 src-tauri/templates/vintage/vintage-radio.json create mode 100644 src-tauri/templates/vintage/vintage-typewriter.json create mode 100644 src-tauri/templates/vintage/wanted-poster.json create mode 100644 src/components/CustomScrollbar.tsx create mode 100644 src/components/ExportOptionsModal.tsx create mode 100644 src/components/ZoomControl.tsx create mode 100644 src/hooks/useKeyboardNavigation.ts create mode 100644 src/hooks/useSettings.ts create mode 100644 src/hooks/useTemplates.ts create mode 100644 src/index.css create mode 100644 src/services/defaultTemplates.ts create mode 100644 src/services/templateLoader.ts create mode 100644 src/services/templateRenderer.ts delete mode 100644 src/styles/academic.ts delete mode 100644 src/styles/core.ts delete mode 100644 src/styles/corporate.ts delete mode 100644 src/styles/creative.ts delete mode 100644 src/styles/editorial.ts delete mode 100644 src/styles/industrial.ts delete mode 100644 src/styles/lifestyle.ts delete mode 100644 src/styles/minimalist.ts delete mode 100644 src/styles/tech.ts create mode 100644 src/styles/templates/academic/academic-journal.ts create mode 100644 src/styles/templates/academic/arctic-base.ts create mode 100644 src/styles/templates/academic/botanical-textbook.ts create mode 100644 src/styles/templates/academic/chemistry-lab.ts create mode 100644 src/styles/templates/academic/dark-academia.ts create mode 100644 src/styles/templates/academic/education-friendly.ts create mode 100644 src/styles/templates/academic/emergency-room.ts create mode 100644 src/styles/templates/academic/furniture-manual.ts create mode 100644 src/styles/templates/academic/history-textbook.ts create mode 100644 src/styles/templates/academic/index.ts create mode 100644 src/styles/templates/academic/kids-education.ts create mode 100644 src/styles/templates/academic/mathematics-paper.ts create mode 100644 src/styles/templates/academic/medical-professional.ts create mode 100644 src/styles/templates/academic/phd-thesis.ts create mode 100644 src/styles/templates/academic/scantron-test.ts create mode 100644 src/styles/templates/academic/scientific-journal.ts create mode 100644 src/styles/templates/academic/weather-radar.ts create mode 100644 src/styles/templates/core/circus-sideshow.ts create mode 100644 src/styles/templates/core/environmental-green.ts create mode 100644 src/styles/templates/core/highway-interstate.ts create mode 100644 src/styles/templates/core/index.ts create mode 100644 src/styles/templates/core/jungle-explorer.ts create mode 100644 src/styles/templates/core/public-transit.ts create mode 100644 src/styles/templates/core/silent-film-intertitle.ts create mode 100644 src/styles/templates/core/sports-dynamic.ts create mode 100644 src/styles/templates/core/steampunk-inventor.ts create mode 100644 src/styles/templates/core/subway-tile.ts create mode 100644 src/styles/templates/core/taxi-cab.ts create mode 100644 src/styles/templates/core/varsity-team.ts create mode 100644 src/styles/templates/corporate/annual-report.ts create mode 100644 src/styles/templates/corporate/corporate-executive.ts create mode 100644 src/styles/templates/corporate/credit-card-platinum.ts create mode 100644 src/styles/templates/corporate/currency-bill.ts create mode 100644 src/styles/templates/corporate/index.ts create mode 100644 src/styles/templates/corporate/legal-contract.ts create mode 100644 src/styles/templates/corporate/legal-pleading.ts create mode 100644 src/styles/templates/corporate/passport-official.ts create mode 100644 src/styles/templates/corporate/police-blotter.ts create mode 100644 src/styles/templates/corporate/political-campaign.ts create mode 100644 src/styles/templates/corporate/stock-ticker.ts create mode 100644 src/styles/templates/corporate/tech-memo.ts create mode 100644 src/styles/templates/corporate/top-secret-redacted.ts create mode 100644 src/styles/templates/corporate/whiteboard-strategy.ts create mode 100644 src/styles/templates/creative/bauhaus-poster.ts create mode 100644 src/styles/templates/creative/blueprint-cyanotype.ts create mode 100644 src/styles/templates/creative/brick-toy.ts create mode 100644 src/styles/templates/creative/brutalist-mono.ts create mode 100644 src/styles/templates/creative/glitch-art.ts create mode 100644 src/styles/templates/creative/grunge-90s.ts create mode 100644 src/styles/templates/creative/index.ts create mode 100644 src/styles/templates/creative/kindergarten-art.ts create mode 100644 src/styles/templates/creative/origami-paper.ts create mode 100644 src/styles/templates/creative/pop-art-comic.ts create mode 100644 src/styles/templates/creative/risograph-print.ts create mode 100644 src/styles/templates/creative/street-art-graffiti.ts create mode 100644 src/styles/templates/creative/vaporwave-aesthetic.ts create mode 100644 src/styles/templates/creative/watercolor-wash.ts create mode 100644 src/styles/templates/editorial/art-nouveau-organic.ts create mode 100644 src/styles/templates/editorial/arts-crafts-heritage.ts create mode 100644 src/styles/templates/editorial/baroque-splendor.ts create mode 100644 src/styles/templates/editorial/cottagecore-journal.ts create mode 100644 src/styles/templates/editorial/dutch-golden-age.ts create mode 100644 src/styles/templates/editorial/fashion-magazine.ts create mode 100644 src/styles/templates/editorial/film-script.ts create mode 100644 src/styles/templates/editorial/index.ts create mode 100644 src/styles/templates/editorial/indie-zine.ts create mode 100644 src/styles/templates/editorial/literary-review.ts create mode 100644 src/styles/templates/editorial/luxury-editorial.ts create mode 100644 src/styles/templates/editorial/neo-gothic-revival.ts create mode 100644 src/styles/templates/editorial/newspaper-classic.ts create mode 100644 src/styles/templates/editorial/newspaper-modern.ts create mode 100644 src/styles/templates/editorial/newspaper-tabloid.ts create mode 100644 src/styles/templates/editorial/ny-editor.ts create mode 100644 src/styles/templates/editorial/rococo-romance.ts create mode 100644 src/styles/templates/editorial/victorian-ornate.ts create mode 100644 src/styles/templates/industrial/automotive-bold.ts create mode 100644 src/styles/templates/industrial/construction-industrial.ts create mode 100644 src/styles/templates/industrial/electric-vehicle.ts create mode 100644 src/styles/templates/industrial/index.ts create mode 100644 src/styles/templates/industrial/industrial-safety.ts create mode 100644 src/styles/templates/industrial/logistics-freight.ts create mode 100644 src/styles/templates/industrial/night-vision.ts create mode 100644 src/styles/templates/industrial/tactical-military.ts create mode 100644 src/styles/templates/lifestyle/aviation-classic.ts create mode 100644 src/styles/templates/lifestyle/bistro-chalkboard.ts create mode 100644 src/styles/templates/lifestyle/fine-dining-menu.ts create mode 100644 src/styles/templates/lifestyle/fire-station.ts create mode 100644 src/styles/templates/lifestyle/food-recipe.ts create mode 100644 src/styles/templates/lifestyle/german-autobahn.ts create mode 100644 src/styles/templates/lifestyle/hotel-hospitality.ts create mode 100644 src/styles/templates/lifestyle/index.ts create mode 100644 src/styles/templates/lifestyle/parisian-chic.ts create mode 100644 src/styles/templates/lifestyle/real-estate-premium.ts create mode 100644 src/styles/templates/lifestyle/recipe-card.ts create mode 100644 src/styles/templates/lifestyle/retro-diner-50s.ts create mode 100644 src/styles/templates/lifestyle/spa-wellness.ts create mode 100644 src/styles/templates/lifestyle/sticky-note.ts create mode 100644 src/styles/templates/lifestyle/supermarket-receipt.ts create mode 100644 src/styles/templates/lifestyle/surf-shop.ts create mode 100644 src/styles/templates/lifestyle/travel-adventure.ts create mode 100644 src/styles/templates/lifestyle/wedding-elegant.ts create mode 100644 src/styles/templates/lifestyle/winter-holiday.ts create mode 100644 src/styles/templates/minimalist/architecture-firm.ts create mode 100644 src/styles/templates/minimalist/bauhaus-construction.ts create mode 100644 src/styles/templates/minimalist/de-stijl.ts create mode 100644 src/styles/templates/minimalist/hipster-coffee.ts create mode 100644 src/styles/templates/minimalist/index.ts create mode 100644 src/styles/templates/minimalist/japanese-zen.ts create mode 100644 src/styles/templates/minimalist/minimalist-black.ts create mode 100644 src/styles/templates/minimalist/minimalist-white.ts create mode 100644 src/styles/templates/minimalist/museum-gallery.ts create mode 100644 src/styles/templates/minimalist/muted-pastel.ts create mode 100644 src/styles/templates/minimalist/scandinavian-clean.ts create mode 100644 src/styles/templates/minimalist/swiss-grid.ts create mode 100644 src/styles/templates/minimalist/wireframe-layout.ts create mode 100644 src/styles/templates/minimalist/zen-garden.ts create mode 100644 src/styles/templates/tech/8-bit-arcade.ts create mode 100644 src/styles/templates/tech/aerospace-modern.ts create mode 100644 src/styles/templates/tech/artificial-intelligence.ts create mode 100644 src/styles/templates/tech/astronomy-space.ts create mode 100644 src/styles/templates/tech/biohazard-lab.ts create mode 100644 src/styles/templates/tech/biopunk-lab.ts create mode 100644 src/styles/templates/tech/blockchain-protocol.ts create mode 100644 src/styles/templates/tech/bsod-blue.ts create mode 100644 src/styles/templates/tech/circuit-board.ts create mode 100644 src/styles/templates/tech/code-editor.ts create mode 100644 src/styles/templates/tech/crypto-futurism.ts create mode 100644 src/styles/templates/tech/cybersecurity.ts create mode 100644 src/styles/templates/tech/data-analytics.ts create mode 100644 src/styles/templates/tech/deep-sea-sub.ts create mode 100644 src/styles/templates/tech/desert-sands.ts create mode 100644 src/styles/templates/tech/frutiger-aero.ts create mode 100644 src/styles/templates/tech/game-handheld.ts create mode 100644 src/styles/templates/tech/hologram-blue.ts create mode 100644 src/styles/templates/tech/index.ts create mode 100644 src/styles/templates/tech/industrial-blueprint.ts create mode 100644 src/styles/templates/tech/marine-biology.ts create mode 100644 src/styles/templates/tech/mars-rover.ts create mode 100644 src/styles/templates/tech/national-park-signage.ts create mode 100644 src/styles/templates/tech/neon-noir.ts create mode 100644 src/styles/templates/tech/schematic-diagram.ts create mode 100644 src/styles/templates/tech/smart-home-tech.ts create mode 100644 src/styles/templates/tech/solarpunk.ts create mode 100644 src/styles/templates/tech/startup-saas.ts create mode 100644 src/styles/templates/tech/tech-documentation.ts create mode 100644 src/styles/templates/tech/tech-startup.ts create mode 100644 src/styles/templates/tech/volcanic-ash.ts create mode 100644 src/styles/templates/vintage/amber-monitor.ts create mode 100644 src/styles/templates/vintage/ancient-papyrus.ts create mode 100644 src/styles/templates/vintage/art-deco-glamour.ts create mode 100644 src/styles/templates/vintage/atomic-age-1950s.ts create mode 100644 src/styles/templates/vintage/atompunk-50s.ts create mode 100644 src/styles/templates/vintage/gold-rush-ledger.ts create mode 100644 src/styles/templates/vintage/index.ts create mode 100644 src/styles/templates/vintage/label-maker-emboss.ts create mode 100644 src/styles/templates/vintage/library-archive.ts create mode 100644 src/styles/templates/vintage/medieval-illuminated.ts create mode 100644 src/styles/templates/vintage/memphis-pattern.ts create mode 100644 src/styles/templates/vintage/mid-century-modern.ts create mode 100644 src/styles/templates/vintage/noir-detective.ts create mode 100644 src/styles/templates/vintage/old-telegram.ts create mode 100644 src/styles/templates/vintage/psychedelic-60s.ts create mode 100644 src/styles/templates/vintage/raygun-gothic.ts create mode 100644 src/styles/templates/vintage/retro-80s.ts create mode 100644 src/styles/templates/vintage/retro-diner.ts create mode 100644 src/styles/templates/vintage/soviet-constructivism.ts create mode 100644 src/styles/templates/vintage/speakeasy-prohibition.ts create mode 100644 src/styles/templates/vintage/victorian-ornate.ts create mode 100644 src/styles/templates/vintage/vintage-apothecary.ts create mode 100644 src/styles/templates/vintage/vintage-radio.ts create mode 100644 src/styles/templates/vintage/vintage-typewriter.ts create mode 100644 src/styles/templates/vintage/wanted-poster.ts delete mode 100644 src/styles/vintage.ts delete mode 100644 src/styles/volume1.ts delete mode 100644 src/styles/volume2.ts create mode 100644 src/utils/docxConverter.ts create mode 100644 src/utils/fontUtils.ts create mode 100644 surgery_templates.cjs create mode 100644 surgery_templates_final.cjs create mode 100644 surgery_templates_final_v2.cjs create mode 100644 tailwind.config.js create mode 100644 validate_json.ps1 create mode 100644 validate_templates.cjs diff --git a/README.md b/README.md index e7787b9..a3721d1 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ In a world where document formatting tools are increasingly locked behind paywal
-| ๐ŸŒŸ **Free Forever** | ๐Ÿ”’ **Privacy First** | ๐ŸŽจ **40+ Styles** | ๐Ÿค **Open Source** | +| ๐ŸŒŸ **Free Forever** | ๐Ÿ”’ **Privacy First** | ๐ŸŽจ **150+ Styles** | ๐Ÿค **Open Source** | |:---:|:---:|:---:|:---:| | No fees, no trials, no catches | All processing happens locally on your machine | From minimalist to ornate, academic to artistic | MIT licensed โ€” use it, fork it, improve it together | @@ -78,7 +78,7 @@ In a world where document formatting tools are increasingly locked behind paywal ### ๐ŸŽฏ Core Capabilities - **๐Ÿ“„ Universal Markdown Support** โ€” Drop in any `.md`, `.txt`, or `.markdown` file -- **๐ŸŽจ 40+ Typography Styles** โ€” Curated across 8 aesthetic categories +- **๐ŸŽจ 150+ Typography Styles** โ€” Curated across 8 aesthetic categories - **๐Ÿ“ Multiple Paper Sizes** โ€” A4 and Letter formats supported - **๐Ÿ’พ Local Processing** โ€” Your documents never leave your machine - **๐Ÿ–ฅ๏ธ Native Desktop Apps** โ€” Built with Tauri for Windows, macOS, and Linux @@ -86,7 +86,7 @@ In a world where document formatting tools are increasingly locked behind paywal ### ๐Ÿ›๏ธ Style Categories -Each style is a labor of love, crafted with attention to typographic detail: +Each of the 163+ styles is a labor of love, crafted with attention to typographic detail: | Category | Description | Example Styles | |----------|-------------|----------------| @@ -310,35 +310,58 @@ Want to contribute a new style to the collective? Here's how: 1. **Choose a Category** โ€” Find the appropriate file in `/styles/` 2. **Define Your Style** โ€” Create a complete `StyleOption` object: -```typescript +```json { - id: 'my-custom-style', - name: 'My Style', - category: 'Creative', - description: 'A brief description of the aesthetic', - vibe: 'Keywords that capture the feeling', - googleFontsImport: 'https://fonts.googleapis.com/css2?family=YourFont&display=swap', - wordConfig: { - heading1: { - font: 'Your Font', - size: 24, - color: '1a1a1a', - bold: true, - // ... more properties + "id": "my-custom-style", + "name": "My Style", + "category": "Creative", + "description": "A brief description of the aesthetic", + "vibe": "Keywords that capture the feeling", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=YourFont&display=swap", + "typography": { + "fonts": { + "heading": "Your Font", + "body": "Your Body Font", + "code": "Your Code Font" }, - heading2: { /* ... */ }, - body: { /* ... */ }, - accentColor: '6366f1' + "colors": { + "text": "1a1a1a", + "textSecondary": "4a4a4a", + "background": "ffffff", + "accent": "6366f1", + "border": "e5e5e5", + "codeBg": "f3f4f6", + "blockquoteBg": "f9fafb", + "blockquoteBorder": "6366f1" + } }, - previewCss: ` - h1 { font-family: 'Your Font'; font-size: 24pt; } - /* ... match wordConfig exactly */ - ` + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "spacing": { "before": 24, "after": 12, "line": 1.2 } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { "before": 0, "after": 10, "line": 1.5 } + } + // ... define other elements (h2-h6, blockquote, code, etc.) + }, + "page": { + "margins": { "top": 72, "bottom": 72, "left": 72, "right": 72 }, + "columns": 1, + "header": true, + "footer": true + } } ``` -3. **Export It** โ€” Add to the category's export array -4. **Test Both Paths** โ€” Verify preview looks right AND Word export works +3. **Save It** โ€” Save as a `.json` file in `src-tauri/templates//` +4. **Build** โ€” The app automatically loads JSON templates at runtime 5. **Share With All** โ€” Submit a PR so everyone benefits! ### Configuration Options diff --git a/audit-templates.ps1 b/audit-templates.ps1 new file mode 100644 index 0000000..b193565 --- /dev/null +++ b/audit-templates.ps1 @@ -0,0 +1,94 @@ +# Template Audit Script +# Analyzes all templates against research-paper.json reference + +$reference = Get-Content "src-tauri\templates\academic\research-paper.json" | ConvertFrom-Json +$templateFiles = Get-ChildItem -Path "src-tauri\templates" -Recurse -Filter "*.json" + +$requiredElements = @('h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote', 'code', 'pre', + 'ul', 'ol', 'li', 'strong', 'em', 'a', 'table', 'th', 'td', + 'hr', 'img', 'del', 'sup', 'sub', 'mark', 'footnote', 'footnoteRef') + +$requiredColors = @('text', 'textSecondary', 'background', 'accent', 'border', 'codeBg', 'blockquoteBorder') +$requiredFonts = @('heading', 'body', 'code') + +Write-Host "`n=== TEMPLATE AUDIT REPORT ===" -ForegroundColor Cyan +Write-Host "Reference: research-paper.json with $($requiredElements.Count) elements`n" -ForegroundColor Green + +$issues = @() + +foreach ($file in $templateFiles) { + try { + $template = Get-Content $file.FullName | ConvertFrom-Json + $templateName = "$($template.category)/$($template.id)" + + # Check elements + $missingElements = @() + $elementKeys = if ($template.elements) { $template.elements.PSObject.Properties.Name | Where-Object { $_ -notlike "_comment*" } } else { @() } + + foreach ($element in $requiredElements) { + if ($element -notin $elementKeys) { + $missingElements += $element + } + } + + # Check colors + $missingColors = @() + $colorKeys = if ($template.typography.colors) { $template.typography.colors.PSObject.Properties.Name | Where-Object { $_ -notlike "_comment*" } } else { @() } + + foreach ($color in $requiredColors) { + if ($color -notin $colorKeys) { + $missingColors += $color + } + } + + # Check fonts + $missingFonts = @() + $fontKeys = if ($template.typography.fonts) { $template.typography.fonts.PSObject.Properties.Name | Where-Object { $_ -notlike "_comment*" } } else { @() } + + foreach ($font in $requiredFonts) { + if ($font -notin $fontKeys) { + $missingFonts += $font + } + } + + # Report issues + if ($missingElements.Count -gt 0 -or $missingColors.Count -gt 0 -or $missingFonts.Count -gt 0) { + $issue = [PSCustomObject]@{ + Template = $templateName + MissingElements = $missingElements.Count + MissingColors = $missingColors.Count + MissingFonts = $missingFonts.Count + ElementsList = ($missingElements -join ', ') + ColorsList = ($missingColors -join ', ') + FontsList = ($missingFonts -join ', ') + } + $issues += $issue + + Write-Host "โŒ $templateName" -ForegroundColor Red + if ($missingElements.Count -gt 0) { + Write-Host " Missing $($missingElements.Count) elements: $($missingElements -join ', ')" -ForegroundColor Yellow + } + if ($missingColors.Count -gt 0) { + Write-Host " Missing $($missingColors.Count) colors: $($missingColors -join ', ')" -ForegroundColor Yellow + } + if ($missingFonts.Count -gt 0) { + Write-Host " Missing $($missingFonts.Count) fonts: $($missingFonts -join ', ')" -ForegroundColor Yellow + } + } else { + Write-Host "โœ… $templateName" -ForegroundColor Green + } + + } catch { + Write-Host "โŒ Error parsing $($file.Name): $_" -ForegroundColor Red + } +} + +Write-Host "`n=== SUMMARY ===" -ForegroundColor Cyan +Write-Host "Total templates: $($templateFiles.Count)" -ForegroundColor White +Write-Host "Templates with issues: $($issues.Count)" -ForegroundColor Yellow +Write-Host "Templates complete: $($templateFiles.Count - $issues.Count)" -ForegroundColor Green + +if ($issues.Count -gt 0) { + Write-Host "`nTemplates needing fixes:" -ForegroundColor Yellow + $issues | Format-Table Template, MissingElements, MissingColors, MissingFonts -AutoSize +} diff --git a/cleanup_templates.cjs b/cleanup_templates.cjs new file mode 100644 index 0000000..34f133d --- /dev/null +++ b/cleanup_templates.cjs @@ -0,0 +1,61 @@ +const fs = require('fs'); +const path = require('path'); + +const rootDir = 'd:\\gdfhbfgdbnbdfbdf\\typogenie\\src-tauri\\templates'; + +function walk(dir) { + const files = fs.readdirSync(dir, { withFileTypes: true }); + files.forEach(dirent => { + const fullPath = path.join(dir, dirent.name); + if (dirent.isDirectory()) { + walk(fullPath); + } else if (dirent.name.endsWith('.json')) { + let content = fs.readFileSync(fullPath, 'utf8'); + let changed = false; + + // 1. Fix orphaned sides: "bottom": { ... } -> "borderBottom": { ... } + // Only if it looks like a border object (color, width, style) + const sides = ['top', 'bottom', 'left', 'right']; + sides.forEach(side => { + const capitalizedSide = side.charAt(0).toUpperCase() + side.slice(1); + // Look for "side": { ... } that isn't already "borderSide" + // and has border-like properties + const orphanRegex = new RegExp(`(? "borderSide": { ... } + // We repeat this several times to catch cases where multiple borders were nested + let braceChanged = true; + while (braceChanged) { + braceChanged = false; + const trailingBraceRegex = /("border(?:Top|Bottom|Left|Right)":\s*{[^}]*})\s*}/g; + if (trailingBraceRegex.test(content)) { + content = content.replace(trailingBraceRegex, '$1'); + braceChanged = true; + changed = true; + } + } + + if (changed) { + // Try to validate + try { + JSON.parse(content); + } catch (e) { + // If still broken, let's try a last ditch effort to remove any double closing braces in elements + // that follow a border side and a comma or newline + content = content.replace(/("border(?:Top|Bottom|Left|Right)":\s*{[^}]*})\s*},\s*}/g, '$1\n },'); + try { JSON.parse(content); } catch (e2) { } + } + fs.writeFileSync(fullPath, content, { encoding: 'utf8' }); + console.log(`Deep Cleaned: ${fullPath}`); + } + } + }); +} + +walk(rootDir); +console.log('Finished deep template cleanup.'); diff --git a/debug_output.txt b/debug_output.txt new file mode 100644 index 0000000000000000000000000000000000000000..71d2b3315c5f925a2695bff074fef893f656b8ea GIT binary patch literal 8254 zcmd6syK*Z<5QZnFigzG{V0i#y5{iI;5EJOK(($owXC+xaJUsA!)7nDno!(ipEthS1 zxBLHl`Zhh|fBybGt~*~>Mp9|kOV_LBJ< zd2k`jHpDK;dc>t{A~wXH_3d)p+Vr8PygR110Dp?6XIm+k%ztO$cgme6$9)-a#PS|_ zE!#WU+UWOVoE8CcEboz9#r&Ev@jDT0R1IV`8NZhOUjvRQnnSj|aII1fV#PyUj>A4= zi8Va>=AMzS@;D957EdE|AEEL( z#xy)SUb)<}l}}U$Tqiw0Uu*a?EkO&PC4Eiah&yK85egDVn0ROv!1lJb&d@c z3C}smuacxkBa`Sv)F3rm_tTh$M?dH4J17cN0`+J6#3isemM5Fg4M$DW zv)!_XEUP-LqLaU@50!H%mN(@2?UAco^R3&p@DzD*RgN?{*VskR%9CTd1u-1g@ty^5 zBX3^Sjiao1mhlMm^7m{f8Aer+Z?+$9Wqq5Ul;bo_*E7=Zw(`MEEObd`FY>yRXJF=Y znQw}wXZtMQFx%~fO2_=j6BivC#xl>ij%PTDVJUn%85K%)A9A##h>U4?bUGBa<0JN8 z{@OozjS9YGneuA>55kb08MhNY8N61!nCff}jM!q0Av&=J504!36hk(=-`5Ls#8THB zvJs~~>+l+Wjqppd9+7PQ5Kfc(bTrF(DUb3l6mp*^_EQ5sDO(mv8|qv;qveFvHm97& z^8@EEo5I)`TIGUeTzUO=UMtCazgkazWVZTmb4Mor$1 zkKDe7kzM80*R_YNOtdifbMsOb?DQ3_Et2=h)W=q<;B16PY!cy|5p}jPjWKjQL?>YN zbnCL^kLX^*qcg8ENA}s&$o|cJ(s|8mDs$BJhD=9UPxohsVJF~ZX**iP5o<)~$E@gv%GU7sxp7lW~g0My3qzBF8xE+Mbo0Hafx=t&Z+SKcx$E{}WGVH7(Dw5~g))o1qV4xMi;K zJBPa7kjZ+p`Kmv)O*{D_O*i{n+(@+_PIIal`gblk>} zhkxk_-YjQDO>4-~pFX$+AnQ(ATZCPb^@v!>2OGF&wTAqc79feQ6aBE^!LEq%0&Iurz?WSm!*q*D69`jg{ filename + +function scanDir(dir) { + if (!fs.existsSync(dir)) { + console.log(`Directory not found: ${dir}`); + return; + } + console.log(`Scanning: ${dir}`); + const files = fs.readdirSync(dir, { withFileTypes: true }); + + files.forEach(dirent => { + const fullPath = path.join(dir, dirent.name); + if (dirent.isDirectory()) { + scanDir(fullPath); + } else if (dirent.name.endsWith('.json')) { + try { + const content = fs.readFileSync(fullPath, 'utf8'); + const json = JSON.parse(content); + // Handle array or object + const template = Array.isArray(json) ? json[0] : json; + + if (template.id) { + if (ids.has(template.id)) { + console.error(`[DUPLICATE ID] ${template.id} found in ${dirent.name} AND ${ids.get(template.id)}`); + } else { + ids.set(template.id, dirent.name); + console.log(`[OK] ${dirent.name} (ID: ${template.id})`); + } + } else { + console.error(`[MISSING ID] ${dirent.name}`); + } + } catch (e) { + console.error(`[FAIL] ${dirent.name}: ${e.message}`); + } + } + }); +} + +// Only scan one directory (debug) to check for uniqueness within the app load +scanDir('d:\\gdfhbfgdbnbdfbdf\\typogenie\\src-tauri\\target\\debug\\templates'); diff --git a/fix-academic-templates.ps1 b/fix-academic-templates.ps1 new file mode 100644 index 0000000..2774dbc --- /dev/null +++ b/fix-academic-templates.ps1 @@ -0,0 +1,111 @@ +# Script to add missing advanced elements to all Academic templates +# Adds: del, sup, sub, mark, footnote, footnoteRef + +$academicTemplates = @( + "academic\academic-journal.json", + "academic\arctic-base.json", + "academic\botanical-textbook.json", + "academic\chemistry-lab.json", + "academic\dark-academia.json", + "academic\education-friendly.json", + "academic\emergency-room.json", + "academic\furniture-manual.json", + "academic\history-textbook.json", + "academic\kids-education.json", + "academic\mathematics-paper.json", + "academic\medical-professional.json", + "academic\phd-thesis.json", + "academic\scantron-test.json", + "academic\scientific-journal.json", + "academic\weather-radar.json" +) + +$advancedElements = @{ + "del" = @{ + "_comment_del" = "~~strikethrough~~ - deleted text" + "del" = @{ + "font" = "body" + "strikethrough" = $true + } + } + "sup" = @{ + "_comment_sup" = "^superscript^ - superscript text" + "sup" = @{ + "font" = "body" + "size" = 8 + "superScript" = $true + } + } + "sub" = @{ + "_comment_sub" = "~subscript~ - subscript text" + "sub" = @{ + "font" = "body" + "size" = 8 + "subScript" = $true + } + } + "mark" = @{ + "_comment_mark" = "==highlighted text== - marked/highlighted text" + "mark" = @{ + "font" = "body" + "background" = "accent" + "color" = "FFFFFF" + } + } + "footnote" = @{ + "_comment_footnote" = "[^1] - footnote references" + "footnote" = @{ + "font" = "body" + "size" = 9 + "color" = "textSecondary" + "superScript" = $true + } + } + "footnoteRef" = @{ + "_comment_footnote_ref" = "Footnote content at bottom of page" + "footnoteRef" = @{ + "font" = "body" + "size" = 9 + "color" = "textSecondary" + "spacing" = @{ + "before" = 6 + "after" = 6 + "line" = 1.2 + } + } + } +} + +foreach ($templatePath in $academicTemplates) { + $fullPath = "src-tauri\templates\$templatePath" + + try { + $content = Get-Content $fullPath -Raw | ConvertFrom-Json + + # Add missing elements + $modified = $false + foreach ($elementName in @('del', 'sup', 'sub', 'mark', 'footnote', 'footnoteRef')) { + if (-not $content.elements.PSObject.Properties.Name.Contains($elementName)) { + $elementData = $advancedElements[$elementName] + foreach ($prop in $elementData.Keys) { + $content.elements | Add-Member -MemberType NoteProperty -Name $prop -Value $elementData[$prop] -Force + } + $modified = $true + } + } + + if ($modified) { + # Write back with proper formatting + $json = $content | ConvertTo-Json -Depth 10 + [System.IO.File]::WriteAllLines($fullPath, $json) + Write-Host "โœ… Updated: $templatePath" -ForegroundColor Green + } else { + Write-Host "โญ๏ธ Skipped: $templatePath (already complete)" -ForegroundColor Yellow + } + + } catch { + Write-Host "โŒ Error updating $templatePath`: $_" -ForegroundColor Red + } +} + +Write-Host "`nโœ… Academic templates update complete!" -ForegroundColor Green diff --git a/fix_bom.cjs b/fix_bom.cjs new file mode 100644 index 0000000..0f94512 --- /dev/null +++ b/fix_bom.cjs @@ -0,0 +1,28 @@ +const fs = require('fs'); +const path = require('path'); + +const rootDir = 'd:\\gdfhbfgdbnbdfbdf\\typogenie\\src-tauri\\templates'; + +function walk(dir) { + const files = fs.readdirSync(dir, { withFileTypes: true }); + files.forEach(dirent => { + const fullPath = path.join(dir, dirent.name); + if (dirent.isDirectory()) { + walk(fullPath); + } else if (dirent.name.endsWith('.json')) { + let content = fs.readFileSync(fullPath, 'utf8'); + // Remove BOM + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + console.log(`Cleaned BOM: ${fullPath}`); + } + // Trim whitespace + content = content.trim(); + fs.writeFileSync(fullPath, content, { encoding: 'utf8' }); + } + }); +} + +walk(rootDir); +console.log('Finished cleaning BOMs and trimming JSON files.'); + diff --git a/fix_templates.cjs b/fix_templates.cjs new file mode 100644 index 0000000..a1c521f --- /dev/null +++ b/fix_templates.cjs @@ -0,0 +1,50 @@ +const fs = require('fs'); +const path = require('path'); + +const rootDir = 'd:\\gdfhbfgdbnbdfbdf\\typogenie\\src-tauri\\templates'; + +function walk(dir) { + const files = fs.readdirSync(dir, { withFileTypes: true }); + files.forEach(dirent => { + const fullPath = path.join(dir, dirent.name); + if (dirent.isDirectory()) { + walk(fullPath); + } else if (dirent.name.endsWith('.json')) { + let content = fs.readFileSync(fullPath, 'utf8'); + let changed = false; + + // Fix invalid "white" color + if (content.includes('"color": "white"')) { + content = content.replace(/"color": "white"/g, '"color": "background"'); + changed = true; + } + if (content.includes('"background": "white"')) { + content = content.replace(/"background": "white"/g, '"background": "background"'); + changed = true; + } + + // Fix border alignment from nested "border": { "bottom": ... } to "borderBottom": ... + // This is a bit tricky with regex but let's try a simple one for the common cases + const borderSides = ['top', 'bottom', 'left', 'right']; + borderSides.forEach(side => { + const searchStr = new RegExp(`"border":\\s*{\\s*"${side}":\\s*{([^}]*)}`, 'g'); + // Capture the content inside the side object + if (searchStr.test(content)) { + content = content.replace(searchStr, (match, p1) => { + const capitalizedSide = side.charAt(0).toUpperCase() + side.slice(1); + return `"border${capitalizedSide}": {${p1}}`; + }); + changed = true; + } + }); + + if (changed) { + fs.writeFileSync(fullPath, content, { encoding: 'utf8' }); + console.log(`Updated: ${fullPath}`); + } + } + }); +} + +walk(rootDir); +console.log('Finished mass-correction of templates.'); diff --git a/index.html b/index.html index 89d69fa..3fc4cac 100644 --- a/index.html +++ b/index.html @@ -4,16 +4,17 @@ TypoGenie - diff --git a/package-lock.json b/package-lock.json index 8fedf7a..fe0f06b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,21 +11,43 @@ "@tauri-apps/api": "^2.0.0", "@tauri-apps/plugin-dialog": "^2.0.0", "@tauri-apps/plugin-fs": "^2.0.0", + "@tauri-apps/plugin-http": "^2.5.6", + "@tauri-apps/plugin-opener": "^2.2.6", + "@tauri-apps/plugin-shell": "^2.3.4", "@tauri-apps/plugin-store": "^2.4.2", + "@tauri-apps/plugin-window-state": "^2.4.1", "docx": "^8.5.0", "lucide-react": "^0.563.0", "marked": "12.0.0", + "motion": "^12.29.2", "react": "^19.2.4", "react-dom": "^19.2.4" }, "devDependencies": { + "@tailwindcss/postcss": "^4.1.18", "@tauri-apps/cli": "^2.9.6", "@types/node": "^22.14.0", "@vitejs/plugin-react": "^5.0.0", + "autoprefixer": "^10.4.23", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.18", "typescript": "~5.8.2", "vite": "^6.2.0" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@babel/code-frame": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", @@ -1157,6 +1179,277 @@ "win32" ] }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.18.tgz", + "integrity": "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "postcss": "^8.4.41", + "tailwindcss": "4.1.18" + } + }, "node_modules/@tauri-apps/api": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.9.1.tgz", @@ -1402,6 +1695,33 @@ "@tauri-apps/api": "^2.8.0" } }, + "node_modules/@tauri-apps/plugin-http": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-http/-/plugin-http-2.5.6.tgz", + "integrity": "sha512-KhCK3TDNDF4vdz75/j+KNQipYKf+295Visa8r32QcXScg0+D3JwShcCM6D+FN8WuDF24X3KSiAB8QtRxW6jKRA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-opener": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-opener/-/plugin-opener-2.5.3.tgz", + "integrity": "sha512-CCcUltXMOfUEArbf3db3kCE7Ggy1ExBEBl51Ko2ODJ6GDYHRp1nSNlQm5uNCFY5k7/ufaK5Ib3Du/Zir19IYQQ==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, + "node_modules/@tauri-apps/plugin-shell": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.3.4.tgz", + "integrity": "sha512-ktsRWf8wHLD17aZEyqE8c5x98eNAuTizR1FSX475zQ4TxaiJnhwksLygQz+AGwckJL5bfEP13nWrlTNQJUpKpA==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, "node_modules/@tauri-apps/plugin-store": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-store/-/plugin-store-2.4.2.tgz", @@ -1411,6 +1731,15 @@ "@tauri-apps/api": "^2.8.0" } }, + "node_modules/@tauri-apps/plugin-window-state": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-window-state/-/plugin-window-state-2.4.1.tgz", + "integrity": "sha512-OuvdrzyY8Q5Dbzpj+GcrnV1iCeoZbcFdzMjanZMMcAEUNy/6PH5pxZPXpaZLOR7whlzXiuzx0L9EKZbH7zpdRw==", + "license": "MIT OR Apache-2.0", + "dependencies": { + "@tauri-apps/api": "^2.8.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1494,6 +1823,43 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/baseline-browser-mapping": { "version": "2.9.19", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", @@ -1590,6 +1956,16 @@ } } }, + "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/docx": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/docx/-/docx-8.5.0.tgz", @@ -1622,6 +1998,20 @@ "dev": true, "license": "ISC" }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/esbuild": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", @@ -1692,6 +2082,47 @@ } } }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.29.2.tgz", + "integrity": "sha512-lSNRzBJk4wuIy0emYQ/nfZ7eWhqud2umPKw2QAQki6uKhZPKm2hRQHeQoHTG9MIvfobb+A/LbEWPJU794ZUKrg==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.29.2", + "motion-utils": "^12.29.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1717,6 +2148,13 @@ "node": ">=6.9.0" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -1735,6 +2173,16 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1789,6 +2237,267 @@ "immediate": "~3.0.5" } }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "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.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "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-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "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-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "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-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "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-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "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/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -1808,6 +2517,16 @@ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/marked": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.0.tgz", @@ -1820,6 +2539,47 @@ "node": ">= 18" } }, + "node_modules/motion": { + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.29.2.tgz", + "integrity": "sha512-jMpHdAzEDF1QQ055cB+1lOBLdJ6ialVWl6QQzpJI2OvmHequ7zFVHM2mx0HNAy+Tu4omUlApfC+4vnkX0geEOg==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.29.2", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.29.2.tgz", + "integrity": "sha512-/k+NuycVV8pykxyiTCoFzIVLA95Nb1BFIVvfSu9L50/6K6qNeAYtkxXILy/LRutt7AzaYDc2myj0wkCVVYAPPA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.29.2" + } + }, + "node_modules/motion-utils": { + "version": "12.29.2", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", + "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -1907,6 +2667,13 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/postcss/node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -2079,6 +2846,27 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -2096,6 +2884,12 @@ "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==", + "license": "0BSD" + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", diff --git a/package.json b/package.json index 9d2e175..2c4098d 100644 --- a/package.json +++ b/package.json @@ -17,17 +17,26 @@ "@tauri-apps/api": "^2.0.0", "@tauri-apps/plugin-dialog": "^2.0.0", "@tauri-apps/plugin-fs": "^2.0.0", + "@tauri-apps/plugin-http": "^2.5.6", + "@tauri-apps/plugin-shell": "^2.3.4", "@tauri-apps/plugin-store": "^2.4.2", + "@tauri-apps/plugin-window-state": "^2.4.1", + "@tauri-apps/plugin-opener": "^2.2.6", "docx": "^8.5.0", "lucide-react": "^0.563.0", "marked": "12.0.0", + "motion": "^12.29.2", "react": "^19.2.4", "react-dom": "^19.2.4" }, "devDependencies": { + "@tailwindcss/postcss": "^4.1.18", "@tauri-apps/cli": "^2.9.6", "@types/node": "^22.14.0", "@vitejs/plugin-react": "^5.0.0", + "autoprefixer": "^10.4.23", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.18", "typescript": "~5.8.2", "vite": "^6.2.0" } diff --git a/port-core-templates.ps1 b/port-core-templates.ps1 new file mode 100644 index 0000000..b8bcd47 --- /dev/null +++ b/port-core-templates.ps1 @@ -0,0 +1,208 @@ +# Script to port Core templates to new JSON format +# Reconstructs all 11 core templates with full 23-element structure + +$baseTemplate = Get-Content "src-tauri\templates\core\default.json" -Raw | ConvertFrom-Json + +$coreTemplates = @( + @{ + id="circus-sideshow"; name="Circus Sideshow"; category="Entertainment"; + desc="Big top aesthetic. Ornamental fonts with red and cream stripe vibes."; vibe="Fun, Ornamental, Striped"; + fonts="https://fonts.googleapis.com/css2?family=Rye&family=Sancreek&family=Roboto+Slab&display=swap"; + heading="Sancreek"; heading2="Rye"; body="Roboto Slab"; + text="212121"; accent="D32F2F"; bg="FFF8E1"; secondary="1A237E"; + h1Size=40; h1Align="center"; h1Color="D32F2F"; + h2Size=18; h2Align="center"; h2Color="1A237E"; + bodyAlign="center" + }, + @{ + id="environmental-green"; name="Environmental Green"; category="Sustainability"; + desc="Nature-inspired design for environmental and sustainability communications. Organic feel with earthy green palette."; vibe="Natural, Sustainable, Organic"; + fonts="https://fonts.googleapis.com/css2?family=Bitter:wght@400;500;700&family=Karla:wght@400;500;700&display=swap"; + heading="Bitter"; heading2="Bitter"; body="Karla"; + text="3E4A3D"; accent="2E7D32"; bg="FFFFFF"; secondary="388E3C"; + h1Size=26; h1Align="left"; h1Color="2E7D32"; + h2Size=14; h2Align="left"; h2Color="388E3C"; + bodyAlign="left" + }, + @{ + id="highway-interstate"; name="Highway Interstate"; category="Urban"; + desc="Road signage aesthetic. Reflective white text on deep highway green backgrounds."; vibe="Functional, Travel, Signage"; + fonts="https://fonts.googleapis.com/css2?family=Overpass:wght@400;700&family=Public+Sans:wght@400;700&display=swap"; + heading="Overpass"; heading2="Public Sans"; body="Public Sans"; + text="212121"; accent="00695C"; bg="FFFFFF"; secondary="004D40"; + h1Size=36; h1Align="left"; h1Color="FFFFFF"; h1Bg="00695C"; + h2Size=18; h2Align="left"; h2Color="004D40"; + bodyAlign="left" + }, + @{ + id="jungle-explorer"; name="Jungle Explorer"; category="Adventure"; + desc="Safari expedition style. Khaki, olive drab, and canvas textures."; vibe="Adventure, Khaki, Nature"; + fonts="https://fonts.googleapis.com/css2?family=Stardos+Stencil&family=Domine:wght@400;700&display=swap"; + heading="Stardos Stencil"; heading2="Domine"; body="Domine"; + text="1B1B1B"; accent="827717"; bg="F0F4C3"; secondary="558B2F"; + h1Size=36; h1Align="left"; h1Color="33691E"; + h2Size=16; h2Align="left"; h2Color="558B2F"; + bodyAlign="left" + }, + @{ + id="public-transit"; name="Public Transit"; category="Urban"; + desc="Subway map and transit signage aesthetic. Clean, highly legible sans-serifs with color-coded lines."; vibe="Urban, Functional, Color-coded"; + fonts="https://fonts.googleapis.com/css2?family=Mukta:wght@400;700&family=Hanken+Grotesk:wght@400;700&display=swap"; + heading="Hanken Grotesk"; heading2="Mukta"; body="Mukta"; + text="212121"; accent="FFC107"; bg="FFFFFF"; secondary="000000"; + h1Size=32; h1Align="left"; h1Color="000000"; + h2Size=18; h2Align="left"; h2Color="000000"; h2Bg="EEEEEE"; + bodyAlign="left" + }, + @{ + id="silent-film-intertitle"; name="Silent Film Intertitle"; category="Cinema"; + desc="1920s cinema cards. White decorative text on black backgrounds with ornate borders."; vibe="Cinema, Vintage, Dramatic"; + fonts="https://fonts.googleapis.com/css2?family=Gye-Gye&family=Sorts+Mill+Goudy&display=swap"; + heading="Gye-Gye"; heading2="Sorts Mill Goudy"; body="Sorts Mill Goudy"; + text="000000"; accent="000000"; bg="FFFFFF"; secondary="212121"; + h1Size=32; h1Align="center"; h1Color="FFFFFF"; h1Bg="000000"; + h2Size=18; h2Align="center"; h2Color="EEEEEE"; h2Bg="212121"; + bodyAlign="center"; bodySize=14 + }, + @{ + id="sports-dynamic"; name="Sports Dynamic"; category="Sports"; + desc="Energetic and bold design for sports and athletic content. Dynamic typography with high-impact colors."; vibe="Energetic, Bold, Athletic"; + fonts="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Rubik:wght@400;500;700&display=swap"; + heading="Bebas Neue"; heading2="Rubik"; body="Rubik"; + text="333333"; accent="D32F2F"; bg="FFFFFF"; secondary="1A1A1A"; + h1Size=36; h1Align="left"; h1Color="D32F2F"; + h2Size=14; h2Align="left"; h2Color="1A1A1A"; + bodyAlign="left" + }, + @{ + id="steampunk-inventor"; name="Steampunk Inventor"; category="Fantasy"; + desc="Brass and gear aesthetic. Victorian fonts with industrial metallic colors."; vibe="Mechanical, Brass, Victorian"; + fonts="https://fonts.googleapis.com/css2?family=Rye&family=Lora:wght@400;700&display=swap"; + heading="Rye"; heading2="Lora"; body="Lora"; + text="3E2723"; accent="B8860B"; bg="EFEBE9"; secondary="8D6E63"; + h1Size=30; h1Align="left"; h1Color="5D4037"; + h2Size=16; h2Align="left"; h2Color="8D6E63"; + bodyAlign="left" + }, + @{ + id="subway-tile"; name="Subway Tile"; category="Urban"; + desc="Classic station ceramics. Clean white backgrounds, heavy black text, and tile-like framing."; vibe="Clean, Ceramic, Urban"; + fonts="https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;600&family=Lexend:wght@400;700&display=swap"; + heading="Lexend"; heading2="Work Sans"; body="Work Sans"; + text="424242"; accent="000000"; bg="FFFFFF"; secondary="212121"; + h1Size=36; h1Align="center"; h1Color="000000"; + h2Size=16; h2Align="left"; h2Color="212121"; + bodyAlign="left" + }, + @{ + id="taxi-cab"; name="Taxi Cab"; category="Urban"; + desc="Yellow cab aesthetic. Checkerboard patterns (simulated) and bold black on yellow."; vibe="Urban, Yellow, Bold"; + fonts="https://fonts.googleapis.com/css2?family=Archivo+Black&family=Roboto:wght@400;700&display=swap"; + heading="Archivo Black"; heading2="Roboto"; body="Roboto"; + text="212121"; accent="FFEB3B"; bg="212121"; secondary="000000"; + h1Size=36; h1Align="center"; h1Color="000000"; h1Bg="FFEB3B"; + h2Size=18; h2Align="center"; h2Color="000000"; h2Bg="FFFFFF"; + bodyAlign="left"; bodyColor="FFFFFF"; bodySize=12 + }, + @{ + id="varsity-team"; name="Varsity Team"; category="Sport"; + desc="College sports jersey style. Block lettering with athletic gold and navy."; vibe="Athletic, College, Bold"; + fonts="https://fonts.googleapis.com/css2?family=Graduate&family=Saira:wght@400;700&display=swap"; + heading="Graduate"; heading2="Saira"; body="Saira"; + text="212121"; accent="FDD835"; bg="FFFFFF"; secondary="1A237E"; + h1Size=36; h1Align="center"; h1Color="FDD835"; h1Bg="1A237E"; + h2Size=20; h2Align="center"; h2Color="1A237E"; + bodyAlign="center"; bodySize=12 + } +) + +foreach ($t in $coreTemplates) { + $new = $baseTemplate.PSObject.Copy() + + # Metadata + $new.id = $t.id + $new.name = $t.name + $new.category = $t.category + $new.description = $t.desc + $new.vibe = $t.vibe + $new.googleFontsImport = $t.fonts + + # Typography + $new.typography.colors.text = $t.text + $new.typography.colors.accent = $t.accent + $new.typography.colors.background = $t.bg + $new.typography.colors.textSecondary = $t.secondary + $new.typography.colors.blockquoteBorder = $t.accent + + $new.typography.fonts.heading = $t.heading + $new.typography.fonts.body = $t.body + + # Elements - H1 + $new.elements.h1.font = "heading" + $new.elements.h1.size = $t.h1Size + $new.elements.h1.align = $t.h1Align + $new.elements.h1.color = if ($t.h1Color) { $t.h1Color } else { "text" } + + if ($t.h1Bg) { + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "background" -Value $t.h1Bg -Force + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "padding" -Value 16 -Force + } + + # Elements - H2 + $new.elements.h2.font = if ($t.heading2) { $t.heading2 } else { "heading" } + $new.elements.h2.size = $t.h2Size + $new.elements.h2.align = $t.h2Align + $new.elements.h2.color = if ($t.h2Color) { $t.h2Color } else { "textSecondary" } + + if ($t.h2Bg) { + $new.elements.h2 | Add-Member -MemberType NoteProperty -Name "background" -Value $t.h2Bg -Force + $new.elements.h2 | Add-Member -MemberType NoteProperty -Name "padding" -Value 8 -Force + $new.elements.h2 | Add-Member -MemberType NoteProperty -Name "display" -Value "inline-block" -Force + } + + # Elements - Body + $new.elements.p.align = $t.bodyAlign + $new.elements.p.color = if ($t.bodyColor) { $t.bodyColor } else { "text" } + if ($t.bodySize) { $new.elements.p.size = $t.bodySize } + + # Special borders + if ($t.id -eq "highway-interstate") { + $borderVal = @{ top=@{color="FFFFFF"; width=2; style="single"}; bottom=@{color="FFFFFF"; width=2; style="single"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + if ($t.id -eq "jungle-explorer") { + $borderVal = @{ bottom=@{color="827717"; width=4; style="solid"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + if ($t.id -eq "public-transit") { + $borderVal = @{ bottom=@{color="FFC107"; width=6; style="solid"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + if ($t.id -eq "silent-film-intertitle") { + $borderVal = @{ top=@{color="FFFFFF"; width=4; style="double"}; bottom=@{color="FFFFFF"; width=4; style="double"}; left=@{color="FFFFFF"; width=4; style="double"}; right=@{color="FFFFFF"; width=4; style="double"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + if ($t.id -eq "steampunk-inventor") { + $borderVal = @{ bottom=@{color="B8860B"; width=6; style="double"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + if ($t.id -eq "subway-tile") { + $borderVal = @{ top=@{color="000000"; width=4; style="solid"}; bottom=@{color="000000"; width=4; style="solid"}; left=@{color="000000"; width=4; style="solid"}; right=@{color="000000"; width=4; style="solid"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + if ($t.id -eq "taxi-cab") { + $borderVal = @{ top=@{color="000000"; width=6; style="dashed"}; bottom=@{color="000000"; width=6; style="dashed"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + if ($t.id -eq "varsity-team") { + $borderVal = @{ top=@{color="FDD835"; width=4; style="solid"}; bottom=@{color="FDD835"; width=4; style="solid"} } + $new.elements.h1 | Add-Member -MemberType NoteProperty -Name "border" -Value $borderVal -Force + } + + + # Save file + $path = "src-tauri\templates\core\$($t.id).json" + $json = $new | ConvertTo-Json -Depth 10 + [System.IO.File]::WriteAllLines($path, $json) + Write-Host "โœ… Created $path" -ForegroundColor Green +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..a7f73a2 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +} diff --git a/rebuild-templates.ps1 b/rebuild-templates.ps1 new file mode 100644 index 0000000..0942044 --- /dev/null +++ b/rebuild-templates.ps1 @@ -0,0 +1,39 @@ +# Master script to rebuild all remaining templates with modern structure +$baseTemplate = Get-Content "src-tauri\templates\core\default.json" -Raw | ConvertFrom-Json + +$templates = @( + @{path="corporate\professional.json"; id="professional"; name="Professional Business"; category="Corporate"; desc="Professional business formatting for corporate documents, reports, and proposals. Clean sans-serif typography with authoritative presence."; vibe="Corporate, Trustworthy, Polished"; fonts="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap"; heading="Open Sans"; body="Open Sans"; text="1A202C"; accent="2C5282"}, + @{path="creative\modern-portfolio.json"; id="modern-portfolio"; name="Modern Portfolio"; category="Creative"; desc="Bold, contemporary design for creative portfolios and showcases. Geometric fonts with striking visual hierarchy."; vibe="Creative, Bold, Contemporary"; fonts="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;600;700&display=swap"; heading="Space Grotesk"; body="Space Grotesk"; text="1A1A1A"; accent="E94560"}, + @{path="editorial\classic-newspaper.json"; id="classic-newspaper"; name="Classic Newspaper"; category="Editorial"; desc="Traditional newspaper-style formatting with column layout and classic serif typography."; vibe="Editorial, Timeless, Authoritative"; fonts="https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,400;0,700;1,400&display=swap"; heading="Merriweather"; body="Merriweather"; text="1A1A1A"; accent="8B0000"}, + @{path="industrial\brutalist.json"; id="brutalist"; name="Brutalist"; category="Industrial"; desc="Raw, bold, unapologetic design inspired by brutalist architecture. Monospace typography with aggressive spacing."; vibe="Bold, Raw, Unrefined"; fonts="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;700&display=swap"; heading="Roboto Mono"; body="Roboto Mono"; text="000000"; accent="FF4500"}, + @{path="lifestyle\elegant-magazine.json"; id="elegant-magazine"; name="Elegant Magazine"; category="Lifestyle"; desc="Sophisticated magazine layout with elegant serif typography and generous whitespace."; vibe="Sophisticated, Luxurious, Refined"; fonts="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;1,400&display=swap"; heading="Cormorant Garamond"; body="Cormorant Garamond"; text="2B2B2B"; accent="D4A574"}, + @{path="tech\tech-startup.json"; id="tech-startup"; name="Tech Startup"; category="Tech"; desc="Modern, clean design for tech companies and startups. Sans-serif typography with vibrant accents."; vibe="Innovative, Modern, Dynamic"; fonts="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;600;700&display=swap"; heading="Plus Jakarta Sans"; body="Plus Jakarta Sans"; text="0F172A"; accent="6366F1"}, + @{path="vintage\retro-typewriter.json"; id="retro-typewriter"; name="Retro Typewriter"; category="Vintage"; desc="Vintage typewriter aesthetic with monospace fonts and classic styling."; vibe="Nostalgic, Classic, Authentic"; fonts="https://fonts.googleapis.com/css2?family=Courier+Prime:ital,wght@0,400;0,700;1,400&display=swap"; heading="Courier Prime"; body="Courier Prime"; text="2C2C2C"; accent="5C4033"} +) + +foreach ($t in $templates) { + $new = $baseTemplate.PSObject.Copy() + + # Update metadata + $new.id = $t.id + $new.name = $t.name + $new.category = $t.category + $new.description = $t.desc + $new.vibe = $t.vibe + $new.googleFontsImport = $t.fonts + + # Update typography + $new.typography.fonts.heading = $t.heading + $new.typography.fonts.body = $t.body + $new.typography.colors.text = $t.text + $new.typography.colors.accent = $t.accent + $new.typography.colors.blockquoteBorder = $t.accent + + # Write to file + $json = $new | ConvertTo-Json -Depth 10 + $fullPath = "src-tauri\templates\$($t.path)" + [System.IO.File]::WriteAllLines($fullPath, $json) + Write-Host "โœ… Created $($t.path)" -ForegroundColor Green +} + +Write-Host "`nโœ… All templates rebuilt successfully!" -ForegroundColor Green diff --git a/remove_columns.cjs b/remove_columns.cjs new file mode 100644 index 0000000..7fe747c --- /dev/null +++ b/remove_columns.cjs @@ -0,0 +1,43 @@ +const fs = require('fs'); +const path = require('path'); + +const rootDir = 'd:\\gdfhbfgdbnbdfbdf\\typogenie\\src-tauri\\templates'; + +function walk(dir) { + const files = fs.readdirSync(dir, { withFileTypes: true }); + files.forEach(dirent => { + const fullPath = path.join(dir, dirent.name); + if (dirent.isDirectory()) { + walk(fullPath); + } else if (dirent.name.endsWith('.json')) { + let content = fs.readFileSync(fullPath, 'utf8'); + let changed = false; + + try { + const json = JSON.parse(content); + if (json.page && json.page.columns !== 1) { + json.page.columns = 1; + // Also remove gutter if it exists + if (json.page.gutter) delete json.page.gutter; + content = JSON.stringify(json, null, 4); + changed = true; + } + } catch (e) { + console.error(`Error parsing ${fullPath}: ${e.message}`); + // Fallback to regex if JSON is slightly broken (though surgery should have fixed it) + if (content.includes('"columns":')) { + content = content.replace(/"columns":\s*\d+/g, '"columns": 1'); + changed = true; + } + } + + if (changed) { + fs.writeFileSync(fullPath, content, { encoding: 'utf8' }); + console.log(`Removed columns from: ${fullPath}`); + } + } + }); +} + +walk(rootDir); +console.log('Finished removing columns from all templates.'); diff --git a/restore_fonts.ps1 b/restore_fonts.ps1 new file mode 100644 index 0000000..cd75ca0 --- /dev/null +++ b/restore_fonts.ps1 @@ -0,0 +1,60 @@ +$templatesDir = "d:\gdfhbfgdbnbdfbdf\typogenie\src-tauri\templates" +$files = Get-ChildItem -Path $templatesDir -Recurse -Filter *.json + +foreach ($file in $files) { + try { + $content = Get-Content -Path $file.FullName -Raw + + # 1. Extract Font Names using Regex + $headingFont = "Unknown" + $bodyFont = "Unknown" + $codeFont = "Unknown" + + if ($content -match '"heading":\s*"([^"]+)"') { $headingFont = $matches[1] } + if ($content -match '"body":\s*"([^"]+)"') { $bodyFont = $matches[1] } + if ($content -match '"code":\s*"([^"]+)"') { $codeFont = $matches[1] } + + if ($headingFont -eq "Unknown" -or $bodyFont -eq "Unknown") { + Write-Host "Skipping $($file.Name) - Could not parse fonts" -ForegroundColor Yellow + continue + } + + # 2. Build Google Fonts URL + # Standard weights + italics: 300, 400, 500, 600, 700 + $weights = "ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700" + + $fonts = @($headingFont, $bodyFont, $codeFont) | Select-Object -Unique + $urlParts = @() + + foreach ($font in $fonts) { + # Handle fonts that might not be Google Fonts (e.g. system fonts)? + # Assuming all current templates use Google Fonts as per design. + $encodedFont = $font -replace ' ', '+' + $urlParts += "family=$encodedFont`:$weights" + } + + $fullUrl = "https://fonts.googleapis.com/css2?" + ($urlParts -join "&") + "&display=swap" + + # 3. Repair the broken line + # Look for "googleFontsImport": "https: OR "googleFontsImport": "https:\s* + # The previous regex stripping might have left it as `"https:` (no closing quote) or `"https:""` if there was a quote after? + # Inspecting previous output: `"googleFontsImport": "https:` + + if ($content -match '"googleFontsImport":\s*"https:') { + $newLine = '"googleFontsImport": "' + $fullUrl + '",' + $newContent = $content -replace '"googleFontsImport":\s*"https:.*', $newLine + + # Double check we didn't add double commas or break structure + # The original often had a comma after. The regex `.*` eats the rest of the line. + # My replacement adds a comma. + + Set-Content -Path $file.FullName -Value $newContent -Force + Write-Host "Restored: $($file.Name)" -ForegroundColor Green + } else { + Write-Host "No repair needed or pattern not found: $($file.Name)" -ForegroundColor Gray + } + + } catch { + Write-Host "Error processing $($file.Name): $($_.Exception.Message)" -ForegroundColor Red + } +} diff --git a/scripts/convert-templates.cjs b/scripts/convert-templates.cjs new file mode 100644 index 0000000..3a16515 --- /dev/null +++ b/scripts/convert-templates.cjs @@ -0,0 +1,81 @@ +// Convert TypeScript templates to JSON format for user editing +const fs = require('fs'); +const path = require('path'); + +const sourceDir = path.join(__dirname, '../src/styles/templates'); +const outputDir = path.join(__dirname, '../src-tauri/templates'); + +// Ensure output directory exists +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + +// Get all category directories +const categories = fs.readdirSync(sourceDir, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name); + +console.log(`Found ${categories.length} categories: ${categories.join(', ')}\n`); + +for (const category of categories) { + const categorySourcePath = path.join(sourceDir, category); + const categoryOutputPath = path.join(outputDir, category); + + // Create category directory in output + if (!fs.existsSync(categoryOutputPath)) { + fs.mkdirSync(categoryOutputPath, { recursive: true }); + } + + // Get all template files in category + const templateFiles = fs.readdirSync(categorySourcePath) + .filter(file => file.endsWith('.ts') && file !== 'index.ts'); + + console.log(`Processing category "${category}" (${templateFiles.length} templates)...`); + + for (const file of templateFiles) { + const sourceFile = path.join(categorySourcePath, file); + const content = fs.readFileSync(sourceFile, 'utf8'); + + // Extract the template object using regex + const templateMatch = content.match(/export\s+const\s+\w+\s*:\s*StyleOption\s*=\s*(\{[\s\S]*?\});\s*$/); + + if (templateMatch) { + let templateObj = templateMatch[1]; + + // Convert template literals to regular strings + templateObj = templateObj.replace(/previewCss:\s*`[\s\S]*?`/, (match) => { + const css = match.replace(/previewCss:\s*`/, '').replace(/`$/, ''); + return `previewCss: ${JSON.stringify(css.trim())}`; + }); + + // Convert single quotes to double quotes for JSON + templateObj = templateObj.replace(/'/g, '"'); + + // Remove trailing commas + templateObj = templateObj.replace(/,(\s*[}\]])/g, '$1'); + + // Fix unquoted keys + templateObj = templateObj.replace(/([{,]\s*)(\w+):/g, '$1"$2":'); + + try { + const template = JSON.parse(templateObj); + + // Validate required fields + if (template.id && template.name && template.wordConfig) { + const outputFile = path.join(categoryOutputPath, `${template.id}.json`); + fs.writeFileSync(outputFile, JSON.stringify(template, null, 2)); + console.log(` โœ“ ${template.id}.json`); + } else { + console.log(` โœ— ${file} - missing required fields`); + } + } catch (error) { + console.log(` โœ— ${file} - parse error: ${error.message}`); + } + } else { + console.log(` โœ— ${file} - could not extract template`); + } + } +} + +console.log('\nDone! Templates converted to JSON format.'); +console.log(`Output directory: ${outputDir}`); diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index c9b9716..b9dc9cd 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -81,6 +81,137 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "async-signal" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "atk" version = "0.18.2" @@ -173,6 +304,19 @@ dependencies = [ "objc2", ] +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + [[package]] name = "borsh" version = "1.6.0" @@ -217,6 +361,17 @@ dependencies = [ "alloc-stdlib", ] +[[package]] +name = "bstr" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "bumpalo" version = "3.19.1" @@ -416,6 +571,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "convert_case" version = "0.4.0" @@ -428,10 +592,57 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ + "percent-encoding", "time", "version_check", ] +[[package]] +name = "cookie_store" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "cookie_store" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fc4bff745c9b4c7fb1e97b25d13153da2bc7796260141df62378998d070207f" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation" version = "0.10.1" @@ -455,7 +666,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ "bitflags 2.10.0", - "core-foundation", + "core-foundation 0.10.1", "core-graphics-types", "foreign-types", "libc", @@ -468,7 +679,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ "bitflags 2.10.0", - "core-foundation", + "core-foundation 0.10.1", "libc", ] @@ -587,6 +798,23 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "data-url" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" + +[[package]] +name = "dbus" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b3aa68d7e7abee336255bd7248ea965cc393f3e70411135a6f6a4b651345d4" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.59.0", +] + [[package]] name = "deranged" version = "0.5.5" @@ -693,6 +921,15 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "dpi" version = "0.1.2" @@ -749,6 +986,42 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", +] + [[package]] name = "env_filter" version = "0.1.4" @@ -776,6 +1049,43 @@ dependencies = [ "typeid", ] +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + [[package]] name = "fdeflate" version = "0.3.7" @@ -910,6 +1220,19 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.31" @@ -1086,8 +1409,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -1097,9 +1422,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi", "wasip2", + "wasm-bindgen", ] [[package]] @@ -1250,6 +1577,25 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "h2" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.13.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -1277,6 +1623,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + [[package]] name = "hex" version = "0.4.3" @@ -1344,6 +1696,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", + "h2", "http", "http-body", "httparse", @@ -1355,6 +1708,23 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + [[package]] name = "hyper-util" version = "0.1.19" @@ -1374,9 +1744,11 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -1569,6 +1941,25 @@ dependencies = [ "serde", ] +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "itoa" version = "1.0.17" @@ -1711,6 +2102,16 @@ version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "cc", + "pkg-config", +] + [[package]] name = "libloading" version = "0.7.4" @@ -1731,12 +2132,24 @@ dependencies = [ "libc", ] +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + [[package]] name = "litemap" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + [[package]] name = "lock_api" version = "0.4.14" @@ -1755,6 +2168,12 @@ dependencies = [ "value-bag", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "mac" version = "0.1.1" @@ -1897,6 +2316,15 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "normpath" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf23ab2b905654b4cb177e30b629937b3868311d4e1cba859f899c041046e69b" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "num-conv" version = "0.2.0" @@ -2161,12 +2589,56 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "open" +version = "5.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" +dependencies = [ + "dunce", + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "opener" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0812e5e4df08da354c851a3376fead46db31c2214f849d3de356d774d057681" +dependencies = [ + "bstr", + "dbus", + "normpath", + "windows-sys 0.59.0", +] + [[package]] name = "option-ext" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "pango" version = "0.18.3" @@ -2192,6 +2664,12 @@ dependencies = [ "system-deps", ] +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + [[package]] name = "parking_lot" version = "0.12.5" @@ -2215,6 +2693,12 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + [[package]] name = "percent-encoding" version = "2.3.2" @@ -2367,6 +2851,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + [[package]] name = "pkg-config" version = "0.3.32" @@ -2399,6 +2894,20 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + [[package]] name = "potential_utf" version = "0.1.4" @@ -2497,6 +3006,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + [[package]] name = "ptr_meta" version = "0.1.4" @@ -2517,6 +3032,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + [[package]] name = "quick-xml" version = "0.38.4" @@ -2526,6 +3051,61 @@ dependencies = [ "memchr", ] +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + [[package]] name = "quote" version = "1.0.44" @@ -2572,6 +3152,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + [[package]] name = "rand_chacha" version = "0.2.2" @@ -2592,6 +3182,16 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -2610,6 +3210,15 @@ dependencies = [ "getrandom 0.2.17", ] +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -2720,22 +3329,32 @@ checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64 0.22.1", "bytes", + "cookie", + "cookie_store 0.22.0", + "encoding_rs", "futures-core", "futures-util", + "h2", "http", "http-body", "http-body-util", "hyper", + "hyper-rustls", "hyper-util", "js-sys", "log", + "mime", "percent-encoding", "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", + "tokio-rustls", "tokio-util", "tower", "tower-http", @@ -2745,6 +3364,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", + "webpki-roots", ] [[package]] @@ -2771,6 +3391,20 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rkyv" version = "0.7.46" @@ -2816,6 +3450,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc_version" version = "0.4.1" @@ -2825,6 +3465,54 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -3118,12 +3806,54 @@ dependencies = [ "digest", ] +[[package]] +name = "shared_child" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" +dependencies = [ + "libc", + "sigchld", + "windows-sys 0.60.2", +] + [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "sigchld" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" +dependencies = [ + "libc", + "os_pipe", + "signal-hook", +] + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "simd-adler32" version = "0.3.8" @@ -3255,6 +3985,12 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "swift-rs" version = "1.0.7" @@ -3308,6 +4044,27 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "system-deps" version = "6.2.2" @@ -3329,7 +4086,7 @@ checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" dependencies = [ "bitflags 2.10.0", "block2", - "core-foundation", + "core-foundation 0.10.1", "core-graphics", "crossbeam-channel", "dispatch", @@ -3555,6 +4312,30 @@ dependencies = [ "url", ] +[[package]] +name = "tauri-plugin-http" +version = "2.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68bef611ccbfbce67c813959c11b23c1c084d201aa94222de9eba5f9edc3f897" +dependencies = [ + "bytes", + "cookie_store 0.21.1", + "data-url", + "http", + "regex", + "reqwest", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror 2.0.18", + "tokio", + "url", + "urlpattern", +] + [[package]] name = "tauri-plugin-log" version = "2.8.0" @@ -3577,6 +4358,49 @@ dependencies = [ "time", ] +[[package]] +name = "tauri-plugin-opener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc624469b06f59f5a29f874bbc61a2ed737c0f9c23ef09855a292c389c42e83f" +dependencies = [ + "dunce", + "glob", + "objc2-app-kit", + "objc2-foundation", + "open", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "url", + "windows", + "zbus", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39b76f884a3937e04b631ffdc3be506088fa979369d25147361352f2f352e5ed" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars 0.8.22", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "tokio", +] + [[package]] name = "tauri-plugin-store" version = "2.4.2" @@ -3593,6 +4417,21 @@ dependencies = [ "tracing", ] +[[package]] +name = "tauri-plugin-window-state" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73736611e14142408d15353e21e3cca2f12a3cfb523ad0ce85999b6d2ef1a704" +dependencies = [ + "bitflags 2.10.0", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", +] + [[package]] name = "tauri-runtime" version = "2.9.2" @@ -3694,6 +4533,19 @@ dependencies = [ "toml 0.9.11+spec-1.1.0", ] +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + [[package]] name = "tendril" version = "0.4.3" @@ -3829,6 +4681,16 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.18" @@ -4059,14 +4921,30 @@ name = "typogenie" version = "1.0.0" dependencies = [ "log", + "opener", "serde", "serde_json", "tauri", "tauri-build", "tauri-plugin-dialog", "tauri-plugin-fs", + "tauri-plugin-http", "tauri-plugin-log", + "tauri-plugin-opener", + "tauri-plugin-shell", "tauri-plugin-store", + "tauri-plugin-window-state", +] + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset", + "tempfile", + "winapi", ] [[package]] @@ -4122,6 +5000,12 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.8" @@ -4337,6 +5221,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webkit2gtk" version = "2.0.1" @@ -4381,6 +5275,15 @@ dependencies = [ "system-deps", ] +[[package]] +name = "webpki-roots" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12bed680863276c63889429bfd6cab3b99943659923822de1c8a39c49e4d722c" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "webview2-com" version = "0.38.2" @@ -4566,6 +5469,17 @@ dependencies = [ "windows-link 0.1.3", ] +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + [[package]] name = "windows-result" version = "0.3.4" @@ -4611,6 +5525,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.59.0" @@ -4980,6 +5903,67 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zbus" +version = "5.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfeff997a0aaa3eb20c4652baf788d2dfa6d2839a0ead0b3ff69ce2f9c4bdd1" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 0.7.14", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bbd5a90dbe8feee5b13def448427ae314ccd26a49cac47905cafefb9ff846f1" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.114", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +dependencies = [ + "serde", + "winnow 0.7.14", + "zvariant", +] + [[package]] name = "zerocopy" version = "0.8.35" @@ -5021,6 +6005,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + [[package]] name = "zerotrie" version = "0.2.3" @@ -5059,3 +6049,43 @@ name = "zmij" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02aae0f83f69aafc94776e879363e9771d7ecbffe2c7fbb6c14c5e00dfe88439" + +[[package]] +name = "zvariant" +version = "5.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b64ef4f40c7951337ddc7023dd03528a57a3ce3408ee9da5e948bd29b232c4" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 0.7.14", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "484d5d975eb7afb52cc6b929c13d3719a20ad650fea4120e6310de3fc55e415c" +dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", + "syn 2.0.114", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.114", + "winnow 0.7.14", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index c4fc40d..55c7a19 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -13,14 +13,19 @@ name = "app_lib" crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] -tauri-build = { version = "2.5.3" } +tauri-build = { version = "2.5.3", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } log = "0.4" -tauri = { version = "2.9.5" } +tauri = { version = "2.9.5", features = ["devtools"] } tauri-plugin-log = "2" tauri-plugin-dialog = "2" tauri-plugin-fs = "2" tauri-plugin-store = "2" +tauri-plugin-window-state = "2" +tauri-plugin-http = "2" +tauri-plugin-shell = "2" +tauri-plugin-opener = "2" +opener = "0.7" diff --git a/src-tauri/TEMPLATES-README.md b/src-tauri/TEMPLATES-README.md new file mode 100644 index 0000000..567aca1 --- /dev/null +++ b/src-tauri/TEMPLATES-README.md @@ -0,0 +1,186 @@ +# TypoGenie Templates + +Templates in TypoGenie are stored as JSON files in the `TypoGenie-Data/templates/` folder. + +## Folder Structure + +``` +TypoGenie-Data/ +โ””โ”€โ”€ templates/ + โ”œโ”€โ”€ minimalist/ + โ”‚ โ”œโ”€โ”€ swiss-grid.json + โ”‚ โ””โ”€โ”€ minimalist-white.json + โ”œโ”€โ”€ tech/ + โ”‚ โ”œโ”€โ”€ tech-startup.json + โ”‚ โ””โ”€โ”€ code-editor.json + โ””โ”€โ”€ my-category/ โ† Create new folders for custom categories! + โ””โ”€โ”€ my-template.json +``` + +- Each **subfolder** in `templates/` is a category +- Each **.json file** in a category folder is a template +- Categories and templates are automatically discovered when the app loads + +## Template JSON Format + +```json +{ + "id": "my-template", + "name": "My Template Name", + "category": "My Category", + "description": "A short description of this template", + "vibe": "Keywords describing the style", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap", + "wordConfig": { + "heading1": { + "font": "Inter", + "size": 28, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { "before": 400, "after": 200, "line": 240 } + }, + "heading2": { + "font": "Inter", + "size": 16, + "color": "333333", + "bold": true, + "align": "left", + "spacing": { "before": 320, "after": 160, "line": 240 } + }, + "body": { + "font": "Inter", + "size": 10, + "color": "444444", + "align": "left", + "spacing": { "before": 0, "after": 160, "line": 280 } + }, + "accentColor": "6366F1" + }, + "previewCss": "font-family: 'Inter', sans-serif; h1 { font-size: 28pt; font-weight: 700; } h2 { font-size: 16pt; font-weight: 700; } p { font-size: 10pt; line-height: 1.6; }" +} +``` + +## Field Reference + +### Required Fields + +- **id**: Unique identifier for the template (used in filenames, no spaces) +- **name**: Display name shown in the app +- **category**: Category name (should match the folder name) +- **description**: Brief description of the template +- **wordConfig**: Microsoft Word styling configuration + - **heading1**: Style for H1 headings + - **heading2**: Style for H2 headings + - **body**: Style for body text + - **accentColor**: Accent color for borders and highlights (hex, no #) +- **previewCss**: CSS for the live preview (single line, no line breaks) + +### Optional Fields + +- **vibe**: Descriptive keywords for the template +- **googleFontsImport**: Google Fonts URL for web preview + +## Text Configuration Options + +### Font Settings +- **font**: Font family name (must be installed on user's system for Word) +- **size**: Font size in points (pt) +- **color**: Hex color code (without #) +- **bold**: true/false +- **italic**: true/false +- **allCaps**: true/false (transform text to uppercase) +- **tracking**: Character spacing (in twips, optional) +- **align**: "left", "center", "right", or "both" (justify) + +### Spacing +- **spacing.before**: Space before paragraph (in twips) +- **spacing.after**: Space after paragraph (in twips) +- **spacing.line**: Line spacing (in twips, 240 = single, 360 = 1.5, 480 = double) + +### Borders (Optional) +```json +"border": { + "top": { "color": "000000", "space": 10, "style": "single", "size": 12 }, + "bottom": { "color": "000000", "space": 10, "style": "single", "size": 12 }, + "left": { "color": "000000", "space": 10, "style": "single", "size": 24 }, + "right": { "color": "000000", "space": 10, "style": "single", "size": 12 } +} +``` + +Border styles: `"single"`, `"double"`, `"dotted"`, `"dashed"`, `"thick"` + +### Shading/Background (Optional) +```json +"shading": { + "fill": "F0F0F0", + "color": "auto", + "style": "clear" +} +``` + +## Adding Custom Templates + +1. Create a new folder in `TypoGenie-Data/templates/` (or use existing) +2. Create a `.json` file with your template configuration +3. Click the **Refresh** button in the app, or restart the app +4. Your template will appear in the style selector! + +## Tips + +- Use Google Fonts that have good Microsoft Word equivalents +- Test your template with both A4 and Letter paper sizes +- The previewCss should match the wordConfig styling as closely as possible +- Use hex colors without the # prefix +- Keep template IDs lowercase with hyphens (e.g., `my-awesome-template`) + +## Example: Dark Theme Template + +```json +{ + "id": "dark-mode", + "name": "Dark Mode", + "category": "Modern", + "description": "Dark theme with high contrast for reduced eye strain", + "vibe": "Dark, Modern, Accessible", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap", + "wordConfig": { + "heading1": { + "font": "Inter", + "size": 32, + "color": "FFFFFF", + "bold": true, + "align": "left", + "spacing": { "before": 400, "after": 200, "line": 240 }, + "shading": { "fill": "1A1A1A", "color": "auto", "style": "clear" } + }, + "heading2": { + "font": "Inter", + "size": 18, + "color": "E0E0E0", + "bold": true, + "align": "left", + "spacing": { "before": 320, "after": 160, "line": 240 } + }, + "body": { + "font": "Inter", + "size": 11, + "color": "CCCCCC", + "align": "left", + "spacing": { "before": 0, "after": 160, "line": 280 }, + "shading": { "fill": "121212", "color": "auto", "style": "clear" } + }, + "accentColor": "6366F1" + }, + "previewCss": "font-family: 'Inter', sans-serif; background: #121212; color: #CCCCCC; h1 { font-size: 32pt; font-weight: 700; color: #FFFFFF; background: #1A1A1A; padding: 16px; margin-bottom: 24px; } h2 { font-size: 18pt; font-weight: 700; color: #E0E0E0; margin-top: 32px; margin-bottom: 16px; } p { font-size: 11pt; line-height: 1.6; color: #CCCCCC; margin-bottom: 14px; }" +} +``` + +## Troubleshooting + +- **Template not showing**: Check that the JSON is valid (use a JSON validator) +- **Fonts not working**: Ensure the font is installed on your system +- **Preview looks different from Word**: Adjust previewCss to match wordConfig +- **Category not showing**: Make sure the folder contains at least one valid .json file + +Click **Refresh** in the app to reload templates without restarting! diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index ece6eb2..5797308 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -21,11 +21,45 @@ "fs:allow-mkdir", "fs:allow-applocaldata-read", "fs:allow-applocaldata-write", + "fs:allow-resource-read", + "fs:allow-resource-write", + "fs:allow-exe-read", + "fs:allow-exe-write", "store:default", - "store:allow-get", - "store:allow-set", - "store:allow-save", - "store:allow-load", + "window-state:default", + "http:default", + "http:allow-fetch", + "shell:default", + "shell:allow-open", + "opener:default", + { + "identifier": "http:allow-fetch", + "allow": [ + { + "url": "https://fonts.google.com/*" + }, + { + "url": "https://github.com/*" + }, + { + "url": "https://*.githubusercontent.com/*" + }, + { + "url": "https://fonts.googleapis.com/*" + } + ] + }, + { + "identifier": "shell:allow-open", + "allow": [ + { + "url": "https://*" + }, + { + "url": "http://*" + } + ] + }, { "identifier": "fs:scope", "allow": [ @@ -35,6 +69,18 @@ { "path": "$EXE/../**" }, + { + "path": "$EXE/TypoGenie-Data/**" + }, + { + "path": "$EXE/templates/**" + }, + { + "path": "$APPLOCALDATA/**" + }, + { + "path": "$RESOURCE/**" + }, { "path": "$HOME" }, diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index b57ad54..3ecfc4d 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,17 +1,253 @@ use std::path::PathBuf; -use tauri::{Manager, path::BaseDirectory}; +use std::fs; +use tauri::{Manager, path::BaseDirectory, WindowEvent, PhysicalPosition, PhysicalSize}; +use serde::{Serialize, Deserialize}; -/// Gets the portable data directory (next to the executable) -fn get_portable_data_dir(app: &tauri::App) -> PathBuf { - // Get the directory where the EXE is located - if let Ok(exe_dir) = app.path().resolve("", BaseDirectory::Executable) { - let portable_dir = exe_dir.join("TypoGenie-Data"); - // Create the directory if it doesn't exist - let _ = std::fs::create_dir_all(&portable_dir); - portable_dir +/// Templates directory name +const TEMPLATES_DIR_NAME: &str = "templates"; + +/// Template info for frontend +#[derive(Serialize, Deserialize)] +struct TemplateFile { + name: String, + content: String, + category: String, // Folder name (e.g., "academic", "corporate") +} + +/// Debug command to check path resolution +#[tauri::command] +fn debug_paths(app: tauri::AppHandle) -> Result { + let mut output = String::new(); + + // Check executable directory using std::env (reliable) + let exe_dir = get_exe_dir(&app); + match exe_dir { + Some(ref p) => output.push_str(&format!("Executable dir (std::env): {:?}\n", p)), + None => output.push_str("Executable dir: failed to get\n"), + } + + // Check resource directory + match app.path().resolve("", BaseDirectory::Resource) { + Ok(p) => output.push_str(&format!("Resource dir: {:?}\n", p)), + Err(e) => output.push_str(&format!("Resource dir error: {}\n", e)), + } + + // Check if templates exist in exe location + if let Some(ref exe_dir) = exe_dir { + let templates_exe = exe_dir.join("templates"); + output.push_str(&format!("Templates path ({:?}): exists={}\n", templates_exe, templates_exe.exists())); + + if templates_exe.exists() { + match fs::read_dir(&templates_exe) { + Ok(entries) => { + output.push_str(" Contents:\n"); + for entry in entries.flatten() { + output.push_str(&format!(" {:?}\n", entry.path())); + } + } + Err(e) => output.push_str(&format!(" Error reading: {}\n", e)), + } + } + } + + Ok(output) +} + +/// Get the absolute path to the templates directory +#[tauri::command] +fn get_templates_dir(app: tauri::AppHandle) -> Result { + let exe_dir = get_exe_dir(&app) + .ok_or("Failed to get executable directory")?; + let templates_dir = exe_dir.join("templates"); + Ok(templates_dir.to_string_lossy().to_string()) +} + +/// Read all template files from the templates directory +#[tauri::command] +fn read_templates(app: tauri::AppHandle) -> Result, String> { + let exe_dir = get_exe_dir(&app) + .ok_or("Failed to get executable directory")?; + let templates_dir = exe_dir.join(TEMPLATES_DIR_NAME); + + println!("Reading templates from: {:?}", templates_dir); + + let mut templates = Vec::new(); + + if !templates_dir.exists() { + println!("Templates dir doesn't exist, trying to extract..."); + // Try to extract templates first + extract_templates_on_first_run(&app) + .map_err(|e| format!("Failed to extract templates: {}", e))?; + } + + if templates_dir.exists() { + println!("Templates dir exists, reading recursively..."); + read_templates_recursive(&templates_dir, &mut templates, &templates_dir) + .map_err(|e| format!("Failed to read templates: {}", e))?; + println!("Found {} templates", templates.len()); } else { - // Fallback to app data directory (shouldn't happen) - app.path().app_data_dir().unwrap_or_else(|_| PathBuf::from(".")) + println!("Templates dir still doesn't exist after extraction attempt"); + } + + Ok(templates) +} + +/// Recursively read all .json template files +fn read_templates_recursive( + dir: &PathBuf, + templates: &mut Vec, + base_dir: &PathBuf +) -> Result<(), Box> { + for entry in fs::read_dir(dir)? { + let entry = entry?; + let path = entry.path(); + let name = entry.file_name().to_string_lossy().to_string(); + + if path.is_dir() { + read_templates_recursive(&path, templates, base_dir)?; + } else if name.ends_with(".json") { + let content = fs::read_to_string(&path)?; + // Extract category from the relative path (folder name) + let category = path.parent() + .and_then(|p| p.strip_prefix(base_dir).ok()) + .and_then(|p| p.components().next()) + .map(|c| c.as_os_str().to_string_lossy().to_string()) + .unwrap_or_else(|| "Other".to_string()); + + templates.push(TemplateFile { name, content, category }); + } + } + Ok(()) +} + +/// Open the templates folder in file explorer +#[tauri::command] +fn open_templates_folder(app: tauri::AppHandle) -> Result<(), String> { + let exe_dir = get_exe_dir(&app) + .ok_or("Failed to get executable directory")?; + let templates_dir = exe_dir.join(TEMPLATES_DIR_NAME); + + // Create if doesn't exist + if !templates_dir.exists() { + fs::create_dir_all(&templates_dir) + .map_err(|e| format!("Failed to create templates dir: {}", e))?; + } + + // Open with default application using opener crate + opener::open(&templates_dir) + .map_err(|e| format!("Failed to open folder: {}", e))?; + + Ok(()) +} + +/// Toggle DevTools for the main window +#[tauri::command] +fn toggle_devtools(app: tauri::AppHandle) -> Result { + if let Some(window) = app.get_webview_window("main") { + let is_open = window.is_devtools_open(); + + if is_open { + window.close_devtools(); + } else { + window.open_devtools(); + } + + return Ok(!is_open); + } + Err("Main window not found".to_string()) +} + +/// Window state structure +#[derive(Serialize, Deserialize, Debug, Default, Clone)] +struct WindowState { + x: i32, + y: i32, + width: u32, + height: u32, + maximized: bool, +} + +/// Gets the executable directory using std::env (more reliable than BaseDirectory::Executable on Windows) +fn get_exe_dir(_app: &tauri::AppHandle) -> Option { + std::env::current_exe() + .ok() + .and_then(|p| p.parent().map(|p| p.to_path_buf())) +} + +/// Extract bundled templates to the executable directory on first run +fn extract_templates_on_first_run(app: &tauri::AppHandle) -> Result<(), Box> { + let exe_dir = get_exe_dir(app).ok_or("Failed to get executable directory")?; + let templates_target = exe_dir.join(TEMPLATES_DIR_NAME); + + // Check if templates already exist (first run detection) + if templates_target.exists() { + return Ok(()); + } + + println!("First run detected. Extracting templates..."); + + // Get bundled templates resource path + let resource_path = app.path().resolve(TEMPLATES_DIR_NAME, BaseDirectory::Resource)?; + + if !resource_path.exists() { + println!("Warning: Bundled templates not found at: {:?}", resource_path); + return Ok(()); + } + + // Create templates directory + fs::create_dir_all(&templates_target)?; + + // Copy all template files recursively + copy_dir_recursive(&resource_path, &templates_target)?; + + println!("Templates extracted successfully to: {:?}", templates_target); + Ok(()) +} + +/// Recursively copy directory contents +fn copy_dir_recursive(src: &PathBuf, dst: &PathBuf) -> Result<(), Box> { + fs::create_dir_all(dst)?; + + for entry in fs::read_dir(src)? { + let entry = entry?; + let path = entry.path(); + let file_name = entry.file_name(); + let dest_path = dst.join(&file_name); + + if path.is_dir() { + copy_dir_recursive(&path, &dest_path)?; + } else { + fs::copy(&path, &dest_path)?; + } + } + + Ok(()) +} + +/// Get the window state file path +fn get_state_file_path(app: &tauri::AppHandle) -> PathBuf { + let exe_dir = get_exe_dir(app).unwrap_or_else(|| PathBuf::from(".")); + exe_dir.join("window-state.json") +} + +/// Load window state +fn load_window_state(app: &tauri::AppHandle) -> Option { + let state_file = get_state_file_path(app); + if state_file.exists() { + if let Ok(data) = std::fs::read_to_string(&state_file) { + if let Ok(state) = serde_json::from_str::(&data) { + return Some(state); + } + } + } + None +} + +/// Save window state +fn save_window_state(app: &tauri::AppHandle, state: &WindowState) { + let state_file = get_state_file_path(app); + if let Ok(json) = serde_json::to_string(state) { + let _ = std::fs::write(&state_file, json); } } @@ -21,39 +257,77 @@ pub fn run() { .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_store::Builder::default().build()) + .plugin(tauri_plugin_http::init()) + .plugin(tauri_plugin_shell::init()) + .plugin(tauri_plugin_opener::init()) .setup(|app| { - // Set up portable data directory - let portable_dir = get_portable_data_dir(app); - println!("Portable data directory: {:?}", portable_dir); + // Extract templates on first run + if let Err(e) = extract_templates_on_first_run(&app.handle()) { + eprintln!("Failed to extract templates: {}", e); + } - // Store the portable path in app state for frontend access - app.manage(PortableDataDir(portable_dir)); - - // Show the main window after setup + // Load and apply window state BEFORE showing window if let Some(window) = app.get_webview_window("main") { + if let Some(state) = load_window_state(&app.handle()) { + if state.maximized { + let _ = window.maximize(); + } else { + let _ = window.set_size(tauri::Size::Physical( + PhysicalSize { width: state.width, height: state.height } + )); + let _ = window.set_position(tauri::Position::Physical( + PhysicalPosition { x: state.x, y: state.y } + )); + } + } + let _ = window.show(); let _ = window.set_focus(); } - if cfg!(debug_assertions) { - app.handle().plugin( - tauri_plugin_log::Builder::default() - .level(log::LevelFilter::Info) - .build(), - )?; - } Ok(()) }) - .invoke_handler(tauri::generate_handler![get_data_dir]) + .on_window_event(|window, event| { + match event { + WindowEvent::Moved(position) => { + let app_handle = window.app_handle().clone(); + let pos = *position; + let size = window.inner_size().unwrap_or(PhysicalSize { width: 1400, height: 900 }); + let maximized = window.is_maximized().unwrap_or(false); + + let state = WindowState { + x: pos.x, + y: pos.y, + width: size.width, + height: size.height, + maximized, + }; + save_window_state(&app_handle, &state); + } + WindowEvent::Resized(size) => { + let app_handle = window.app_handle().clone(); + let pos = window.outer_position().unwrap_or(PhysicalPosition { x: 0, y: 0 }); + let maximized = window.is_maximized().unwrap_or(false); + + let state = WindowState { + x: pos.x, + y: pos.y, + width: size.width, + height: size.height, + maximized, + }; + save_window_state(&app_handle, &state); + } + _ => {} + } + }) + .invoke_handler(tauri::generate_handler![ + debug_paths, + get_templates_dir, + read_templates, + open_templates_folder, + toggle_devtools + ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); } - -/// Structure to hold the portable data directory path -struct PortableDataDir(PathBuf); - -/// Command to get the portable data directory from the frontend -#[tauri::command] -fn get_data_dir(state: tauri::State) -> String { - state.0.to_string_lossy().to_string() -} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index f53119b..8793ff9 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -5,8 +5,6 @@ "identifier": "live.lashman.typogenie", "build": { "frontendDist": "../dist", - "devUrl": "http://localhost:3000", - "beforeDevCommand": "npm run dev", "beforeBuildCommand": "npm run build" }, "app": { @@ -14,6 +12,7 @@ { "label": "main", "title": "TypoGenie", + "url": "index.html", "width": 1400, "height": 900, "minWidth": 1000, @@ -23,11 +22,14 @@ "center": true, "decorations": true, "transparent": false, - "visible": false + "visible": false, + "dragDropEnabled": false, + "devtools": true } ], "security": { - "csp": "default-src 'self'; connect-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com; font-src 'self' https://fonts.gstatic.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: blob:;" + "csp": "default-src 'self'; connect-src 'self' ipc: http://ipc.localhost https://fonts.googleapis.com https://fonts.gstatic.com https://github.com https://raw.githubusercontent.com https://fonts.google.com; font-src 'self' https://fonts.gstatic.com data:; style-src 'self' 'unsafe-inline' data: blob: https://fonts.googleapis.com; img-src 'self' data: blob:; script-src 'self' 'unsafe-inline'; frame-src 'self' blob: about:;", + "dangerousDisableAssetCspModification": true } }, "bundle": { @@ -47,6 +49,9 @@ "copyright": "Copyright (c) 2026 TypoGenie Contributors", "license": "MIT", "homepage": "https://git.lashman.live/lashman/typogenie", + "resources": { + "templates": "templates" + }, "windows": { "nsis": { "installMode": "currentUser", diff --git a/src-tauri/templates/README.md b/src-tauri/templates/README.md new file mode 100644 index 0000000..de3094c --- /dev/null +++ b/src-tauri/templates/README.md @@ -0,0 +1,110 @@ +# TypoGenie Templates + +This folder contains all the document style templates for TypoGenie. Templates are organized by category. + +## Creating Custom Templates + +You can create your own templates! Just create a JSON file with the following structure: + +```json +{ + "id": "my-custom-style", + "name": "My Custom Style", + "category": "Custom", + "description": "A brief description of this style", + "vibe": "Keywords describing the mood", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=YourFont:wght@400;700&display=swap", + "wordConfig": { + "heading1": { + "font": "Your Font", + "size": 28, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { "before": 400, "after": 200, "line": 240 } + }, + "heading2": { + "font": "Your Font", + "size": 14, + "color": "333333", + "bold": true, + "align": "left", + "spacing": { "before": 280, "after": 140, "line": 240 } + }, + "body": { + "font": "Your Font", + "size": 11, + "color": "333333", + "align": "left", + "spacing": { "before": 0, "after": 180, "line": 300 } + }, + "accentColor": "FF5733" + }, + "previewCss": "font-family: 'Your Font', sans-serif; h1 { font-size: 28pt; font-weight: 700; color: #000; margin-bottom: 20px; }" +} +``` + +## Template Structure + +### Required Fields + +- **id**: Unique identifier (lowercase, no spaces) +- **name**: Display name for the UI +- **category**: Category for grouping (e.g., "Minimalist", "Editorial", "Tech") +- **description**: Short description shown in the UI +- **vibe**: Keywords describing the style +- **googleFontsImport**: URL to import fonts from Google Fonts +- **wordConfig**: Configuration for Word document generation +- **previewCss**: CSS for the preview pane + +### Word Config Options + +For each style (heading1, heading2, body): + +- **font**: Font family name (must match Google Fonts import) +- **size**: Font size in points +- **color**: Hex color without # (e.g., "000000") +- **bold**: true/false +- **italic**: true/false +- **underline**: true/false +- **allCaps**: true/false +- **smallCaps**: true/false +- **tracking**: Letter spacing in twips (1/20 of a point) +- **align**: "left", "center", "right", "both" (justify) +- **spacing**: Object with `before`, `after`, and `line` (all in twips) +- **border**: Optional border configuration +- **shading**: Optional background shading + +### Where to Place Templates + +#### For Personal Use (Recommended) +Place templates in the user data folder: +- Windows: `%APPDATA%/TypoGenie/TypoGenie-Data/templates/` +- macOS: `~/Library/Application Support/TypoGenie/TypoGenie-Data/templates/` +- Linux: `~/.config/TypoGenie/TypoGenie-Data/templates/` + +Or use the "Open Templates Folder" button in the app. + +#### For Distribution +Place templates in this folder (src-tauri/templates/) organized by category subfolders, then rebuild the app. + +## Categories + +- **Core**: Essential versatile styles +- **Minimalist**: Clean, simple designs +- **Editorial**: Magazine and newspaper styles +- **Corporate**: Business and professional +- **Tech**: Technology and startup +- **Creative**: Bold and artistic +- **Vintage**: Retro and nostalgic +- **Lifestyle**: Elegant and refined +- **Academic**: Scholarly and formal +- **Industrial**: Raw and utilitarian + +## Tips + +1. Test your template with various content types (headings, lists, code blocks, etc.) +2. Ensure the Word config and preview CSS match for consistency +3. Use web-safe fonts or Google Fonts for best compatibility +4. Colors should be hex without the # prefix in wordConfig +5. Colors should be hex WITH the # prefix in previewCss diff --git a/src-tauri/templates/academic/academic-journal.json b/src-tauri/templates/academic/academic-journal.json new file mode 100644 index 0000000..5333a7d --- /dev/null +++ b/src-tauri/templates/academic/academic-journal.json @@ -0,0 +1,313 @@ +{ + "id": "academic-journal", + "name": "Academic Journal", + "category": "Academic", + "description": "Prestigious journal aesthetic with high-contrast serifs. Designed for readability and authority, evoking the feel of established Ivy League publications.", + "vibe": "Prestigious, Authoritative, Classic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=EB+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display", + "body": "EB Garamond", + "code": "JetBrains Mono" + }, + "colors": { + "text": "1A1A1A", + "textSecondary": "4A4A4A", + "background": "FFFCF9", + "accent": "8C1515", + "border": "E0E0E0", + "codeBg": "F2F2F2", + "blockquoteBorder": "8C1515" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.1 + } + }, + "h2": { + "font": "heading", + "size": 20, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid", + "space": 4 + } + }, + "h3": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "italic": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.25 + } + }, + "h4": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "indent": 24, + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "accent", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "borderTop": { + "color": "accent", + "width": 1, + "style": "single", + "space": 12 + }, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "single", + "space": 12 + } + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 18, + "after": 18, + "line": 1.4 + }, + "borderLeft": { + "color": "accent", + "width": 3, + "style": "solid", + "space": 0 + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 36, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 36, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "borderTop": { + "color": "text", + "width": 2, + "style": "solid" + }, + "borderBottom": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "background": "F9F9F9", + "padding": 8, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8 + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "accent", + "width": 1, + "style": "doutble", + "space": 2 + } + }, + "img": { + "align": "center", + "spacing": { + "before": 18, + "after": 18 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FCE8E8", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 90, + "bottom": 90, + "left": 90, + "right": 90 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/arctic-base.json b/src-tauri/templates/academic/arctic-base.json new file mode 100644 index 0000000..1d84ebe --- /dev/null +++ b/src-tauri/templates/academic/arctic-base.json @@ -0,0 +1,309 @@ +{ + "id": "arctic-base", + "name": "Arctic Base", + "category": "Scientific", + "description": "High-contrast, sterile design optimized for clarity in low-light environments. Technical typography with a crisp, cold aesthetic.", + "vibe": "Technical, Cold, Crisp", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Iceland:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Inter:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Jura:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Iceland", + "body": "Inter", + "code": "Jura" + }, + "colors": { + "text": "002F6C", + "textSecondary": "01579B", + "background": "F0F8FF", + "accent": "0288D1", + "border": "B3E5FC", + "codeBg": "E1F5FE", + "blockquoteBorder": "0277BD" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "solid" + } + , + "background": "E1F5FE", + "padding": 12 + }, + "h2": { + "font": "code", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "allCaps": true, + "borderLeft": { + "color": "accent", + "width": 6, + "style": "solid", + "space": 8 + } + }, + "h3": { + "font": "code", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h4": { + "font": "code", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.2 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "allCaps": true, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + } + }, + "blockquote": { + "font": "code", + "size": 11, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "background": "E1F5FE", + "padding": 12, + "borderLeft": { + "color": "accent", + "width": 3, + "style": "solid" + } + + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": false + }, + "table": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "code", + "size": 10, + "color": "text", + "bold": true, + "background": "B3E5FC", + "padding": 8, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 8, + "background": "F0F8FF" + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 12, + "after": 12 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "B3E5FC", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/botanical-textbook.json b/src-tauri/templates/academic/botanical-textbook.json new file mode 100644 index 0000000..1a119fb --- /dev/null +++ b/src-tauri/templates/academic/botanical-textbook.json @@ -0,0 +1,307 @@ +{ + "id": "botanical-textbook", + "name": "Botanical Textbook", + "category": "Scientific", + "description": "Inspired by 19th-century flora guides. Elegant serif typography, earthy tones, and spacious formatting for biological descriptions.", + "vibe": "Vintage, Organic, Elegant", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Alice:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Spectral:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Alice", + "body": "Spectral", + "code": "Cormorant Garamond" + }, + "colors": { + "text": "2E3B21", + "textSecondary": "5D4037", + "background": "FFFCF5", + "accent": "558B2F", + "border": "A1887F", + "codeBg": "F1F8E9", + "blockquoteBorder": "558B2F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "text", + "bold": false, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.1 + }, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "double", + "space": 3 + } + }, + "h2": { + "font": "heading", + "size": 22, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "italic": true + }, + "h3": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "indent": 24, + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 18, + "after": 18, + "line": 1.5 + }, + "padding": 12, + "borderTop": { + "color": "border", + "width": 1, + "style": "single" + }, + "borderBottom": { + "color": "border", + "width": 1, + "style": "single" + } + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 36, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 36, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "italic": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "single" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": false, + "background": "F1F8E9", + "padding": 8, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "single" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8 + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "accent", + "width": 2, + "style": "double", + "space": 3 + } + }, + "img": { + "align": "center", + "spacing": { + "before": 18, + "after": 18 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "DCEDC8", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 80, + "bottom": 80, + "left": 80, + "right": 80 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/chemistry-lab.json b/src-tauri/templates/academic/chemistry-lab.json new file mode 100644 index 0000000..d97f8da --- /dev/null +++ b/src-tauri/templates/academic/chemistry-lab.json @@ -0,0 +1,309 @@ +{ + "id": "chemistry-lab", + "name": "Chemistry Lab", + "category": "Scientific", + "description": "Lab manual aesthetic. Clean, structured layout with distinct sections for procedures, observations, and data. Modern sans-serif typography.", + "vibe": "Scientific, Structured, Geometric", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Heebo:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Barlow", + "body": "Heebo", + "code": "Roboto Mono" + }, + "colors": { + "text": "263238", + "textSecondary": "546E7A", + "background": "FFFFFF", + "accent": "00ACC1", + "border": "B2EBF2", + "codeBg": "E0F7FA", + "blockquoteBorder": "00ACC1" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "text", + "bold": true, + "align": "left", + "allCaps": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "background": "codeBg", + "padding": 8, + "borderLeft": { + "color": "textSecondary", + "width": 4, + "style": "solid" + } + + }, + "h3": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.25 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 11, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 10, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "padding": 12, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "background": "codeBg", + "borderRadius": 4 + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "code", + "size": 9.5, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true + }, + "table": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "text", + "bold": true, + "background": "B2EBF2", + "padding": 8, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 8 + }, + "hr": { + "spacing": { + "before": 18, + "after": 18 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 12, + "after": 12 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFECB3", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/dark-academia.json b/src-tauri/templates/academic/dark-academia.json new file mode 100644 index 0000000..ba5b980 --- /dev/null +++ b/src-tauri/templates/academic/dark-academia.json @@ -0,0 +1,304 @@ +{ + "id": "dark-academia", + "name": "Dark Academia", + "category": "Academic", + "description": "Moody, sophisticated aesthetic inspired by old libraries and tweed. Rich serif typography with oxblood accents.", + "vibe": "Moody, Literary, Scholars", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cinzel:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=EB+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Cutive+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Cinzel", + "body": "EB Garamond", + "code": "Cutive Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "424242", + "background": "F0F0EB", + "accent": "4A1414", + "border": "757575", + "codeBg": "E0E0E0", + "blockquoteBorder": "4A1414" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.1 + }, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid", + "space": 5 + } + }, + "h2": { + "font": "heading", + "size": 20, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "background": "EAE6DF", + "padding": 8 + }, + "h3": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "italic": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "indent": 24, + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 0, + "borderLeft": { + "color": "accent", + "width": 3, + "style": "solid" + }, + "background": "transparent" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 48, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 48, + "numbering": "upper-roman" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": false, + "bold": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "background": "D7CCC8", + "padding": 8, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8 + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 18, + "after": 18 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "EFEBE9", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 90, + "bottom": 90, + "left": 90, + "right": 90 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/education-friendly.json b/src-tauri/templates/academic/education-friendly.json new file mode 100644 index 0000000..c5c9ffa --- /dev/null +++ b/src-tauri/templates/academic/education-friendly.json @@ -0,0 +1,303 @@ +{ + "id": "education-friendly", + "name": "Education Friendly", + "category": "Education", + "description": "Designed for maximum accessibility and readability. Uses fonts and spacing strategies proven to help with dyslexia and reading proficiency.", + "vibe": "Accessible, Clear, Inclusive", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lexend:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Atkinson+Hyperlegible:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Lexend", + "body": "Lexend", + "code": "Atkinson Hyperlegible" + }, + "colors": { + "text": "212121", + "textSecondary": "424242", + "background": "FAF9F6", + "accent": "0057D9", + "border": "BDBDBD", + "codeBg": "F5F5F5", + "blockquoteBorder": "0057D9" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 16, + "line": 1.3 + }, + "background": "E3F2FD", + "padding": 12, + "borderRadius": 8 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 12, + "line": 1.3 + }, + "borderBottom": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "h3": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 10, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.75 + } + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 20, + "borderLeft": { + "color": "accent", + "width": 6, + "style": "solid" + }, + "background": "codeBg", + "borderRadius": 8 + }, + "code": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.8 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "border": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "background": "E3F2FD", + "padding": 12, + "borderBottom": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12 + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 20, + "after": 20 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFF9C4", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 8, + "after": 8, + "line": 1.4 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/emergency-room.json b/src-tauri/templates/academic/emergency-room.json new file mode 100644 index 0000000..216c454 --- /dev/null +++ b/src-tauri/templates/academic/emergency-room.json @@ -0,0 +1,318 @@ +{ + "id": "emergency-room", + "name": "Emergency Room", + "category": "Healthcare", + "description": "High-urgency design for critical information. Uses international standard colors and high-legibility typefaces for maximum clarity in stressful environments.", + "vibe": "Urgent, High-Contrast, Critical", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Public+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Inter", + "body": "Public Sans", + "code": "JetBrains Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "37474F", + "background": "FFFFFF", + "accent": "D32F2F", + "border": "B71C1C", + "codeBg": "FFEBEE", + "blockquoteBorder": "D32F2F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "allCaps": true, + "borderBottom": { + "color": "accent", + "width": 8, + "style": "solid" + } + , + "background": "FFEBEE", + "padding": 16 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "212121", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "background": "212121", + "color": "FFFFFF", + "padding": 8, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "borderLeft": { + "color": "accent", + "width": 8, + "style": "solid" + } + , + "padding": 8 + }, + "h4": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + }, + "weight": 500 + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "padding": 20, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "FFEBEE" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + }, + "bold": true + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "0D47A1", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.3 + }, + "border": { + "color": "212121", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "212121", + "padding": 10, + "allCaps": true + }, + "td": { + "font": "body", + "size": 12, + "color": "212121", + "padding": 10, + "borderBottom": { + "color": "BDBDBD", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "accent", + "width": 4, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFEA00", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/furniture-manual.json b/src-tauri/templates/academic/furniture-manual.json new file mode 100644 index 0000000..e6a19f6 --- /dev/null +++ b/src-tauri/templates/academic/furniture-manual.json @@ -0,0 +1,306 @@ +{ + "id": "furniture-manual", + "name": "Furniture Manual", + "category": "Instructional", + "description": "Inspired by Swedish flat-pack instructions. Minimalist, mostly visual, with neutral sans-serif typography.", + "vibe": "Minimalist, Instructional, Neutral", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Inter:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Inter", + "body": "Noto Sans", + "code": "Roboto Mono" + }, + "colors": { + "text": "111111", + "textSecondary": "666666", + "background": "FFFFFF", + "accent": "FF6D00", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBorder": "111111" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "allCaps": false + }, + "h2": { + "font": "heading", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "borderBottom": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "h3": { + "font": "heading", + "size": 15, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 13, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 10, + "after": 4, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 10, + "after": 4, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 13, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 13, + "color": "text", + "align": "center", + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "padding": 24, + "border": { + "color": "text", + "width": 3, + "style": "solid" + }, + "borderRadius": 50, + "background": "FFFFFF" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 13, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 0, + "style": "none" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "background": "F5F5F5", + "padding": 12, + "borderBottom": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 13, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFCCBC", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/history-textbook.json b/src-tauri/templates/academic/history-textbook.json new file mode 100644 index 0000000..0b8253b --- /dev/null +++ b/src-tauri/templates/academic/history-textbook.json @@ -0,0 +1,314 @@ +{ + "id": "history-textbook", + "name": "History Textbook", + "category": "Academic", + "description": "Evocative of 18th-century treatises. Caslon-inspired serifs, deep margins, and a sense of gravity and time.", + "vibe": "Historical, Classic, Serif", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=IM+Fell+English+SC:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Crimson+Text:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Metamorphous:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "IM Fell English SC", + "body": "Crimson Text", + "code": "Metamorphous" + }, + "colors": { + "text": "2D241E", + "textSecondary": "4E342E", + "background": "FDFBF7", + "accent": "8D1C1C", + "border": "BCAAA4", + "codeBg": "F5F1E8", + "blockquoteBorder": "8D1C1C" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "text", + "bold": false, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.0 + }, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid", + "space": 4 + } + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "italic": false + }, + "h3": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.2 + }, + "italic": true + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + }, + "italic": true + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 13, + "color": "text", + "align": "justify", + "indent": 24, + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "borderTop": { + "color": "border", + "width": 1, + "style": "single" + }, + "borderBottom": { + "color": "border", + "width": 1, + "style": "single" + }, + "background": "codeBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 36, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 36, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 13, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "italic": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "borderTop": { + "color": "text", + "width": 2, + "style": "double" + }, + "borderBottom": { + "color": "text", + "width": 2, + "style": "double" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": false, + "background": "F5F1E8", + "padding": 8, + "borderBottom": { + "color": "text", + "width": 1, + "style": "single" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 8 + }, + "hr": { + "spacing": { + "before": 36, + "after": 36 + }, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "E6DOD3", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 90, + "bottom": 90, + "left": 90, + "right": 90 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/kids-education.json b/src-tauri/templates/academic/kids-education.json new file mode 100644 index 0000000..eaaf5d3 --- /dev/null +++ b/src-tauri/templates/academic/kids-education.json @@ -0,0 +1,307 @@ +{ + "id": "kids-education", + "name": "Kids Education", + "category": "Education", + "description": "Playful, colorful, and big. Great for worksheets, stories, and classroom activities. Sticker-book aesthetic.", + "vibe": "Playful, Colorful, Fun", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Fredoka+One:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Comic+Neue:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Kosugi+Maru:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Fredoka One", + "body": "Comic Neue", + "code": "Kosugi Maru" + }, + "colors": { + "text": "2C3E50", + "textSecondary": "5D4037", + "background": "FFFDF5", + "accent": "FF6B6B", + "border": "4ECDC4", + "codeBg": "FFE66D", + "blockquoteBorder": "FF6B6B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 32, + "after": 16, + "line": 1.1 + }, + "background": "FFF9C4", + "padding": 16, + "borderRadius": 20, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + } + }, + "h2": { + "font": "heading", + "size": 28, + "color": "4ECDC4", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 22, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + } + }, + "h4": { + "font": "heading", + "size": 18, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "background": "F0F0F0", + "padding": 8, + "borderRadius": 10 + }, + "h5": { + "font": "heading", + "size": 16, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + }, + "weight": 700 + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 20, + "after": 20, + "line": 1.5 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "dotted" + }, + "background": "E0F2F1", + "borderRadius": 16 + }, + "code": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "text", + "width": 3, + "style": "solid" + }, + "borderRadius": 12 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 32, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 32, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": false + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "accent", + "underline": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "text", + "width": 3, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "text", + "bold": false, + "background": "4ECDC4", + "padding": 12, + "borderBottom": { + "color": "text", + "width": 3, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 16, + "color": "text", + "padding": 12 + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFE66D", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/mathematics-paper.json b/src-tauri/templates/academic/mathematics-paper.json new file mode 100644 index 0000000..03df4b0 --- /dev/null +++ b/src-tauri/templates/academic/mathematics-paper.json @@ -0,0 +1,296 @@ +{ + "id": "mathematics-paper", + "name": "Mathematics Paper", + "category": "Academic", + "description": "Inspired by LaTeX and Computer Modern. Serif-heavy, precise, and highly legible for academic rigor.", + "vibe": "Academic, Rigorous, Formal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Domine:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noticia+Text:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Domine", + "body": "Noticia Text", + "code": "Domine" + }, + "colors": { + "text": "000000", + "textSecondary": "333333", + "background": "FFFFFF", + "accent": "000000", + "border": "CCCCCC", + "codeBg": "F5F5F5", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 12, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "italic": false, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.2 + } + }, + "h5": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "italic": true, + "align": "left", + "spacing": { + "before": 8, + "after": 4, + "line": 1.2 + } + }, + "h6": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": false, + "italic": true, + "align": "left", + "spacing": { + "before": 8, + "after": 4, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "212121", + "align": "justify", + "spacing": { + "before": 0, + "after": 8, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "padding": 10, + "borderLeft": { + "color": "blockquoteBorder", + "width": 3, + "style": "solid" + }, + "background": "codeBg" + }, + "code": { + "font": "code", + "size": 9.5, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 9, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 10, + "after": 10, + "line": 1.4 + }, + "padding": 12, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 6, + "after": 6, + "line": 1.5 + }, + "indent": 20, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 6, + "after": 6, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "212121", + "spacing": { + "before": 2, + "after": 2, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true + }, + "table": { + "spacing": { + "before": 10, + "after": 10, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "text", + "bold": true, + "background": "F0F0F0", + "padding": 8 + }, + "td": { + "font": "body", + "size": 10, + "color": "212121", + "padding": 8 + }, + "hr": { + "border": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "spacing": { + "before": 12, + "after": 12 + } + }, + "img": { + "align": "center", + "spacing": { + "before": 10, + "after": 10 + } + }, + "_comment_del": "~~strikethrough~~ - deleted text", + "del": { + "strikethrough": true, + "font": "body" + }, + "_comment_sup": "^superscript^ - superscript text", + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "_comment_sub": "~subscript~ - subscript text", + "_comment_mark": "==highlighted text== - marked/highlighted text", + "mark": { + "font": "body", + "color": "FFFFFF", + "background": "accent" + }, + "footnote": { + "font": "body", + "color": "textSecondary", + "size": 9, + "superScript": true + }, + "_comment_footnote": "[^1] - footnote references", + "footnoteRef": { + "font": "body", + "color": "textSecondary", + "spacing": { + "line": 1.2, + "before": 6, + "after": 6 + }, + "size": 9 + }, + "_comment_footnote_ref": "Footnote content at bottom of page" + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/medical-professional.json b/src-tauri/templates/academic/medical-professional.json new file mode 100644 index 0000000..ed6dacf --- /dev/null +++ b/src-tauri/templates/academic/medical-professional.json @@ -0,0 +1,311 @@ +{ + "id": "medical-professional", + "name": "Medical Professional", + "category": "Healthcare", + "description": "Clean, trustworthy clinical design. Optimized for patient charts, reports, and professional correspondence.", + "vibe": "Clinical, Trustworthy, Modern", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Source+Sans+3:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Fira+Code:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Lato", + "body": "Source Sans 3", + "code": "Fira Code" + }, + "colors": { + "text": "263238", + "textSecondary": "546E7A", + "background": "FFFFFF", + "accent": "00897B", + "border": "CFD8DC", + "codeBg": "ECEFF1", + "blockquoteBorder": "00897B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "263238", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + , + "padding": 0 + }, + "h2": { + "font": "heading", + "size": 20, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 8, + "line": 1.2 + }, + "background": "E0F2F1", + "padding": 8, + "borderRadius": 4 + }, + "h3": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 6, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 1.0 + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 4, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 10, + "after": 4, + "line": 1.3 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 10, + "after": 4, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 10, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "padding": 16, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "F5F7F8" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 2, + "after": 2, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "0277BD", + "underline": false + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "background": "CFD8DC", + "padding": 8, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "ECEFF1", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 12, + "after": 12 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "E0F2F1", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/phd-thesis.json b/src-tauri/templates/academic/phd-thesis.json new file mode 100644 index 0000000..e045b83 --- /dev/null +++ b/src-tauri/templates/academic/phd-thesis.json @@ -0,0 +1,289 @@ +{ + "id": "phd-thesis", + "name": "PhD Thesis", + "category": "Academic", + "description": "The gold standard for dissertation submissions. Meets strict university requirements: double spacing, wide binding margins, and classic serif composition.", + "vibe": "Formal, Conservative, Standard", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Tinos:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Arimo:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Tinos", + "body": "Tinos", + "code": "Arimo" + }, + "colors": { + "text": "000000", + "textSecondary": "333333", + "background": "FFFFFF", + "accent": "000000", + "border": "666666", + "codeBg": "F5F5F5", + "blockquoteBorder": "333333" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "center", + "allCaps": true, + "spacing": { + "before": 72, + "after": 24, + "line": 2.0 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 2.0 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 6, + "line": 2.0 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "italic": true, + "align": "left", + "spacing": { + "before": 18, + "after": 6, + "line": 2.0 + } + }, + "h5": { + "font": "heading", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 2.0 + } + }, + "h6": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 2.0 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "indent": 36, + "spacing": { + "before": 0, + "after": 0, + "line": 2.0 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.0 + }, + "indent": 36, + "padding": 0 + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.2 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 2.0 + }, + "indent": 36, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 2.0 + }, + "indent": 36, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 2.0 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "text", + "underline": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "padding": 6, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 6 + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 18, + "after": 18 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "border", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.0 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 108, + "right": 72 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/research-paper.json b/src-tauri/templates/academic/research-paper.json new file mode 100644 index 0000000..0d57b47 --- /dev/null +++ b/src-tauri/templates/academic/research-paper.json @@ -0,0 +1,300 @@ +{ + "id": "research-paper", + "name": "Research Paper", + "category": "Academic", + "description": "Clean, functional design inspired by scientific preprints (LaTeX/arXiv). Geometric headings paired with high-readability body text.", + "vibe": "Scientific, Modern, Functional", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Crimson+Pro:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Fira+Code:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Montserrat", + "body": "Crimson Pro", + "code": "Fira Code" + }, + "colors": { + "text": "111827", + "textSecondary": "4B5563", + "background": "FFFFFF", + "accent": "2563EB", + "border": "E5E7EB", + "codeBg": "F3F4F6", + "blockquoteBorder": "2563EB" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 15, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.25 + }, + "allCaps": true, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "allCaps": true, + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 10, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "F9FAFB", + "padding": 12 + }, + "code": { + "font": "code", + "size": 9.5, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 9, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 10, + "after": 10, + "line": 1.6 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 10, + "after": 10, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "text", + "bold": true, + "background": "F3F4F6", + "padding": 8, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 8 + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 18, + "after": 18 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "DBEAFE", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/scantron-test.json b/src-tauri/templates/academic/scantron-test.json new file mode 100644 index 0000000..a662c25 --- /dev/null +++ b/src-tauri/templates/academic/scantron-test.json @@ -0,0 +1,313 @@ +{ + "id": "scantron-test", + "name": "Scantron Test", + "category": "Academic", + "description": "Optical Machine Reading (OMR) aesthetic. Monospaced clarity combined with bubble-sheet layout elements.", + "vibe": "Technical, Retro, Bureaucratic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Courier+Prime:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Space+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Courier Prime", + "body": "Space Mono", + "code": "Space Mono" + }, + "colors": { + "text": "1B5E20", + "textSecondary": "33691E", + "background": "FFFDE7", + "accent": "D81B60", + "border": "A5D6A7", + "codeBg": "F1F8E9", + "blockquoteBorder": "1B5E20" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "allCaps": true, + "borderBottom": { + "color": "text", + "width": 1, + "style": "dashed" + }, + "letterSpacing": 2 + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + }, + "background": "E8F5E9", + "padding": 6, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 10, + "after": 4, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 10, + "after": 4, + "line": 1.3 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 10, + "after": 4, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 10, + "line": 1.5 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "padding": 20, + "border": { + "color": "text", + "width": 1, + "style": "dotted" + }, + "background": "FFFFFF", + "borderRadius": 50 + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 10, + "after": 10, + "line": 1.5 + }, + "indent": 20, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 10, + "after": 10, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 2, + "after": 2, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "accent", + "underline": true + }, + "table": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "background": "C8E6C9", + "padding": 8, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8, + "borderRight": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "hr": { + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "text", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 12, + "after": 12 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFCDD2", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/scientific-journal.json b/src-tauri/templates/academic/scientific-journal.json new file mode 100644 index 0000000..067264b --- /dev/null +++ b/src-tauri/templates/academic/scientific-journal.json @@ -0,0 +1,298 @@ +{ + "id": "scientific-journal", + "name": "Scientific Journal", + "category": "Academic", + "description": "Data-first design emphasizing clarity, hierarchy, and density. Optimized for papers with complex figures and tables.", + "vibe": "Scientific, Precise, Modern", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Merriweather:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Fira+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Source Sans 3", + "body": "Merriweather", + "code": "Fira Mono" + }, + "colors": { + "text": "222222", + "textSecondary": "555555", + "background": "FFFFFF", + "accent": "0056D2", + "border": "DDDDDD", + "codeBg": "F7F9FA", + "blockquoteBorder": "0056D2" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.25 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "allCaps": true, + "spacing": { + "before": 12, + "after": 6, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 8, + "after": 4, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10.5, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 8, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 18, + "borderLeft": { + "color": "accent", + "width": 3, + "style": "solid" + } + }, + "code": { + "font": "code", + "size": 9, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "code", + "size": 9, + "color": "text", + "background": "codeBg", + "padding": 10, + "spacing": { + "before": 12, + "after": 12, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10.5, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "accent", + "underline": false, + "bold": true + }, + "table": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "borderTop": { + "color": "text", + "width": 1.5, + "style": "solid" + }, + "borderBottom": { + "color": "text", + "width": 1.5, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 9.5, + "color": "text", + "bold": true, + "background": "F0F2F5", + "padding": 6, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 9.5, + "color": "text", + "padding": 6 + }, + "hr": { + "spacing": { + "before": 18, + "after": 18 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 12, + "after": 12 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "heading", + "size": 7, + "superScript": true + }, + "sub": { + "font": "heading", + "size": 7, + "subScript": true + }, + "mark": { + "font": "body", + "background": "E1F5FE", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/academic/weather-radar.json b/src-tauri/templates/academic/weather-radar.json new file mode 100644 index 0000000..dcec68e --- /dev/null +++ b/src-tauri/templates/academic/weather-radar.json @@ -0,0 +1,308 @@ +{ + "id": "weather-radar", + "name": "Weather Radar", + "category": "Scientific", + "description": "Meteorological data dashboard. High-contrast, grid-based aesthetic designed for readability of complex data points.", + "vibe": "Technical, Data-Driven, High-Contrast", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Orbitron:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Exo+2:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Share+Tech+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Orbitron", + "body": "Exo 2", + "code": "Share Tech Mono" + }, + "colors": { + "text": "263238", + "textSecondary": "455A64", + "background": "F5F7F8", + "accent": "D50000", + "border": "B0BEC5", + "codeBg": "ECEFF1", + "blockquoteBorder": "FF6D00" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "text", + "bold": true, + "align": "left", + "allCaps": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "codeBg", + "padding": 12 + }, + "h2": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "allCaps": true, + "borderLeft": { + "color": "accent", + "width": 6, + "style": "solid", + "space": 8 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.3 + } + }, + "h5": { + "font": "code", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.4 + } + }, + "h6": { + "font": "code", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 10, + "after": 5, + "line": 1.4 + }, + "allCaps": true + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + }, + "weight": 400 + }, + "blockquote": { + "font": "code", + "size": 10, + "color": "textSecondary", + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "padding": 12, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "dashed" + }, + "background": "F9FBE7" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "code", + "size": 9.5, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "dotted" + } + }, + "ul": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 8, + "after": 8, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "0288D1", + "underline": true + }, + "table": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "text", + "bold": true, + "background": "ECEFF1", + "padding": 8, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "code", + "size": 10, + "color": "text", + "padding": 8 + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 12, + "after": 12 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "code", + "size": 8, + "superScript": true + }, + "sub": { + "font": "code", + "size": 8, + "subScript": true + }, + "mark": { + "font": "code", + "background": "FFF9C4", + "color": "text" + }, + "footnote": { + "font": "code", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "code", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/circus-sideshow.json b/src-tauri/templates/core/circus-sideshow.json new file mode 100644 index 0000000..4b65dde --- /dev/null +++ b/src-tauri/templates/core/circus-sideshow.json @@ -0,0 +1,305 @@ +{ + "id": "circus-sideshow", + "name": "Circus Sideshow", + "category": "Entertainment", + "description": "Authentic vintage circus poster aesthetic. Victorian woodblock typography, screaming reds, and deep midnight blues.", + "vibe": "Vintage, Ornamental, Dramatic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Rye:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Lora:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Sancreek:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Rye", + "body": "Lora", + "code": "Sancreek" + }, + "colors": { + "text": "3E2723", + "textSecondary": "1A237E", + "background": "FFF8E1", + "accent": "C62828", + "border": "FFB300", + "codeBg": "FFECB3", + "blockquoteBorder": "C62828" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "allCaps": true, + "textShadow": "2px 2px 0px #1A237E" + }, + "h2": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "decoration": "underline", + "decorationStyle": "wavy" + }, + "h3": { + "font": "body", + "size": 20, + "color": "3E2723", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 2.0 + }, + "h4": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + }, + "italic": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "3E2723", + "align": "center", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "align": "center", + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "padding": 24, + "border": { + "color": "border", + "width": 4, + "style": "double" + }, + "background": "FFFFFF" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 10, + "after": 10, + "line": 1.5 + }, + "indent": 20, + "bullet": "flourish" + }, + "ol": { + "spacing": { + "before": 10, + "after": 10, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "3E2723", + "spacing": { + "before": 2, + "after": 2, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.3 + }, + "border": { + "color": "3E2723", + "width": 3, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "FFFFFF", + "bold": false, + "background": "C62828", + "padding": 10 + }, + "td": { + "font": "body", + "size": 14, + "color": "3E2723", + "padding": 10, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 4, + "style": "dotted" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "border", + "width": 8, + "style": "double" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFECB3", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/default.json b/src-tauri/templates/core/default.json new file mode 100644 index 0000000..f74eb18 --- /dev/null +++ b/src-tauri/templates/core/default.json @@ -0,0 +1,311 @@ +{ + "id": "default", + "name": "Default Clean", + "category": "Core", + "description": "A premium, versatile baseline. High-readability serif body text paired with clean, geometric sans-serif headings.", + "vibe": "Clean, Versatile, Professional", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Lora:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "DM Sans", + "body": "Lora", + "code": "JetBrains Mono" + }, + "colors": { + "text": "111827", + "textSecondary": "4B5563", + "background": "FFFFFF", + "accent": "2563EB", + "border": "E5E7EB", + "codeBg": "F3F4F6", + "blockquoteBorder": "2563EB" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "111827", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.1 + }, + "letterSpacing": -0.5 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "111827", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "letterSpacing": -0.3 + }, + "h3": { + "font": "heading", + "size": 20, + "color": "111827", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 18, + "color": "111827", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true, + "letterSpacing": 0.5 + }, + "h6": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true + }, + "p": { + "font": "body", + "size": 17, + "color": "374151", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + }, + "weight": 400 + }, + "blockquote": { + "font": "body", + "size": 19, + "color": "111827", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 0, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "indent": 20 + }, + "code": { + "font": "code", + "size": 14, + "color": "111827", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + }, + "borderRadius": 4, + "padding": 2 + }, + "pre": { + "font": "code", + "size": 13, + "color": "111827", + "background": "codeBg", + "padding": 20, + "spacing": { + "before": 20, + "after": 20, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 17, + "color": "374151", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "111827" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "2563EB", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "th": { + "font": "heading", + "size": 14, + "color": "111827", + "bold": true, + "background": "F9FAFB", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 15, + "color": "374151", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "9CA3AF" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FEF3C7", + "color": "111827" + }, + "footnote": { + "font": "body", + "size": 13, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 13, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.4 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/environmental-green.json b/src-tauri/templates/core/environmental-green.json new file mode 100644 index 0000000..293d1b3 --- /dev/null +++ b/src-tauri/templates/core/environmental-green.json @@ -0,0 +1,302 @@ +{ + "id": "environmental-green", + "name": "Environmental Green", + "category": "Sustainability", + "description": "Earthy, organic, and grounded. Designed for sustainability reports, nature guides, and eco-friendly brands.", + "vibe": "Organic, Earthy, Sustainable", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Merriweather:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Nunito:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Fira+Code:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Merriweather", + "body": "Nunito", + "code": "Fira Code" + }, + "colors": { + "text": "333333", + "textSecondary": "5D4037", + "background": "F1F8E9", + "accent": "2E7D32", + "border": "AED581", + "codeBg": "DCEDC8", + "blockquoteBorder": "558B2F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "2E7D32", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + }, + "italic": true + }, + "h2": { + "font": "heading", + "size": 24, + "color": "5D4037", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + }, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "h3": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "333333", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.7 + } + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "558B2F", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "padding": 20, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "FFFFFF", + "borderRadius": 8 + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "leaf" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "heading", + "italic": true + }, + "a": { + "font": "body", + "color": "2E7D32", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "558B2F", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "DCEDC8", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/highway-interstate.json b/src-tauri/templates/core/highway-interstate.json new file mode 100644 index 0000000..79517fb --- /dev/null +++ b/src-tauri/templates/core/highway-interstate.json @@ -0,0 +1,323 @@ +{ + "id": "highway-interstate", + "name": "Highway Interstate", + "category": "Urban", + "description": "Inspired by the clarity of road signage. Optimized for high-speed readability with reflective white text on deep green backgrounds.", + "vibe": "Functional, Navigation, Clear", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Overpass:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Inter:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Overpass", + "body": "Inter", + "code": "JetBrains Mono" + }, + "colors": { + "text": "FFFFFF", + "textSecondary": "B2DFDB", + "background": "004D40", + "accent": "FFEB3B", + "border": "FFFFFF", + "codeBg": "00695C", + "blockquoteBorder": "FFEB3B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "FFFFFF", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "allCaps": true, + "borderBottom": { + "color": "FFFFFF", + "width": 4, + "style": "solid" + } + , + "padding": 16 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "background": "000000", + "padding": 8, + "borderRadius": 4, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 18, + "color": "FFFFFF", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "borderLeft": { + "color": "accent", + "width": 6, + "style": "solid" + } + , + "padding": 8 + }, + "h4": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "FFFFFF", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + }, + "weight": 500 + }, + "blockquote": { + "font": "heading", + "size": 16, + "color": "000000", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "padding": 20, + "border": { + "color": "000000", + "width": 4, + "style": "solid" + }, + "background": "FFEB3B", + "borderRadius": 8 + }, + "code": { + "font": "code", + "size": 14, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "FFFFFF", + "background": "000000", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "FFFFFF", + "width": 2, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "FFFFFF", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "heading", + "italic": true + }, + "a": { + "font": "heading", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "FFFFFF", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "000000", + "bold": true, + "background": "FFFFFF", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "FFFFFF", + "padding": 12, + "borderBottom": { + "color": "FFFFFF", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "FFFFFF", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "B2DFDB" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFEB3B", + "color": "000000" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/jungle-explorer.json b/src-tauri/templates/core/jungle-explorer.json new file mode 100644 index 0000000..3d883c5 --- /dev/null +++ b/src-tauri/templates/core/jungle-explorer.json @@ -0,0 +1,316 @@ +{ + "id": "jungle-explorer", + "name": "Jungle Explorer", + "category": "Adventure", + "description": "Inspired by field notes from a safari expedition. Stencil headings, khaki backgrounds, and durable typography.", + "vibe": "Adventure, Rugged, Natural", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Stardos+Stencil:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Chivo:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Special+Elite:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Stardos Stencil", + "body": "Chivo", + "code": "Special Elite" + }, + "colors": { + "text": "3E2723", + "textSecondary": "558B2F", + "background": "F9FBE7", + "accent": "827717", + "border": "A1887F", + "codeBg": "EFEBE9", + "blockquoteBorder": "827717" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "3E2723", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "allCaps": true, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "dashed" + } + , + "background": "DCEDC8", + "padding": 12 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "borderLeft": { + "color": "text", + "width": 6, + "style": "solid" + } + , + "padding": 8 + }, + "h3": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "3E2723", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + } + }, + "blockquote": { + "font": "code", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "padding": 20, + "background": "FFF8E1", + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "rotation": -1 + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + }, + "borderRadius": 2 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "3E2723", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "558B2F", + "padding": 10 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 10, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "accent", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "3E2723", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFCC80", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/public-transit.json b/src-tauri/templates/core/public-transit.json new file mode 100644 index 0000000..d0cab5b --- /dev/null +++ b/src-tauri/templates/core/public-transit.json @@ -0,0 +1,309 @@ +{ + "id": "public-transit", + "name": "Public Transit", + "category": "Urban", + "description": "Modern metro system aesthetic. Functional geometry, bold color lines, and universal symbols.", + "vibe": "Urban, Connected, Systematic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Manrope:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Work Sans", + "body": "Manrope", + "code": "JetBrains Mono" + }, + "colors": { + "text": "111111", + "textSecondary": "616161", + "background": "FFFFFF", + "accent": "F44336", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBorder": "2196F3" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "111111", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "allCaps": true, + "borderBottom": { + "color": "accent", + "width": 8, + "style": "solid" + } + , + "letterSpacing": -1.0 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "111111", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "background": "FFC107", + "padding": 8, + "borderRadius": 50, + "display": "inline-block" + }, + "h3": { + "font": "heading", + "size": 18, + "color": "2196F3", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "111111", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 16, + "color": "111111", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "padding": 24, + "borderLeft": { + "color": "4CAF50", + "width": 8, + "style": "solid" + }, + "background": "FAFAFA" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "2196F3", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "111111", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "E0E0E0", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 20, + "after": 20 + }, + "borderRadius": 4 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFEB3B", + "color": "000000" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/silent-film-intertitle.json b/src-tauri/templates/core/silent-film-intertitle.json new file mode 100644 index 0000000..b6c51b3 --- /dev/null +++ b/src-tauri/templates/core/silent-film-intertitle.json @@ -0,0 +1,316 @@ +{ + "id": "silent-film-intertitle", + "name": "Silent Film Intertitle", + "category": "Cinema", + "description": "Authentic 1920s intertitle aesthetic. High contrast, ornate art deco borders, and projected silver screen typography.", + "vibe": "Cinematic, Vintage, Silent", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Limelight:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Cormorant+SC:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Parkside:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Limelight", + "body": "Cormorant SC", + "code": "Parkside" + }, + "colors": { + "text": "F5F5F5", + "textSecondary": "BDBDBD", + "background": "000000", + "accent": "E0E0E0", + "border": "FFFFFF", + "codeBg": "212121", + "blockquoteBorder": "FFFFFF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "FFFFFF", + "bold": false, + "align": "center", + "spacing": { + "before": 40, + "after": 20, + "line": 1.1 + }, + "allCaps": true, + "textShadow": "0px 0px 8px rgba(255,255,255,0.8)" + }, + "h2": { + "font": "body", + "size": 24, + "color": "E0E0E0", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "borderBottom": { + "color": "FFFFFF", + "width": 1, + "style": "solid" + }, + "borderTop": { + "color": "FFFFFF", + "width": 1, + "style": "solid" + }, + "padding": 8, + "display": "inline-block" + }, + "h3": { + "font": "body", + "size": 20, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + }, + "allCaps": true + }, + "h4": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 14, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 14, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 20, + "color": "F5F5F5", + "align": "center", + "spacing": { + "before": 0, + "after": 20, + "line": 1.5 + }, + "weight": 600 + }, + "blockquote": { + "font": "code", + "size": 24, + "color": "000000", + "align": "center", + "spacing": { + "before": 30, + "after": 30, + "line": 1.6 + }, + "padding": 40, + "background": "FFFFFF", + "border": { + "color": "000000", + "width": 4, + "style": "double" + }, + "rotation": 1 + }, + "code": { + "font": "heading", + "size": 16, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "heading", + "size": 16, + "color": "text", + "background": "codeBg", + "padding": 20, + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 30, + "bullet": "diamond" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 30, + "numbering": "roman" + }, + "li": { + "font": "body", + "size": 18, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": false + }, + "em": { + "font": "code", + "italic": false, + "size": 22 + }, + "a": { + "font": "heading", + "color": "FFFFFF", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.3 + }, + "border": { + "color": "FFFFFF", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "000000", + "bold": false, + "background": "FFFFFF", + "padding": 12 + }, + "td": { + "font": "body", + "size": 18, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "FFFFFF", + "width": 1, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "FFFFFF", + "width": 8, + "style": "double" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "757575" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "424242", + "color": "FFFFFF" + }, + "footnote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 14, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 40, + "bottom": 40, + "left": 40, + "right": 40 + }, + "columns": 1, + "header": false, + "footer": false + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/sports-dynamic.json b/src-tauri/templates/core/sports-dynamic.json new file mode 100644 index 0000000..75da1c8 --- /dev/null +++ b/src-tauri/templates/core/sports-dynamic.json @@ -0,0 +1,324 @@ +{ + "id": "sports-dynamic", + "name": "Sports Dynamic", + "category": "Sports", + "description": "High-velocity design for athletic events and esports. Sharp angles, italicized motion, and high-contrast neon accents.", + "vibe": "Energetic, Competitive, Fast", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Teko:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Exo+2:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Chakra+Petch:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Teko", + "body": "Exo 2", + "code": "Chakra Petch" + }, + "colors": { + "text": "FFFFFF", + "textSecondary": "B0BEC5", + "background": "121212", + "accent": "FF3D00", + "border": "2979FF", + "codeBg": "263238", + "blockquoteBorder": "FF3D00" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 64, + "color": "FFFFFF", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 0.9 + }, + "allCaps": true, + "italic": false, + "textShadow": "4px 4px 0px #2979FF" + }, + "h2": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.0 + }, + "borderLeft": { + "color": "accent", + "width": 8, + "style": "solid" + } + , + "padding": 12, + "background": "1E1E1E", + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 28, + "color": "2979FF", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.1 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 18, + "color": "FFFFFF", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + }, + "italic": true, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "FFFFFF", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 24, + "color": "FFFFFF", + "bold": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "padding": 30, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "background": "1A237E", + "italic": false + }, + "code": { + "font": "code", + "size": 14, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "accent", + "background": "000000", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "FFFFFF", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true, + "color": "2979FF" + }, + "a": { + "font": "body", + "color": "2979FF", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.2 + }, + "border": { + "color": "37474F", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "FFFFFF", + "bold": true, + "background": "263238", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 14, + "color": "FFFFFF", + "padding": 12, + "borderBottom": { + "color": "37474F", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "FFFFFF", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "546E7A" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "2979FF", + "color": "FFFFFF" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/steampunk-inventor.json b/src-tauri/templates/core/steampunk-inventor.json new file mode 100644 index 0000000..12088a6 --- /dev/null +++ b/src-tauri/templates/core/steampunk-inventor.json @@ -0,0 +1,318 @@ +{ + "id": "steampunk-inventor", + "name": "Steampunk Inventor", + "category": "Fantasy", + "description": "Victorian sci-fi blueprints. Brass headings, typewriter schematics, and tea-stained parchment aesthetics.", + "vibe": "Mechanical, Vintage, Industrial", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Rye:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Special+Elite:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Cutive+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Rye", + "body": "Special Elite", + "code": "Cutive Mono" + }, + "colors": { + "text": "3E2723", + "textSecondary": "5D4037", + "background": "D7CCC8", + "accent": "B8860B", + "border": "8D6E63", + "codeBg": "EFEBE9", + "blockquoteBorder": "B8860B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "3E2723", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "double" + } + , + "textShadow": "1px 1px 0px #B8860B" + }, + "h2": { + "font": "heading", + "size": 24, + "color": "5D4037", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "borderLeft": { + "color": "accent", + "width": 6, + "style": "solid" + } + , + "padding": 6, + "background": "EFEBE9" + }, + "h3": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "3E2723", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "5D4037", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "padding": 20, + "border": { + "color": "accent", + "width": 3, + "style": "dashed" + }, + "background": "EFEBE9", + "borderRadius": 4 + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "backgroundImage": "url('grid-pattern.png')" + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "bullet": "gear" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "numbering": "roman" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "3E2723", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "3E2723", + "width": 2, + "style": "double" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "3E2723", + "bold": true, + "background": "B8860B", + "padding": 10 + }, + "td": { + "font": "body", + "size": 14, + "color": "3E2723", + "padding": 10, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "accent", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "5D4037", + "width": 4, + "style": "solid" + }, + "filter": "sepia(100%)" + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "B8860B", + "color": "FFFFFF" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/subway-tile.json b/src-tauri/templates/core/subway-tile.json new file mode 100644 index 0000000..111877b --- /dev/null +++ b/src-tauri/templates/core/subway-tile.json @@ -0,0 +1,323 @@ +{ + "id": "subway-tile", + "name": "Subway Tile", + "category": "Urban", + "description": "Ceramic station aesthetic. Clean, geometric design inspired by classic metropolitan subway systems.", + "vibe": "Clean, Geometric, Classic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lexend+Deca:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Darker+Grotesque:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Fira+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Lexend Deca", + "body": "Darker Grotesque", + "code": "Fira Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "546E7A", + "background": "F5F5F5", + "accent": "004D40", + "border": "B0BEC5", + "codeBg": "ECEFF1", + "blockquoteBorder": "004D40" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "FFFFFF", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "allCaps": true, + "background": "004D40", + "padding": 20, + "borderRadius": 8, + "border": { + "color": "FFFFFF", + "width": 4, + "style": "solid" + }, + "textShadow": "2px 2px 4px rgba(0,0,0,0.3)" + }, + "h2": { + "font": "heading", + "size": 28, + "color": "004D40", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "borderBottom": { + "color": "004D40", + "width": 4, + "style": "solid" + } + , + "padding": 8 + }, + "h3": { + "font": "heading", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 16, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 20, + "color": "263238", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + }, + "weight": 500 + }, + "blockquote": { + "font": "body", + "size": 22, + "color": "004D40", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 30, + "border": { + "color": "top", + "width": 4, + "style": "solid" + }, + "background": "FFFFFF", + "borderRadius": 4, + "boxShadow": "0px 4px 6px rgba(0,0,0,0.1)" + }, + "code": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "padding": 20, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 20, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "004D40", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "B0BEC5", + "width": 2, + "style": "solid" + }, + "borderRadius": 8 + }, + "th": { + "font": "heading", + "size": 16, + "color": "FFFFFF", + "bold": true, + "background": "546E7A", + "padding": 12 + }, + "td": { + "font": "body", + "size": 18, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "004D40", + "width": 8, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "FFFFFF", + "width": 8, + "style": "solid" + }, + "boxShadow": "0px 2px 4px rgba(0,0,0,0.2)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "90A4AE" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "004D40", + "color": "FFFFFF" + }, + "footnote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 14, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/taxi-cab.json b/src-tauri/templates/core/taxi-cab.json new file mode 100644 index 0000000..18a9736 --- /dev/null +++ b/src-tauri/templates/core/taxi-cab.json @@ -0,0 +1,315 @@ +{ + "id": "taxi-cab", + "name": "Taxi Cab", + "category": "Urban", + "description": "Iconic NYC yellow cab aesthetic. High-contrast black on yellow, checkerboard patterns, and digital meter typography.", + "vibe": "Urban, Loud, Iconic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Archivo+Black:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Share+Tech+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Saira+Stencil+One:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Archivo Black", + "body": "Share Tech Mono", + "code": "Saira Stencil One" + }, + "colors": { + "text": "101010", + "textSecondary": "212121", + "background": "FFD600", + "accent": "000000", + "border": "000000", + "codeBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.0 + }, + "allCaps": true, + "textShadow": "2px 2px 0px #FFFFFF", + "borderBottom": { + "color": "000000", + "width": 8, + "style": "dashed" + } + }, + "h2": { + "font": "code", + "size": 32, + "color": "FFFFFF", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.1 + }, + "background": "000000", + "padding": 10, + "borderRadius": 4, + "display": "inline-block" + }, + "h3": { + "font": "heading", + "size": 24, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 20, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 18, + "color": "212121", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 16, + "color": "212121", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 18, + "color": "101010", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + }, + "weight": 400 + }, + "blockquote": { + "font": "body", + "size": 18, + "color": "000000", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "padding": 24, + "border": { + "color": "000000", + "width": 4, + "style": "solid" + }, + "background": "FFFFFF", + "italic": false, + "fontFamily": "Share Tech Mono" + }, + "code": { + "font": "code", + "size": 16, + "color": "000000", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 16, + "color": "000000", + "background": "FFFFFF", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.2 + }, + "border": { + "color": "000000", + "width": 2, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 18, + "color": "000000", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "000000", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "000000", + "width": 4, + "style": "solid" + }, + "background": "FFFFFF" + }, + "th": { + "font": "heading", + "size": 16, + "color": "FFD600", + "bold": true, + "background": "000000", + "padding": 12 + }, + "td": { + "font": "body", + "size": 16, + "color": "000000", + "padding": 12, + "borderBottom": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "000000", + "width": 8, + "style": "dashed" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "000000", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "424242" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "000000", + "color": "FFD600" + }, + "footnote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 14, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/core/varsity-team.json b/src-tauri/templates/core/varsity-team.json new file mode 100644 index 0000000..24fbd47 --- /dev/null +++ b/src-tauri/templates/core/varsity-team.json @@ -0,0 +1,338 @@ +{ + "id": "varsity-team", + "name": "Varsity Team", + "category": "Sport", + "description": "The quintessential college athlete aesthetic. Bold block letters, gold accents, and academic prestige.", + "vibe": "Athletic, Collegiate, Bold", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Graduate:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Bitter:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Chivo+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Graduate", + "body": "Bitter", + "code": "Chivo Mono" + }, + "colors": { + "text": "1A237E", + "textSecondary": "3949AB", + "background": "FFFFFF", + "accent": "FFD600", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBorder": "1A237E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "1A237E", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.0 + }, + "allCaps": true, + "textShadow": "2px 2px 0px #FFD600", + "borderBottom": { + "color": "1A237E", + "width": 8, + "style": "double" + } + }, + "h2": { + "font": "heading", + "size": 32, + "color": "FFFFFF", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.1 + }, + "background": "1A237E", + "padding": 12, + "borderTop": { + "color": "FFD600", + "width": 4, + "style": "solid" + }, + "borderBottom": { + "color": "FFD600", + "width": 4, + "style": "solid" + }, + "display": "block", + "allCaps": true + }, + "h3": { + "font": "body", + "size": 24, + "color": "1A237E", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + }, + "borderLeft": { + "color": "FFD600", + "width": 6, + "style": "solid" + } + , + "padding": 6 + }, + "h4": { + "font": "body", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 18, + "color": "2c3e50", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 20, + "color": "1A237E", + "bold": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.3 + }, + "padding": 24, + "border": { + "color": "FFD600", + "width": 4, + "style": "solid" + }, + "background": "FAFAFA", + "italic": false + }, + "code": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 18, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "1A237E" + }, + "em": { + "font": "body", + "italic": true, + "color": "FFD600" + }, + "a": { + "font": "body", + "color": "1A237E", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "1A237E", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "FFFFFF", + "bold": true, + "background": "1A237E", + "padding": 12, + "borderBottom": { + "color": "FFD600", + "width": 4, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 16, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "E0E0E0", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "FFD600", + "width": 6, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "1A237E", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "757575" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFD600", + "color": "1A237E" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/annual-report.json b/src-tauri/templates/corporate/annual-report.json new file mode 100644 index 0000000..d7704e1 --- /dev/null +++ b/src-tauri/templates/corporate/annual-report.json @@ -0,0 +1,315 @@ +{ + "id": "annual-report", + "name": "Annual Report", + "category": "Corporate", + "description": "Trustworthy and substantial. Deep navy blues, clean sans-serifs, and grid-like precision for financial clarity.", + "vibe": "Financial, Serious, Trust", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Libre+Franklin:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Merriweather:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Libre Franklin", + "body": "Merriweather", + "code": "Roboto Mono" + }, + "colors": { + "text": "333333", + "textSecondary": "666666", + "background": "FFFFFF", + "accent": "0D2B46", + "border": "E0E0E0", + "codeBg": "F5F7FA", + "blockquoteBorder": "0D2B46" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 40, + "after": 20, + "line": 1.1 + }, + "weight": 900, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "h2": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 1, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "h3": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true + }, + "h6": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + }, + "weight": 300 + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "accent", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "borderLeft": { + "color": "accent", + "width": 6, + "style": "solid" + }, + "background": "F5F7FA" + }, + "code": { + "font": "code", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "FFFFFF", + "bold": true, + "background": "accent", + "padding": 8 + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFF9C4", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 50, + "bottom": 50, + "left": 50, + "right": 50 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/corporate-executive.json b/src-tauri/templates/corporate/corporate-executive.json new file mode 100644 index 0000000..aff561e --- /dev/null +++ b/src-tauri/templates/corporate/corporate-executive.json @@ -0,0 +1,309 @@ +{ + "id": "corporate-executive", + "name": "Corporate Executive", + "category": "Corporate", + "description": "Authoritative and professional. Designed for board reports, executive summaries, and high-stakes business communications.", + "vibe": "Executive, Formal, Trustworthy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Source+Sans+3:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Inconsolata:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Source Serif 4", + "body": "Source Sans 3", + "code": "Inconsolata" + }, + "colors": { + "text": "333333", + "textSecondary": "546E7A", + "background": "FFFFFF", + "accent": "1A237E", + "border": "B0BEC5", + "codeBg": "ECEFF1", + "blockquoteBorder": "1A237E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 15, + "line": 1.2 + }, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "303F9F", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + }, + "allCaps": true, + "letterSpacing": 0.5 + }, + "h3": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "italic": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "accent", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 16, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "F8F9FA" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "303F9F", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "FFFFFF", + "bold": true, + "background": "accent", + "padding": 10 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 10, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "E8EAF6", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/credit-card-platinum.json b/src-tauri/templates/corporate/credit-card-platinum.json new file mode 100644 index 0000000..cc1912c --- /dev/null +++ b/src-tauri/templates/corporate/credit-card-platinum.json @@ -0,0 +1,316 @@ +{ + "id": "credit-card-platinum", + "name": "Platinum Card", + "category": "Corporate", + "description": "Exclusive and premium. Metallic silver gradients, OCR-style numbering, and sharp contrast.", + "vibe": "Luxury, Financial, Metallic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cinzel:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Share+Tech+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Cinzel", + "body": "Montserrat", + "code": "Share Tech Mono" + }, + "colors": { + "text": "E0E0E0", + "textSecondary": "B0BEC5", + "background": "121212", + "accent": "FFD700", + "border": "424242", + "codeBg": "263238", + "blockquoteBorder": "B0BEC5" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "E0E0E0", + "bold": true, + "align": "right", + "spacing": { + "before": 40, + "after": 20, + "line": 1.2 + }, + "allCaps": true, + "textShadow": "0px 2px 4px rgba(0,0,0,0.5)" + }, + "h2": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 10, + "line": 1.3 + }, + "allCaps": true, + "letterSpacing": 2.0 + }, + "h3": { + "font": "code", + "size": 16, + "color": "E0E0E0", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + }, + "textShadow": "1px 1px 0px #000000" + }, + "h4": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "code", + "size": 10, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "E0E0E0", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + }, + "weight": 300 + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "E0E0E0", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "borderTop": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "background": "263238" + }, + "code": { + "font": "code", + "size": 12, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + }, + "letterSpacing": 1.5 + }, + "pre": { + "font": "code", + "size": 12, + "color": "E0E0E0", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "bullet": "diamond" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal-zero" + }, + "li": { + "font": "body", + "size": 11, + "color": "E0E0E0", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "FFFFFF" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "background": "212121" + }, + "th": { + "font": "heading", + "size": 10, + "color": "121212", + "bold": true, + "background": "B0BEC5", + "padding": 8 + }, + "td": { + "font": "body", + "size": 11, + "color": "E0E0E0", + "padding": 8, + "borderBottom": { + "color": "424242", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 36, + "after": 36 + }, + "border": { + "color": "B0BEC5", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "B0BEC5", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "757575" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "424242", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "757575", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "757575", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 40, + "bottom": 40, + "left": 40, + "right": 40 + }, + "columns": 1, + "header": true, + "footer": true, + "background": "121212" + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/currency-bill.json b/src-tauri/templates/corporate/currency-bill.json new file mode 100644 index 0000000..e0cab79 --- /dev/null +++ b/src-tauri/templates/corporate/currency-bill.json @@ -0,0 +1,314 @@ +{ + "id": "currency-bill", + "name": "Currency Bill", + "category": "Corporate", + "description": "Engraved authority. Intricate border styles, heavy serif headings, and banknote aesthetics.", + "vibe": "Federal, Official, Monetary", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Playfair+Display+SC:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noto+Serif:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Fira+Code:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display SC", + "body": "Noto Serif", + "code": "Fira Code" + }, + "colors": { + "text": "1B3022", + "textSecondary": "4A5D50", + "background": "F4F8F4", + "accent": "2E7D32", + "border": "B9C6BD", + "codeBg": "E8F5E9", + "blockquoteBorder": "2E7D32" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "1B3022", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 20, + "line": 1.0 + }, + "allCaps": true, + "textShadow": "0px 1px 0px rgba(0,0,0,0.2), 0px 0px 0px #1B3022" + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "borderTop": { + "color": "accent", + "width": 1, + "style": "double" + }, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "double" + }, + "padding": 8 + }, + "h3": { + "font": "heading", + "size": 18, + "color": "1B3022", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + } + }, + "h4": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 16, + "color": "1B3022", + "italic": false, + "align": "center", + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "padding": 20, + "border": { + "color": "accent", + "width": 3, + "style": "solid" + }, + "background": "E8F5E9" + }, + "code": { + "font": "code", + "size": 11, + "color": "1B3022", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "1B3022", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 24, + "numbering": "upper-roman" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 2, + "after": 2, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "1B3022" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.2 + }, + "border": { + "color": "1B3022", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "F4F8F4", + "bold": true, + "background": "1B3022", + "padding": 8 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "B9C6BD", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "1B3022", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "1B3022", + "width": 4, + "style": "double" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "C8E6C9", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 40, + "bottom": 40, + "left": 40, + "right": 40 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/legal-contract.json b/src-tauri/templates/corporate/legal-contract.json new file mode 100644 index 0000000..2047ea4 --- /dev/null +++ b/src-tauri/templates/corporate/legal-contract.json @@ -0,0 +1,310 @@ +{ + "id": "legal-contract", + "name": "Legal Contract", + "category": "Corporate", + "description": "The standard analysis. Dense serif typography, defined numbering, and ironclad readability.", + "vibe": "Legal, Binding, Formal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Tinos:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Courier+Prime:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Tinos", + "body": "Tinos", + "code": "Courier Prime" + }, + "colors": { + "text": "000000", + "textSecondary": "333333", + "background": "FFFFFF", + "accent": "000000", + "border": "000000", + "codeBg": "F0F0F0", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "underline": true + }, + "h2": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 6, + "line": 1.2 + }, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + }, + "underline": true + }, + "h4": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "h5": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + }, + "italic": true + }, + "h6": { + "font": "heading", + "size": 11, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 12, + "line": 1.15 + }, + "numbering": "section" + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 12, + "after": 12, + "line": 1.15 + }, + "padding": 12, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.15 + }, + "indent": 36, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.15 + }, + "indent": 36, + "numbering": "lower-alpha" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 0, + "after": 6, + "line": 1.15 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "text", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "background": "F0F0F0", + "padding": 6, + "borderBottom": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 6, + "borderBottom": { + "color": "CCCCCC", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 12, + "after": 12 + }, + "border": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFFF00", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/legal-pleading.json b/src-tauri/templates/corporate/legal-pleading.json new file mode 100644 index 0000000..6af9974 --- /dev/null +++ b/src-tauri/templates/corporate/legal-pleading.json @@ -0,0 +1,310 @@ +{ + "id": "legal-pleading", + "name": "Legal Pleading", + "category": "Corporate", + "description": "Court-ready pleading format. Pleading paper line numbers, double spacing, and strict compliance.", + "vibe": "Courtroom, Litigation, Procedural", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Courier+Prime:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Courier Prime", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "000000", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "000000", + "border": "000000", + "codeBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 2.0 + }, + "allCaps": true, + "underline": true + }, + "h2": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 2.0 + }, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 0, + "line": 2.0 + }, + "underline": true + }, + "h4": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 0, + "line": 2.0 + } + }, + "h5": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 0, + "line": 2.0 + }, + "italic": true + }, + "h6": { + "font": "heading", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 0, + "line": 2.0 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 0, + "line": 2.0 + }, + "indent": 48 + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 0, + "after": 0, + "line": 1.0 + }, + "padding": 48, + "borderLeft": { + "color": "transparent", + "width": 0, + "style": "none" + } + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 2.0 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 2.0 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 0, + "after": 0, + "line": 2.0 + }, + "indent": 48, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 0, + "after": 0, + "line": 2.0 + }, + "indent": 48, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 0, + "after": 0, + "line": 2.0 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "text", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.0 + }, + "border": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "background": "FFFFFF", + "padding": 6, + "borderBottom": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 6, + "borderBottom": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 12, + "after": 12 + }, + "border": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFFF00", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.0 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 108, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/passport-official.json b/src-tauri/templates/corporate/passport-official.json new file mode 100644 index 0000000..7b93bdf --- /dev/null +++ b/src-tauri/templates/corporate/passport-official.json @@ -0,0 +1,174 @@ +{ + "id": "passport-official", + "name": "Official Passport", + "category": "Corporate", + "description": "Secure identity document style. Microprint aesthetics, guilloche suggestions, and OCR fonts.", + "vibe": "Government, Secure, Travel", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Space+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Roboto", + "body": "Space Mono", + "code": "Space Mono" + }, + "colors": { + "text": "1A237E", + "textSecondary": "3949AB", + "background": "E8EAF6", + "accent": "C2185B", + "border": "B39DDB", + "codeBg": "E3F2FD", + "blockquoteBorder": "1A237E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "left", + "spacing": { "before": 24, "after": 12, "line": 1.2 }, + "allCaps": true, + "letterSpacing": 1.0, + "borderBottom": { "color": "accent", "width": 2, "style": "solid" } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { "before": 20, "after": 10, "line": 1.3 }, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { "before": 16, "after": 8, "line": 1.3 } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { "before": 16, "after": 8, "line": 1.4 }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { "before": 12, "after": 6, "line": 1.4 } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { "before": 12, "after": 6, "line": 1.4 } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { "before": 0, "after": 12, "line": 1.5 }, + "weight": 500 + }, + "blockquote": { + "font": "code", + "size": 12, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { "before": 16, "after": 16, "line": 1.4 }, + "padding": 16, + "border": { "color": "accent", "width": 2, "style": "dashed" }, + "background": "FFFFFF" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { "before": 0, "after": 0, "line": 1.4 } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { "before": 12, "after": 12, "line": 1.4 }, + "border": { "color": "border", "width": 1, "style": "solid" } + }, + "ul": { + "spacing": { "before": 12, "after": 12, "line": 1.5 }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { "before": 12, "after": 12, "line": 1.5 }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { "before": 4, "after": 4, "line": 1.5 } + }, + "strong": { "font": "heading", "bold": true, "color": "text" }, + "em": { "font": "body", "italic": true }, + "a": { "font": "body", "color": "accent", "underline": true, "bold": true }, + "table": { + "spacing": { "before": 16, "after": 16, "line": 1.2 }, + "border": { "color": "border", "width": 1, "style": "solid" } + }, + "th": { + "font": "heading", + "size": 11, + "color": "FFFFFF", + "bold": true, + "background": "text", + "padding": 8 + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 8, + "borderBottom": { "color": "border", "width": 1, "style": "solid" } + }, + "hr": { + "spacing": { "before": 24, "after": 24 }, + "border": { "color": "border", "width": 1, "style": "solid" } + }, + "img": { + "align": "left", + "spacing": { "before": 16, "after": 16 }, + "border": { "color": "text", "width": 2, "style": "solid" }, + "filter": "grayscale(100%)" + }, + "del": { "font": "body", "strikethrough": true, "color": "accent" }, + "sup": { "font": "body", "size": 9, "superScript": true }, + "sub": { "font": "body", "size": 9, "subScript": true }, + "mark": { "font": "body", "background": "E1BEE7", "color": "text" }, + "footnote": { "font": "body", "size": 10, "color": "textSecondary", "superScript": true }, + "footnoteRef": { "font": "body", "size": 10, "color": "textSecondary", "spacing": { "before": 6, "after": 6, "line": 1.2 } } + }, + "page": { + "margins": { "top": 40, "bottom": 40, "left": 40, "right": 40 }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/police-blotter.json b/src-tauri/templates/corporate/police-blotter.json new file mode 100644 index 0000000..b28fb67 --- /dev/null +++ b/src-tauri/templates/corporate/police-blotter.json @@ -0,0 +1,317 @@ +{ + "id": "police-blotter", + "name": "Police Blotter", + "category": "Corporate", + "description": "Bureaucratic field report style. Carbon copy aesthetics, monospace type, and form-like structure.", + "vibe": "Official, Gritty, Carbon Copy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Special+Elite:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Cutive+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Special Elite", + "body": "Cutive Mono", + "code": "Cutive Mono" + }, + "colors": { + "text": "1A237E", + "textSecondary": "5C6BC0", + "background": "F5F5F5", + "accent": "B71C1C", + "border": "9FA8DA", + "codeBg": "E8EAF6", + "blockquoteBorder": "1A237E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "borderBottom": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + }, + "background": "E8EAF6", + "padding": 4 + }, + "h3": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "underline": true + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 13, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.4 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "padding": 16, + "border": { + "color": "accent", + "width": 3, + "style": "solid" + }, + "background": "F5F5F5" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dotted" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "bullet": "hyphen" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 13, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.4 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "background": "E8EAF6", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 13, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "dotted" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "text", + "width": 2, + "style": "solid" + }, + "filter": "contrast(120%) grayscale(50%)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFCDD2", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 50, + "bottom": 50, + "left": 50, + "right": 50 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/political-campaign.json b/src-tauri/templates/corporate/political-campaign.json new file mode 100644 index 0000000..c63340a --- /dev/null +++ b/src-tauri/templates/corporate/political-campaign.json @@ -0,0 +1,311 @@ +{ + "id": "political-campaign", + "name": "Campaign Trail", + "category": "Corporate", + "description": "Bold, patriotic, and persuasive. Heavy sans-serif headlines designed for maximum visibility.", + "vibe": "Patriotic, Bold, Persuasive", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Roboto+Slab:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Courier+Prime:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Montserrat", + "body": "Roboto Slab", + "code": "Courier Prime" + }, + "colors": { + "text": "111111", + "textSecondary": "444444", + "background": "FFFFFF", + "accent": "BF0A30", + "border": "002868", + "codeBg": "F5F5F5", + "blockquoteBorder": "002868" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "border", + "bold": true, + "align": "left", + "spacing": { + "before": 40, + "after": 20, + "line": 1.0 + }, + "allCaps": true, + "weight": 900 + }, + "h2": { + "font": "heading", + "size": 32, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.1 + }, + "allCaps": true, + "weight": 700 + }, + "h3": { + "font": "heading", + "size": 24, + "color": "border", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h4": { + "font": "heading", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + }, + "weight": 300 + }, + "blockquote": { + "font": "heading", + "size": 20, + "color": "border", + "italic": true, + "align": "center", + "spacing": { + "before": 30, + "after": 30, + "line": 1.4 + }, + "padding": 20, + "borderTop": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "FFFFFF" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "border" + }, + "em": { + "font": "body", + "italic": true, + "color": "accent" + }, + "a": { + "font": "heading", + "color": "border", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "FFFFFF", + "bold": true, + "background": "border", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFEB3B", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 50, + "bottom": 50, + "left": 50, + "right": 50 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/professional.json b/src-tauri/templates/corporate/professional.json new file mode 100644 index 0000000..4329719 --- /dev/null +++ b/src-tauri/templates/corporate/professional.json @@ -0,0 +1,319 @@ +{ + "id": "professional", + "name": "Professional Business", + "category": "Corporate", + "description": "The gold standard for reports and proposals. Trustworthy, authoritative, and perfectly structured.", + "vibe": "Corporate, Trustworthy, Polished", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Montserrat", + "body": "Open Sans", + "code": "Roboto Mono" + }, + "colors": { + "text": "1A202C", + "textSecondary": "4A5568", + "background": "FFFFFF", + "accent": "2C5282", + "border": "E2E8F0", + "codeBg": "EDF2F7", + "blockquoteBorder": "2C5282" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "2C5282", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 1.0, + "borderBottom": { + "color": "E2E8F0", + "width": 1, + "style": "solid" + } + }, + "h2": { + "font": "heading", + "size": 24, + "color": "2D3748", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "borderLeft": { + "color": "2C5282", + "width": 4, + "style": "solid" + } + , + "padding": 8 + }, + "h3": { + "font": "heading", + "size": 18, + "color": "2C5282", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h4": { + "font": "heading", + "size": 16, + "color": "4A5568", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 6, + "line": 1.3 + } + }, + "h5": { + "font": "heading", + "size": 14, + "color": "4A5568", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.4 + }, + "allCaps": true + }, + "h6": { + "font": "heading", + "size": 12, + "color": "718096", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 6, + "line": 1.4 + }, + "allCaps": true + }, + "p": { + "font": "body", + "size": 14, + "color": "1A202C", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + }, + "weight": 400 + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "2D3748", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "padding": 16, + "borderLeft": { + "color": "2C5282", + "width": 4, + "style": "solid" + }, + "background": "F7FAFC" + }, + "code": { + "font": "code", + "size": 12, + "color": "2D3748", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "2D3748", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "1A202C", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "2C5282" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "2C5282", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.3 + }, + "border": { + "color": "E2E8F0", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "2C5282", + "padding": 10 + }, + "td": { + "font": "body", + "size": 14, + "color": "1A202C", + "padding": 10, + "borderBottom": { + "color": "E2E8F0", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "2C5282", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "E2E8F0", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "A0AEC0" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "ECC94B", + "color": "1A202C" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/stock-ticker.json b/src-tauri/templates/corporate/stock-ticker.json new file mode 100644 index 0000000..b24e135 --- /dev/null +++ b/src-tauri/templates/corporate/stock-ticker.json @@ -0,0 +1,311 @@ +{ + "id": "stock-ticker", + "name": "Wall Street", + "category": "Corporate", + "description": "High-frequency trading aesthetic. Neon green data on a pitch-black terminal background.", + "vibe": "Financial, Digital, Dark Mode", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=VT323:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "VT323", + "body": "JetBrains Mono", + "code": "VT323" + }, + "colors": { + "text": "00FF00", + "textSecondary": "008800", + "background": "000000", + "accent": "00FF00", + "border": "003300", + "codeBg": "0A0A0A", + "blockquoteBorder": "00FF00" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.0 + }, + "allCaps": true, + "textShadow": "0 0 5px #00FF00" + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.0 + }, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "dashed" + } + }, + "h3": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.0 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.4 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 18, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.2 + }, + "padding": 16, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "050505" + }, + "code": { + "font": "code", + "size": 14, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.2 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "accent", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "bullet": "greater-than" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "numbering": "binary" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 2, + "after": 2, + "line": 1.4 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "FFFFFF" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.2 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "background": "000000" + }, + "th": { + "font": "heading", + "size": 14, + "color": "000000", + "bold": false, + "background": "00FF00", + "padding": 8 + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "accent", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "660000" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "003300", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 40, + "bottom": 40, + "left": 40, + "right": 40 + }, + "columns": 1, + "header": true, + "footer": true, + "background": "000000" + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/tech-memo.json b/src-tauri/templates/corporate/tech-memo.json new file mode 100644 index 0000000..8551e41 --- /dev/null +++ b/src-tauri/templates/corporate/tech-memo.json @@ -0,0 +1,303 @@ +{ + "id": "tech-memo", + "name": "Tech Memo", + "category": "Corporate", + "description": "Silicon Valley minimalism. High readability, soft gray geometric type, and a focus on clarity.", + "vibe": "Tech, Modern, Clean", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Source+Code+Pro:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Roboto", + "body": "Open Sans", + "code": "Source Code Pro" + }, + "colors": { + "text": "374151", + "textSecondary": "6B7280", + "background": "FFFFFF", + "accent": "3B82F6", + "border": "E5E7EB", + "codeBg": "F3F4F6", + "blockquoteBorder": "3B82F6" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 30, + "color": "111827", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "weight": 700 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "374151", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + }, + "weight": 500 + }, + "h3": { + "font": "heading", + "size": 20, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h5": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true, + "letterSpacing": 0.5 + }, + "h6": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + }, + "weight": 400 + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.5 + }, + "padding": 16, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + }, + "background": "F9FAFB" + }, + "code": { + "font": "code", + "size": 12, + "color": "D946EF", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "1F2937", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "radius": 4 + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "111827" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": false, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "374151", + "bold": true, + "background": "F3F4F6", + "padding": 10, + "radius": 4 + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 10, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "radius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FEF3C7", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 60, + "bottom": 60, + "left": 60, + "right": 60 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/top-secret-redacted.json b/src-tauri/templates/corporate/top-secret-redacted.json new file mode 100644 index 0000000..31a924c --- /dev/null +++ b/src-tauri/templates/corporate/top-secret-redacted.json @@ -0,0 +1,316 @@ +{ + "id": "top-secret-redacted", + "name": "Classified", + "category": "Corporate", + "description": "For eyes only. Typewriter text, heavy redaction bars, and a sense of government secrecy.", + "vibe": "Secret, Government, Redacted", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Special+Elite:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Courier+Prime:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Special Elite", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "000000", + "textSecondary": "333333", + "background": "FFFFFF", + "accent": "000000", + "border": "000000", + "codeBg": "E0E0E0", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "borderTop": { + "color": "text", + "width": 4, + "style": "solid" + }, + "borderBottom": { + "color": "text", + "width": 4, + "style": "solid" + } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "underline": true + }, + "h3": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + }, + "weight": 400 + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "padding": 16, + "borderLeft": { + "color": "text", + "width": 10, + "style": "solid" + }, + "background": "F0F0F0" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 20, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "text", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "000000", + "padding": 8 + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "000000", + "width": 8, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "000000", + "width": 4, + "style": "solid" + }, + "filter": "contrast(150%)" + }, + "del": { + "font": "body", + "strikethrough": false, + "background": "000000", + "color": "000000" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "000000", + "color": "000000" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 50, + "bottom": 50, + "left": 50, + "right": 50 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/corporate/whiteboard-strategy.json b/src-tauri/templates/corporate/whiteboard-strategy.json new file mode 100644 index 0000000..c9df1f0 --- /dev/null +++ b/src-tauri/templates/corporate/whiteboard-strategy.json @@ -0,0 +1,310 @@ +{ + "id": "whiteboard-strategy", + "name": "Whiteboard", + "category": "Corporate", + "description": "Brainstorming mode. Marker-style fonts, colorful accents, and a fluid, open layout.", + "vibe": "Creative, Informal, Strategy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Permanent+Marker:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Kalam:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Patrick+Hand:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Permanent Marker", + "body": "Kalam", + "code": "Patrick Hand" + }, + "colors": { + "text": "1A237E", + "textSecondary": "B71C1C", + "background": "FFFFFF", + "accent": "2E7D32", + "border": "BDBDBD", + "codeBg": "F5F5F5", + "blockquoteBorder": "FF6F00" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 32, + "after": 24, + "line": 1.2 + }, + "rotation": -2 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "borderBottom": { + "color": "text", + "width": 3, + "style": "dashed" + } + }, + "h3": { + "font": "heading", + "size": 20, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + }, + "weight": 400 + }, + "blockquote": { + "font": "body", + "size": 20, + "color": "textSecondary", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "FFF8E1" + }, + "code": { + "font": "code", + "size": 16, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 16, + "color": "accent", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "bullet": "arrow" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "underline": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.3 + }, + "border": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "background": "E0F7FA", + "padding": 8 + }, + "td": { + "font": "body", + "size": 16, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "text", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "text", + "width": 4, + "style": "solid" + }, + "rotation": 2 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFEB3B", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 14, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.3 + } + } + }, + "page": { + "margins": { + "top": 50, + "bottom": 50, + "left": 50, + "right": 50 + }, + "columns": 1, + "header": true, + "footer": false + } +} \ No newline at end of file diff --git a/src-tauri/templates/creative/bauhaus-poster.json b/src-tauri/templates/creative/bauhaus-poster.json new file mode 100644 index 0000000..3c88e25 --- /dev/null +++ b/src-tauri/templates/creative/bauhaus-poster.json @@ -0,0 +1,317 @@ +{ + "id": "bauhaus-poster", + "name": "Bauhaus Poster", + "category": "creative", + "description": "Geometric minimalism inspired by the Bauhaus movement (1919-1933). Primary colors, bold diagonal lines, and functional typography.", + "vibe": "Geometric, Modernist, Functional", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Josefin+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Jost:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Josefin Sans", + "body": "Jost", + "code": "Jost" + }, + "colors": { + "text": "212121", + "textSecondary": "D50000", + "background": "F5F5F0", + "accent": "2962FF", + "border": "000000", + "codeBg": "FFEB3B", + "blockquoteBorder": "D50000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "textSecondary", + "bold": true, + "align": "right", + "spacing": { + "before": 48, + "after": 24, + "line": 1.1 + }, + "borderBottom": { + "color": "border", + "width": 8, + "style": "solid", + "space": 10 + }, + "allCaps": true, + "rotation": -2 + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.2 + }, + "background": "codeBg", + "padding": 12, + "rotation": 1 + }, + "h3": { + "font": "heading", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "borderLeft": { + "color": "accent", + "width": 12, + "style": "solid", + "space": 12 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 24, + "borderLeft": { + "color": "textSecondary", + "width": 16, + "style": "solid" + }, + "background": "transparent" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 12 + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 8, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/creative/blueprint-cyanotype.json b/src-tauri/templates/creative/blueprint-cyanotype.json new file mode 100644 index 0000000..a0d214e --- /dev/null +++ b/src-tauri/templates/creative/blueprint-cyanotype.json @@ -0,0 +1,314 @@ +{ + "id": "blueprint-cyanotype", + "name": "Blueprint Cyanotype", + "category": "creative", + "description": "Architectural schematics style with white lines on a deep blue grid. Precise, technical, and annotated.", + "vibe": "Technical, Architectural, Draft", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lexend:wght@100..900&family=Architects+Daughter&display=swap", + "typography": { + "fonts": { + "heading": "Lexend", + "body": "Lexend", + "code": "Architects Daughter" + }, + "colors": { + "text": "E3F2FD", + "textSecondary": "90CAF9", + "background": "0D47A1", + "accent": "FFEB3B", + "border": "64B5F6", + "codeBg": "1565C0", + "blockquoteBorder": "FFEB3B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.1 + }, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid", + "space": 8 + }, + "allCaps": true + }, + "h2": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h3": { + "font": "heading", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.2 + }, + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid", + "space": 8 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "h6": { + "font": "code", + "size": 12, + "color": "textSecondary", + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + } + }, + "blockquote": { + "font": "code", + "size": 14, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { + "before": 18, + "after": 18, + "line": 1.4 + }, + "padding": 12, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + }, + "rotation": -1 + }, + "code": { + "font": "heading", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "heading", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "cross" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal-leading-zero" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "code", + "italic": false + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": true, + "background": "codeBg", + "padding": 8, + "allCaps": true + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 18, + "after": 18 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "code", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "background", + "color": "background" + }, + "footnote": { + "font": "code", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "code", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 50, + "bottom": 50, + "left": 50, + "right": 50 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/creative/brick-toy.json b/src-tauri/templates/creative/brick-toy.json new file mode 100644 index 0000000..d6526bb --- /dev/null +++ b/src-tauri/templates/creative/brick-toy.json @@ -0,0 +1,313 @@ +{ + "id": "brick-toy", + "name": "Brick Toy", + "category": "creative", + "description": "Playful and colorful, inspired by plastic building blocks. Rounded typefaces, primary colors, and a fun, tactile vibe.", + "vibe": "Playful, Colorful, Fun", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Fredoka:wght@300..700&family=Varela+Round&display=swap", + "typography": { + "fonts": { + "heading": "Fredoka", + "body": "Varela Round", + "code": "Varela Round" + }, + "colors": { + "text": "212121", + "textSecondary": "1976D2", + "background": "FFFFFF", + "accent": "D32F2F", + "border": "FFEB3B", + "codeBg": "E3F2FD", + "blockquoteBorder": "388E3C" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 42, + "after": 21, + "line": 1.1 + }, + "background": "border", + "padding": 16, + "border": { + "color": "text", + "width": 3, + "style": "solid" + } + }, + "h2": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 28, + "after": 14, + "line": 1.2 + }, + "borderBottom": { + "color": "blockquoteBorder", + "width": 4, + "style": "dotted", + "space": 6 + } + }, + "h3": { + "font": "heading", + "size": 22, + "color": "blockquoteBorder", + "bold": true, + "align": "left", + "spacing": { + "before": 22, + "after": 11, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 7, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "background": "codeBg", + "border": { + "color": "textSecondary", + "width": 4, + "style": "solid" + } + }, + "code": { + "font": "body", + "size": 12, + "color": "accent", + "background": "border", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 12, + "color": "accent", + "background": "border", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 14, + "after": 14, + "line": 1.6 + }, + "indent": 28, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 14, + "after": 14, + "line": 1.6 + }, + "indent": 28, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary" + }, + "a": { + "font": "heading", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 21, + "after": 21, + "line": 1.2 + }, + "border": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "background", + "bold": true, + "background": "blockquoteBorder", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 28, + "after": 28 + }, + "border": { + "color": "accent", + "width": 6, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 21, + "after": 21 + }, + "border": { + "color": "text", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "border", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 60, + "bottom": 60, + "left": 60, + "right": 60 + }, + "columns": 1, + "header": true, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/creative/brutalist-mono.json b/src-tauri/templates/creative/brutalist-mono.json new file mode 100644 index 0000000..99de6bf --- /dev/null +++ b/src-tauri/templates/creative/brutalist-mono.json @@ -0,0 +1,341 @@ +{ + "id": "brutalist-mono", + "name": "Brutalist Mono", + "category": "creative", + "description": "Raw, undiluted design aesthetic. Monospaced type, heavy black borders, and an anti-design ethos.", + "vibe": "Raw, Industrial, Anti-Design", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap", + "typography": { + "fonts": { + "heading": "Space Mono", + "body": "DM Mono", + "code": "DM Mono" + }, + "colors": { + "text": "000000", + "textSecondary": "333333", + "background": "FFFFFF", + "accent": "000000", + "border": "000000", + "codeBg": "E0E0E0", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 40, + "after": 20, + "line": 1.1 + }, + "border": { + "color": "border", + "width": 6, + "style": "solid" + }, + "padding": 24, + "allCaps": true + }, + "h2": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "h3": { + "font": "heading", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "borderLeft": { + "color": "border", + "width": 12, + "style": "solid", + "space": 12 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "underline": true + }, + "h6": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 16, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 24, + "border": { + "color": "border", + "width": 4, + "style": "solid" + }, + "background": "codeBg" + }, + "code": { + "font": "body", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "text", + "background": "background", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "numbering": "decimal-leading-zero" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true, + "background": "codeBg" + }, + "a": { + "font": "heading", + "color": "text", + "underline": true, + "bold": true, + "background": "codeBg" + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "background", + "bold": true, + "background": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 4, + "style": "solid" + }, + "borderRight": { + "color": "background", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRight": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 8, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + }, + "grayscale": true + }, + "del": { + "font": "body", + "strikethrough": true, + "background": "text", + "color": "background" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "text", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 60, + "bottom": 60, + "left": 60, + "right": 60 + }, + "columns": 1, + "header": true, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/creative/creative-portfolio.json b/src-tauri/templates/creative/creative-portfolio.json new file mode 100644 index 0000000..86f0e5a --- /dev/null +++ b/src-tauri/templates/creative/creative-portfolio.json @@ -0,0 +1,306 @@ +{ + "id": "creative-portfolio", + "name": "Creative Portfolio", + "category": "creative", + "description": "Minimalist gallery style for showcasing visual work. Focuses on images and clean typography.", + "vibe": "Minimalist, Visual, Gallery", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Jost:ital,wght@0,300..900;1,300..900&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display", + "body": "Jost", + "code": "Jost" + }, + "colors": { + "text": "212121", + "textSecondary": "757575", + "background": "FFFFFF", + "accent": "000000", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 42, + "after": 42, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 28, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h3": { + "font": "heading", + "size": 22, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + }, + "allCaps": true, + "letterSpacing": 2 + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + }, + "allCaps": true + }, + "p": { + "font": "body", + "size": 16, + "color": "textSecondary", + "align": "left", + "spacing": { + "before": 0, + "after": 24, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 24, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 40, + "after": 40, + "line": 1.4 + }, + "padding": 0, + "border": { + "color": "transparent", + "width": 0, + "style": "none" + }, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 14, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 14, + "color": "text", + "background": "codeBg", + "padding": 24, + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal-leading-zero" + }, + "li": { + "font": "body", + "size": 16, + "color": "textSecondary", + "spacing": { + "before": 8, + "after": 8, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true, + "color": "text" + }, + "a": { + "font": "body", + "color": "text", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 32, + "after": 32, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "background": "codeBg", + "padding": 16, + "allCaps": true, + "letterSpacing": 1 + }, + "td": { + "font": "body", + "size": 16, + "color": "textSecondary", + "padding": 16, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 48, + "after": 48 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/creative/glitch-art.json b/src-tauri/templates/creative/glitch-art.json new file mode 100644 index 0000000..eff5f42 --- /dev/null +++ b/src-tauri/templates/creative/glitch-art.json @@ -0,0 +1,308 @@ +{ + "id": "glitch-art", + "name": "Glitch Art", + "category": "creative", + "description": "Cyberpunk aesthetic with distorted digital noise. High contrast neon colors on dark backgrounds.", + "vibe": "Cyberpunk, Distorted, Digital", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Rubik+Glitch&family=Share+Tech+Mono&display=swap", + "typography": { + "fonts": { + "heading": "Rubik Glitch", + "body": "Share Tech Mono", + "code": "Share Tech Mono" + }, + "colors": { + "text": "E0E0E0", + "textSecondary": "00E5FF", + "background": "121212", + "accent": "FF00E6", + "border": "00FF00", + "codeBg": "1E1E1E", + "blockquoteBorder": "00E5FF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.1 + }, + "borderLeft": { + "color": "textSecondary", + "width": 8, + "style": "solid", + "space": 16 + } + }, + "h2": { + "font": "heading", + "size": 32, + "color": "border", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.2 + }, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "border", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 24, + "border": { + "color": "accent", + "width": 2, + "style": "dashed" + }, + "background": "codeBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "border", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "border", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "numbering": "binary" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary" + }, + "a": { + "font": "body", + "color": "border", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 60, + "bottom": 60, + "left": 60, + "right": 60 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/creative/grunge-90s.json b/src-tauri/templates/creative/grunge-90s.json new file mode 100644 index 0000000..1072ab7 --- /dev/null +++ b/src-tauri/templates/creative/grunge-90s.json @@ -0,0 +1,321 @@ +{ + "id": "grunge-90s", + "name": "Grunge 90s", + "category": "creative", + "description": "Distressed, chaotic aesthetic inspired by 90s zines and music. Messy typography, torn edges, and angsty vibes.", + "vibe": "Chaotic, Distressed, Raw", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Rock+Salt&family=Special+Elite&display=swap", + "typography": { + "fonts": { + "heading": "Rock Salt", + "body": "Special Elite", + "code": "Special Elite" + }, + "colors": { + "text": "212121", + "textSecondary": "4E342E", + "background": "EFEBE9", + "accent": "D84315", + "border": "3E2723", + "codeBg": "D7CCC8", + "blockquoteBorder": "212121" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 20, + "line": 1.2 + }, + "rotation": -2, + "borderBottom": { + "color": "accent", + "width": 6, + "style": "dashed", + "space": 10 + } + }, + "h2": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 15, + "line": 1.3 + }, + "rotation": 1, + "background": "accent", + "padding": 8 + }, + "h3": { + "font": "body", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + }, + "borderLeft": { + "color": "border", + "width": 4, + "style": "solid", + "space": 8 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "text", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "border": { + "color": "border", + "width": 3, + "style": "solid" + }, + "rotation": 1 + }, + "code": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 28, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 28, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "background": "codeBg" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "dashed" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "text", + "width": 4, + "style": "solid" + }, + "grayscale": true, + "rotation": 1 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "accent" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true, + "italic": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/creative/kindergarten-art.json b/src-tauri/templates/creative/kindergarten-art.json new file mode 100644 index 0000000..cb42ef1 --- /dev/null +++ b/src-tauri/templates/creative/kindergarten-art.json @@ -0,0 +1,305 @@ +{ + "id": "kindergarten-art", + "name": "Kindergarten Art", + "category": "creative", + "description": "Inspired by children's drawings. Messy, colorful, and fun. Looks like it was drawn with crayons.", + "vibe": "Childish, Colorful, Crayon", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Finger+Paint&family=Balsamiq+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Finger Paint", + "body": "Balsamiq Sans", + "code": "Balsamiq Sans" + }, + "colors": { + "text": "212121", + "textSecondary": "FF6F00", + "background": "FFF9C4", + "accent": "D50000", + "border": "2962FF", + "codeBg": "FFFFFF", + "blockquoteBorder": "00C853" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 42, + "after": 21, + "line": 1.2 + }, + "rotation": -3 + }, + "h2": { + "font": "heading", + "size": 28, + "color": "border", + "bold": true, + "align": "center", + "spacing": { + "before": 28, + "after": 14, + "line": 1.2 + }, + "rotation": 2 + }, + "h3": { + "font": "heading", + "size": 22, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 22, + "after": 11, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "blockquoteBorder", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 7, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "background": "codeBg", + "border": { + "color": "blockquoteBorder", + "width": 6, + "style": "solid" + }, + "rotation": -1 + }, + "code": { + "font": "body", + "size": 14, + "color": "border", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 14, + "color": "border", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 3, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true, + "color": "border" + }, + "a": { + "font": "heading", + "color": "blockquoteBorder", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "text", + "width": 3, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 12 + }, + "td": { + "font": "body", + "size": 16, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 8, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "text", + "width": 5, + "style": "solid" + }, + "rotation": 2 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "accent" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "blockquoteBorder", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 14, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/creative/origami-paper.json b/src-tauri/templates/creative/origami-paper.json new file mode 100644 index 0000000..d82eecf --- /dev/null +++ b/src-tauri/templates/creative/origami-paper.json @@ -0,0 +1,308 @@ +{ + "id": "origami-paper", + "name": "Origami Paper", + "category": "creative", + "description": "Delicate and sharp, inspired by the art of paper folding. Clean lines, subtle shadows, and a feeling of precision.", + "vibe": "Delicate, Sharp, Precise", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Foldit:wght@100..900&family=Mulish:ital,wght@0,200..1000;1,200..1000&display=swap", + "typography": { + "fonts": { + "heading": "Foldit", + "body": "Mulish", + "code": "Mulish" + }, + "colors": { + "text": "37474F", + "textSecondary": "546E7A", + "background": "ECEFF1", + "accent": "00838F", + "border": "B0BEC5", + "codeBg": "FFFFFF", + "blockquoteBorder": "00838F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.1 + }, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid", + "space": 8 + } + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h3": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 14, + "after": 7, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 14, + "after": 7, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { + "before": 18, + "after": 18, + "line": 1.5 + }, + "padding": 16, + "background": "codeBg", + "borderLeft": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "code": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "bullet": "diamond" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal-leading-zero" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 18, + "after": 18, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "background": "codeBg", + "padding": 8 + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 18, + "after": 18 + }, + "border": { + "color": "codeBg", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "border", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/creative/pop-art-comic.json b/src-tauri/templates/creative/pop-art-comic.json new file mode 100644 index 0000000..d7782fe --- /dev/null +++ b/src-tauri/templates/creative/pop-art-comic.json @@ -0,0 +1,319 @@ +{ + "id": "pop-art-comic", + "name": "Pop Art Comic", + "category": "creative", + "description": "Bold, punchy, and loud. Inspired by classic comic books and pop art. Halftone dots, speech bubbles, and POW!", + "vibe": "Bold, Comic, Punchy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Bangers&family=Comic+Neue:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Bangers", + "body": "Comic Neue", + "code": "Comic Neue" + }, + "colors": { + "text": "212121", + "textSecondary": "D50000", + "background": "FFFFFF", + "accent": "FFD600", + "border": "212121", + "codeBg": "E3F2FD", + "blockquoteBorder": "212121" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 42, + "after": 21, + "line": 1.1 + }, + "borderBottom": { + "color": "border", + "width": 6, + "style": "solid", + "space": 10 + }, + "shadow": "4px 4px 0px #000000" + }, + "h2": { + "font": "heading", + "size": 32, + "color": "background", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "background": "border", + "padding": 12, + "rotation": 1 + }, + "h3": { + "font": "heading", + "size": 26, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 26, + "after": 13, + "line": 1.2 + }, + "shadow": "2px 2px 0px #000000" + }, + "h4": { + "font": "body", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "heading", + "size": 18, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "heading", + "size": 20, + "color": "text", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 24, + "background": "codeBg", + "border": { + "color": "border", + "width": 4, + "style": "solid" + }, + "radius": 24 + }, + "code": { + "font": "body", + "size": 14, + "color": "text", + "background": "accent", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 14, + "color": "text", + "background": "accent", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 3, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 32, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 32, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "color": "text" + }, + "a": { + "font": "heading", + "color": "accent", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 3, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "text", + "bold": false, + "background": "accent", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 3, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 16, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 6, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 5, + "style": "solid" + }, + "shadow": "8px 8px 0px #000000" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 14, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/creative/risograph-print.json b/src-tauri/templates/creative/risograph-print.json new file mode 100644 index 0000000..67bf71b --- /dev/null +++ b/src-tauri/templates/creative/risograph-print.json @@ -0,0 +1,309 @@ +{ + "id": "risograph-print", + "name": "Risograph Print", + "category": "creative", + "description": "Inspired by Riso printing. Grainy textures, overlapping colors, and a lo-fi DIY zine aesthetic.", + "vibe": "Grainy, DIY, Artistic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Staatliches&family=Courier+Prime:ital,wght@0,400;0,700;1,400;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Staatliches", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "1A237E", + "textSecondary": "E91E63", + "background": "F8E1E7", + "accent": "FFD600", + "border": "1A237E", + "codeBg": "FFFFFF", + "blockquoteBorder": "E91E63" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 42, + "after": 21, + "line": 1.1 + }, + "borderBottom": { + "color": "text", + "width": 6, + "style": "solid", + "space": 8 + } + }, + "h2": { + "font": "heading", + "size": 32, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.1 + }, + "background": "accent", + "padding": 12 + }, + "h3": { + "font": "heading", + "size": 26, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 26, + "after": 13, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 18, + "after": 9, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 14, + "after": 7, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 21, + "after": 21, + "line": 1.5 + }, + "padding": 16, + "border": { + "color": "text", + "width": 2, + "style": "solid" + } + }, + "code": { + "font": "body", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 14, + "after": 14, + "line": 1.6 + }, + "indent": 28, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 14, + "after": 14, + "line": 1.6 + }, + "indent": 28, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "color": "text" + }, + "a": { + "font": "body", + "color": "border", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 21, + "after": 21, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "text", + "bold": false, + "background": "accent", + "padding": 10 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 10, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 28, + "after": 28 + }, + "border": { + "color": "textSecondary", + "width": 4, + "style": "dotted" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 21, + "after": 21 + }, + "border": { + "color": "text", + "width": 2, + "style": "solid" + }, + "grayscale": true + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 60, + "bottom": 60, + "left": 60, + "right": 60 + }, + "columns": 1, + "header": true, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/creative/street-art-graffiti.json b/src-tauri/templates/creative/street-art-graffiti.json new file mode 100644 index 0000000..f5176b4 --- /dev/null +++ b/src-tauri/templates/creative/street-art-graffiti.json @@ -0,0 +1,307 @@ +{ + "id": "street-art-graffiti", + "name": "Street Art Graffiti", + "category": "creative", + "description": "Urban style with spray paint textures and marker tags. Rebellious, bold, and expressive.", + "vibe": "Urban, Rebellious, Street", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Sedgwick+Ave&family=Caveat:wght@400..700&display=swap", + "typography": { + "fonts": { + "heading": "Sedgwick Ave", + "body": "Caveat", + "code": "Caveat" + }, + "colors": { + "text": "FFFFFF", + "textSecondary": "FFEB3B", + "background": "212121", + "accent": "D50000", + "border": "00E5FF", + "codeBg": "424242", + "blockquoteBorder": "76FF03" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + }, + "rotation": -3, + "shadow": "4px 4px 0px #D50000" + }, + "h2": { + "font": "heading", + "size": 32, + "color": "border", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "rotation": 2 + }, + "h3": { + "font": "heading", + "size": 24, + "color": "blockquoteBorder", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 22, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 20, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 18, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 18, + "line": 1.5 + } + }, + "blockquote": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 20, + "border": { + "color": "accent", + "width": 3, + "style": "solid" + }, + "background": "codeBg", + "rotation": 1 + }, + "code": { + "font": "body", + "size": 16, + "color": "border", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 16, + "color": "border", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 28, + "bullet": "arrow" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 28, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 18, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary", + "background": "codeBg" + }, + "a": { + "font": "heading", + "color": "blockquoteBorder", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 18, + "color": "background", + "bold": false, + "background": "accent", + "padding": 12 + }, + "td": { + "font": "body", + "size": 18, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "text", + "width": 3, + "style": "solid" + }, + "rotation": -1 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "accent" + }, + "sup": { + "font": "body", + "size": 14, + "superScript": true + }, + "sub": { + "font": "body", + "size": 14, + "subScript": true + }, + "mark": { + "font": "body", + "background": "textSecondary", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 16, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 16, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 60, + "bottom": 60, + "left": 60, + "right": 60 + }, + "columns": 1, + "header": false, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/creative/vaporwave-aesthetic.json b/src-tauri/templates/creative/vaporwave-aesthetic.json new file mode 100644 index 0000000..b5f176d --- /dev/null +++ b/src-tauri/templates/creative/vaporwave-aesthetic.json @@ -0,0 +1,306 @@ +{ + "id": "vaporwave-aesthetic", + "name": "Vaporwave Aesthetic", + "category": "creative", + "description": "Nostalgic 80s/90s internet vibe. Neon grids, cyan and magenta gradients, and retro-futuristic typography.", + "vibe": "Nostalgic, Digital, Surreal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Audiowide&family=Varela+Round&display=swap", + "typography": { + "fonts": { + "heading": "Audiowide", + "body": "Varela Round", + "code": "Varela Round" + }, + "colors": { + "text": "1A237E", + "textSecondary": "FF4081", + "background": "F3E5F5", + "accent": "00E5FF", + "border": "D500F9", + "codeBg": "FFFFFF", + "blockquoteBorder": "00E5FF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 40, + "after": 20, + "line": 1.2 + }, + "letterSpacing": 4, + "allCaps": true, + "shadow": "2px 2px 0px #00E5FF" + }, + "h2": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "letterSpacing": 2 + }, + "h3": { + "font": "heading", + "size": 20, + "color": "border", + "bold": false, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "border", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "background": "codeBg", + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "code": { + "font": "body", + "size": 11, + "color": "border", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "border", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "bullet": "diamond" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 32, + "numbering": "decimal-leading-zero" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "color": "accent" + }, + "a": { + "font": "heading", + "color": "accent", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "background", + "bold": false, + "background": "border", + "padding": 12 + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "accent" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/creative/watercolor-wash.json b/src-tauri/templates/creative/watercolor-wash.json new file mode 100644 index 0000000..986876d --- /dev/null +++ b/src-tauri/templates/creative/watercolor-wash.json @@ -0,0 +1,307 @@ +{ + "id": "watercolor-wash", + "name": "Watercolor Wash", + "category": "creative", + "description": "Soft, artistic, and flowing. Uses hand-written style fonts and a gentle pastel color palette.", + "vibe": "Soft, Artistic, Flowing", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Amatic+SC:wght@400;700&family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap", + "typography": { + "fonts": { + "heading": "Amatic SC", + "body": "Open Sans", + "code": "Open Sans" + }, + "colors": { + "text": "455A64", + "textSecondary": "78909C", + "background": "FFFFFF", + "accent": "EC407A", + "border": "B3E5FC", + "codeBg": "F3E5F5", + "blockquoteBorder": "AB47BC" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 24, + "line": 1.1 + }, + "borderBottom": { + "color": "border", + "width": 4, + "style": "dashed", + "space": 10 + } + }, + "h2": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.2 + } + }, + "h3": { + "font": "heading", + "size": 30, + "color": "blockquoteBorder", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 15, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 0, + "border": { + "color": "transparent", + "width": 0, + "style": "none" + }, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 12, + "color": "blockquoteBorder", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 12, + "color": "blockquoteBorder", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 14, + "after": 14, + "line": 1.6 + }, + "indent": 28, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 14, + "after": 14, + "line": 1.6 + }, + "indent": 28, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 18, + "color": "text", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "codeBg", + "width": 8, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "textSecondary" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 90, + "bottom": 90, + "left": 90, + "right": 90 + }, + "columns": 1, + "header": true, + "footer": true + } + } \ No newline at end of file diff --git a/src-tauri/templates/editorial/art-nouveau-organic.json b/src-tauri/templates/editorial/art-nouveau-organic.json new file mode 100644 index 0000000..673bda8 --- /dev/null +++ b/src-tauri/templates/editorial/art-nouveau-organic.json @@ -0,0 +1,308 @@ +{ + "id": "art-nouveau-organic", + "name": "Art Nouveau Organic", + "category": "editorial", + "description": "Inspired by the Art Nouveau movement (1890-1910). Flowing organic lines with nature-inspired elegance and whiplash curves.", + "vibe": "Organic, Flowing, Decorative", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Sorts+Mill+Goudy:ital,wght@0,400;1,400&family=Fanwood+Text:ital,wght@0,400;1,400&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap", + "typography": { + "fonts": { + "heading": "Sorts Mill Goudy", + "body": "Fanwood Text", + "code": "Fanwood Text" + }, + "colors": { + "text": "3D4A2D", + "textSecondary": "4A5D23", + "background": "FDFDF8", + "accent": "8FA876", + "border": "B5C99A", + "codeBg": "F4F7F0", + "blockquoteBorder": "8FA876" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + }, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid", + "space": 12 + } + , + "italic": true + }, + "h2": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + }, + "italic": true + }, + "h3": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 28, + "after": 28, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 3, + "style": "solid" + }, + "background": "F4F7F0" + }, + "code": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/arts-crafts-heritage.json b/src-tauri/templates/editorial/arts-crafts-heritage.json new file mode 100644 index 0000000..fbffb12 --- /dev/null +++ b/src-tauri/templates/editorial/arts-crafts-heritage.json @@ -0,0 +1,305 @@ +{ + "id": "arts-crafts-heritage", + "name": "Arts & Crafts Heritage", + "category": "editorial", + "description": "Inspired by William Morris and the Arts & Crafts movement (1880s-1900). Emphasizes craftsmanship, natural forms, and medieval aesthetics with readable typography.", + "vibe": "Artisan, Literary, Handcrafted", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&family=EB+Garamond:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Cormorant Garamond", + "body": "EB Garamond", + "code": "EB Garamond" + }, + "colors": { + "text": "3C3C3C", + "textSecondary": "2F4F4F", + "background": "FCFAF2", + "accent": "556B2F", + "border": "A3B18A", + "codeBg": "F5F5DC", + "blockquoteBorder": "556B2F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 24, + "line": 1.2 + }, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid", + "space": 10 + } + }, + "h2": { + "font": "heading", + "size": 22, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "F5F5DC" + }, + "code": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/baroque-splendor.json b/src-tauri/templates/editorial/baroque-splendor.json new file mode 100644 index 0000000..69f5ff1 --- /dev/null +++ b/src-tauri/templates/editorial/baroque-splendor.json @@ -0,0 +1,304 @@ +{ + "id": "baroque-splendor", + "name": "Baroque Splendor", + "category": "editorial", + "description": "Heavy, dramatic 17th-century luxury. Deep golds and crimsons with deeply flourished script.", + "vibe": "Luxurious, Dramatic, Heavy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Mrs+Saint+Delafield&family=Mate:ital,wght@0,400;0,700;1,400;1,700&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap", + "typography": { + "fonts": { + "heading": "Mrs Saint Delafield", + "body": "Mate", + "code": "Mate" + }, + "colors": { + "text": "3D2B1F", + "textSecondary": "800000", + "background": "FFFBF0", + "accent": "B8860B", + "border": "D4AF37", + "codeBg": "FFF8E7", + "blockquoteBorder": "B8860B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 56, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 52, + "after": 32, + "line": 1.1 + } + }, + "h2": { + "font": "body", + "size": 20, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 20, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 3 + }, + "h3": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 18, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.5 + }, + "padding": 24, + "border": { + "color": "blockquoteBorder", + "width": 3, + "style": "double" + }, + "background": "FFF8E7" + }, + "code": { + "font": "body", + "size": 11, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "accent", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "diamond" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "upper-roman" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "color": "accent" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 32, + "after": 32, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "allCaps": true + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "accent", + "width": 4, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 3, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/classic-newspaper.json b/src-tauri/templates/editorial/classic-newspaper.json new file mode 100644 index 0000000..5e74116 --- /dev/null +++ b/src-tauri/templates/editorial/classic-newspaper.json @@ -0,0 +1,323 @@ +{ + "id": "classic-newspaper", + "name": "Classic Newspaper", + "category": "Editorial", + "description": "The trusted voice of record. Traditional multi-column layout with high-contrast serifs and justified text.", + "vibe": "Authoritative, Timeless, Informative", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Newsreader:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Courier+Prime:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display", + "body": "Newsreader", + "code": "Courier Prime" + }, + "colors": { + "text": "111111", + "textSecondary": "333333", + "background": "F9F7F1", + "accent": "8B0000", + "border": "222222", + "codeBg": "EAE8E0", + "blockquoteBorder": "111111" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "111111", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 0.95 + }, + "allCaps": true, + "letterSpacing": -1, + "borderBottom": { + "color": "111111", + "width": 4, + "style": "double" + } + }, + "h2": { + "font": "heading", + "size": 32, + "color": "111111", + "bold": true, + "align": "center", + "italic": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + } + }, + "h3": { + "font": "heading", + "size": 24, + "color": "111111", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 8, + "line": 1.1 + }, + "borderBottom": { + "color": "111111", + "width": 1, + "style": "solid" + } + }, + "h4": { + "font": "heading", + "size": 18, + "color": "111111", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h5": { + "font": "heading", + "size": 14, + "color": "333333", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 4, + "line": 1.2 + }, + "allCaps": true + }, + "h6": { + "font": "heading", + "size": 12, + "color": "333333", + "bold": false, + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 4, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 13, + "color": "111111", + "align": "justify", + "spacing": { + "before": 0, + "after": 12, + "line": 1.4 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 20, + "color": "111111", + "italic": true, + "align": "center", + "bold": true, + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "padding": 24, + "borderTop": { + "color": "111111", + "width": 1, + "style": "solid" + }, + "borderBottom": { + "color": "111111", + "width": 1, + "style": "solid" + }, + "indent": 20 + }, + "code": { + "font": "code", + "size": 12, + "color": "111111", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "111111", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 16, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 16, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 13, + "color": "111111", + "spacing": { + "before": 2, + "after": 2, + "line": 1.4 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "111111" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "111111", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.2 + }, + "border": { + "color": "111111", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "111111", + "padding": 8 + }, + "td": { + "font": "body", + "size": 12, + "color": "111111", + "padding": 8, + "borderBottom": { + "color": "CCCCCC", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "111111", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "111111", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "555555" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "EAE8E0", + "color": "111111", + "italic": true + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 50, + "bottom": 50, + "left": 50, + "right": 50 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/cottagecore-journal.json b/src-tauri/templates/editorial/cottagecore-journal.json new file mode 100644 index 0000000..7f19882 --- /dev/null +++ b/src-tauri/templates/editorial/cottagecore-journal.json @@ -0,0 +1,307 @@ +{ + "id": "cottagecore-journal", + "name": "Cottagecore Journal", + "category": "editorial", + "description": "Whimsical countryside diary. Handwritten fonts with soft sage greens and earthy browns.", + "vibe": "Whimsical, Nature, Handmade", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Amatic+SC:wght@400;700&family=Patrick+Hand&family=Caveat:wght@400..700&display=swap", + "typography": { + "fonts": { + "heading": "Amatic SC", + "body": "Patrick Hand", + "code": "Patrick Hand" + }, + "colors": { + "text": "424242", + "textSecondary": "33691E", + "background": "F1F8E9", + "accent": "5D4037", + "border": "A5D6A7", + "codeBg": "FFFFFF", + "blockquoteBorder": "33691E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 24, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 30, + "after": 14, + "line": 1.2 + }, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "dashed", + "space": 6 + } + }, + "h3": { + "font": "body", + "size": 20, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 15, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 18, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "dotted" + }, + "background": "FFFFFF", + "borderRadius": 12 + }, + "code": { + "font": "body", + "size": 14, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 14, + "color": "textSecondary", + "background": "codeBg", + "padding": 20, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "heart" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 15, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 15, + "color": "textSecondary", + "bold": true, + "background": "E8F5E9", + "padding": 12 + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "A5D6A7", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/dutch-golden-age.json b/src-tauri/templates/editorial/dutch-golden-age.json new file mode 100644 index 0000000..b2b46a8 --- /dev/null +++ b/src-tauri/templates/editorial/dutch-golden-age.json @@ -0,0 +1,299 @@ +{ + "id": "dutch-golden-age", + "name": "Dutch Golden Age", + "category": "editorial", + "description": "Inspired by 17th century Dutch art and typography. Rich, painterly aesthetics with Rembrandt-era elegance.", + "vibe": "Classical, Rich, Painterly", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Pirata+One&family=Gentium+Book+Plus:ital,wght@0,400;0,700;1,400;1,700&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap", + "typography": { + "fonts": { + "heading": "Pirata One", + "body": "Gentium Book Plus", + "code": "Gentium Book Plus" + }, + "colors": { + "text": "4E342E", + "textSecondary": "3E2723", + "background": "FCF9F2", + "accent": "BF8040", + "border": "A1887F", + "codeBg": "EFEBE9", + "blockquoteBorder": "BF8040" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 28, + "after": 28, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "background": "EFEBE9" + }, + "code": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "cross" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/fashion-magazine.json b/src-tauri/templates/editorial/fashion-magazine.json new file mode 100644 index 0000000..393ba38 --- /dev/null +++ b/src-tauri/templates/editorial/fashion-magazine.json @@ -0,0 +1,309 @@ +{ + "id": "fashion-magazine", + "name": "Fashion Magazine", + "category": "editorial", + "description": "Trendy and bold. High-contrast typography with oversized lettering and pink accents.", + "vibe": "Trendy, Loud, Pink", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Abril+Fatface&family=Raleway:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap", + "typography": { + "fonts": { + "heading": "Abril Fatface", + "body": "Raleway", + "code": "Raleway" + }, + "colors": { + "text": "212121", + "textSecondary": "E91E63", + "background": "FFFFFF", + "accent": "E91E63", + "border": "EFEFEF", + "codeBg": "F5F5F5", + "blockquoteBorder": "E91E63" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 64, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 40, + "after": 32, + "line": 0.9 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 4 + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 2 + }, + "h4": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + }, + "weight": 300 + }, + "blockquote": { + "font": "heading", + "size": 28, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 32, + "after": 32, + "line": 1.1 + }, + "padding": 24, + "borderLeft": { + "color": "blockquoteBorder", + "width": 12, + "style": "solid" + } + , + "background": "transparent" + }, + "code": { + "font": "body", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 20, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + }, + "weight": 300 + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true, + "color": "textSecondary" + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "allCaps": true + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "textSecondary", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/film-script.json b/src-tauri/templates/editorial/film-script.json new file mode 100644 index 0000000..e10e54d --- /dev/null +++ b/src-tauri/templates/editorial/film-script.json @@ -0,0 +1,292 @@ +{ + "id": "film-script", + "name": "Film Script", + "category": "editorial", + "description": "Hollywood screenplay format. Courier font, specific margins, and character name centering.", + "vibe": "Cinematic, Format, Draft", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Courier+Prime:ital,wght@0,400;0,700;1,400;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Courier Prime", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "000000", + "textSecondary": "333333", + "background": "FFFFFF", + "accent": "666666", + "border": "CCCCCC", + "codeBg": "F9F9F9", + "blockquoteBorder": "666666" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "allCaps": true, + "underline": true + }, + "h2": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 0, + "line": 1.2 + }, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "italic": true + }, + "h4": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.2 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "center", + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "padding": 0, + "margin": { + "left": 40, + "right": 40 + }, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.2 + } + }, + "pre": { + "font": "body", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": null + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "indent": 24, + "bullet": "dash" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "text", + "underline": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.2 + }, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "padding": 8, + "allCaps": true + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "text", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 12, + "after": 12 + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "text", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 108, + "right": 72 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/indie-zine.json b/src-tauri/templates/editorial/indie-zine.json new file mode 100644 index 0000000..e48fc99 --- /dev/null +++ b/src-tauri/templates/editorial/indie-zine.json @@ -0,0 +1,309 @@ +{ + "id": "indie-zine", + "name": "Indie Zine", + "category": "editorial", + "description": "DIY photocopier aesthetic. Typewriter fonts, cut-out look, and rebellious asymmetry.", + "vibe": "DIY, Rebellious, Rough", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Special+Elite&family=Rock+Salt&family=Montserrat:wght@0,300;0,700;1,400&display=swap", + "typography": { + "fonts": { + "heading": "Rock Salt", + "body": "Special Elite", + "code": "Special Elite" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "D1C4E9", + "border": "000000", + "codeBg": "F0F0F0", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 40, + "after": 32, + "line": 1.2 + }, + "background": "accent", + "padding": 12, + "rotation": -2 + }, + "h2": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.2 + }, + "borderBottom": { + "color": "textSecondary", + "width": 2, + "style": "solid", + "space": 4 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 13, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "dashed" + }, + "rotation": 1 + }, + "code": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.3 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.3 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 10 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 10, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + }, + "rotation": -1 + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "textSecondary", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/literary-review.json b/src-tauri/templates/editorial/literary-review.json new file mode 100644 index 0000000..432081e --- /dev/null +++ b/src-tauri/templates/editorial/literary-review.json @@ -0,0 +1,300 @@ +{ + "id": "literary-review", + "name": "Literary Review", + "category": "editorial", + "description": "Classic bookish aesthetic. Dense serif text, elegant headers, perfect for long-form essays.", + "vibe": "Intellectual, Dense, Classic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Crimson+Pro:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800&family=Sorts+Mill+Goudy:ital,wght@0,400;1,400&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap", + "typography": { + "fonts": { + "heading": "Crimson Pro", + "body": "Sorts Mill Goudy", + "code": "Sorts Mill Goudy" + }, + "colors": { + "text": "212121", + "textSecondary": "4A148C", + "background": "FFFFFF", + "accent": "4A148C", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBorder": "4A148C" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 40, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "text", + "bold": false, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.2 + }, + "smallCaps": true, + "letterSpacing": 2 + }, + "h3": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 28, + "after": 28, + "line": 1.6 + }, + "padding": 0, + "margin": { + "left": 40, + "right": 40 + }, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "lower-roman" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/luxury-editorial.json b/src-tauri/templates/editorial/luxury-editorial.json new file mode 100644 index 0000000..4cb22f7 --- /dev/null +++ b/src-tauri/templates/editorial/luxury-editorial.json @@ -0,0 +1,317 @@ +{ + "id": "luxury-editorial", + "name": "Luxury Editorial", + "category": "editorial", + "description": "High-fashion magazine inspired design. Elegant serifs with sophisticated spacing and premium feel for upscale content.", + "vibe": "Fashion, Premium, Sophisticated", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cormorant:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap", + "typography": { + "fonts": { + "heading": "Cormorant", + "body": "Montserrat", + "code": "Montserrat" + }, + "colors": { + "text": "3A3A3A", + "textSecondary": "1C1C1C", + "background": "FFFFFF", + "accent": "B8860B", + "border": "E5E5E5", + "codeBg": "F5F5F5", + "blockquoteBorder": "B8860B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.1 + }, + "letterSpacing": 2, + "weight": 500 + }, + "h2": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 3, + "weight": 600 + }, + "h3": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 2 + }, + "h4": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + }, + "weight": 300 + }, + "blockquote": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.5 + }, + "padding": 24, + "borderTop": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "borderBottom": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + }, + "weight": 300 + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "color": "accent" + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true, + "letterSpacing": 1 + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "allCaps": true, + "letterSpacing": 2 + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 90, + "bottom": 90, + "left": 90, + "right": 90 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/neo-gothic-revival.json b/src-tauri/templates/editorial/neo-gothic-revival.json new file mode 100644 index 0000000..405b3f7 --- /dev/null +++ b/src-tauri/templates/editorial/neo-gothic-revival.json @@ -0,0 +1,314 @@ +{ + "id": "neo-gothic-revival", + "name": "Neo-Gothic Revival", + "category": "editorial", + "description": "Inspired by Gothic architecture and medieval manuscripts. Dark, dramatic typography with ecclesiastical gravitas.", + "vibe": "Medieval, Dramatic, Historic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cinzel+Decorative:wght@400;700;900&family=Spectral:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,200;1,300;1,400;1,500;1,600;1,700;1,800&display=swap", + "typography": { + "fonts": { + "heading": "Cinzel Decorative", + "body": "Spectral", + "code": "Spectral" + }, + "colors": { + "text": "2C2C2C", + "textSecondary": "1A1A1A", + "background": "FDFDF0", + "accent": "4A0E0E", + "border": "3E2723", + "codeBg": "F5F5EB", + "blockquoteBorder": "4A0E0E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + }, + "borderTop": { + "color": "accent", + "width": 3, + "style": "solid", + "space": 12 + }, + "borderBottom": { + "color": "accent", + "width": 3, + "style": "solid", + "space": 12 + }, + "padding": 20 + }, + "h2": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 18, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 28, + "after": 28, + "line": 1.6 + }, + "padding": 20, + "borderLeft": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + , + "background": "F5F5EB" + }, + "code": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 6, + "after": 6, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/newspaper-classic.json b/src-tauri/templates/editorial/newspaper-classic.json new file mode 100644 index 0000000..e384d7a --- /dev/null +++ b/src-tauri/templates/editorial/newspaper-classic.json @@ -0,0 +1,343 @@ +{ + "id": "newspaper-classic", + "name": "Newspaper Classic", + "category": "editorial", + "description": "Authentic broadsheet newspaper style. Blackletter masthead, heavy ruled lines, and authoritative 3-column serif typography.", + "vibe": "Authority, Traditional, Broadsheet", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=UnifrakturMaguntia&family=Old+Standard+TT:ital,wght@0,400;0,700;1,400&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap", + "typography": { + "fonts": { + "heading": "UnifrakturMaguntia", + "body": "Old Standard TT", + "code": "Old Standard TT" + }, + "colors": { + "text": "111111", + "textSecondary": "000000", + "background": "FDFCF8", + "accent": "000000", + "border": "000000", + "codeBg": "F5F5F0", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 72, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 48, + "line": 1.0 + }, + "borderTop": { + "color": "border", + "width": 3, + "style": "solid" + }, + "borderBottom": { + "color": "border", + "width": 6, + "style": "double" + }, + "padding": 20 + }, + "h2": { + "font": "Playfair Display", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.1 + }, + "borderTop": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + }, + "padding": 8 + }, + "h3": { + "font": "Playfair Display", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.1 + }, + "borderBottom": { + "color": "border", + "width": 0.5, + "style": "solid" + } + + }, + "h4": { + "font": "body", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 1 + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 10.5, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 12, + "line": 1.4 + }, + "firstLineIndent": 18 + }, + "blockquote": { + "font": "Playfair Display", + "size": 18, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.3 + }, + "padding": 24, + "borderTop": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + + }, + "code": { + "font": "body", + "size": 9, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.2 + } + }, + "pre": { + "font": "body", + "size": 9, + "color": "textSecondary", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.2 + }, + "border": { + "color": "border", + "width": 0.5, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10.5, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.4 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.3 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10.5, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 8, + "allCaps": true + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 0.5, + "style": "solid" + }, + "borderRight": { + "color": "border", + "width": 0.5, + "style": "solid" + } + + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "borderTop": { + "color": "border", + "width": 2, + "style": "solid" + } + + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "border", + "width": 0.5, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "textSecondary", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 8.5, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 8.5, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.1 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/newspaper-modern.json b/src-tauri/templates/editorial/newspaper-modern.json new file mode 100644 index 0000000..e8ea60b --- /dev/null +++ b/src-tauri/templates/editorial/newspaper-modern.json @@ -0,0 +1,298 @@ +{ + "id": "newspaper-modern", + "name": "Newspaper Modern", + "category": "editorial", + "description": "Contemporary newspaper design balancing tradition with modern sensibilities. Clean grid-based layout.", + "vibe": "Modern, Editorial, Informative", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital,wght@0,400;1,400&family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap", + "typography": { + "fonts": { + "heading": "DM Serif Display", + "body": "DM Sans", + "code": "DM Sans" + }, + "colors": { + "text": "333333", + "textSecondary": "1A1A1A", + "background": "FFFFFF", + "accent": "DC2626", + "border": "EEEEEE", + "codeBg": "F8F8F8", + "blockquoteBorder": "DC2626" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 24, + "line": 1.1 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 28, + "after": 14, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 1 + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 20, + "color": "accent", + "italic": true, + "align": "center", + "spacing": { + "before": 28, + "after": 28, + "line": 1.5 + }, + "padding": 20, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 20, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.5 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 8, + "allCaps": true + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/newspaper-tabloid.json b/src-tauri/templates/editorial/newspaper-tabloid.json new file mode 100644 index 0000000..dbae19a --- /dev/null +++ b/src-tauri/templates/editorial/newspaper-tabloid.json @@ -0,0 +1,307 @@ +{ + "id": "newspaper-tabloid", + "name": "Newspaper Tabloid", + "category": "editorial", + "description": "Sensationalist news design. Condensed, heavy headers with urgent red accents.", + "vibe": "Urgent, Bold, Sensational", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Antonio:wght@100..700&family=Pathway+Extreme:ital,opsz,wght@0,8..144,100..1000;1,8..144,100..1000&display=swap", + "typography": { + "fonts": { + "heading": "Antonio", + "body": "Pathway Extreme", + "code": "Pathway Extreme" + }, + "colors": { + "text": "111111", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "D50000", + "border": "000000", + "codeBg": "F0F0F0", + "blockquoteBorder": "D50000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "background", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 24, + "line": 0.95 + }, + "background": "accent", + "padding": 16, + "allCaps": true + }, + "h2": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 28, + "after": 14, + "line": 1.1 + }, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.1 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 12, + "after": 6, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.4 + } + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 16, + "borderLeft": { + "color": "blockquoteBorder", + "width": 8, + "style": "solid" + }, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.3 + } + }, + "pre": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 12, + "spacing": { + "before": 12, + "after": 12, + "line": 1.3 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 12, + "after": 12, + "line": 1.4 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.4 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "color": "accent" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.3 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 8, + "allCaps": true + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 16, + "after": 16 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 54, + "bottom": 54, + "left": 54, + "right": 54 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/ny-editor.json b/src-tauri/templates/editorial/ny-editor.json new file mode 100644 index 0000000..b8a01a1 --- /dev/null +++ b/src-tauri/templates/editorial/ny-editor.json @@ -0,0 +1,309 @@ +{ + "id": "ny-editor", + "name": "The Editorial", + "category": "editorial", + "description": "High-contrast serifs, centered headers, delicate borders. Feels like a premium magazine feature.", + "vibe": "Luxury, Fashion, Literature", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400..900;1,400..900&family=Lora:ital,wght@0,400..700;1,400..700&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display", + "body": "Lora", + "code": "Lora" + }, + "colors": { + "text": "333333", + "textSecondary": "111111", + "background": "FFFFFF", + "accent": "000000", + "border": "DDDDDD", + "codeBg": "F5F5F5", + "blockquoteBorder": "555555" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": true, + "italic": true, + "align": "center", + "spacing": { + "before": 60, + "after": 40, + "line": 1.1 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 20, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 3, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid", + "space": 10 + } + , + "paddingBottom": 10 + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true, + "letterSpacing": 1 + }, + "h4": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 20, + "line": 1.8 + } + }, + "blockquote": { + "font": "heading", + "size": 22, + "color": "blockquoteBorder", + "italic": true, + "align": "center", + "spacing": { + "before": 40, + "after": 40, + "line": 1.4 + }, + "padding": 0, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "allCaps": true, + "letterSpacing": 2 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/rococo-romance.json b/src-tauri/templates/editorial/rococo-romance.json new file mode 100644 index 0000000..d43c3ed --- /dev/null +++ b/src-tauri/templates/editorial/rococo-romance.json @@ -0,0 +1,303 @@ +{ + "id": "rococo-romance", + "name": "Rococo Romance", + "category": "editorial", + "description": "Inspired by 18th-century Rococo. Light, playful, and intricate with pastel tones and swirling elegance.", + "vibe": "Romantic, Ornate, Pastel", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Pinyon+Script&family=Playfair+Display+SC:ital,wght@0,400;0,700;1,400;1,700&family=Lora:ital,wght@0,400..700;1,400..700&display=swap", + "typography": { + "fonts": { + "heading": "Pinyon Script", + "body": "Playfair Display SC", + "code": "Playfair Display SC" + }, + "colors": { + "text": "555555", + "textSecondary": "D87093", + "background": "FFFBFC", + "accent": "C0A080", + "border": "FFB6C1", + "codeBg": "FDF5F7", + "blockquoteBorder": "FFB6C1" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 52, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.2 + }, + "letterSpacing": 2 + }, + "h3": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 13, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.3 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 28, + "after": 28, + "line": 1.6 + }, + "padding": 24, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "borderRadius": 50, + "background": "transparent" + }, + "code": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true, + "color": "accent" + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "border", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/editorial/victorian-ornate.json b/src-tauri/templates/editorial/victorian-ornate.json new file mode 100644 index 0000000..a9803fc --- /dev/null +++ b/src-tauri/templates/editorial/victorian-ornate.json @@ -0,0 +1,308 @@ +{ + "id": "victorian-ornate", + "name": "Victorian Ornate", + "category": "editorial", + "description": "Inspired by the decorative exuberance of the Victorian era (1837-1901). Features rich typography with ornamental borders and jewel-tone accents.", + "vibe": "Traditional, Formal, Heritage", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400..900;1,400..900&family=Crimson+Text:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display", + "body": "Crimson Text", + "code": "Crimson Text" + }, + "colors": { + "text": "3D2914", + "textSecondary": "2C1810", + "background": "FFFBF5", + "accent": "8B4513", + "border": "D4A574", + "codeBg": "FDF5E6", + "blockquoteBorder": "D4A574" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 24, + "line": 1.2 + }, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "double", + "space": 10 + } + , + "paddingBottom": 12 + }, + "h2": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + }, + "allCaps": true + }, + "h4": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "background": "FDF5E6" + }, + "code": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "body", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/automotive-bold.json b/src-tauri/templates/industrial/automotive-bold.json new file mode 100644 index 0000000..f040ee2 --- /dev/null +++ b/src-tauri/templates/industrial/automotive-bold.json @@ -0,0 +1,309 @@ +{ + "id": "automotive-bold", + "name": "Automotive Bold", + "category": "industrial", + "description": "Powerful design for automotive and motorsport industries. Bold typography with dynamic energy and speed.", + "vibe": "Powerful, Dynamic, Bold", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Teko:wght@400;500;600;700&family=Barlow:wght@400;500;600;700&family=Share+Tech+Mono&display=swap", + "typography": { + "fonts": { + "heading": "Teko", + "body": "Barlow", + "code": "Share Tech Mono" + }, + "colors": { + "text": "37474F", + "textSecondary": "212121", + "background": "FFFFFF", + "accent": "B71C1C", + "border": "CFD8DC", + "codeBg": "ECEFF1", + "blockquoteBorder": "B71C1C", + "blockquoteBg": "FFEBEE" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 40, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 48, + "after": 32, + "line": 1.1 + } + }, + "h2": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.2 + } + }, + "h3": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 20, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 6, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "background", + "bold": true, + "background": "textSecondary", + "padding": 12, + "uppercase": true + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/brutalist.json b/src-tauri/templates/industrial/brutalist.json new file mode 100644 index 0000000..16f4d94 --- /dev/null +++ b/src-tauri/templates/industrial/brutalist.json @@ -0,0 +1,332 @@ +{ + "id": "brutalist", + "name": "Brutalist", + "category": "Industrial", + "description": "Raw, anti-design aesthetic. Monospace fonts, heavy borders, and high-contrast functionality.", + "vibe": "Raw, Structural, Utility", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Archivo+Black:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Space+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Archivo Black", + "body": "Space Mono", + "code": "JetBrains Mono" + }, + "colors": { + "text": "0000FF", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "0000FF", + "border": "0000FF", + "codeBg": "EEEEEE", + "blockquoteBorder": "0000FF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 56, + "color": "0000FF", + "bold": true, + "align": "left", + "spacing": { + "before": 0, + "after": 20, + "line": 0.85 + }, + "allCaps": true, + "borderBottom": { + "color": "0000FF", + "width": 8, + "style": "solid" + } + }, + "h2": { + "font": "heading", + "size": 32, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 10, + "line": 1.0 + }, + "background": "0000FF", + "color": "FFFFFF", + "padding": 10 + }, + "h3": { + "font": "body", + "size": 24, + "color": "0000FF", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + }, + "borderLeft": { + "color": "0000FF", + "width": 10, + "style": "solid" + } + , + "padding": 10 + }, + "h4": { + "font": "body", + "size": 18, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + }, + "allCaps": true, + "underline": true + }, + "h5": { + "font": "body", + "size": 16, + "color": "0000FF", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "000000", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.2 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "000000", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.4 + }, + "weight": 400 + }, + "blockquote": { + "font": "heading", + "size": 24, + "color": "0000FF", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.1 + }, + "padding": 20, + "border": { + "color": "0000FF", + "width": 4, + "style": "solid" + } + }, + "code": { + "font": "code", + "size": 13, + "color": "000000", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + }, + "border": { + "color": "000000", + "width": 1, + "style": "solid" + } + }, + "pre": { + "font": "code", + "size": 13, + "color": "000000", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "000000", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 20, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "000000", + "spacing": { + "before": 4, + "after": 4, + "line": 1.4 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "0000FF" + }, + "em": { + "font": "body", + "italic": true, + "background": "EEEEEE" + }, + "a": { + "font": "body", + "color": "0000FF", + "underline": true, + "bold": true, + "background": "EEEEEE" + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.2 + }, + "border": { + "color": "0000FF", + "width": 4, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 14, + "color": "FFFFFF", + "bold": true, + "background": "0000FF", + "padding": 10, + "border": { + "color": "FFFFFF", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 14, + "color": "000000", + "padding": 10, + "border": { + "color": "0000FF", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "0000FF", + "width": 6, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "0000FF", + "width": 4, + "style": "solid" + }, + "filter": "grayscale(100%) contrast(150%)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "FF0000", + "bold": true + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "0000FF", + "color": "FFFFFF" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "0000FF", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "0000FF", + "spacing": { + "before": 6, + "after": 6, + "line": 1.4 + } + } + }, + "page": { + "margins": { + "top": 40, + "bottom": 40, + "left": 40, + "right": 40 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/construction-industrial.json b/src-tauri/templates/industrial/construction-industrial.json new file mode 100644 index 0000000..d6ce16c --- /dev/null +++ b/src-tauri/templates/industrial/construction-industrial.json @@ -0,0 +1,315 @@ +{ + "id": "construction-industrial", + "name": "Construction Industrial", + "category": "industrial", + "description": "Bold and sturdy design for construction and industrial companies. Strong typography with safety-inspired colors.", + "vibe": "Strong, Industrial, Professional", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Oswald:wght@400;500;700&family=Roboto:wght@400;500;700&family=Roboto+Mono:wght@400;500&display=swap", + "typography": { + "fonts": { + "heading": "Oswald", + "body": "Roboto", + "code": "Roboto Mono" + }, + "colors": { + "text": "37474F", + "textSecondary": "212121", + "background": "FFFFFF", + "accent": "FF8F00", + "highlight": "FFC107", + "border": "B0BEC5", + "codeBg": "ECEFF1", + "blockquoteBg": "FFF8E1" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "background": "highlight", + "padding": 20, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 20, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 16, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "accent", + "width": 6, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "highlight", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "highlight", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "highlight", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/electric-vehicle.json b/src-tauri/templates/industrial/electric-vehicle.json new file mode 100644 index 0000000..18f8289 --- /dev/null +++ b/src-tauri/templates/industrial/electric-vehicle.json @@ -0,0 +1,303 @@ +{ + "id": "electric-vehicle", + "name": "Electric Vehicle", + "category": "industrial", + "description": "Sustainable tech design for electric vehicle and clean energy content. Eco-modern with electric accents.", + "vibe": "Sustainable, Modern, Electric", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Electrolize&family=Mulish:wght@400;500;600;700&family=Chakra+Petch:wght@400;500&display=swap", + "typography": { + "fonts": { + "heading": "Electrolize", + "body": "Mulish", + "code": "Chakra Petch" + }, + "colors": { + "text": "475569", + "textSecondary": "1E293B", + "background": "FFFFFF", + "accent": "10B981", + "border": "E2E8F0", + "codeBg": "F1F5F9", + "blockquoteBg": "ECFDF5", + "blockquoteBorder": "10B981" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12 + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/industrial-safety.json b/src-tauri/templates/industrial/industrial-safety.json new file mode 100644 index 0000000..d615100 --- /dev/null +++ b/src-tauri/templates/industrial/industrial-safety.json @@ -0,0 +1,330 @@ +{ + "id": "industrial-safety", + "name": "Industrial Safety", + "category": "industrial", + "description": "Construction site signage. Heavy blacks and yellow caution stripes.", + "vibe": "Safety, Bold, Construction", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Anton&family=Roboto:wght@400;700&family=Roboto+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Anton", + "body": "Roboto", + "code": "Roboto Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "FFD600", + "border": "000000", + "codeBg": "FFF9C4", + "blockquoteBg": "FFF9C4" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "background": "accent", + "padding": 20, + "border": { + "color": "textSecondary", + "width": 4, + "style": "solid" + }, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "borderBottom": { + "color": "textSecondary", + "width": 4, + "style": "solid" + }, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + }, + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true, + "background": "accent" + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "accent", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "textSecondary", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/logistics-freight.json b/src-tauri/templates/industrial/logistics-freight.json new file mode 100644 index 0000000..9b1aeeb --- /dev/null +++ b/src-tauri/templates/industrial/logistics-freight.json @@ -0,0 +1,311 @@ +{ + "id": "logistics-freight", + "name": "Logistics Freight", + "category": "industrial", + "description": "Shipping and cargo aesthetic. Stenciled, heavy typography with industrial orange and slate blue.", + "vibe": "Industrial, Heavy, Shipping", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Saira+Stencil+One&family=Saira:wght@400;500;600;700&family=Inconsolata:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Saira Stencil One", + "body": "Saira", + "code": "Inconsolata" + }, + "colors": { + "text": "455A64", + "textSecondary": "263238", + "background": "FFFFFF", + "accent": "E65100", + "border": "B0BEC5", + "codeBg": "ECEFF1", + "blockquoteBg": "FFF3E0", + "blockquoteBorder": "263238" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 8, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/night-vision.json b/src-tauri/templates/industrial/night-vision.json new file mode 100644 index 0000000..458ec49 --- /dev/null +++ b/src-tauri/templates/industrial/night-vision.json @@ -0,0 +1,315 @@ +{ + "id": "night-vision", + "name": "Night Vision", + "category": "industrial", + "description": "Military optics style. Grainy bright greens on dark green background.", + "vibe": "Tactical, Green, Grainy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Wallpoet&family=Roboto+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Wallpoet", + "body": "Roboto Mono", + "code": "Roboto Mono" + }, + "colors": { + "text": "B2FF59", + "textSecondary": "CCFF90", + "background": "000000", + "accent": "76FF03", + "border": "33691E", + "codeBg": "1B5E20", + "blockquoteBg": "000000", + "blockquoteBorder": "76FF03" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "accent", + "bold": false, + "align": "center", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "borderBottom": { + "color": "accent", + "width": 2, + "style": "dotted" + }, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "accent", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "dotted" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "dotted" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/industrial/tactical-military.json b/src-tauri/templates/industrial/tactical-military.json new file mode 100644 index 0000000..b3e1dd8 --- /dev/null +++ b/src-tauri/templates/industrial/tactical-military.json @@ -0,0 +1,318 @@ +{ + "id": "tactical-military", + "name": "Tactical Military", + "category": "industrial", + "description": "Military-spec aesthetic. Stencil typography with olive drab and technical readouts.", + "vibe": "Tactical, Sturdy, Regulated", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Allerta+Stencil&family=Quantico:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Allerta Stencil", + "body": "Quantico", + "code": "Quantico" + }, + "colors": { + "text": "1B1B1B", + "textSecondary": "33691E", + "background": "F1F8E9", + "accent": "558B2F", + "border": "AED581", + "codeBg": "DCEDC8", + "blockquoteBg": "DCEDC8", + "blockquoteBorder": "33691E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 6, + "style": "solid" + }, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/aviation-classic.json b/src-tauri/templates/lifestyle/aviation-classic.json new file mode 100644 index 0000000..68a6e84 --- /dev/null +++ b/src-tauri/templates/lifestyle/aviation-classic.json @@ -0,0 +1,313 @@ +{ + "id": "aviation-classic", + "name": "Aviation Classic", + "category": "lifestyle", + "description": "Vintage aviation inspired design. Classic military typography with heritage color palette.", + "vibe": "Heritage, Classic, Aviation", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Stencil&family=Public+Sans:wght@400;500;600&family=Courier+Prime:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Stencil", + "body": "Public Sans", + "code": "Courier Prime" + }, + "colors": { + "text": "363636", + "textSecondary": "1B4D3E", + "background": "F5F5DC", + "accent": "8B0000", + "border": "A9A9A9", + "codeBg": "E0E0D0", + "blockquoteBg": "EBEBD0", + "blockquoteBorder": "1B4D3E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 3, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/bistro-chalkboard.json b/src-tauri/templates/lifestyle/bistro-chalkboard.json new file mode 100644 index 0000000..010421c --- /dev/null +++ b/src-tauri/templates/lifestyle/bistro-chalkboard.json @@ -0,0 +1,311 @@ +{ + "id": "bistro-chalkboard", + "name": "Bistro Chalkboard", + "category": "lifestyle", + "description": "French cafe menu. White chalk text on slate black.", + "vibe": "French, Food, Chalk", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Homemade+Apple&family=Caveat:wght@400;700&family=Patrick+Hand&display=swap", + "typography": { + "fonts": { + "heading": "Homemade Apple", + "body": "Caveat", + "code": "Patrick Hand" + }, + "colors": { + "text": "BDBDBD", + "textSecondary": "E0E0E0", + "background": "212121", + "accent": "FFFFFF", + "border": "757575", + "codeBg": "263238", + "blockquoteBg": "212121", + "blockquoteBorder": "FFFFFF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "accent", + "bold": false, + "align": "center", + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + }, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "dashed" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "th": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "dashed" + } + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "dotted" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "textSecondary", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/elegant-magazine.json b/src-tauri/templates/lifestyle/elegant-magazine.json new file mode 100644 index 0000000..b9f9b81 --- /dev/null +++ b/src-tauri/templates/lifestyle/elegant-magazine.json @@ -0,0 +1,318 @@ +{ + "id": "elegant-magazine", + "name": "Elegant Magazine", + "category": "Lifestyle", + "description": "High-fashion editorial style. Luxurious typography, centered layouts, and gold accents.", + "vibe": "Luxury, Fashion, Ethereal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cinzel:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Lato:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Cinzel", + "body": "Lato", + "code": "Cormorant Garamond" + }, + "colors": { + "text": "1F1F1F", + "textSecondary": "666666", + "background": "FFFFFF", + "accent": "C0A062", + "border": "E5E5E5", + "codeBg": "FAFAFA", + "blockquoteBorder": "C0A062" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "1F1F1F", + "bold": true, + "align": "center", + "spacing": { + "before": 40, + "after": 20, + "line": 1.2 + }, + "letterSpacing": 2.0, + "allCaps": true + }, + "h2": { + "font": "heading", + "size": 24, + "color": "C0A062", + "bold": true, + "align": "center", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + }, + "letterSpacing": 1.5, + "allCaps": true + }, + "h3": { + "font": "heading", + "size": 18, + "color": "1F1F1F", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + }, + "letterSpacing": 1.0 + }, + "h4": { + "font": "body", + "size": 16, + "color": "1F1F1F", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.5 + }, + "allCaps": true + }, + "h5": { + "font": "body", + "size": 14, + "color": "666666", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.5 + }, + "allCaps": true + }, + "h6": { + "font": "body", + "size": 12, + "color": "C0A062", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.5 + }, + "allCaps": true + }, + "p": { + "font": "body", + "size": 14, + "color": "333333", + "align": "center", + "spacing": { + "before": 0, + "after": 20, + "line": 1.8 + }, + "weight": 300 + }, + "blockquote": { + "font": "heading", + "size": 24, + "color": "1F1F1F", + "bold": false, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.4 + }, + "padding": 0, + "borderTop": { + "color": "C0A062", + "width": 1, + "style": "solid" + }, + "borderBottom": { + "color": "C0A062", + "width": 1, + "style": "solid" + }, + "italic": false + }, + "code": { + "font": "body", + "size": 12, + "color": "C0A062", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + }, + "italic": true + }, + "pre": { + "font": "body", + "size": 12, + "color": "666666", + "background": "FAFAFA", + "padding": 24, + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "border": { + "color": "E5E5E5", + "width": 1, + "style": "solid" + }, + "italic": true + }, + "ul": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.8 + }, + "indent": 0, + "bullet": "disc" + }, + "ol": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.8 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "333333", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "1F1F1F" + }, + "em": { + "font": "body", + "italic": true, + "color": "C0A062" + }, + "a": { + "font": "body", + "color": "C0A062", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 32, + "after": 32, + "line": 1.4 + }, + "border": { + "color": "E5E5E5", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "1F1F1F", + "bold": true, + "background": "FFFFFF", + "padding": 12, + "borderBottom": { + "color": "C0A062", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 13, + "color": "333333", + "padding": 12, + "borderBottom": { + "color": "E5E5E5", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 48, + "after": 48 + }, + "border": { + "color": "E5E5E5", + "width": 1, + "style": "solid" + }, + "width": "50%" + }, + "img": { + "align": "center", + "spacing": { + "before": 32, + "after": 32 + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "999999" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "F5F5F5", + "color": "1F1F1F" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.4 + } + } + }, + "page": { + "margins": { + "top": 90, + "bottom": 90, + "left": 90, + "right": 90 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/fine-dining-menu.json b/src-tauri/templates/lifestyle/fine-dining-menu.json new file mode 100644 index 0000000..acf30c9 --- /dev/null +++ b/src-tauri/templates/lifestyle/fine-dining-menu.json @@ -0,0 +1,325 @@ +{ + "id": "fine-dining-menu", + "name": "Fine Dining Menu", + "category": "lifestyle", + "description": "High-end restaurant aesthetic. Elegant scripts, centered layouts, and luxurious gold tones.", + "vibe": "Elegant, Expensive, Centered", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Great+Vibes&family=Cormorant+Garamond:wght@400;500;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Great Vibes", + "body": "Cormorant Garamond", + "code": "Cormorant Garamond" + }, + "colors": { + "text": "424242", + "textSecondary": "212121", + "background": "FFFAF0", + "accent": "C5A059", + "border": "E0E0E0", + "codeBg": "F5F5F0", + "blockquoteBg": "FFFAF0", + "blockquoteBorder": "C5A059" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 3, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "padding": 5, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "center", + "italic": true, + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 30, + "after": 30, + "line": 1.6 + }, + "padding": 24, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "letterSpacing": 1, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/fire-station.json b/src-tauri/templates/lifestyle/fire-station.json new file mode 100644 index 0000000..0d91161 --- /dev/null +++ b/src-tauri/templates/lifestyle/fire-station.json @@ -0,0 +1,315 @@ +{ + "id": "fire-station", + "name": "Fire Station", + "category": "lifestyle", + "description": "Engine company aesthetic. Fire engine red, brass gold, and bold gothic numbers.", + "vibe": "Brave, Red, Gold", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Anton&family=Rokkitt:wght@400;500;600;700&family=Roboto+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Anton", + "body": "Rokkitt", + "code": "Roboto Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "B71C1C", + "highlight": "FFD600", + "border": "B0BEC5", + "codeBg": "FFEBEE", + "blockquoteBg": "FFEBEE", + "blockquoteBorder": "B71C1C" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 40, + "color": "accent", + "bold": false, + "align": "center", + "uppercase": true, + "padding": 16, + "border": { + "color": "highlight", + "width": 6, + "style": "solid" + }, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "highlight", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "highlight", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/food-recipe.json b/src-tauri/templates/lifestyle/food-recipe.json new file mode 100644 index 0000000..9a7cd4c --- /dev/null +++ b/src-tauri/templates/lifestyle/food-recipe.json @@ -0,0 +1,309 @@ +{ + "id": "food-recipe", + "name": "Food & Recipe", + "category": "lifestyle", + "description": "Warm and appetizing design for cookbooks and food content. Inviting typography with rustic charm.", + "vibe": "Warm, Appetizing, Homestyle", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400&family=Lato:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display", + "body": "Lato", + "code": "Lato" + }, + "colors": { + "text": "4E342E", + "textSecondary": "6D4C41", + "background": "FFFFFF", + "accent": "D84315", + "border": "BCAAA4", + "codeBg": "FFF3E0", + "blockquoteBg": "FFF3E0", + "blockquoteBorder": "D84315" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "bold": false, + "italic": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/german-autobahn.json b/src-tauri/templates/lifestyle/german-autobahn.json new file mode 100644 index 0000000..628c61f --- /dev/null +++ b/src-tauri/templates/lifestyle/german-autobahn.json @@ -0,0 +1,315 @@ +{ + "id": "german-autobahn", + "name": "German Autobahn", + "category": "lifestyle", + "description": "Precision engineering aesthetic. DIN-style fonts and strict blue/white signage.", + "vibe": "German, Precision, Transport", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;600;700&family=Roboto+Condensed:wght@400;700&family=Roboto+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Barlow", + "body": "Roboto Condensed", + "code": "Roboto Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "0D47A1", + "background": "FFFFFF", + "accent": "1565C0", + "border": "B0BEC5", + "codeBg": "E3F2FD", + "blockquoteBg": "E3F2FD", + "blockquoteBorder": "1565C0" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "background", + "bold": true, + "align": "left", + "background": "accent", + "padding": 12, + "borderRadius": 4, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 6, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/hotel-hospitality.json b/src-tauri/templates/lifestyle/hotel-hospitality.json new file mode 100644 index 0000000..c312885 --- /dev/null +++ b/src-tauri/templates/lifestyle/hotel-hospitality.json @@ -0,0 +1,314 @@ +{ + "id": "hotel-hospitality", + "name": "Hotel Hospitality", + "category": "lifestyle", + "description": "Welcoming design for hotels and hospitality industry. Elegant yet approachable with warm sophistication.", + "vibe": "Welcoming, Elegant, Warm", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Tenor+Sans&family=Nunito+Sans:ital,wght@0,300;0,400;0,600;0,700;1,400&family=Cormorant+Garamond:ital,wght@0,400;1,400&display=swap", + "typography": { + "fonts": { + "heading": "Tenor Sans", + "body": "Nunito Sans", + "code": "Cormorant Garamond" + }, + "colors": { + "text": "4A4A4A", + "textSecondary": "2C3E50", + "background": "FFFFFF", + "accent": "8B7355", + "border": "E0E0E0", + "codeBg": "F9F6F1", + "blockquoteBg": "F9F6F1", + "blockquoteBorder": "8B7355" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "center", + "letterSpacing": 2, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/parisian-chic.json b/src-tauri/templates/lifestyle/parisian-chic.json new file mode 100644 index 0000000..98e347b --- /dev/null +++ b/src-tauri/templates/lifestyle/parisian-chic.json @@ -0,0 +1,324 @@ +{ + "id": "parisian-chic", + "name": "Parisian Chic", + "category": "lifestyle", + "description": "Sophisticated French aesthetics. Elegant high-contrast serifs with plenty of white space.", + "vibe": "Sophisticated, Chic, Minimal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Bodoni+Moda:ital,opsz,wght@0,6..96,400;0,6..96,600;0,6..96,700;1,6..96,400&family=Jost:wght@300;400;500;600&display=swap", + "typography": { + "fonts": { + "heading": "Bodoni Moda", + "body": "Jost", + "code": "Jost" + }, + "colors": { + "text": "1A1A1A", + "textSecondary": "333333", + "background": "FFFFFF", + "accent": "000000", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "italic": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.6 + }, + "padding": 24, + "border": { + "top": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "accent", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "letterSpacing": 1, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/real-estate-premium.json b/src-tauri/templates/lifestyle/real-estate-premium.json new file mode 100644 index 0000000..509fcd5 --- /dev/null +++ b/src-tauri/templates/lifestyle/real-estate-premium.json @@ -0,0 +1,325 @@ +{ + "id": "real-estate-premium", + "name": "Real Estate Premium", + "category": "lifestyle", + "description": "Sophisticated design for luxury real estate and property marketing. Elegant typography with premium golden accents.", + "vibe": "Luxury, Premium, Sophisticated", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600;700&family=Lato:wght@300;400;700&display=swap", + "typography": { + "fonts": { + "heading": "Cinzel", + "body": "Lato", + "code": "Lato" + }, + "colors": { + "text": "4A4A4A", + "textSecondary": "1A1A1A", + "background": "FFFFFF", + "accent": "B8860B", + "border": "E5E5E5", + "codeBg": "FAFAFA", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "B8860B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "letterSpacing": 4, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.6 + }, + "padding": 24, + "border": { + "top": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "letterSpacing": 1, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/recipe-card.json b/src-tauri/templates/lifestyle/recipe-card.json new file mode 100644 index 0000000..0454302 --- /dev/null +++ b/src-tauri/templates/lifestyle/recipe-card.json @@ -0,0 +1,312 @@ +{ + "id": "recipe-card", + "name": "Recipe Card", + "category": "lifestyle", + "description": "Grandmas index card. Typewriter fonts with red header lines.", + "vibe": "Homey, Traditional, Cookery", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Courier+Prime:wght@400;700&family=Homemade+Apple&display=swap", + "typography": { + "fonts": { + "heading": "Courier Prime", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "F44336", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "F44336" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + }, + "spacing": { + "before": 36, + "after": 20, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 28, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "accent", + "italic": true, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 12, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/retro-diner-50s.json b/src-tauri/templates/lifestyle/retro-diner-50s.json new file mode 100644 index 0000000..3b1b88c --- /dev/null +++ b/src-tauri/templates/lifestyle/retro-diner-50s.json @@ -0,0 +1,324 @@ +{ + "id": "retro-diner-50s", + "name": "Retro Diner 50s", + "category": "lifestyle", + "description": "Classic 1950s American diner aesthetic. Neon lights, checkered floors, and jukebox vibes.", + "vibe": "Retro, Kitsch, Diner", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lobster&family=Righteous&family=Roboto+Condensed:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Lobster", + "body": "Roboto Condensed", + "code": "Righteous" + }, + "colors": { + "text": "212121", + "textSecondary": "00838F", + "background": "FFFFFF", + "accent": "D32F2F", + "highlight": "FF4081", + "border": "BDBDBD", + "codeBg": "E0F7FA", + "blockquoteBg": "FFEBEE", + "blockquoteBorder": "D32F2F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + }, + "border": { + "bottom": { + "color": "textSecondary", + "width": 4, + "style": "dashed" + } + } + }, + "h2": { + "font": "code", + "size": 24, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "code", + "size": 20, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "code", + "size": 18, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "heading", + "size": 16, + "color": "accent", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "borderRadius": 12, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "heading", + "italic": false, + "color": "textSecondary" + }, + "a": { + "font": "body", + "color": "highlight", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "code", + "size": 12, + "color": "background", + "bold": false, + "background": "textSecondary", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "highlight", + "width": 4, + "style": "dotted" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 4, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "highlight", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/spa-wellness.json b/src-tauri/templates/lifestyle/spa-wellness.json new file mode 100644 index 0000000..2c9e4a0 --- /dev/null +++ b/src-tauri/templates/lifestyle/spa-wellness.json @@ -0,0 +1,302 @@ +{ + "id": "spa-wellness", + "name": "Spa Wellness", + "category": "lifestyle", + "description": "Serene design for spa and wellness industries. Calm typography with soothing, natural colors.", + "vibe": "Serene, Calming, Natural", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Philosopher:ital,wght@0,400;0,700;1,400&family=Questrial&display=swap", + "typography": { + "fonts": { + "heading": "Philosopher", + "body": "Questrial", + "code": "Questrial" + }, + "colors": { + "text": "5D6D5A", + "textSecondary": "4A6741", + "background": "FFFFFF", + "accent": "6B8E63", + "border": "E8F5E9", + "codeBg": "F1F8E9", + "blockquoteBg": "F1F8E9", + "blockquoteBorder": "6B8E63" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": false, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 28, + "after": 28, + "line": 1.6 + }, + "padding": 20, + "borderRadius": 4, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "heading", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/sticky-note.json b/src-tauri/templates/lifestyle/sticky-note.json new file mode 100644 index 0000000..279958e --- /dev/null +++ b/src-tauri/templates/lifestyle/sticky-note.json @@ -0,0 +1,306 @@ +{ + "id": "sticky-note", + "name": "Sticky Note", + "category": "lifestyle", + "description": "Handwritten reminder aesthetic. Marker fonts on a canary yellow background.", + "vibe": "Casual, Handwritten, Yellow", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Permanent+Marker&family=Kalam:wght@300;400;700&family=Patrick+Hand&display=swap", + "typography": { + "fonts": { + "heading": "Permanent Marker", + "body": "Kalam", + "code": "Patrick Hand" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFF9C4", + "accent": "D50000", + "border": "FBC02D", + "codeBg": "FFF59D", + "blockquoteBg": "FFF59D", + "blockquoteBorder": "D50000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 15, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 15, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 12, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "code": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "dashed" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 2 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "heading", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/supermarket-receipt.json b/src-tauri/templates/lifestyle/supermarket-receipt.json new file mode 100644 index 0000000..72adcbe --- /dev/null +++ b/src-tauri/templates/lifestyle/supermarket-receipt.json @@ -0,0 +1,308 @@ +{ + "id": "supermarket-receipt", + "name": "Supermarket Receipt", + "category": "lifestyle", + "description": "Thermal paper aesthetic. Monospaced, slightly faded grey text with narrow alignment.", + "vibe": "Disposable, Monospace, Grey", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Fira+Mono:wght@400;700&family=Inconsolata:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Fira Mono", + "body": "Inconsolata", + "code": "Inconsolata" + }, + "colors": { + "text": "424242", + "textSecondary": "000000", + "background": "FAFAFA", + "accent": "000000", + "border": "BDBDBD", + "codeBg": "EEEEEE", + "blockquoteBg": "FAFAFA", + "blockquoteBorder": "424242" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": false, + "align": "center", + "borderBottom": { + "color": "accent", + "width": 1, + "style": "dashed" + }, + "spacing": { + "before": 36, + "after": 12, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 12, + "line": 1.4 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "padding": 12, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 24, + "bullet": "asterisk" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.4 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 8, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "dashed" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 8, + "borderBottom": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "filter": "grayscale(100%) contrast(150%)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "border", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 100, + "right": 100 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/surf-shop.json b/src-tauri/templates/lifestyle/surf-shop.json new file mode 100644 index 0000000..c8e7974 --- /dev/null +++ b/src-tauri/templates/lifestyle/surf-shop.json @@ -0,0 +1,311 @@ +{ + "id": "surf-shop", + "name": "Surf Shop", + "category": "lifestyle", + "description": "California cool. Relaxed hand-drawn fonts with sea foam blues and sunny yellows.", + "vibe": "Relaxed, Beach, Sunny", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Permanent+Marker&family=Kalam:wght@300;400;700&family=Patrick+Hand&display=swap", + "typography": { + "fonts": { + "heading": "Permanent Marker", + "body": "Kalam", + "code": "Patrick Hand" + }, + "colors": { + "text": "424242", + "textSecondary": "0097A7", + "background": "FFFFFF", + "accent": "FBC02D", + "border": "B2EBF2", + "codeBg": "E0F7FA", + "blockquoteBg": "E0F7FA", + "blockquoteBorder": "0097A7" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 15, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 13, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "borderRadius": 16, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/travel-adventure.json b/src-tauri/templates/lifestyle/travel-adventure.json new file mode 100644 index 0000000..db94491 --- /dev/null +++ b/src-tauri/templates/lifestyle/travel-adventure.json @@ -0,0 +1,316 @@ +{ + "id": "travel-adventure", + "name": "Travel Adventure", + "category": "lifestyle", + "description": "Adventurous design for travel and exploration content. Bold typography with earthy, wanderlust-inspiring colors.", + "vibe": "Adventurous, Inspiring, Explorer", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Amatic+SC:wght@400;700&family=Josefin+Sans:wght@300;400;600;700&family=Share+Tech+Mono&display=swap", + "typography": { + "fonts": { + "heading": "Amatic SC", + "body": "Josefin Sans", + "code": "Share Tech Mono" + }, + "colors": { + "text": "4E342E", + "textSecondary": "5D4037", + "background": "FFFFFF", + "accent": "FF7043", + "border": "D7CCC8", + "codeBg": "FBE9E7", + "blockquoteBg": "FBE9E7", + "blockquoteBorder": "FF7043" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "3E2723", + "bold": true, + "align": "center", + "letterSpacing": 4, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 30, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/wedding-elegant.json b/src-tauri/templates/lifestyle/wedding-elegant.json new file mode 100644 index 0000000..12de733 --- /dev/null +++ b/src-tauri/templates/lifestyle/wedding-elegant.json @@ -0,0 +1,325 @@ +{ + "id": "wedding-elegant", + "name": "Wedding Elegant", + "category": "lifestyle", + "description": "Romantic and elegant design for wedding stationery and formal events. Delicate typography with sophisticated flourishes.", + "vibe": "Romantic, Elegant, Celebratory", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Tangerine:wght@400;700&family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap", + "typography": { + "fonts": { + "heading": "Tangerine", + "body": "Cormorant Garamond", + "code": "Cormorant Garamond" + }, + "colors": { + "text": "5D4037", + "textSecondary": "795548", + "background": "FFFAF0", + "accent": "D4AF37", + "border": "EFEBE9", + "codeBg": "FFF8E1", + "blockquoteBg": "FFF8E1", + "blockquoteBorder": "D4AF37" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 3, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.6 + }, + "padding": 24, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "background" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "letterSpacing": 1, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/lifestyle/winter-holiday.json b/src-tauri/templates/lifestyle/winter-holiday.json new file mode 100644 index 0000000..1e3ae97 --- /dev/null +++ b/src-tauri/templates/lifestyle/winter-holiday.json @@ -0,0 +1,316 @@ +{ + "id": "winter-holiday", + "name": "Winter Holiday", + "category": "lifestyle", + "description": "Festive greeting card style. Elegant script, deep reds and forest greens.", + "vibe": "Festive, Cozy, Traditional", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Mountains+of+Christmas:wght@400;700&family=Merriweather:ital,wght@0,400;0,700;1,400&family=Courier+Prime&display=swap", + "typography": { + "fonts": { + "heading": "Mountains of Christmas", + "body": "Merriweather", + "code": "Courier Prime" + }, + "colors": { + "text": "212121", + "textSecondary": "1B5E20", + "background": "FFEBEE", + "accent": "B71C1C", + "border": "EF9A9A", + "codeBg": "FFFFFF", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "B71C1C" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "center", + "borderBottom": { + "color": "textSecondary", + "width": 2, + "style": "dotted" + }, + "padding": 5, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 20, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "borderRadius": 8, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/architecture-firm.json b/src-tauri/templates/minimalist/architecture-firm.json new file mode 100644 index 0000000..9c29e3d --- /dev/null +++ b/src-tauri/templates/minimalist/architecture-firm.json @@ -0,0 +1,319 @@ +{ + "id": "architecture-firm", + "name": "Architecture Firm", + "category": "minimalist", + "description": "Structural precision for architecture and design firms. Clean geometry with sophisticated restraint.", + "vibe": "Structural, Precise, Sophisticated", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Fahkwang:wght@400;500;600&family=Manrope:wght@300;400;500&family=Space+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Fahkwang", + "body": "Manrope", + "code": "Space Mono" + }, + "colors": { + "text": "525252", + "textSecondary": "4A4A4A", + "background": "FFFFFF", + "accent": "1A1A1A", + "border": "E5E5E5", + "codeBg": "F5F5F5", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "1A1A1A" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": false, + "align": "left", + "letterSpacing": 1, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 40, + "after": 20, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 9, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 32, + "after": 32, + "line": 1.6 + }, + "padding": 24, + "border": { + "left": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "background": "background" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "letterSpacing": 1, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/bauhaus-construction.json b/src-tauri/templates/minimalist/bauhaus-construction.json new file mode 100644 index 0000000..6f036ae --- /dev/null +++ b/src-tauri/templates/minimalist/bauhaus-construction.json @@ -0,0 +1,326 @@ +{ + "id": "bauhaus-construction", + "name": "Bauhaus Construction", + "category": "minimalist", + "description": "Form follows function. Geometric simplicity using primary colors and heavy structural borders.", + "vibe": "Geometric, Functional, Primary", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Jura:wght@400;700&family=Tenor+Sans&family=Source+Code+Pro:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Jura", + "body": "Tenor Sans", + "code": "Source Code+Pro" + }, + "colors": { + "text": "212121", + "textSecondary": "111111", + "background": "FFFFFF", + "accent": "D50000", + "highlight": "FFEB3B", + "border": "0000FF", + "codeBg": "EEEEEE", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "0000FF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "left": { + "color": "accent", + "width": 12, + "style": "solid" + } + }, + "padding": 16, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "background": "highlight", + "padding": 4, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "top": { + "color": "border", + "width": 4, + "style": "solid" + }, + "bottom": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "border", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "highlight", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "textSecondary", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "highlight", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/de-stijl.json b/src-tauri/templates/minimalist/de-stijl.json new file mode 100644 index 0000000..ad15ed6 --- /dev/null +++ b/src-tauri/templates/minimalist/de-stijl.json @@ -0,0 +1,324 @@ +{ + "id": "de-stijl", + "name": "De Stijl", + "category": "minimalist", + "description": "Inspired by the Dutch movement (Mondrian). Primary colors, thick black lines, and rigid grid geometry.", + "vibe": "Abstract, Geometric, Primary", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Geo:ital,wght@0,400;1,400&family=Arimo:ital,wght@0,400;0,700;1,400&family=Fira+Code&display=swap", + "typography": { + "fonts": { + "heading": "Geo", + "body": "Arimo", + "code": "Fira Code" + }, + "colors": { + "text": "000000", + "textSecondary": "0000FF", + "background": "FFFFFF", + "accent": "FF0000", + "highlight": "FFFF00", + "border": "000000", + "codeBg": "F5F5F5", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "accent", + "bold": false, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 4, + "style": "solid" + }, + "left": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "padding": 16, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "background": "highlight", + "padding": 4, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "borderRadius": 0, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "accent", + "bold": true, + "background": "highlight", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "highlight", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/hipster-coffee.json b/src-tauri/templates/minimalist/hipster-coffee.json new file mode 100644 index 0000000..299c79e --- /dev/null +++ b/src-tauri/templates/minimalist/hipster-coffee.json @@ -0,0 +1,324 @@ +{ + "id": "hipster-coffee", + "name": "Hipster Coffee", + "category": "minimalist", + "description": "Artisan roaster branding. Clean slab serifs on kraft paper textures.", + "vibe": "Artisan, Slab, Kraft", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Zilla+Slab:wght@400;700&family=Lato:wght@300;400;700&family=Roboto+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Zilla Slab", + "body": "Lato", + "code": "Roboto Mono" + }, + "colors": { + "text": "4E342E", + "textSecondary": "000000", + "background": "E0C097", + "accent": "3E2723", + "border": "3E2723", + "codeBg": "D7B486", + "blockquoteBg": "E0C097", + "blockquoteBorder": "3E2723" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 9, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "letterSpacing": 1, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "filter": "sepia(0.3)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/japanese-zen.json b/src-tauri/templates/minimalist/japanese-zen.json new file mode 100644 index 0000000..069ed14 --- /dev/null +++ b/src-tauri/templates/minimalist/japanese-zen.json @@ -0,0 +1,309 @@ +{ + "id": "japanese-zen", + "name": "Japanese Zen", + "category": "minimalist", + "description": "Inspired by Japanese minimalism and wabi-sabi aesthetics. Peaceful typography with intentional asymmetry.", + "vibe": "Zen, Peaceful, Minimal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Shippori+Mincho:wght@400;600;700&family=Zen+Kaku+Gothic+New:wght@300;400;500;700&display=swap", + "typography": { + "fonts": { + "heading": "Shippori Mincho", + "body": "Zen Kaku Gothic New", + "code": "Zen Kaku Gothic New" + }, + "colors": { + "text": "4A4A4A", + "textSecondary": "2D2D2D", + "background": "FFFFFF", + "accent": "C41E3A", + "border": "E0E0E0", + "codeBg": "F9F9F9", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "C41E3A" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 56, + "after": 32, + "line": 1.4 + } + }, + "h2": { + "font": "body", + "size": 12, + "color": "5C5C5C", + "bold": false, + "align": "left", + "letterSpacing": 2, + "spacing": { + "before": 40, + "after": 20, + "line": 1.5 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.5 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.5 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.5 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.5 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 20, + "line": 1.8 + } + }, + "blockquote": { + "font": "heading", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 36, + "after": 36, + "line": 1.8 + }, + "padding": 24, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "heading", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": false, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/minimalist-black.json b/src-tauri/templates/minimalist/minimalist-black.json new file mode 100644 index 0000000..2f9d8f9 --- /dev/null +++ b/src-tauri/templates/minimalist/minimalist-black.json @@ -0,0 +1,322 @@ +{ + "id": "minimalist-black", + "name": "Minimalist Black", + "category": "minimalist", + "description": "Ultra-minimal dark design with stark contrasts. High-impact typography on dark backgrounds.", + "vibe": "Dark, Minimal, Bold", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Work+Sans:wght@300;400;500;600&family=Inconsolata:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Bebas Neue", + "body": "Work Sans", + "code": "Inconsolata" + }, + "colors": { + "text": "E0E0E0", + "textSecondary": "FFFFFF", + "background": "0A0A0A", + "accent": "FFFFFF", + "border": "333333", + "codeBg": "121212", + "blockquoteBg": "0A0A0A", + "blockquoteBorder": "FFFFFF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 48, + "color": "textSecondary", + "bold": false, + "align": "left", + "letterSpacing": 3, + "background": "background", + "padding": 16, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 4, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 28, + "after": 28, + "line": 1.7 + }, + "padding": 24, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "letterSpacing": 1, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "filter": "grayscale(100%) contrast(120%)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "border", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/minimalist-white.json b/src-tauri/templates/minimalist/minimalist-white.json new file mode 100644 index 0000000..0175b03 --- /dev/null +++ b/src-tauri/templates/minimalist/minimalist-white.json @@ -0,0 +1,310 @@ +{ + "id": "minimalist-white", + "name": "Minimalist White", + "category": "minimalist", + "description": "Ultra-clean design with maximum white space. Less is more philosophy with restrained typography that lets content breathe.", + "vibe": "Clean, Modern, Sophisticated", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Work+Sans:wght@300;400;600&family=IBM+Plex+Mono:wght@400;600&display=swap", + "typography": { + "fonts": { + "heading": "Work Sans", + "body": "Work Sans", + "code": "IBM Plex Mono" + }, + "colors": { + "text": "555555", + "textSecondary": "444444", + "background": "FFFFFF", + "accent": "111111", + "border": "DDDDDD", + "codeBg": "FAFAFA", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "DDDDDD" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "accent", + "bold": false, + "align": "left", + "letterSpacing": -1, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 40, + "after": 20, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 18, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "666666", + "italic": false, + "align": "left", + "spacing": { + "before": 32, + "after": 32, + "line": 1.8 + }, + "padding": 24, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 40, + "after": 40 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/museum-gallery.json b/src-tauri/templates/minimalist/museum-gallery.json new file mode 100644 index 0000000..e9aec8d --- /dev/null +++ b/src-tauri/templates/minimalist/museum-gallery.json @@ -0,0 +1,313 @@ +{ + "id": "museum-gallery", + "name": "Museum Gallery", + "category": "minimalist", + "description": "Art gallery placard style. Extremely neutral sans-serifs, high contrast, small but clear text.", + "vibe": "Neutral, Institutional, Clean", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Karla:wght@400;700&family=Work+Sans:wght@400;600;700&family=Space+Mono&display=swap", + "typography": { + "fonts": { + "heading": "Work Sans", + "body": "Karla", + "code": "Space Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "000000", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 20, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 12, + "color": "616161", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 24, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "424242", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/muted-pastel.json b/src-tauri/templates/minimalist/muted-pastel.json new file mode 100644 index 0000000..a84d263 --- /dev/null +++ b/src-tauri/templates/minimalist/muted-pastel.json @@ -0,0 +1,304 @@ +{ + "id": "muted-pastel", + "name": "Muted Pastel", + "category": "minimalist", + "description": "Soft and calming. Very light background tints with gentle, rounded typography.", + "vibe": "Soft, Calming, Gentle", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Nunito:wght@400;700&family=Quicksand:wght@400;600&family=Comfortaa:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Nunito", + "body": "Quicksand", + "code": "Comfortaa" + }, + "colors": { + "text": "616161", + "textSecondary": "7986CB", + "background": "FDFBF7", + "accent": "9575CD", + "border": "E1BEE7", + "codeBg": "F3E5F5", + "blockquoteBg": "F3E5F5", + "blockquoteBorder": "9575CD" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 32, + "after": 32, + "line": 1.7 + }, + "padding": 24, + "borderRadius": 20, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 12 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "heading", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 12 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/scandinavian-clean.json b/src-tauri/templates/minimalist/scandinavian-clean.json new file mode 100644 index 0000000..16fbd22 --- /dev/null +++ b/src-tauri/templates/minimalist/scandinavian-clean.json @@ -0,0 +1,310 @@ +{ + "id": "scandinavian-clean", + "name": "Scandinavian Clean", + "category": "minimalist", + "description": "Inspired by Nordic design principles. Clean lines, functional typography, and subtle warmth with muted colors.", + "vibe": "Nordic, Clean, Warm Minimal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&family=Karla:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Poppins", + "body": "Poppins", + "code": "Karla" + }, + "colors": { + "text": "4A4A4A", + "textSecondary": "2C2C2C", + "background": "FFFFFF", + "accent": "E07A5F", + "border": "E0E0E0", + "codeBg": "F5F5F5", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "E07A5F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "5D5D5D", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "5D5D5D", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "5D5D5D", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "666666", + "italic": false, + "align": "left", + "spacing": { + "before": 28, + "after": 28, + "line": 1.7 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 3, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 0, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 0, + "style": "solid" + }, + "borderRadius": 4 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/swiss-grid.json b/src-tauri/templates/minimalist/swiss-grid.json new file mode 100644 index 0000000..9fd3c7a --- /dev/null +++ b/src-tauri/templates/minimalist/swiss-grid.json @@ -0,0 +1,327 @@ +{ + "id": "swiss-grid", + "name": "Swiss International", + "category": "minimalist", + "description": "Objective, bold, and asymmetric. Heavy use of black and white, strong grid alignment.", + "vibe": "Architecture, Design, Modernism", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Inter:wght@400;700;900&family=Space+Grotesk:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Inter", + "body": "Inter", + "code": "Space Grotesk" + }, + "colors": { + "text": "111111", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "000000", + "border": "000000", + "codeBg": "F0F0F0", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": true, + "align": "left", + "letterSpacing": -2, + "border": { + "top": { + "color": "border", + "width": 6, + "style": "solid" + } + }, + "padding": 24, + "spacing": { + "before": 64, + "after": 24, + "line": 1 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 40, + "after": 16, + "line": 1.2 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 24, + "after": 12, + "line": 1.3 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "italic": false, + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 48, + "after": 48 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "border", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 3, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/wireframe-layout.json b/src-tauri/templates/minimalist/wireframe-layout.json new file mode 100644 index 0000000..5dcebff --- /dev/null +++ b/src-tauri/templates/minimalist/wireframe-layout.json @@ -0,0 +1,318 @@ +{ + "id": "wireframe-layout", + "name": "Wireframe Layout", + "category": "minimalist", + "description": "Digital blueprint style. Grey backgrounds, monospaced fonts, and placeholder-like blocks.", + "vibe": "Digital, Prototype, Structural", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Redacted+Script&family=Flow+Circular&family=Roboto+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Roboto Mono", + "body": "Roboto Mono", + "code": "Roboto Mono" + }, + "colors": { + "text": "333333", + "textSecondary": "555555", + "background": "FFFFFF", + "accent": "0000FF", + "highlight": "E0E0E0", + "border": "CCCCCC", + "codeBg": "F0F0F0", + "blockquoteBg": "F9F9F9", + "blockquoteBorder": "999999" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "accent", + "bold": true, + "align": "left", + "background": "highlight", + "padding": 12, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "padding": 4, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "dashed" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "highlight", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + }, + "background": "highlight" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "highlight", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/minimalist/zen-garden.json b/src-tauri/templates/minimalist/zen-garden.json new file mode 100644 index 0000000..8fc85a3 --- /dev/null +++ b/src-tauri/templates/minimalist/zen-garden.json @@ -0,0 +1,309 @@ +{ + "id": "zen-garden", + "name": "Zen Garden", + "category": "minimalist", + "description": "Inspired by Japanese rock gardens. Extreme minimalism with meditative spacing and natural balance.", + "vibe": "Meditative, Balanced, Serene", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;600&family=Noto+Sans+JP:wght@300;400;700&display=swap", + "typography": { + "fonts": { + "heading": "Noto Serif JP", + "body": "Noto Sans JP", + "code": "Noto Sans JP" + }, + "colors": { + "text": "4A4A4A", + "textSecondary": "2C2C2C", + "background": "FFFFFF", + "accent": "6B8E6B", + "border": "E8E8E8", + "codeBg": "F9F9F9", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "6B8E6B" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 60, + "after": 40, + "line": 1.4 + } + }, + "h2": { + "font": "body", + "size": 11, + "color": "5C5C5C", + "bold": false, + "align": "left", + "letterSpacing": 2, + "spacing": { + "before": 48, + "after": 24, + "line": 1.6 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.6 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.6 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.6 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.6 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 20, + "line": 2.0 + } + }, + "blockquote": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 40, + "after": 40, + "line": 1.8 + }, + "padding": 32, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.6 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 24, + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 20, + "after": 20, + "line": 2.0 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 20, + "after": 20, + "line": 2.0 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 2.0 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": false, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 48, + "after": 48 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/8-bit-arcade.json b/src-tauri/templates/tech/8-bit-arcade.json new file mode 100644 index 0000000..f3435a1 --- /dev/null +++ b/src-tauri/templates/tech/8-bit-arcade.json @@ -0,0 +1,309 @@ +{ + "id": "8-bit-arcade", + "name": "8-Bit Arcade", + "category": "tech", + "description": "Retro gaming high-score screen. Pixelated fonts on dark backgrounds.", + "vibe": "Retro, Gaming, Pixel", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Press+Start+2P&family=VT323&display=swap", + "typography": { + "fonts": { + "heading": "Press Start 2P", + "body": "VT323", + "code": "VT323" + }, + "colors": { + "text": "FFFFFF", + "textSecondary": "D500F9", + "background": "000000", + "accent": "76FF03", + "border": "FFFFFF", + "codeBg": "212121", + "blockquoteBg": "000000", + "blockquoteBorder": "FFFF00" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 20, + "color": "accent", + "bold": false, + "align": "center", + "background": "codeBg", + "padding": 20, + "spacing": { + "before": 48, + "after": 28, + "line": 1.5 + } + }, + "h2": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.4 + } + }, + "h3": { + "font": "heading", + "size": 11, + "color": "border", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 10, + "color": "border", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 14, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.4 + } + }, + "blockquote": { + "font": "body", + "size": 14, + "color": "blockquoteBorder", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "padding": 16, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 14, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "accent", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "accent", + "width": 2, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 14, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.4 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": false, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "td": { + "font": "body", + "size": 14, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "textSecondary", + "width": 4, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + }, + "filter": "contrast(1.2) brightness(0.9)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "textSecondary", + "color": "background" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/aerospace-modern.json b/src-tauri/templates/tech/aerospace-modern.json new file mode 100644 index 0000000..d3518aa --- /dev/null +++ b/src-tauri/templates/tech/aerospace-modern.json @@ -0,0 +1,312 @@ +{ + "id": "aerospace-modern", + "name": "Aerospace Modern", + "category": "tech", + "description": "Sleek design inspired by aerospace and space exploration. Clean lines with futuristic precision.", + "vibe": "Futuristic, Sleek, Precision", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Michroma&family=Saira:wght@300;400;500;600&family=Share+Tech+Mono&display=swap", + "typography": { + "fonts": { + "heading": "Michroma", + "body": "Saira", + "code": "Share Tech Mono" + }, + "colors": { + "text": "2E3A45", + "textSecondary": "0B3D91", + "background": "FFFFFF", + "accent": "FC3D21", + "border": "B0BEC5", + "codeBg": "F1F3F4", + "blockquoteBg": "E8F0FE", + "blockquoteBorder": "0B3D91" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 22, + "color": "textSecondary", + "bold": false, + "align": "left", + "letterSpacing": 2, + "spacing": { + "before": 48, + "after": 24, + "line": 1.3 + } + }, + "h2": { + "font": "body", + "size": 13, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.4 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "textSecondary", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/artificial-intelligence.json b/src-tauri/templates/tech/artificial-intelligence.json new file mode 100644 index 0000000..2c2916b --- /dev/null +++ b/src-tauri/templates/tech/artificial-intelligence.json @@ -0,0 +1,305 @@ +{ + "id": "artificial-intelligence", + "name": "Artificial Intelligence", + "category": "tech", + "description": "Cutting-edge design for AI and machine learning content. Neural network inspired with gradient accents.", + "vibe": "Cutting-edge, Neural, Intelligent", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Oxanium:wght@400;600;700&family=Lexend:wght@300;400;500;600&family=JetBrains+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Oxanium", + "body": "Lexend", + "code": "JetBrains Mono" + }, + "colors": { + "text": "334155", + "textSecondary": "2563EB", + "background": "FFFFFF", + "accent": "7C3AED", + "border": "E2E8F0", + "codeBg": "F8FAFC", + "blockquoteBg": "F3F4F6", + "blockquoteBorder": "7C3AED" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "borderRadius": 8, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/astronomy-space.json b/src-tauri/templates/tech/astronomy-space.json new file mode 100644 index 0000000..e21d6c0 --- /dev/null +++ b/src-tauri/templates/tech/astronomy-space.json @@ -0,0 +1,311 @@ +{ + "id": "astronomy-space", + "name": "Astronomy Space", + "category": "tech", + "description": "Cosmic design for astronomy and space science. Deep space colors with stellar typography.", + "vibe": "Cosmic, Scientific, Vast", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Orbitron:wght@400;600;700&family=Space+Grotesk:wght@300;400;500;600&family=Space+Mono:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Orbitron", + "body": "Space Grotesk", + "code": "Space Mono" + }, + "colors": { + "text": "B0BEC5", + "textSecondary": "FFFFFF", + "background": "0A0A23", + "accent": "7C4DFF", + "border": "2D2D50", + "codeBg": "121225", + "blockquoteBg": "1A1A3E", + "blockquoteBorder": "7C4DFF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "textSecondary", + "bold": true, + "align": "left", + "background": "background", + "padding": 20, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/biohazard-lab.json b/src-tauri/templates/tech/biohazard-lab.json new file mode 100644 index 0000000..dc19349 --- /dev/null +++ b/src-tauri/templates/tech/biohazard-lab.json @@ -0,0 +1,327 @@ +{ + "id": "biohazard-lab", + "name": "Biohazard Lab", + "category": "tech", + "description": "Warning-label aesthetic. Monospace fonts with high-contrast yellow and black caution themes.", + "vibe": "Warning, Industrial, Hazardous", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Syne+Mono&family=Azeret+Mono:wght@400;600;700&family=Share+Tech+Mono&display=swap", + "typography": { + "fonts": { + "heading": "Syne Mono", + "body": "Azeret Mono", + "code": "Share Tech Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FAFAFA", + "accent": "FFEB3B", + "border": "000000", + "codeBg": "FFF9C4", + "blockquoteBg": "FFF9C4", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": true, + "align": "center", + "background": "accent", + "padding": 20, + "spacing": { + "before": 48, + "after": 28, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "left": { + "color": "accent", + "width": 8, + "style": "solid" + } + }, + "padding": 12, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "left": { + "color": "accent", + "width": 6, + "style": "solid" + } + }, + "padding": 8, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true, + "background": "accent" + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "accent", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + }, + "background": "accent" + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/biopunk-lab.json b/src-tauri/templates/tech/biopunk-lab.json new file mode 100644 index 0000000..4ccd3b2 --- /dev/null +++ b/src-tauri/templates/tech/biopunk-lab.json @@ -0,0 +1,320 @@ +{ + "id": "biopunk-lab", + "name": "Biopunk Lab", + "category": "sci-fi", + "description": "Organic technology. Slime greens, flesh tones, and rounded organic fonts.", + "vibe": "Organic, Gross, Tech", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Creepster&family=Kodchasan:wght@400;700&family=Butcherman&display=swap", + "typography": { + "fonts": { + "heading": "Creepster", + "body": "Kodchasan", + "code": "Butcherman" + }, + "colors": { + "text": "33691E", + "textSecondary": "1B5E20", + "background": "F1F8E9", + "accent": "2E7D32", + "border": "C8E6C9", + "codeBg": "DCEDC8", + "blockquoteBg": "F1F8E9", + "blockquoteBorder": "2E7D32" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "accent", + "bold": false, + "align": "center", + "background": "border", + "padding": 16, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "accent", + "width": 4, + "style": "wave" + } + }, + "padding": 4, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "borderRadius": 16, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 12 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": false, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 2, + "style": "wave" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + }, + "borderRadius": 12 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/blockchain-protocol.json b/src-tauri/templates/tech/blockchain-protocol.json new file mode 100644 index 0000000..ef099a2 --- /dev/null +++ b/src-tauri/templates/tech/blockchain-protocol.json @@ -0,0 +1,312 @@ +{ + "id": "blockchain-protocol", + "name": "Blockchain Protocol", + "category": "tech", + "description": "Technical blockchain and Web3 design. Decentralized aesthetics with protocol documentation style.", + "vibe": "Technical, Decentralized, Protocol", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Inter:wght@400;500;600&display=swap", + "typography": { + "fonts": { + "heading": "Inter", + "body": "Inter", + "code": "JetBrains Mono" + }, + "colors": { + "text": "4B5563", + "textSecondary": "1E1E1E", + "background": "FFFFFF", + "accent": "6366F1", + "border": "E5E7EB", + "codeBg": "F3F4F6", + "blockquoteBg": "F3F4F6", + "blockquoteBorder": "6366F1" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "code", + "size": 9, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "borderRadius": 6, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 6 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 6 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/bsod-blue.json b/src-tauri/templates/tech/bsod-blue.json new file mode 100644 index 0000000..cb42e74 --- /dev/null +++ b/src-tauri/templates/tech/bsod-blue.json @@ -0,0 +1,308 @@ +{ + "id": "bsod-blue", + "name": "BSOD Blue", + "category": "tech", + "description": "The infamous crash screen. Pure white terminal fonts on a deep, error blue background.", + "vibe": "Crash, Error, Terminal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lucident&family=Fira+Mono:wght@400;500;700&display=swap", + "typography": { + "fonts": { + "heading": "Lucident", + "body": "Fira Mono", + "code": "Fira Mono" + }, + "colors": { + "text": "FFFFFF", + "textSecondary": "FFFFFF", + "background": "0000AA", + "accent": "FFFFFF", + "border": "FFFFFF", + "codeBg": "000088", + "blockquoteBg": "0000AA", + "blockquoteBorder": "FFFFFF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "text", + "bold": false, + "align": "left", + "underline": true, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 16, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "text" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "text", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "text" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/circuit-board.json b/src-tauri/templates/tech/circuit-board.json new file mode 100644 index 0000000..4f30999 --- /dev/null +++ b/src-tauri/templates/tech/circuit-board.json @@ -0,0 +1,316 @@ +{ + "id": "circuit-board", + "name": "Circuit Board", + "category": "tech", + "description": "PCB aesthetic. Deep forest green background with copper/gold tracks.", + "vibe": "Tech, Green, Copper", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Teko:wght@400;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Teko", + "body": "Share Tech Mono", + "code": "Share Tech Mono" + }, + "colors": { + "text": "C8E6C9", + "textSecondary": "A5D6A7", + "background": "1B5E20", + "accent": "FFD54F", + "border": "FFB300", + "codeBg": "2E7D32", + "blockquoteBg": "1B5E20", + "blockquoteBorder": "FFD54F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 4, + "style": "dotted" + } + }, + "padding": 12, + "spacing": { + "before": 48, + "after": 24, + "line": 1.1 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 16, + "border": { + "color": "accent", + "width": 1, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "accent", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "dotted" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/code-editor.json b/src-tauri/templates/tech/code-editor.json new file mode 100644 index 0000000..3a65ab6 --- /dev/null +++ b/src-tauri/templates/tech/code-editor.json @@ -0,0 +1,311 @@ +{ + "id": "code-editor", + "name": "Code Editor", + "category": "tech", + "description": "Dark mode IDE aesthetic. Monospaced fonts with syntax-highlighting color palette.", + "vibe": "Technical, Dark, Coding", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&family=Source+Code+Pro:wght@400;500;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Inconsolata", + "body": "Source Code Pro", + "code": "Source Code Pro" + }, + "colors": { + "text": "ABB2BF", + "textSecondary": "98C379", + "background": "282C34", + "accent": "E06C75", + "border": "3E4451", + "codeBg": "2C313C", + "blockquoteBg": "2C313C", + "blockquoteBorder": "E06C75" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "61AFEF", + "bold": true, + "align": "left", + "background": "background", + "padding": 20, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "E5C07B", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "56B6C2", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "C678DD", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "C678DD", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "E5C07B" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "61AFEF", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "5C6370" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "E5C07B" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "5C6370", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "5C6370", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/crypto-futurism.json b/src-tauri/templates/tech/crypto-futurism.json new file mode 100644 index 0000000..7e68ab7 --- /dev/null +++ b/src-tauri/templates/tech/crypto-futurism.json @@ -0,0 +1,311 @@ +{ + "id": "crypto-futurism", + "name": "Crypto Futurism", + "category": "tech", + "description": "Cutting-edge design for blockchain and cryptocurrency content. Dark themes with electric accents.", + "vibe": "Futuristic, Digital, Cutting-edge", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Audiowide&family=Rajdhani:wght@400;500;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Audiowide", + "body": "Rajdhani", + "code": "Rajdhani" + }, + "colors": { + "text": "C9D1D9", + "textSecondary": "58A6FF", + "background": "0D1117", + "accent": "00D4AA", + "border": "30363D", + "codeBg": "161B22", + "blockquoteBg": "21262D", + "blockquoteBorder": "00D4AA" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "accent", + "bold": false, + "align": "left", + "background": "background", + "padding": 20, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "body", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/cybersecurity.json b/src-tauri/templates/tech/cybersecurity.json new file mode 100644 index 0000000..76ad38a --- /dev/null +++ b/src-tauri/templates/tech/cybersecurity.json @@ -0,0 +1,311 @@ +{ + "id": "cybersecurity", + "name": "Cybersecurity", + "category": "tech", + "description": "High-security design for infosec and cybersecurity. Matrix-inspired with threat-level colors.", + "vibe": "Secure, Technical, Alert", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Exo+2:wght@400;500;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Exo 2", + "body": "Share Tech Mono", + "code": "Share Tech Mono" + }, + "colors": { + "text": "B0BEC5", + "textSecondary": "00E676", + "background": "0D0D0D", + "accent": "00E676", + "border": "1A1A1A", + "codeBg": "1A1A1A", + "blockquoteBg": "1A1A1A", + "blockquoteBorder": "00E676" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "accent", + "bold": true, + "align": "left", + "background": "background", + "padding": 20, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 9, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 9, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 9, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 9, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 9, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "accent", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 9, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/data-analytics.json b/src-tauri/templates/tech/data-analytics.json new file mode 100644 index 0000000..97b788b --- /dev/null +++ b/src-tauri/templates/tech/data-analytics.json @@ -0,0 +1,309 @@ +{ + "id": "data-analytics", + "name": "Data Analytics", + "category": "tech", + "description": "Clean design for data science and analytics content. Precise typography optimized for charts and metrics.", + "vibe": "Analytical, Clean, Data-driven", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Overpass:wght@400;600;700&family=Overpass+Mono:wght@400;600&display=swap", + "typography": { + "fonts": { + "heading": "Overpass", + "body": "Overpass", + "code": "Overpass Mono" + }, + "colors": { + "text": "475569", + "textSecondary": "3730A3", + "background": "FFFFFF", + "accent": "0F172A", + "border": "E2E8F0", + "codeBg": "F1F5F9", + "blockquoteBg": "F1F5F9", + "blockquoteBorder": "3730A3" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "0F172A", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "3730A3", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "3730A3", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "0F172A", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "code", + "size": 9, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "0F172A" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "3730A3", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "0F172A", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "3730A3", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "3730A3" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/deep-sea-sub.json b/src-tauri/templates/tech/deep-sea-sub.json new file mode 100644 index 0000000..9523060 --- /dev/null +++ b/src-tauri/templates/tech/deep-sea-sub.json @@ -0,0 +1,318 @@ +{ + "id": "deep-sea-sub", + "name": "Deep Sea Sub", + "category": "nature", + "description": "Bioluminescent abyss. Deepest navy backgrounds with glowing cyan/purple text.", + "vibe": "Dark, Underwater, Glowing", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Abel&family=Rajdhani:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Rajdhani", + "body": "Abel", + "code": "Rajdhani" + }, + "colors": { + "text": "B2EBF2", + "textSecondary": "00E5FF", + "background": "000051", + "accent": "E040FB", + "border": "00B8D4", + "codeBg": "1A237E", + "blockquoteBg": "1A237E", + "blockquoteBorder": "00E5FF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": true, + "align": "center", + "background": "linear-gradient(135deg, #1A237E 0%, #000051 100%)", + "padding": 24, + "border": { + "color": "textSecondary", + "width": 1, + "style": "solid" + }, + "borderRadius": 8, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 20, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "E0F7FA", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "borderRadius": 8, + "background": "rgba(0, 229, 255, 0.1)" + }, + "code": { + "font": "code", + "size": 12, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/desert-sands.json b/src-tauri/templates/tech/desert-sands.json new file mode 100644 index 0000000..0eef0ba --- /dev/null +++ b/src-tauri/templates/tech/desert-sands.json @@ -0,0 +1,315 @@ +{ + "id": "desert-sands", + "name": "Desert Sands", + "category": "nature", + "description": "Dune aesthetic. Warm beige backgrounds with wind-swept, eroded typefaces.", + "vibe": "Warm, Sandy, Soft", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cinzel&family=Fauna+One&display=swap", + "typography": { + "fonts": { + "heading": "Cinzel", + "body": "Fauna One", + "code": "Fauna One" + }, + "colors": { + "text": "4E342E", + "textSecondary": "5D4037", + "background": "F3E5AB", + "accent": "8D6E63", + "border": "A1887F", + "codeBg": "EFEBE9", + "blockquoteBg": "F3E5AB", + "blockquoteBorder": "5D4037" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "center", + "letterSpacing": 2, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": true, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/frutiger-aero.json b/src-tauri/templates/tech/frutiger-aero.json new file mode 100644 index 0000000..f00d882 --- /dev/null +++ b/src-tauri/templates/tech/frutiger-aero.json @@ -0,0 +1,313 @@ +{ + "id": "frutiger-aero", + "name": "Frutiger Aero", + "category": "tech", + "description": "Mid-2000s tech aesthetic. Glossy textures, humanist sans-serifs, and optimistic skeuomorphic blues and greens.", + "vibe": "Glossy, Optimistic, 2000s", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Varela+Round&family=M+PLUS+Rounded+1c:wght@400;500;700&display=swap", + "typography": { + "fonts": { + "heading": "Varela Round", + "body": "M PLUS Rounded 1c", + "code": "M PLUS Rounded 1c" + }, + "colors": { + "text": "546E7A", + "textSecondary": "0288D1", + "background": "FFFFFF", + "accent": "7CB342", + "border": "B3E5FC", + "codeBg": "E1F5FE", + "blockquoteBg": "E0F7FA", + "blockquoteBorder": "B3E5FC" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "left", + "background": "linear-gradient(to right, #E1F5FE, #FFFFFF)", + "padding": 10, + "borderRadius": 10, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 15, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 15, + "background": "linear-gradient(180deg, #FFFFFF 0%, #E0F7FA 100%)" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 10 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 10 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/game-handheld.json b/src-tauri/templates/tech/game-handheld.json new file mode 100644 index 0000000..aca54bc --- /dev/null +++ b/src-tauri/templates/tech/game-handheld.json @@ -0,0 +1,321 @@ +{ + "id": "game-handheld", + "name": "Game Handheld", + "category": "gaming", + "description": "Classic 90s handheld console. Four shades of olive green pixel art style.", + "vibe": "Pixel, Green, Retro", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap", + "typography": { + "fonts": { + "heading": "Press Start 2P", + "body": "Press Start 2P", + "code": "Press Start 2P" + }, + "colors": { + "text": "0f380f", + "textSecondary": "306230", + "background": "9bbc0f", + "accent": "306230", + "border": "0f380f", + "codeBg": "8bac0f", + "blockquoteBg": "8bac0f", + "blockquoteBorder": "306230" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 20, + "color": "text", + "bold": false, + "align": "center", + "background": "codeBg", + "padding": 20, + "border": { + "color": "border", + "width": 4, + "style": "solid" + }, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "border": { + "bottom": { + "color": "textSecondary", + "width": 4, + "style": "solid" + } + }, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": false, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": false + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": false + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": false, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/hologram-blue.json b/src-tauri/templates/tech/hologram-blue.json new file mode 100644 index 0000000..2da460e --- /dev/null +++ b/src-tauri/templates/tech/hologram-blue.json @@ -0,0 +1,320 @@ +{ + "id": "hologram-blue", + "name": "Hologram Blue", + "category": "sci-fi", + "description": "Star Wars style communications. Translucent flickering blue text on dark voids.", + "vibe": "Holographic, Futuristic, Translucent", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Audiowide&family=Rajdhani:wght@400;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Audiowide", + "body": "Rajdhani", + "code": "Rajdhani" + }, + "colors": { + "text": "B3E5FC", + "textSecondary": "00B0FF", + "background": "000000", + "accent": "80D8FF", + "border": "0288D1", + "codeBg": "01579B", + "blockquoteBg": "000000", + "blockquoteBorder": "00B0FF" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 30, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "accent", + "bold": true, + "align": "center", + "border": { + "top": { + "color": "textSecondary", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "textSecondary", + "width": 1, + "style": "solid" + } + }, + "padding": 5, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "E1F5FE", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "dashed" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "dashed" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/industrial-blueprint.json b/src-tauri/templates/tech/industrial-blueprint.json new file mode 100644 index 0000000..ca96614 --- /dev/null +++ b/src-tauri/templates/tech/industrial-blueprint.json @@ -0,0 +1,310 @@ +{ + "id": "industrial-blueprint", + "name": "Industrial Blueprint", + "category": "technical", + "description": "Engineering-inspired design reminiscent of technical blueprints. Precise typography with drafting aesthetics.',", + "vibe": "Technical, Precise, Engineering", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Titillium+Web:wght@400;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Titillium Web", + "body": "Share Tech Mono", + "code": "Share Tech Mono" + }, + "colors": { + "text": "2C4A6B", + "textSecondary": "1A3A5C", + "background": "FFFFFF", + "accent": "1A3A5C", + "border": "B0C4DE", + "codeBg": "E8F4FC", + "blockquoteBg": "E8F4FC", + "blockquoteBorder": "1A3A5C" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "FFFFFF", + "bold": true, + "align": "left", + "background": "accent", + "padding": 20, + "uppercase": true, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 11, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 9, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.7 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "dashed" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 9, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 9, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 9, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 9, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 8, + "superScript": true + }, + "sub": { + "font": "body", + "size": 8, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 9, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 9, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/marine-biology.json b/src-tauri/templates/tech/marine-biology.json new file mode 100644 index 0000000..52093ee --- /dev/null +++ b/src-tauri/templates/tech/marine-biology.json @@ -0,0 +1,311 @@ +{ + "id": "marine-biology", + "name": "Marine Biology", + "category": "science", + "description": "Ocean-inspired design for marine science and aquatic content. Deep blues with flowing elegance.", + "vibe": "Oceanic, Scientific, Flowing", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600&family=Lora:wght@400;500;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Lora", + "body": "Archivo", + "code": "Archivo" + }, + "colors": { + "text": "334155", + "textSecondary": "0C4A6E", + "background": "FFFFFF", + "accent": "0369A1", + "border": "E0F2FE", + "codeBg": "F0F9FF", + "blockquoteBg": "E0F2FE", + "blockquoteBorder": "0EA5E9" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 13, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 6 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/mars-rover.json b/src-tauri/templates/tech/mars-rover.json new file mode 100644 index 0000000..5dfe740 --- /dev/null +++ b/src-tauri/templates/tech/mars-rover.json @@ -0,0 +1,318 @@ +{ + "id": "mars-rover", + "name": "Mars Rover", + "category": "space", + "description": "Red planet exploration. Dusty orange and terracotta tones with functional technical type.", + "vibe": "Space, Dusty, Technical", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Orbitron&family=Exo:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Orbitron", + "body": "Exo", + "code": "Exo" + }, + "colors": { + "text": "3E2723", + "textSecondary": "BF360C", + "background": "FBE9E7", + "accent": "FF5722", + "border": "FF7043", + "codeBg": "FFCCBC", + "blockquoteBg": "FFCCBC", + "blockquoteBorder": "BF360C" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 30, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "padding": 12, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "E64A19", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "E64A19", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "E64A19", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 6, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/national-park-signage.json b/src-tauri/templates/tech/national-park-signage.json new file mode 100644 index 0000000..7cdb901 --- /dev/null +++ b/src-tauri/templates/tech/national-park-signage.json @@ -0,0 +1,320 @@ +{ + "id": "national-park-signage", + "name": "National Park Signage", + "category": "nature", + "description": "Routed wood sign aesthetic. Heavy rounded serifs with earthy brown and cream colors.", + "vibe": "Outdoors, Rustic, Official", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Crete+Round:ital@0;1&family=Lato:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Crete Round", + "body": "Lato", + "code": "Lato" + }, + "colors": { + "text": "212121", + "textSecondary": "3E2723", + "background": "FFFFFF", + "accent": "5D4037", + "border": "A1887F", + "codeBg": "EFEBE9", + "blockquoteBg": "EFEBE9", + "blockquoteBorder": "3E2723" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "FFFFFF", + "bold": false, + "align": "left", + "background": "3E2723", + "padding": 16, + "border": { + "color": "5D4037", + "width": 2, + "style": "solid" + }, + "borderRadius": 8, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 6, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 4 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/neon-noir.json b/src-tauri/templates/tech/neon-noir.json new file mode 100644 index 0000000..fa27682 --- /dev/null +++ b/src-tauri/templates/tech/neon-noir.json @@ -0,0 +1,309 @@ +{ + "id": "neon-noir", + "name": "Neon Noir", + "category": "futuristic", + "description": "High-tech noir aesthetic. Ultra-thin, futuristic typography with glowing neon accents.", + "vibe": "Futuristic, Thin, Neon", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Megrim&family=Gruppo&display=swap", + "typography": { + "fonts": { + "heading": "Megrim", + "body": "Gruppo", + "code": "Gruppo" + }, + "colors": { + "text": "E0E0E0", + "textSecondary": "00E5FF", + "background": "121212", + "accent": "D500F9", + "border": "333333", + "codeBg": "1C1C1C", + "blockquoteBg": "000000", + "blockquoteBorder": "D500F9" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "left", + "background": "background", + "padding": 10, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/schematic-diagram.json b/src-tauri/templates/tech/schematic-diagram.json new file mode 100644 index 0000000..729dc02 --- /dev/null +++ b/src-tauri/templates/tech/schematic-diagram.json @@ -0,0 +1,316 @@ +{ + "id": "schematic-diagram", + "name": "Schematic Diagram", + "category": "technical", + "description": "Patent drawing style. Thin, precise lines on stark white with serif lettering.", + "vibe": "Technical, Precise, Patent", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Courier+Prime&family=Libre+Baskerville:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Libre Baskerville", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFFFFF", + "accent": "000000", + "border": "000000", + "codeBg": "F5F5F5", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "padding": 2, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "justify", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 1, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/smart-home-tech.json b/src-tauri/templates/tech/smart-home-tech.json new file mode 100644 index 0000000..541e58b --- /dev/null +++ b/src-tauri/templates/tech/smart-home-tech.json @@ -0,0 +1,312 @@ +{ + "id": "smart-home-tech", + "name": "Smart Home Tech", + "category": "tech", + "description": "Modern IoT and smart home design. Clean, connected typography with ambient intelligence.", + "vibe": "Connected, Modern, Ambient", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&display=swap", + "typography": { + "fonts": { + "heading": "Poppins", + "body": "Poppins", + "code": "Poppins" + }, + "colors": { + "text": "546E7A", + "textSecondary": "263238", + "background": "FFFFFF", + "accent": "00BFA5", + "border": "E0F2F1", + "codeBg": "E0F2F1", + "blockquoteBg": "E0F2F1", + "blockquoteBorder": "00BFA5" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 15, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "borderRadius": 12, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "accent", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/solarpunk.json b/src-tauri/templates/tech/solarpunk.json new file mode 100644 index 0000000..8fc2292 --- /dev/null +++ b/src-tauri/templates/tech/solarpunk.json @@ -0,0 +1,312 @@ +{ + "id": "solarpunk", + "name": "Solarpunk", + "category": "futuristic", + "description": "Nature-meets-technology future. Art Nouveau curves with high-tech sustainable green and gold.", + "vibe": "Sustainable, Hopeful, Organic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Caudex:wght@400;700&family=El+Messiri:wght@400;600;700&display=swap", + "typography": { + "fonts": { + "heading": "El Messiri", + "body": "Caudex", + "code": "Caudex" + }, + "colors": { + "text": "33691E", + "textSecondary": "2E7D32", + "background": "FFFFFF", + "accent": "AFB42B", + "border": "DCEDC8", + "codeBg": "F1F8E9", + "blockquoteBg": "F1F8E9", + "blockquoteBorder": "FFD700" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 30, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 15, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "borderRadius": 16, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 16 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/startup-saas.json b/src-tauri/templates/tech/startup-saas.json new file mode 100644 index 0000000..c8a7446 --- /dev/null +++ b/src-tauri/templates/tech/startup-saas.json @@ -0,0 +1,313 @@ +{ + "id": "startup-saas", + "name": "Startup SaaS", + "category": "tech", + "description": "Modern SaaS product design language. Clean, conversion-focused with trustworthy tech aesthetics.", + "vibe": "Modern, Trustworthy, Product", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Inter", + "body": "Inter", + "code": "Inter" + }, + "colors": { + "text": "6B7280", + "textSecondary": "111827", + "background": "FFFFFF", + "accent": "4F46E5", + "border": "E5E7EB", + "codeBg": "F3F4F6", + "blockquoteBg": "EEF2FF", + "blockquoteBorder": "4F46E5" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": true, + "align": "left", + "letterSpacing": -0.5, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "borderRadius": 8, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 6 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/tech-documentation.json b/src-tauri/templates/tech/tech-documentation.json new file mode 100644 index 0000000..07f6ca4 --- /dev/null +++ b/src-tauri/templates/tech/tech-documentation.json @@ -0,0 +1,311 @@ +{ + "id": "tech-documentation", + "name": "Tech Documentation", + "category": "technical", + "description": "Clean and functional design for technical documentation. Optimized for code samples and clear instruction.", + "vibe": "Technical, Clear, Functional", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=IBM+Plex+Mono:wght@400;500&display=swap", + "typography": { + "fonts": { + "heading": "IBM Plex Sans", + "body": "IBM Plex Sans", + "code": "IBM Plex Mono" + }, + "colors": { + "text": "525252", + "textSecondary": "161616", + "background": "FFFFFF", + "accent": "0F62FE", + "border": "E0E0E0", + "codeBg": "F4F4F4", + "blockquoteBg": "F4F4F4", + "blockquoteBorder": "0F62FE" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "code", + "size": 9, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/tech-startup.json b/src-tauri/templates/tech/tech-startup.json new file mode 100644 index 0000000..ff2d945 --- /dev/null +++ b/src-tauri/templates/tech/tech-startup.json @@ -0,0 +1,312 @@ +{ + "id": "tech-startup", + "name": "Tech Startup", + "category": "tech", + "description": "Modern, energetic design for technology companies and startups. Bold gradients, vibrant colors, and confident typography.", + "vibe": "Innovative, Dynamic, Bold", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;700&display=swap", + "typography": { + "fonts": { + "heading": "Plus Jakarta Sans", + "body": "Plus Jakarta Sans", + "code": "Plus Jakarta Sans" + }, + "colors": { + "text": "4B5563", + "textSecondary": "1E1E1E", + "background": "FFFFFF", + "accent": "6366F1", + "border": "E5E7EB", + "codeBg": "EEF2FF", + "blockquoteBg": "EEF2FF", + "blockquoteBorder": "6366F1" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "borderRadius": 8, + "background": "linear-gradient(135deg, #EEF2FF 0%, #E0E7FF 100%)" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/tech/volcanic-ash.json b/src-tauri/templates/tech/volcanic-ash.json new file mode 100644 index 0000000..a6bcbb1 --- /dev/null +++ b/src-tauri/templates/tech/volcanic-ash.json @@ -0,0 +1,326 @@ +{ + "id": "volcanic-ash", + "name": "Volcanic Ash", + "category": "nature", + "description": "Geological extreme. Obsidian greys with magma orange cracks.", + "vibe": "Dark, Hot, Geological", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Creepster&family=Merriweather+Sans:wght@400;800&display=swap", + "typography": { + "fonts": { + "heading": "Merriweather Sans", + "body": "Merriweather Sans", + "code": "Merriweather Sans" + }, + "colors": { + "text": "212121", + "textSecondary": "424242", + "background": "FAFAFA", + "accent": "FF3D00", + "border": "FFCCBC", + "codeBg": "FFCCBC", + "blockquoteBg": "FFCCBC", + "blockquoteBorder": "212121" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": true, + "align": "left", + "background": "212121", + "padding": 16, + "border": { + "bottom": { + "color": "DD2C00", + "width": 4, + "style": "solid" + } + }, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "padding": 5, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 8, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/amber-monitor.json b/src-tauri/templates/vintage/amber-monitor.json new file mode 100644 index 0000000..8af1082 --- /dev/null +++ b/src-tauri/templates/vintage/amber-monitor.json @@ -0,0 +1,317 @@ +{ + "id": "amber-monitor", + "name": "Amber Monitor", + "category": "retro", + "description": "1980s monochrome computing. Glowing amber text on a black void.", + "vibe": "Retro, Computing, Amber", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=VT323&display=swap", + "typography": { + "fonts": { + "heading": "VT323", + "body": "VT323", + "code": "VT323" + }, + "colors": { + "text": "FFE082", + "textSecondary": "FFB300", + "background": "000000", + "accent": "FFB300", + "border": "FFB300", + "codeBg": "212121", + "blockquoteBg": "212121", + "blockquoteBorder": "FFB300" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "left", + "background": "codeBg", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 20, + "color": "FFCA28", + "bold": false, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 18, + "color": "FFCA28", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 16, + "color": "FFCA28", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "heading", + "size": 14, + "color": "text", + "bold": false, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "heading", + "size": 14, + "color": "text", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.4 + } + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "FFECB3", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 16, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 16, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.4 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.4 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.4 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 16, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 14, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 14, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/ancient-papyrus.json b/src-tauri/templates/vintage/ancient-papyrus.json new file mode 100644 index 0000000..04773fa --- /dev/null +++ b/src-tauri/templates/vintage/ancient-papyrus.json @@ -0,0 +1,331 @@ +{ + "id": "ancient-papyrus", + "name": "Ancient Papyrus", + "category": "historical", + "description": "Egyptian scroll aesthetic. Fibre textures and ancient-looking serifs.", + "vibe": "Ancient, Scroll, Historical", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Caesar+Dressing&family=Antic+Didone&display=swap", + "typography": { + "fonts": { + "heading": "Caesar Dressing", + "body": "Antic Didone", + "code": "Antic Didone" + }, + "colors": { + "text": "212121", + "textSecondary": "3E2723", + "background": "FFF3E0", + "accent": "3E2723", + "border": "8D6E63", + "codeBg": "FFE0B2", + "blockquoteBg": "FFCCBC", + "blockquoteBorder": "3E2723" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "5D4037", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "5D4037", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "5D4037", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 13, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 13, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "justify", + "spacing": { + "before": 24, + "after": 24, + "line": 1.8 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "right": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "top": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "lower-roman" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/art-deco-glamour.json b/src-tauri/templates/vintage/art-deco-glamour.json new file mode 100644 index 0000000..62b1a31 --- /dev/null +++ b/src-tauri/templates/vintage/art-deco-glamour.json @@ -0,0 +1,331 @@ +{ + "id": "art-deco-glamour", + "name": "Art Deco Glamour", + "category": "vintage", + "description": "Geometric elegance inspired by the 1920s-1930s Art Deco movement. Bold contrasts and luxurious golden accents.", + "vibe": "Luxury, Elegant, Theatrical", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Poiret+One&family=Josefin+Sans:wght@400;600&display=swap", + "typography": { + "fonts": { + "heading": "Poiret One", + "body": "Josefin Sans", + "code": "Josefin Sans" + }, + "colors": { + "text": "2D2D2D", + "textSecondary": "1C1C1C", + "background": "FFFFFF", + "accent": "C9A227", + "border": "C9A227", + "codeBg": "FAFAF5", + "blockquoteBg": "FAFAF5", + "blockquoteBorder": "C9A227" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "letterSpacing": 4, + "background": "F5F0E1", + "padding": 20, + "border": { + "top": { + "color": "border", + "width": 4, + "style": "solid" + }, + "bottom": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "spacing": { + "before": 48, + "after": 28, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 32, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 11, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "letterSpacing": 1, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/atomic-age-1950s.json b/src-tauri/templates/vintage/atomic-age-1950s.json new file mode 100644 index 0000000..46db6c5 --- /dev/null +++ b/src-tauri/templates/vintage/atomic-age-1950s.json @@ -0,0 +1,320 @@ +{ + "id": "atomic-age-1950s", + "name": "Atomic Age 1950s", + "category": "retro", + "description": "Mid-century modern futurism. Starburst motifs and playful, bouncy sans-serifs.", + "vibe": "Mid-Century, Optimistic, Bouncy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lobster&family=Josefin+Sans:wght@400;600&display=swap", + "typography": { + "fonts": { + "heading": "Lobster", + "body": "Josefin Sans", + "code": "Josefin Sans" + }, + "colors": { + "text": "37474F", + "textSecondary": "00ACC1", + "background": "FFFFFF", + "accent": "F4511E", + "border": "FDD835", + "codeBg": "FFF3E0", + "blockquoteBg": "FFF3E0", + "blockquoteBorder": "F4511E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 34, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "border": { + "left": { + "color": "border", + "width": 6, + "style": "dotted" + } + }, + "padding": 10, + "spacing": { + "before": 30, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "accent", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "left": { + "color": "border", + "width": 8, + "style": "solid" + } + }, + "borderRadius": 20, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 12 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/atompunk-50s.json b/src-tauri/templates/vintage/atompunk-50s.json new file mode 100644 index 0000000..832f775 --- /dev/null +++ b/src-tauri/templates/vintage/atompunk-50s.json @@ -0,0 +1,330 @@ +{ + "id": "atompunk-50s", + "name": "Atompunk 50s", + "category": "retro", + "description": "Optimistic nuclear age. Starburst motifs and playful, bouncy sans-serifs.", + "vibe": "Retro, Future, Pastel", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Lobster&family=Josefin+Sans:wght@400;600&display=swap", + "typography": { + "fonts": { + "heading": "Lobster", + "body": "Josefin Sans", + "code": "Josefin Sans" + }, + "colors": { + "text": "37474F", + "textSecondary": "00BCD4", + "background": "FFFFFF", + "accent": "E91E63", + "border": "00BCD4", + "codeBg": "E0F7FA", + "blockquoteBg": "E0F7FA", + "blockquoteBorder": "00BCD4" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "center", + "background": "FCE4EC", + "padding": 20, + "borderRadius": 50, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "center", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "top": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "bottom": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "left": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "right": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "borderRadius": 16, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + }, + "borderRadius": 16 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "borderRadius": 50 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/gold-rush-ledger.json b/src-tauri/templates/vintage/gold-rush-ledger.json new file mode 100644 index 0000000..f994203 --- /dev/null +++ b/src-tauri/templates/vintage/gold-rush-ledger.json @@ -0,0 +1,332 @@ +{ + "id": "gold-rush-ledger", + "name": "Gold Rush Ledger", + "category": "vintage", + "description": "1850s handwritten accounting. Script headers with rigid body fonts mimicking recorded entries.", + "vibe": "Vintage, Handwritten, Accounting", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Pinyon+Script&family=Inknut+Antiqua:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Pinyon Script", + "body": "Inknut Antiqua", + "code": "Inknut Antiqua" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "FFF9C4", + "accent": "3E2723", + "border": "000000", + "codeBg": "FFFDE7", + "blockquoteBg": "FFFDE7", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 42, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 4, + "style": "double" + } + }, + "padding": 4, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 11, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 10, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 9, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 9, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "top": { + "color": "border", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "border", + "width": 1, + "style": "solid" + }, + "left": { + "color": "border", + "width": 1, + "style": "solid" + }, + "right": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 4, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/label-maker-emboss.json b/src-tauri/templates/vintage/label-maker-emboss.json new file mode 100644 index 0000000..e0b0370 --- /dev/null +++ b/src-tauri/templates/vintage/label-maker-emboss.json @@ -0,0 +1,334 @@ +{ + "id": "label-maker-emboss", + "name": "Label Maker Emboss", + "category": "retro", + "description": "Simulates the embossed plastic tape of handheld label makers. White text on dark strips.", + "vibe": "Tactile, Retro, Organized", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cutive+Mono&family=Gaspard&display=swap", + "typography": { + "fonts": { + "heading": "Cutive Mono", + "body": "Cutive Mono", + "code": "Cutive Mono" + }, + "colors": { + "text": "212121", + "textSecondary": "FFFFFF", + "background": "FFFFFF", + "accent": "B71C1C", + "border": "000000", + "codeBg": "E0E0E0", + "blockquoteBg": "E0E0E0", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "background": "000000", + "padding": 12, + "borderRadius": 4, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "background": "accent", + "padding": 8, + "borderRadius": 2, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "top": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "bottom": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "left": { + "color": "border", + "width": 2, + "style": "dashed" + }, + "right": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/library-archive.json b/src-tauri/templates/vintage/library-archive.json new file mode 100644 index 0000000..9732486 --- /dev/null +++ b/src-tauri/templates/vintage/library-archive.json @@ -0,0 +1,332 @@ +{ + "id": "library-archive", + "name": "Library Archive", + "category": "vintage", + "description": "Organized catalog card aesthetic. Monospaced headers with serif body, reminiscent of Dewey Decimal cards.", + "vibe": "Organized, Vintage, Catalog", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cutive+Mono&family=Old+Standard+TT:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Cutive Mono", + "body": "Old Standard TT", + "code": "Cutive Mono" + }, + "colors": { + "text": "263238", + "textSecondary": "455A64", + "background": "FDFBF7", + "accent": "D32F2F", + "border": "B0BEC5", + "codeBg": "FFFFFF", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "B0BEC5" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "000000", + "bold": true, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 2, + "style": "dotted" + } + }, + "padding": 6, + "spacing": { + "before": 48, + "after": 28, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "heading", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "top": { + "color": "border", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "border", + "width": 1, + "style": "solid" + }, + "left": { + "color": "border", + "width": 1, + "style": "solid" + }, + "right": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/medieval-illuminated.json b/src-tauri/templates/vintage/medieval-illuminated.json new file mode 100644 index 0000000..ad7d71d --- /dev/null +++ b/src-tauri/templates/vintage/medieval-illuminated.json @@ -0,0 +1,332 @@ +{ + "id": "medieval-illuminated", + "name": "Medieval Illuminated", + "category": "historical", + "description": "Manuscript style. Heavy ornate headers mimicking drop caps and blackletter feels.", + "vibe": "Historic, Religious, Ornate", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=MedievalSharp&family=Goudy+Bookletter+1911&display=swap", + "typography": { + "fonts": { + "heading": "MedievalSharp", + "body": "Goudy Bookletter 1911", + "code": "Goudy Bookletter 1911" + }, + "colors": { + "text": "000000", + "textSecondary": "800000", + "background": "FFF8DC", + "accent": "FFD700", + "border": "FFD700", + "codeBg": "FAEBD7", + "blockquoteBg": "FAEBD7", + "blockquoteBorder": "800000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "left", + "border": { + "left": { + "color": "border", + "width": 8, + "style": "solid" + } + }, + "padding": 16, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 18, + "color": "556B2F", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 16, + "color": "556B2F", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 14, + "color": "556B2F", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 13, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 13, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 13, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 13, + "color": "text", + "italic": false, + "align": "justify", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 2, + "style": "double" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 2, + "style": "double" + }, + "left": { + "color": "blockquoteBorder", + "width": 2, + "style": "double" + }, + "right": { + "color": "blockquoteBorder", + "width": 2, + "style": "double" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 13, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 13, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 13, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 13, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 13, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "double" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 11, + "superScript": true + }, + "sub": { + "font": "body", + "size": 11, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/memphis-pattern.json b/src-tauri/templates/vintage/memphis-pattern.json new file mode 100644 index 0000000..7ac8668 --- /dev/null +++ b/src-tauri/templates/vintage/memphis-pattern.json @@ -0,0 +1,320 @@ +{ + "id": "memphis-pattern", + "name": "Memphis Pattern", + "category": "retro", + "description": "The chaotic 80s aesthetic. Clashing patterns, zig-zags, and vibrant pastel-neons.", + "vibe": "Playful, Chaotic, 80s", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Righteous&family=Comfortaa:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Righteous", + "body": "Comfortaa", + "code": "Comfortaa" + }, + "colors": { + "text": "111111", + "textSecondary": "E91E63", + "background": "FFFFFF", + "accent": "673AB7", + "border": "00BCD4", + "codeBg": "FFEB3B", + "blockquoteBg": "FFFFFF", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "right", + "border": { + "bottom": { + "color": "border", + "width": 4, + "style": "dashed" + } + }, + "padding": 12, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "left", + "background": "codeBg", + "padding": 5, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "textSecondary", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 8, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "borderRadius": 0 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "blockquoteBorder" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "textSecondary" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "textSecondary", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/mid-century-modern.json b/src-tauri/templates/vintage/mid-century-modern.json new file mode 100644 index 0000000..6117c2e --- /dev/null +++ b/src-tauri/templates/vintage/mid-century-modern.json @@ -0,0 +1,315 @@ +{ + "id": "mid-century-modern", + "name": "Mid-Century Modern", + "category": "retro", + "description": "Optimistic and playful design from the 1950s-60s. Geometric sans-serifs, vibrant atomic-age colors, and approachable warmth.", + "vibe": "Playful, Nostalgic, Friendly", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Quicksand:wght@400;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Quicksand", + "body": "Quicksand", + "code": "Quicksand" + }, + "colors": { + "text": "34495E", + "textSecondary": "2D3E50", + "background": "FFFFFF", + "accent": "E67E22", + "border": "1ABC9C", + "codeBg": "E8F6F3", + "blockquoteBg": "FEF5E7", + "blockquoteBorder": "E67E22" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "textSecondary", + "bold": true, + "align": "left", + "background": "E8F6F3", + "padding": 20, + "borderRadius": 4, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.7 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "borderRadius": 8, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 0, + "style": "none" + }, + "borderRadius": 8 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/noir-detective.json b/src-tauri/templates/vintage/noir-detective.json new file mode 100644 index 0000000..947d52c --- /dev/null +++ b/src-tauri/templates/vintage/noir-detective.json @@ -0,0 +1,336 @@ +{ + "id": "noir-detective", + "name": "Noir Detective", + "category": "vintage", + "description": "1940s case file. Typewriter font on manila folder background with gritty grey accents.", + "vibe": "Gritty, Mystery, Vintage", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Courier+Prime&family=Special+Elite&display=swap", + "typography": { + "fonts": { + "heading": "Special Elite", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "F4E1C1", + "accent": "3E2723", + "border": "5D4037", + "codeBg": "FFF8E1", + "blockquoteBg": "FFF8E1", + "blockquoteBorder": "3E2723" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "textSecondary", + "bold": false, + "align": "left", + "border": { + "bottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "padding": 10, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "underline": true, + "spacing": { + "before": 30, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.5 + }, + "padding": 16, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "left": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "right": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/old-telegram.json b/src-tauri/templates/vintage/old-telegram.json new file mode 100644 index 0000000..22c285a --- /dev/null +++ b/src-tauri/templates/vintage/old-telegram.json @@ -0,0 +1,345 @@ +{ + "id": "old-telegram", + "name": "Old Telegram", + "category": "vintage", + "description": "Urgent vintage message. All-caps serif type with stop-word aesthetics.", + "vibe": "Urgent, Vintage, Telegraph", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cutive+Mono&display=swap", + "typography": { + "fonts": { + "heading": "Cutive Mono", + "body": "Cutive Mono", + "code": "Cutive Mono" + }, + "colors": { + "text": "000000", + "textSecondary": "000000", + "background": "FFF59D", + "accent": "000000", + "border": "000000", + "codeBg": "FFF176", + "blockquoteBg": "FFF176", + "blockquoteBorder": "000000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": true, + "align": "center", + "uppercase": true, + "border": { + "bottom": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "text", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "text", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "text", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": false, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "uppercase": true, + "spacing": { + "before": 0, + "after": 14, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "center", + "uppercase": true, + "bold": true, + "spacing": { + "before": 20, + "after": 20, + "line": 1.5 + }, + "padding": 12, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "left": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + }, + "right": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "uppercase": true, + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 16, + "uppercase": true, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "uppercase": true, + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": false, + "background": "codeBg" + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "text", + "bold": true, + "background": "codeBg", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "uppercase": true, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/psychedelic-60s.json b/src-tauri/templates/vintage/psychedelic-60s.json new file mode 100644 index 0000000..82141cc --- /dev/null +++ b/src-tauri/templates/vintage/psychedelic-60s.json @@ -0,0 +1,305 @@ +{ + "id": "psychedelic-60s", + "name": "Psychedelic 60s", + "category": "retro", + "description": "Groovy 1960s psychedelic poster art inspired design. Vibrant colors with flowing, trippy typography.", + "vibe": "Groovy, Vibrant, Trippy", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Monoton&family=Comfortaa:wght@400;600;700&display=swap", + "typography": { + "fonts": { + "heading": "Monoton", + "body": "Comfortaa", + "code": "Comfortaa" + }, + "colors": { + "text": "4A4A4A", + "textSecondary": "FF1493", + "background": "FFFFFF", + "accent": "FF6B00", + "border": "00CED1", + "codeBg": "E5FFFA", + "blockquoteBg": "E5FFFA", + "blockquoteBorder": "FF1493" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 28, + "line": 1.1 + } + }, + "h2": { + "font": "body", + "size": 16, + "color": "00CED1", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "accent", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 16, + "borderRadius": 12, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 12 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "textSecondary" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 4, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + }, + "borderRadius": 24 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/raygun-gothic.json b/src-tauri/templates/vintage/raygun-gothic.json new file mode 100644 index 0000000..6dc6b35 --- /dev/null +++ b/src-tauri/templates/vintage/raygun-gothic.json @@ -0,0 +1,334 @@ +{ + "id": "raygun-gothic", + "name": "Raygun Gothic", + "category": "retro", + "description": "Golden age sci-fi (Flash Gordon). Swooping curves and metallic golds.", + "vibe": "Retro, Sci-Fi, Heroic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Righteous&family=Jura:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Righteous", + "body": "Jura", + "code": "Jura" + }, + "colors": { + "text": "212121", + "textSecondary": "FFD700", + "background": "FFFFFF", + "accent": "B71C1C", + "border": "FFD700", + "codeBg": "FFF8E1", + "blockquoteBg": "FFF8E1", + "blockquoteBorder": "FFD700" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "textSecondary", + "bold": false, + "align": "center", + "background": "B71C1C", + "padding": 16, + "borderRadius": 20, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "accent", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "accent", + "bold": true, + "align": "center", + "uppercase": true, + "letterSpacing": 1.5, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "accent", + "bold": true, + "align": "center", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 16, + "border": { + "top": { + "color": "border", + "width": 2, + "style": "solid" + }, + "bottom": { + "color": "border", + "width": 2, + "style": "solid" + }, + "left": { + "color": "border", + "width": 2, + "style": "solid" + }, + "right": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "borderRadius": 12, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "textSecondary", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + }, + "borderRadius": 12 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/retro-80s.json b/src-tauri/templates/vintage/retro-80s.json new file mode 100644 index 0000000..ff28085 --- /dev/null +++ b/src-tauri/templates/vintage/retro-80s.json @@ -0,0 +1,311 @@ +{ + "id": "retro-80s", + "name": "Retro 80s", + "category": "retro", + "description": "Nostalgic 1980s aesthetic with bold colors and geometric shapes. Perfect for synthwave and retro-themed content.", + "vibe": "Retro, Vibrant, Nostalgic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Bungee&family=VT323&family=Rubik:wght@400;500&display=swap", + "typography": { + "fonts": { + "heading": "Bungee", + "body": "Rubik", + "code": "VT323" + }, + "colors": { + "text": "E8E8E8", + "textSecondary": "FF1493", + "background": "16213E", + "accent": "00CED1", + "border": "FF1493", + "codeBg": "1A1A2E", + "blockquoteBg": "0F3460", + "blockquoteBorder": "FF1493" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "textSecondary", + "bold": false, + "align": "center", + "background": "1A1A2E", + "padding": 20, + "spacing": { + "before": 48, + "after": 28, + "line": 1.2 + } + }, + "h2": { + "font": "code", + "size": 20, + "color": "00CED1", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "code", + "size": 18, + "color": "00CED1", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "code", + "size": 16, + "color": "00CED1", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "textSecondary", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/retro-diner.json b/src-tauri/templates/vintage/retro-diner.json new file mode 100644 index 0000000..122aca9 --- /dev/null +++ b/src-tauri/templates/vintage/retro-diner.json @@ -0,0 +1,309 @@ +{ + "id": "retro-diner", + "name": "Retro Diner", + "category": "retro", + "description": "1950s American diner aesthetic. Nostalgic typography with chrome and neon vibes.", + "vibe": "Nostalgic, Retro, Americana", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Cherry+Cream+Soda&family=Poppins:wght@400;500;600&display=swap", + "typography": { + "fonts": { + "heading": "Cherry Cream Soda", + "body": "Poppins", + "code": "Poppins" + }, + "colors": { + "text": "2C3E50", + "textSecondary": "40E0D0", + "background": "FFFFFF", + "accent": "E8533E", + "border": "E8533E", + "codeBg": "FFF5EE", + "blockquoteBg": "FFF5EE", + "blockquoteBorder": "E8533E" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": false, + "align": "center", + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 30, + "after": 14, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 16, + "border": { + "color": "blockquoteBorder", + "width": 2, + "style": "dashed" + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 8 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + }, + "borderRadius": 12 + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/retro-typewriter.json b/src-tauri/templates/vintage/retro-typewriter.json new file mode 100644 index 0000000..4cfc6f7 --- /dev/null +++ b/src-tauri/templates/vintage/retro-typewriter.json @@ -0,0 +1,307 @@ +{ + "id": "retro-typewriter", + "name": "Retro Typewriter", + "category": "Vintage", + "description": "Authentic analogue feel. Monospaced characters with ink-bleed styling on aged paper.", + "vibe": "Nostalgic, Mechanic, Personal", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Special+Elite:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Courier+Prime:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap", + "typography": { + "fonts": { + "heading": "Special Elite", + "body": "Special Elite", + "code": "Courier Prime" + }, + "colors": { + "text": "2E2725", + "textSecondary": "5D5550", + "background": "FDFCF0", + "accent": "8B4513", + "border": "A1887F", + "codeBg": "F5F0E6", + "blockquoteBorder": "5D4037" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "2E2725", + "bold": true, + "align": "center", + "spacing": { + "before": 30, + "after": 20, + "line": 1.2 + }, + "allCaps": true, + "textShadow": "1px 1px 0px rgba(0,0,0,0.1)" + }, + "h2": { + "font": "heading", + "size": 24, + "color": "2E2725", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.2 + }, + "underline": true + }, + "h3": { + "font": "heading", + "size": 20, + "color": "2E2725", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.2 + } + }, + "h4": { + "font": "heading", + "size": 18, + "color": "5D5550", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + }, + "allCaps": true + }, + "h5": { + "font": "heading", + "size": 16, + "color": "5D5550", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "h6": { + "font": "heading", + "size": 14, + "color": "5D5550", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.3 + } + }, + "p": { + "font": "body", + "size": 16, + "color": "2E2725", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.6 + }, + "weight": 400 + }, + "blockquote": { + "font": "body", + "size": 16, + "color": "5D5550", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 20, + "borderLeft": { + "color": "textSecondary", + "width": 1, + "style": "dashed" + }, + "indent": 20 + }, + "code": { + "font": "code", + "size": 14, + "color": "2E2725", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.4 + } + }, + "pre": { + "font": "code", + "size": 14, + "color": "2E2725", + "background": "codeBg", + "padding": 20, + "spacing": { + "before": 20, + "after": 20, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "dotted" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "bullet": "hyphen" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 20, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 16, + "color": "2E2725", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "heading", + "bold": true, + "color": "2E2725" + }, + "em": { + "font": "body", + "italic": false, + "underline": true + }, + "a": { + "font": "body", + "color": "2E2725", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 20, + "after": 20, + "line": 1.4 + }, + "border": { + "color": "2E2725", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 16, + "color": "FDFCF0", + "bold": true, + "background": "2E2725", + "padding": 12 + }, + "td": { + "font": "body", + "size": 16, + "color": "2E2725", + "padding": 12, + "borderBottom": { + "color": "A1887F", + "width": 1, + "style": "dashed" + } + }, + "hr": { + "spacing": { + "before": 30, + "after": 30 + }, + "border": { + "color": "2E2725", + "width": 1, + "style": "dashed" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 20, + "after": 20 + }, + "border": { + "color": "2E2725", + "width": 2, + "style": "solid" + }, + "filter": "sepia(50%)" + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "2E2725" + }, + "sup": { + "font": "body", + "size": 12, + "superScript": true + }, + "sub": { + "font": "body", + "size": 12, + "subScript": true + }, + "mark": { + "font": "body", + "background": "FFEB3B", + "color": "2E2725" + }, + "footnote": { + "font": "body", + "size": 12, + "color": "textSecondary", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 12, + "color": "textSecondary", + "spacing": { + "before": 6, + "after": 6, + "line": 1.4 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 1, + "header": false, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/soviet-constructivism.json b/src-tauri/templates/vintage/soviet-constructivism.json new file mode 100644 index 0000000..29b5356 --- /dev/null +++ b/src-tauri/templates/vintage/soviet-constructivism.json @@ -0,0 +1,319 @@ +{ + "id": "soviet-constructivism", + "name": "Soviet Constructivism", + "category": "historical", + "description": "Revolutionary Russian art. Angled text (italics), blocky fonts, and aggressive red/black palette.", + "vibe": "Bold, Revolutionary, Angled", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Rubik+Mono+One&family=Roboto+Condensed:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Rubik Mono One", + "body": "Roboto Condensed", + "code": "Roboto Condensed" + }, + "colors": { + "text": "212121", + "textSecondary": "000000", + "background": "F5F5F5", + "accent": "D50000", + "border": "000000", + "codeBg": "000000", + "blockquoteBg": "000000", + "blockquoteBorder": "D50000" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 32, + "color": "accent", + "bold": false, + "align": "left", + "uppercase": true, + "background": "background", + "border": { + "right": { + "color": "border", + "width": 10, + "style": "solid" + } + }, + "padding": 12, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 18, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "italic": true, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "italic": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "uppercase": true, + "italic": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 12, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 12, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.5 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "FFFFFF", + "italic": false, + "align": "left", + "bold": true, + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "padding": 20, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 12, + "color": "FFFFFF", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 12, + "color": "FFFFFF", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 12, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.5 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 12, + "color": "FFFFFF", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 12, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "accent", + "width": 4, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 10, + "superScript": true + }, + "sub": { + "font": "body", + "size": 10, + "subScript": true + }, + "mark": { + "font": "body", + "background": "accent", + "color": "FFFFFF" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/speakeasy-prohibition.json b/src-tauri/templates/vintage/speakeasy-prohibition.json new file mode 100644 index 0000000..2c505c6 --- /dev/null +++ b/src-tauri/templates/vintage/speakeasy-prohibition.json @@ -0,0 +1,318 @@ +{ + "id": "speakeasy-prohibition", + "name": "Speakeasy Prohibition", + "category": "vintage", + "description": "1920s Prohibition era speakeasy aesthetic. Mysterious, elegant with jazz age glamour.", + "vibe": "Mysterious, Glamorous, Jazz Age", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Poiret+One&family=Raleway:wght@400;500;600&display=swap", + "typography": { + "fonts": { + "heading": "Poiret One", + "body": "Raleway", + "code": "Raleway" + }, + "colors": { + "text": "E8E8E8", + "textSecondary": "D4AF37", + "background": "1A1A1A", + "accent": "D4AF37", + "border": "D4AF37", + "codeBg": "212121", + "blockquoteBg": "1A1A1A", + "blockquoteBorder": "D4AF37" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": false, + "align": "center", + "background": "background", + "letterSpacing": 4, + "padding": 20, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 12, + "color": "accent", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 3, + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 11, + "color": "accent", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 10, + "color": "accent", + "bold": false, + "align": "left", + "uppercase": true, + "letterSpacing": 2, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.7 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 28, + "after": 28, + "line": 1.7 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.7 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.7 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 10, + "color": "accent", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/victorian-ornate.json b/src-tauri/templates/vintage/victorian-ornate.json new file mode 100644 index 0000000..ee15d8d --- /dev/null +++ b/src-tauri/templates/vintage/victorian-ornate.json @@ -0,0 +1,333 @@ +{ + "id": "victorian-ornate", + "name": "Victorian Ornate", + "category": "classic", + "description": "Inspired by the decorative exuberance of the Victorian era. Rich typography with ornamental borders and jewel-tone accents.", + "vibe": "Traditional, Formal, Heritage", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Crimson+Text:wght@400;600&display=swap", + "typography": { + "fonts": { + "heading": "Playfair Display", + "body": "Crimson Text", + "code": "Crimson Text" + }, + "colors": { + "text": "3D2914", + "textSecondary": "5D3A1A", + "background": "FDF5E6", + "accent": "8B4513", + "border": "D4A574", + "codeBg": "FDF5E6", + "blockquoteBg": "FDF5E6", + "blockquoteBorder": "D4A574" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 26, + "color": "2C1810", + "bold": true, + "align": "center", + "border": { + "bottom": { + "color": "accent", + "width": 4, + "style": "double" + } + }, + "padding": 12, + "spacing": { + "before": 48, + "after": 24, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 14, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "textSecondary", + "italic": true, + "align": "justify", + "spacing": { + "before": 24, + "after": 24, + "line": 1.8 + }, + "padding": 20, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "left": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "right": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + }, + "borderRadius": 4 + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "double" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "double" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/vintage-apothecary.json b/src-tauri/templates/vintage/vintage-apothecary.json new file mode 100644 index 0000000..4f71144 --- /dev/null +++ b/src-tauri/templates/vintage/vintage-apothecary.json @@ -0,0 +1,332 @@ +{ + "id": "vintage-apothecary", + "name": "Vintage Apothecary", + "category": "vintage", + "description": "Old-world pharmacy aesthetic with medicinal elegance. Ornate typography with antique charm.", + "vibe": "Vintage, Medicinal, Antique", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Almendra:wght@400;700&family=Cardo:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Almendra", + "body": "Cardo", + "code": "Cardo" + }, + "colors": { + "text": "3D3D3D", + "textSecondary": "4A6B5D", + "background": "F9F5F0", + "accent": "2D4739", + "border": "2D4739", + "codeBg": "F0F5F1", + "blockquoteBg": "F0F5F1", + "blockquoteBorder": "2D4739" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": true, + "align": "center", + "border": { + "bottom": { + "color": "border", + "width": 3, + "style": "double" + } + }, + "padding": 16, + "spacing": { + "before": 48, + "after": 32, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 16, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 36, + "after": 18, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 14, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 11, + "color": "text", + "align": "justify", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 11, + "color": "text", + "italic": false, + "align": "justify", + "spacing": { + "before": 28, + "after": 28, + "line": 1.8 + }, + "padding": 20, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "left": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + }, + "right": { + "color": "blockquoteBorder", + "width": 1, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 11, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "accent", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 11, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 4, + "style": "double" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 11, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 11, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/vintage-radio.json b/src-tauri/templates/vintage/vintage-radio.json new file mode 100644 index 0000000..b9b58e0 --- /dev/null +++ b/src-tauri/templates/vintage/vintage-radio.json @@ -0,0 +1,316 @@ +{ + "id": "vintage-radio", + "name": "Vintage Radio", + "category": "retro", + "description": "Golden age of radio inspired design. Art Deco influences with warm broadcast aesthetics.", + "vibe": "Vintage, Broadcast, Golden Age", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Rye&family=Roboto+Slab:wght@400;500;600&display=swap", + "typography": { + "fonts": { + "heading": "Rye", + "body": "Roboto Slab", + "code": "Roboto Slab" + }, + "colors": { + "text": "3E2723", + "textSecondary": "A0522D", + "background": "FFF8E7", + "accent": "8B4513", + "border": "CD853F", + "codeBg": "FAF0E6", + "blockquoteBg": "FAF0E6", + "blockquoteBorder": "CD853F" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 28, + "color": "accent", + "bold": false, + "align": "center", + "background": "codeBg", + "padding": 20, + "spacing": { + "before": 48, + "after": 30, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": true, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 20, + "after": 20, + "line": 1.6 + }, + "padding": 16, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "right": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "border" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/vintage-typewriter.json b/src-tauri/templates/vintage/vintage-typewriter.json new file mode 100644 index 0000000..04f59e6 --- /dev/null +++ b/src-tauri/templates/vintage/vintage-typewriter.json @@ -0,0 +1,309 @@ +{ + "id": "vintage-typewriter", + "name": "Vintage Typewriter", + "category": "vintage", + "description": "Nostalgic design reminiscent of classic typewriters. Monospace aesthetics with vintage character.", + "vibe": "Nostalgic, Literary, Classic", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Special+Elite&family=Courier+Prime:wght@400;700&display=swap", + "typography": { + "fonts": { + "heading": "Special Elite", + "body": "Courier Prime", + "code": "Courier Prime" + }, + "colors": { + "text": "3D3D3D", + "textSecondary": "3D3D3D", + "background": "FAF9F6", + "accent": "8B4513", + "border": "8B4513", + "codeBg": "F0F0F0", + "blockquoteBg": "F0F0F0", + "blockquoteBorder": "8B4513" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 24, + "color": "2D2D2D", + "bold": false, + "align": "left", + "spacing": { + "before": 48, + "after": 28, + "line": 1.2 + } + }, + "h2": { + "font": "heading", + "size": 14, + "color": "4A4A4A", + "bold": false, + "align": "left", + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "heading", + "size": 13, + "color": "4A4A4A", + "bold": false, + "align": "left", + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "heading", + "size": 12, + "color": "4A4A4A", + "bold": false, + "align": "left", + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 10, + "color": "text", + "bold": true, + "align": "left", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 16, + "line": 1.8 + } + }, + "blockquote": { + "font": "body", + "size": 10, + "color": "text", + "italic": false, + "align": "left", + "spacing": { + "before": 24, + "after": 24, + "line": 1.8 + }, + "padding": 20, + "border": { + "left": { + "color": "blockquoteBorder", + "width": 2, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "dashed" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "bullet": "circle" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.8 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.8 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "2D2D2D" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "text", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "img": { + "align": "left", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src-tauri/templates/vintage/wanted-poster.json b/src-tauri/templates/vintage/wanted-poster.json new file mode 100644 index 0000000..e2954ba --- /dev/null +++ b/src-tauri/templates/vintage/wanted-poster.json @@ -0,0 +1,328 @@ +{ + "id": "wanted-poster", + "name": "Wanted Poster", + "category": "vintage", + "description": "Old West saloon design. Wood-block typography with weathered western grit.", + "vibe": "Western, Rugged, Vintage", + "googleFontsImport": "https://fonts.googleapis.com/css2?family=Sancreek&family=Holtwood+One+SC&display=swap", + "typography": { + "fonts": { + "heading": "Sancreek", + "body": "Holtwood One SC", + "code": "Holtwood One SC" + }, + "colors": { + "text": "4E342E", + "textSecondary": "5D4037", + "background": "D7CCC8", + "accent": "3E2723", + "border": "3E2723", + "codeBg": "CDBBA7", + "blockquoteBg": "CDBBA7", + "blockquoteBorder": "3E2723" + } + }, + "elements": { + "h1": { + "font": "heading", + "size": 36, + "color": "accent", + "bold": false, + "align": "center", + "uppercase": true, + "spacing": { + "before": 48, + "after": 28, + "line": 1.2 + } + }, + "h2": { + "font": "body", + "size": 14, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "spacing": { + "before": 32, + "after": 16, + "line": 1.3 + } + }, + "h3": { + "font": "body", + "size": 13, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "spacing": { + "before": 24, + "after": 12, + "line": 1.4 + } + }, + "h4": { + "font": "body", + "size": 12, + "color": "textSecondary", + "bold": false, + "align": "center", + "uppercase": true, + "spacing": { + "before": 20, + "after": 10, + "line": 1.4 + } + }, + "h5": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "center", + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "h6": { + "font": "body", + "size": 11, + "color": "text", + "bold": true, + "align": "center", + "uppercase": true, + "spacing": { + "before": 16, + "after": 8, + "line": 1.4 + } + }, + "p": { + "font": "body", + "size": 10, + "color": "text", + "align": "left", + "spacing": { + "before": 0, + "after": 14, + "line": 1.6 + } + }, + "blockquote": { + "font": "body", + "size": 12, + "color": "text", + "italic": false, + "align": "center", + "spacing": { + "before": 24, + "after": 24, + "line": 1.6 + }, + "padding": 20, + "border": { + "top": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "bottom": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "left": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + }, + "right": { + "color": "blockquoteBorder", + "width": 4, + "style": "solid" + } + }, + "background": "blockquoteBg" + }, + "code": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "spacing": { + "before": 0, + "after": 0, + "line": 1.5 + } + }, + "pre": { + "font": "code", + "size": 10, + "color": "text", + "background": "codeBg", + "padding": 16, + "spacing": { + "before": 16, + "after": 16, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "ul": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "bullet": "square" + }, + "ol": { + "spacing": { + "before": 16, + "after": 16, + "line": 1.6 + }, + "indent": 24, + "numbering": "decimal" + }, + "li": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.6 + } + }, + "strong": { + "font": "body", + "bold": true, + "color": "accent" + }, + "em": { + "font": "body", + "italic": true + }, + "a": { + "font": "body", + "color": "accent", + "underline": true, + "bold": true + }, + "table": { + "spacing": { + "before": 24, + "after": 24, + "line": 1.5 + }, + "border": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "th": { + "font": "heading", + "size": 11, + "color": "textSecondary", + "bold": true, + "background": "codeBg", + "padding": 12, + "borderBottom": { + "color": "accent", + "width": 2, + "style": "solid" + } + }, + "td": { + "font": "body", + "size": 10, + "color": "text", + "padding": 12, + "borderBottom": { + "color": "border", + "width": 1, + "style": "solid" + } + }, + "hr": { + "spacing": { + "before": 32, + "after": 32 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "img": { + "align": "center", + "spacing": { + "before": 24, + "after": 24 + }, + "border": { + "color": "border", + "width": 2, + "style": "solid" + } + }, + "del": { + "font": "body", + "strikethrough": true, + "color": "text" + }, + "sup": { + "font": "body", + "size": 9, + "superScript": true + }, + "sub": { + "font": "body", + "size": 9, + "subScript": true + }, + "mark": { + "font": "body", + "background": "codeBg", + "color": "accent" + }, + "footnote": { + "font": "body", + "size": 10, + "color": "text", + "superScript": true + }, + "footnoteRef": { + "font": "body", + "size": 10, + "color": "text", + "spacing": { + "before": 4, + "after": 4, + "line": 1.2 + } + } + }, + "page": { + "margins": { + "top": 72, + "bottom": 72, + "left": 72, + "right": 72 + }, + "columns": 2, + "header": true, + "footer": true + } +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index f8b2106..afb9c16 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,41 +1,145 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect, useCallback } from 'react'; +import { motion, AnimatePresence } from 'motion/react'; import { AppState, PaperSize } from './types'; import { FileUpload } from './components/FileUpload'; import { StyleSelector } from './components/StyleSelector'; import { Preview } from './components/Preview'; +import { ZoomControl } from './components/ZoomControl'; +import { useSettings } from './hooks/useSettings'; +import { useTemplates } from './hooks/useTemplates'; // @ts-ignore import { parse } from 'marked'; -import { Sparkles, Loader2, FileType } from 'lucide-react'; +import { Sparkles, Loader2, FileType, Keyboard, X, RefreshCw } from 'lucide-react'; + +import { useKeyboardNavigation } from './hooks/useKeyboardNavigation'; + +// Keyboard shortcuts help component +const KeyboardShortcutsHelp: React.FC<{ onClose: () => void }> = ({ onClose }) => { + const shortcuts = [ + { key: 'โ†‘ / โ†“', description: 'Navigate styles' }, + { key: 'โ† / โ†’', description: 'Navigate categories (when focused)' }, + { key: 'Enter', description: 'Select style or category' }, + { key: 'Home / End', description: 'First/last item' }, + { key: 'PgUp / PgDn', description: 'Jump 5 items' }, + { key: 'Tab', description: 'Switch between sections' }, + { key: 'Ctrl + Enter', description: 'Generate document' }, + { key: 'Escape', description: 'Go back / Close' }, + ]; + + return ( + + e.stopPropagation()} + > +
+
+
+ +
+

Keyboard Shortcuts

+
+ +
+
+ {shortcuts.map((shortcut, index) => ( + + {shortcut.description} + + {shortcut.key} + + + ))} +
+

+ Press Escape or click outside to close +

+
+
+ ); +}; const App: React.FC = () => { const [appState, setAppState] = useState(AppState.UPLOAD); const [content, setContent] = useState(''); + const [inputFileName, setInputFileName] = useState(''); const [selectedStyle, setSelectedStyle] = useState(null); const [paperSize, setPaperSize] = useState('Letter'); const [generatedHtml, setGeneratedHtml] = useState(''); const [error, setError] = useState(null); + const [showShortcuts, setShowShortcuts] = useState(false); - const handleFileLoaded = (text: string) => { + const { uiZoom, setUiZoom, isLoaded } = useSettings(); + const { templates, categories, isLoading: templatesLoading, error: templatesError, refresh, openFolder } = useTemplates(); + + // Global keyboard shortcut: Toggle help with ? or / + useKeyboardNavigation({ + onEnter: undefined, + }, []); + + // Note: Native file drop is handled by the FileUpload component + // The Tauri file drop is disabled to allow the webview to handle drag events + // This preserves the drag hover animations in the FileUpload component + + // Global keydown listener for shortcuts help + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === '?' || e.key === '/') { + e.preventDefault(); + setShowShortcuts(prev => !prev); + } + }; + + window.addEventListener('keydown', handleKeyDown); + return () => window.removeEventListener('keydown', handleKeyDown); + }, []); + + + + const handleFileLoaded = (text: string, fileName: string = '') => { setContent(text); + setInputFileName(fileName); setAppState(AppState.CONFIG); }; - const handleGenerate = async () => { + const handleGenerate = useCallback(async () => { if (!selectedStyle || !content) return; - + setAppState(AppState.GENERATING); setError(null); try { - // Small artificial delay to show the "Processing" state for better UX, - // otherwise it flickers too fast since local parsing is instant. await new Promise(resolve => setTimeout(resolve, 800)); - - // Parse markdown to HTML using the local 'marked' library const html = await parse(content); - + if (!html) throw new Error("No content generated"); - + + console.log('--- STAGE 1: MARKDOWN GENERATION ---'); + console.log('First 500 chars of HTML:', html.substring(0, 500)); + console.log('Contains h1?', html.includes(' { setError("Failed to process the document. Please check your file format and try again."); setAppState(AppState.CONFIG); } - }; + }, [selectedStyle, content]); const handleReset = () => { setAppState(AppState.UPLOAD); setContent(''); setGeneratedHtml(''); setSelectedStyle(null); + setInputFileName(''); }; const handleBackToConfig = () => { setAppState(AppState.CONFIG); }; - // Render Logic + if (!isLoaded) { + return null; + } + if (appState === AppState.PREVIEW) { - // Pass selectedStyleId to Preview so it can lookup font config - // We add the prop via spread or explicit return ( - // @ts-ignore - Adding prop dynamically if interface not fully updated in previous file change block (it was) - +
+ + selectedStyleId={selectedStyle} + inputFileName={inputFileName} + uiZoom={uiZoom} + onZoomChange={setUiZoom} + templates={templates} + /> +
+
); } return ( -
- - {/* Header */} -
+
+ + {/* Keyboard Shortcuts Modal */} + + {showShortcuts && ( + setShowShortcuts(false)} /> + )} + + + {/* Header - Fixed height */} +
-
-
+ + -
+

TypoGenie

-
- {appState !== AppState.UPLOAD && ( -
- Configure - / - Generate - / - Preview -
- )} -
-
+ - {/* Main Content */} -
-
-
-
-
+
+ {/* UI Zoom Control */} + -
- - {appState === AppState.UPLOAD && ( -
-
-

- Turn Markdown into
- - Professional Word Docs. - -

-

- Upload your raw text. Select a style. - Get a formatted DOCX file ready for Microsoft Word. -

-
- -
- )} + {/* Refresh templates button */} + {appState === AppState.CONFIG && ( + + + Refresh + + )} - {appState === AppState.CONFIG && ( -
- - {error && ( -
- {error} -
+ {/* Keyboard shortcuts hint */} + setShowShortcuts(true)} + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.95 }} + className="hidden sm:flex items-center gap-2 px-3 py-1.5 text-xs text-zinc-500 hover:text-zinc-300 bg-zinc-900 hover:bg-zinc-800 rounded-lg transition-colors border border-zinc-800" + title="Show keyboard shortcuts" + > + + Shortcuts + ? + + + + {appState !== AppState.UPLOAD && ( + + Configure + / + Generate + / + Preview + )} -
- )} + +
+
+ - {appState === AppState.GENERATING && ( -
-
-
- -
-

Formatting Document

-

- Applying typographic rules and preparing print-ready layout... -

-
- )} + {/* Main Content - Takes remaining space */} +
+ {/* Animated background blobs */} +
+ + +
+ +
+ + {appState === AppState.UPLOAD && ( + + + + Turn Markdown into
+ + Professional Word Docs. + +
+ + Upload your raw text. Select a style. + Get a formatted DOCX file ready for Microsoft Word. + +
+ +
+ )} + + {appState === AppState.CONFIG && ( + + + + {error && ( + + {error} + + )} + + + )} + + {appState === AppState.GENERATING && ( + + + + + + + Formatting Document + + + Applying typographic rules and preparing print-ready layout... + + + )} +
-
+ {/* Footer - Fixed height, always visible */} +

TypoGenie - Professional Typesetting Engine

-
+
); }; -export default App; \ No newline at end of file +export default App; diff --git a/src/components/CustomScrollbar.tsx b/src/components/CustomScrollbar.tsx new file mode 100644 index 0000000..b1863a7 --- /dev/null +++ b/src/components/CustomScrollbar.tsx @@ -0,0 +1,272 @@ +import React, { useRef, useEffect, useState, useCallback } from 'react'; + +interface CustomScrollbarProps { + children: React.ReactNode; + className?: string; + horizontal?: boolean; +} + +export const CustomScrollbar: React.FC = ({ + children, + className = '', + horizontal = false +}) => { + const containerRef = useRef(null); + const thumbRef = useRef(null); + + const [isHoveringContainer, setIsHoveringContainer] = useState(false); + const [isHoveringTrack, setIsHoveringTrack] = useState(false); + const [isDragging, setIsDragging] = useState(false); + const [thumbSize, setThumbSize] = useState(40); + + // Drag state + const dragState = useRef({ + isActive: false, + startMouse: 0, + startScroll: 0, + trackSize: 0, + maxScroll: 0 + }); + + // Update thumb size + const updateMetrics = useCallback(() => { + const container = containerRef.current; + if (!container) return; + + if (horizontal) { + const ratio = container.clientWidth / Math.max(container.scrollWidth, 1); + setThumbSize(Math.max(40, ratio * container.clientWidth)); + } else { + const ratio = container.clientHeight / Math.max(container.scrollHeight, 1); + setThumbSize(Math.max(40, ratio * container.clientHeight)); + } + + updateThumbVisual(); + }, [horizontal]); + + // Update thumb position from scroll + const updateThumbVisual = useCallback(() => { + const container = containerRef.current; + const thumb = thumbRef.current; + if (!container || !thumb) return; + + if (dragState.current.isActive) return; + + if (horizontal) { + const maxScroll = container.scrollWidth - container.clientWidth; + const trackSize = container.clientWidth - thumbSize; + if (maxScroll <= 0 || trackSize <= 0) { + thumb.style.transform = 'translateX(0px)'; + return; + } + const ratio = container.scrollLeft / maxScroll; + thumb.style.transform = `translateX(${ratio * trackSize}px)`; + } else { + const maxScroll = container.scrollHeight - container.clientHeight; + const trackSize = container.clientHeight - thumbSize; + if (maxScroll <= 0 || trackSize <= 0) { + thumb.style.transform = 'translateY(0px)'; + return; + } + const ratio = container.scrollTop / maxScroll; + thumb.style.transform = `translateY(${ratio * trackSize}px)`; + } + }, [horizontal, thumbSize]); + + // Setup + useEffect(() => { + updateMetrics(); + + const handleResize = () => updateMetrics(); + window.addEventListener('resize', handleResize); + + const observer = new MutationObserver(() => updateMetrics()); + if (containerRef.current) { + observer.observe(containerRef.current, { childList: true, subtree: true }); + } + + return () => { + window.removeEventListener('resize', handleResize); + observer.disconnect(); + }; + }, [updateMetrics]); + + // Scroll listener + useEffect(() => { + const container = containerRef.current; + if (!container) return; + + const onScroll = () => { + if (!dragState.current.isActive) { + updateThumbVisual(); + } + }; + + container.addEventListener('scroll', onScroll, { passive: true }); + return () => container.removeEventListener('scroll', onScroll); + }, [updateThumbVisual]); + + // Drag handling - DIRECT synchronous updates + useEffect(() => { + if (!isDragging) { + // Restore transition when not dragging + if (thumbRef.current) { + thumbRef.current.style.transition = 'opacity 0.15s, width 0.15s, height 0.15s'; + } + return; + } + + const container = containerRef.current; + const thumb = thumbRef.current; + if (!container || !thumb) return; + + const state = dragState.current; + state.isActive = true; + + // REMOVE transition during drag for instant response + thumb.style.transition = 'none'; + + const handleMouseMove = (e: MouseEvent) => { + const mousePos = horizontal ? e.clientX : e.clientY; + const deltaMouse = mousePos - state.startMouse; + const scrollRatio = deltaMouse / state.trackSize; + const newScroll = state.startScroll + (scrollRatio * state.maxScroll); + const clampedScroll = Math.max(0, Math.min(newScroll, state.maxScroll)); + + if (horizontal) { + container.scrollLeft = clampedScroll; + const visualRatio = state.maxScroll > 0 ? clampedScroll / state.maxScroll : 0; + thumb.style.transform = `translateX(${visualRatio * state.trackSize}px)`; + } else { + container.scrollTop = clampedScroll; + const visualRatio = state.maxScroll > 0 ? clampedScroll / state.maxScroll : 0; + thumb.style.transform = `translateY(${visualRatio * state.trackSize}px)`; + } + }; + + const handleMouseUp = () => { + state.isActive = false; + setIsDragging(false); + // Transition will be restored by effect cleanup + }; + + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseUp); + + return () => { + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + state.isActive = false; + }; + }, [isDragging, horizontal]); + + const handleThumbMouseDown = (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + + const container = containerRef.current; + const thumb = thumbRef.current; + if (!container || !thumb) return; + + const state = dragState.current; + + if (horizontal) { + state.startMouse = e.clientX; + state.startScroll = container.scrollLeft; + state.trackSize = container.clientWidth - thumbSize; + state.maxScroll = container.scrollWidth - container.clientWidth; + } else { + state.startMouse = e.clientY; + state.startScroll = container.scrollTop; + state.trackSize = container.clientHeight - thumbSize; + state.maxScroll = container.scrollHeight - container.clientHeight; + } + + // Remove transition immediately on mouse down + thumb.style.transition = 'none'; + setIsDragging(true); + }; + + const handleTrackClick = (e: React.MouseEvent) => { + if (e.target === thumbRef.current) return; + + const container = containerRef.current; + if (!container) return; + + const rect = container.getBoundingClientRect(); + + if (horizontal) { + const clickX = e.clientX - rect.left; + const percentage = clickX / rect.width; + container.scrollTo({ + left: percentage * (container.scrollWidth - container.clientWidth), + behavior: 'smooth' + }); + } else { + const clickY = e.clientY - rect.top; + const percentage = clickY / rect.height; + container.scrollTo({ + top: percentage * (container.scrollHeight - container.clientHeight), + behavior: 'smooth' + }); + } + }; + + const isActive = isHoveringTrack || isDragging; + const opacity = isActive ? 0.6 : (isHoveringContainer ? 0.2 : 0); + const size = isActive ? '6px' : '2px'; + + return ( +
setIsHoveringContainer(true)} + onMouseLeave={() => { + setIsHoveringContainer(false); + if (!isDragging) setIsHoveringTrack(false); + }} + > +
+ {children} +
+ +
setIsHoveringTrack(true)} + onMouseLeave={() => { if (!isDragging) setIsHoveringTrack(false); }} + onClick={handleTrackClick} + > +
+
+ + +
+ ); +}; diff --git a/src/components/ExportOptionsModal.tsx b/src/components/ExportOptionsModal.tsx new file mode 100644 index 0000000..9509eae --- /dev/null +++ b/src/components/ExportOptionsModal.tsx @@ -0,0 +1,145 @@ +import { X } from 'lucide-react'; +import { useState } from 'react'; + +interface ExportOptionsModalProps { + isOpen: boolean; + onClose: () => void; + onExport: (useTableHeaders: boolean) => void; +} + +export default function ExportOptionsModal({ isOpen, onClose, onExport }: ExportOptionsModalProps) { + const [selectedMode, setSelectedMode] = useState<'table' | 'semantic'>('semantic'); + + if (!isOpen) return null; + + const handleExport = () => { + onExport(selectedMode === 'table'); + }; + + return ( +
+
+ {/* Header */} +
+

Export Options

+ +
+ + {/* Content */} +
+

+ Choose how headers should be rendered in your Word document: +

+ + {/* Option 1: High-Fidelity */} + + + {/* Option 2: Semantic */} + +
+ + {/* Footer */} +
+ + +
+
+
+ ); +} diff --git a/src/components/FileUpload.tsx b/src/components/FileUpload.tsx index 47d48b0..16f047e 100644 --- a/src/components/FileUpload.tsx +++ b/src/components/FileUpload.tsx @@ -1,13 +1,19 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useState, useRef, useEffect } from 'react'; +import { motion } from 'motion/react'; import { Upload, FileText, AlertCircle } from 'lucide-react'; +import { useKeyboardNavigation } from '../hooks/useKeyboardNavigation'; interface FileUploadProps { - onFileLoaded: (content: string) => void; + onFileLoaded: (content: string, fileName: string) => void; } export const FileUpload: React.FC = ({ onFileLoaded }) => { const [dragActive, setDragActive] = useState(false); const [error, setError] = useState(null); + const [isFocused, setIsFocused] = useState(false); + const inputRef = useRef(null); + const dropzoneRef = useRef(null); + const dragCounter = useRef(0); const handleFile = (file: File) => { setError(null); @@ -20,7 +26,9 @@ export const FileUpload: React.FC = ({ onFileLoaded }) => { reader.onload = (e) => { const text = e.target?.result; if (typeof text === 'string') { - onFileLoaded(text); + // Extract filename without extension + const fileName = file.name.replace(/\.[^/.]+$/, ''); + onFileLoaded(text, fileName); } }; reader.onerror = () => setError('Error reading file.'); @@ -30,16 +38,24 @@ export const FileUpload: React.FC = ({ onFileLoaded }) => { const handleDrag = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); - if (e.type === 'dragenter' || e.type === 'dragover') { + if (e.type === 'dragenter') { + dragCounter.current += 1; setDragActive(true); } else if (e.type === 'dragleave') { - setDragActive(false); + dragCounter.current -= 1; + if (dragCounter.current === 0) { + setDragActive(false); + } + } else if (e.type === 'dragover') { + // Keep drag active during dragover + setDragActive(true); } }, []); const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); + dragCounter.current = 0; setDragActive(false); if (e.dataTransfer.files && e.dataTransfer.files[0]) { handleFile(e.dataTransfer.files[0]); @@ -53,40 +69,158 @@ export const FileUpload: React.FC = ({ onFileLoaded }) => { } }; + const openFilePicker = useCallback(() => { + inputRef.current?.click(); + }, []); + + // Keyboard navigation for the dropzone + useKeyboardNavigation({ + onEnter: () => { + if (isFocused) { + openFilePicker(); + } + }, + onSpace: () => { + if (isFocused) { + openFilePicker(); + } + }, + }, [isFocused]); + + // Clear error after 5 seconds + useEffect(() => { + if (error) { + const timer = setTimeout(() => setError(null), 5000); + return () => clearTimeout(timer); + } + }, [error]); + return ( -
-
+ setIsFocused(true)} + onBlur={() => setIsFocused(false)} + onKeyDown={(e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + openFilePicker(); + } + }} + whileHover={{ + scale: 1.02, + borderColor: '#6366f1', + backgroundColor: 'rgba(99, 102, 241, 0.05)' + }} + whileTap={{ scale: 0.98 }} + transition={{ type: "spring", stiffness: 300, damping: 20 }} > -
-
+ + -
-

- Click to upload or drag and drop -

-

Markdown or Plain Text files

-
-
+ + + + Click to upload + {' '} + or drag and drop + + + Markdown or Plain Text files + + + Press Enter to browse + + + + {/* Animated border gradient on hover */} + + {error && ( -
- + + + + {error} -
+ )} -
+ ); }; diff --git a/src/components/Preview.tsx b/src/components/Preview.tsx index 3d68718..292ec36 100644 --- a/src/components/Preview.tsx +++ b/src/components/Preview.tsx @@ -1,374 +1,434 @@ import React, { useEffect, useRef, useState } from 'react'; -import { ArrowLeft, Download, FileText, CheckCircle2, ExternalLink } from 'lucide-react'; -import { PaperSize, DocxStyleConfig, DocxBorder } from '../types'; -import { TYPOGRAPHY_STYLES } from '../constants'; -// @ts-ignore -import * as docx from 'docx'; +import { motion, AnimatePresence } from 'motion/react'; +import { ArrowLeft, Download, FileText, CheckCircle2, ExternalLink, Loader2, ZoomIn, ZoomOut } from 'lucide-react'; +import { PaperSize } from '../types'; +import { StyleOption } from '../types'; +import { getPreviewCss } from '../services/templateRenderer'; +import { generateDocxDocument } from '../utils/docxConverter'; +import ExportOptionsModal from './ExportOptionsModal'; +import { open } from '@tauri-apps/plugin-shell'; +import { save } from '@tauri-apps/plugin-dialog'; +import { writeFile } from '@tauri-apps/plugin-fs'; +import { useKeyboardNavigation } from '../hooks/useKeyboardNavigation'; interface PreviewProps { htmlContent: string; onBack: () => void; paperSize: PaperSize; selectedStyleId?: string | null; + inputFileName?: string; + uiZoom: number; + onZoomChange: (zoom: number) => void; + templates: StyleOption[]; } -export const Preview: React.FC = ({ htmlContent, onBack, paperSize, selectedStyleId }) => { - const iframeRef = useRef(null); - const [isExporting, setIsExporting] = useState(false); - const [successMsg, setSuccessMsg] = useState(false); +// Zoom Control Component +const ZoomControl: React.FC<{ zoom: number; onZoomChange: (zoom: number) => void }> = ({ zoom, onZoomChange }) => { + const decreaseZoom = () => onZoomChange(Math.max(50, zoom - 10)); + const increaseZoom = () => onZoomChange(Math.min(200, zoom + 10)); - // Get current style - const style = TYPOGRAPHY_STYLES.find(s => s.id === selectedStyleId) || TYPOGRAPHY_STYLES[0]; + return ( +
+ + + + {zoom}% + + + +
+ ); +}; - // Extract unique fonts for display - const usedFonts = Array.from(new Set([ - style.wordConfig.heading1.font, - style.wordConfig.heading2.font, - style.wordConfig.body.font - ])).filter(Boolean); +// Font download component +const FontList: React.FC<{ fonts: string[] }> = ({ fonts }) => { + const [downloadingFont, setDownloadingFont] = useState(null); + const [downloadStatus, setDownloadStatus] = useState>({}); - // Helper to convert Points to Half-Points (docx standard) - const pt = (points: number) => points * 2; - - // Helper to convert Inches/MM to Twips - const inchesToTwips = (inches: number) => Math.round(inches * 1440); - const mmToTwips = (mm: number) => Math.round(mm * (1440 / 25.4)); - - // Helper to map Border config to Docx Border - const mapBorder = (b?: DocxBorder) => { - if (!b) return undefined; - let style = docx.BorderStyle.SINGLE; - if (b.style === 'double') style = docx.BorderStyle.DOUBLE; - if (b.style === 'dotted') style = docx.BorderStyle.DOTTED; - if (b.style === 'dashed') style = docx.BorderStyle.DASHED; - - return { - color: b.color, - space: b.space, - style: style, - size: b.size - }; + const downloadFont = async (fontName: string) => { + setDownloadingFont(fontName); + setDownloadStatus(prev => ({ ...prev, [fontName]: 'Downloading...' })); + try { + const encodedName = encodeURIComponent(fontName); + const downloadUrl = `https://fonts.google.com/download?family=${encodedName}`; + await open(downloadUrl); + setDownloadStatus(prev => ({ ...prev, [fontName]: 'Opened in browser' })); + setTimeout(() => { + setDownloadStatus(prev => { const newStatus = { ...prev }; delete newStatus[fontName]; return newStatus; }); + }, 3000); + } catch (err) { + setDownloadStatus(prev => ({ ...prev, [fontName]: 'Failed' })); + } finally { + setDownloadingFont(null); + } }; - const generateDocx = async (styleId: string) => { + const openGoogleFonts = async (fontName: string) => { + try { + const url = `https://fonts.google.com/specimen/${fontName.replace(/\s+/g, '+')}`; + await open(url); + } catch (err) { + window.open(`https://fonts.google.com/specimen/${fontName.replace(/\s+/g, '+')}`, '_blank'); + } + }; + + return ( +
+ Fonts: +
+ {fonts.map((font, index) => ( + +
+ downloadFont(font)} + disabled={downloadingFont === font} + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.95 }} + className="px-2 py-1 bg-zinc-900 border border-zinc-800 hover:border-zinc-600 rounded-l text-zinc-300 hover:text-white transition-all flex items-center gap-1.5 text-xs font-medium" + > + {downloadingFont === font ? : } + {font} + + openGoogleFonts(font)} + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.95 }} + className="px-1.5 py-1 bg-zinc-900 border border-l-0 border-zinc-800 hover:border-zinc-600 rounded-r text-zinc-400 hover:text-white transition-all" + > + + +
+ {downloadStatus[font] && ( + + {downloadStatus[font]} + + )} +
+ ))} +
+
+ ); +}; + +export const Preview: React.FC = ({ + htmlContent, + onBack, + paperSize, + selectedStyleId, + inputFileName = 'document', + uiZoom, + onZoomChange, + templates +}) => { + const iframeRef = useRef(null); + const backButtonRef = useRef(null); + const saveButtonRef = useRef(null); + const [isExporting, setIsExporting] = useState(false); + const [successMsg, setSuccessMsg] = useState(false); + const [showExportModal, setShowExportModal] = useState(false); + const [focusedElement, setFocusedElement] = useState<'back' | 'fonts' | 'save'>('save'); + + // Get current style from templates + const style = templates.find(s => s.id === selectedStyleId) || templates[0] || null; + + // Extract used fonts for display + const usedFonts = style ? Array.from(new Set([ + style.typography?.fonts?.heading || style.wordConfig?.heading1?.font || 'Arial', + style.typography?.fonts?.body || style.wordConfig?.body?.font || 'Arial' + ])).filter(Boolean) : []; + + useKeyboardNavigation({ + onEscape: () => onBack(), + onArrowLeft: () => { if (focusedElement === 'save') { setFocusedElement('back'); backButtonRef.current?.focus(); } }, + onArrowRight: () => { if (focusedElement === 'back') { setFocusedElement('save'); saveButtonRef.current?.focus(); } }, + onEnter: () => { if (focusedElement === 'back') onBack(); else if (focusedElement === 'save' && !isExporting) handleSave(); }, + onCtrlEnter: () => { if (!isExporting) handleSave(); }, + }, [focusedElement, isExporting, onBack]); + + useEffect(() => { + setTimeout(() => saveButtonRef.current?.focus(), 100); + }, []); + + const handleSave = async () => { + setShowExportModal(true); + }; + + const handleExportConfirm = async (useTableHeaders: boolean) => { + setShowExportModal(false); + const sid = selectedStyleId || 'swiss-grid'; + await generateDocx(sid, useTableHeaders); + }; + + const generateDocx = async (styleId: string, useTableHeaders: boolean = false) => { setIsExporting(true); try { - const style = TYPOGRAPHY_STYLES.find(s => s.id === styleId) || TYPOGRAPHY_STYLES[0]; - const cfg = style.wordConfig; + const template = templates.find(s => s.id === styleId) || templates[0]; - // PARSE HTML - const parser = new DOMParser(); - const doc = parser.parseFromString(htmlContent, 'text/html'); - const nodes = Array.from(doc.body.childNodes); + // Get base config from wordConfig + const cfg = template.wordConfig || { + heading1: { font: 'Arial', size: 24, color: '000000', align: 'left' }, + heading2: { font: 'Arial', size: 18, color: '333333', align: 'left' }, + body: { font: 'Arial', size: 11, color: '000000', align: 'left' }, + accentColor: '000000' + }; - const docxChildren = []; + // Extract page background from template + const pageBackground = template.typography?.colors?.background; - for (const node of nodes) { - if (node.nodeType !== Node.ELEMENT_NODE) continue; - const el = node as HTMLElement; - const tagName = el.tagName.toLowerCase(); - - // --- Run Parser (Inline Styles) --- - const parseRuns = (element: HTMLElement, baseConfig: DocxStyleConfig) => { - const runs = []; - for (const child of Array.from(element.childNodes)) { - if (child.nodeType === Node.TEXT_NODE) { - runs.push(new docx.TextRun({ - text: child.textContent || '', - font: baseConfig.font, - size: pt(baseConfig.size), - color: baseConfig.color, - underline: baseConfig.underline ? { type: docx.UnderlineType.SINGLE, color: baseConfig.color } : undefined, - })); - } else if (child.nodeType === Node.ELEMENT_NODE) { - const childEl = child as HTMLElement; - const isBold = childEl.tagName === 'STRONG' || childEl.tagName === 'B'; - const isItalic = childEl.tagName === 'EM' || childEl.tagName === 'I'; - runs.push(new docx.TextRun({ - text: childEl.textContent || '', - bold: isBold, - italics: isItalic, - font: baseConfig.font, - size: pt(baseConfig.size), - color: baseConfig.color, - underline: baseConfig.underline ? { type: docx.UnderlineType.SINGLE, color: baseConfig.color } : undefined, - })); - } - } - return runs; - }; + // Get fonts from template + const codeFont = template.typography?.fonts?.code || template.typography?.fonts?.body || 'Consolas'; + // Detect dark theme + const isDarkTheme = pageBackground ? parseInt(pageBackground, 16) < 0x444444 : false; - // --- Block Parser --- - - // 1. HEADINGS - if (tagName.match(/^h[1-6]$/)) { - const level = parseInt(tagName.replace('h', '')); - - // Select config based on level (simplified to H1 or H2, fallback H2 for others) - const hCfg = level === 1 ? cfg.heading1 : cfg.heading2; - const headingLevel = level === 1 ? docx.HeadingLevel.HEADING_1 : docx.HeadingLevel.HEADING_2; + // DEBUG: Specific markdown constructs for DOCX + console.log('=== PREVIEW CALLING DOCX (h3, strong, table, ul/ol, li) ==='); + console.log('wordConfig h3:', JSON.stringify({ font: cfg.heading2?.font, size: cfg.body?.size, color: template.elements?.h3?.color })); + console.log('elements h3:', JSON.stringify(template.elements?.h3)); + console.log('elements strong:', JSON.stringify(template.elements?.strong)); + console.log('elements table:', JSON.stringify(template.elements?.table)); + console.log('elements th:', JSON.stringify(template.elements?.th)); + console.log('elements td:', JSON.stringify(template.elements?.td)); + console.log('elements ul:', JSON.stringify(template.elements?.ul)); + console.log('elements ol:', JSON.stringify(template.elements?.ol)); + console.log('elements li:', JSON.stringify(template.elements?.li)); + console.log('useTableHeaders:', useTableHeaders); + console.log('=== END PREVIEW CALL ==='); - // Border Mapping - const borderConfig: any = {}; - if (hCfg.border) { - if (hCfg.border.top) borderConfig.top = mapBorder(hCfg.border.top); - if (hCfg.border.bottom) borderConfig.bottom = mapBorder(hCfg.border.bottom); - if (hCfg.border.left) borderConfig.left = mapBorder(hCfg.border.left); - if (hCfg.border.right) borderConfig.right = mapBorder(hCfg.border.right); - } - - // Alignment Mapping - let align = docx.AlignmentType.LEFT; - if (hCfg.align === 'center') align = docx.AlignmentType.CENTER; - if (hCfg.align === 'right') align = docx.AlignmentType.RIGHT; - if (hCfg.align === 'both') align = docx.AlignmentType.BOTH; - - docxChildren.push(new docx.Paragraph({ - children: [ - new docx.TextRun({ - text: el.textContent || '', - font: hCfg.font, - bold: hCfg.bold, - italics: hCfg.italic, - underline: hCfg.underline ? { type: docx.UnderlineType.SINGLE, color: hCfg.color } : undefined, - size: pt(hCfg.size), - color: hCfg.color, - allCaps: hCfg.allCaps, - smallCaps: hCfg.smallCaps, - characterSpacing: hCfg.tracking - }) - ], - heading: headingLevel, - alignment: align, - spacing: { - before: hCfg.spacing?.before, - after: hCfg.spacing?.after, - line: hCfg.spacing?.line - }, - border: borderConfig, - shading: hCfg.shading ? { - fill: hCfg.shading.fill, - color: hCfg.shading.color, - type: docx.ShadingType.CLEAR // usually clear to show fill - } : undefined, - keepNext: true, - keepLines: true - })); - } - - // 2. PARAGRAPHS - else if (tagName === 'p') { - let align = docx.AlignmentType.LEFT; - if (cfg.body.align === 'center') align = docx.AlignmentType.CENTER; - if (cfg.body.align === 'right') align = docx.AlignmentType.RIGHT; - if (cfg.body.align === 'both') align = docx.AlignmentType.BOTH; - - docxChildren.push(new docx.Paragraph({ - children: parseRuns(el, cfg.body), - spacing: { - before: cfg.body.spacing?.before, - after: cfg.body.spacing?.after, - line: cfg.body.spacing?.line, - lineRule: docx.LineRuleType.AUTO - }, - alignment: align - })); - } - - // 3. BLOCKQUOTES - else if (tagName === 'blockquote') { - docxChildren.push(new docx.Paragraph({ - children: parseRuns(el, { ...cfg.body, size: cfg.body.size + 1, color: cfg.accentColor, italic: true } as DocxStyleConfig), - indent: { left: 720 }, // 0.5 inch - border: { left: { color: cfg.accentColor, space: 10, style: docx.BorderStyle.SINGLE, size: 24 } }, - shading: { fill: "F8F8F8", type: docx.ShadingType.CLEAR, color: "auto" }, // Default light grey background for quotes - spacing: { before: 200, after: 200, line: 300 } - })); - } - - // 4. LISTS - else if (tagName === 'ul' || tagName === 'ol') { - const listItems = Array.from(el.children); - for (const li of listItems) { - docxChildren.push(new docx.Paragraph({ - children: parseRuns(li as HTMLElement, cfg.body), - bullet: { level: 0 }, - spacing: { before: 80, after: 80 } - })); - } - } - } - - // Create Document - const docxFile = new docx.Document({ - sections: [{ - properties: { - page: { - size: { - width: paperSize === 'A4' ? mmToTwips(210) : inchesToTwips(8.5), - height: paperSize === 'A4' ? mmToTwips(297) : inchesToTwips(11), - }, - margin: { - top: inchesToTwips(1), - right: inchesToTwips(1.2), - bottom: inchesToTwips(1), - left: inchesToTwips(1.2), - } - } - }, - children: docxChildren - }] + const blob = await generateDocxDocument(htmlContent, { + paperSize, + heading1: cfg.heading1, + heading2: cfg.heading2, + body: cfg.body, + accentColor: cfg.accentColor, + pageBackground, + codeFont, + isDarkTheme, + elements: template.elements, + fonts: template.typography?.fonts, + palette: template.typography?.colors, + id: template.id, + page: template.page, + useTableHeaders }); - const blob = await docx.Packer.toBlob(docxFile); - - const url = window.URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = `typogenie-${style.name.replace(/\s+/g, '-').toLowerCase()}.docx`; - a.click(); - window.URL.revokeObjectURL(url); - - setSuccessMsg(true); - setTimeout(() => setSuccessMsg(false), 3000); + const arrayBuffer = await blob.arrayBuffer(); + const uint8Array = new Uint8Array(arrayBuffer); + const defaultName = `${inputFileName}.docx`; + const savePath = await save({ + defaultPath: defaultName, + filters: [{ name: 'Word Document', extensions: ['docx'] }] + }); + + if (savePath) { + await writeFile(savePath, uint8Array); + setSuccessMsg(true); + setTimeout(() => setSuccessMsg(false), 3000); + } } catch (e) { console.error("Docx Gen Error", e); - alert("Failed to generate DOCX"); + alert("Failed to generate DOCX: " + e); } finally { setIsExporting(false); } }; + // Track blob URL for cleanup + const blobUrlRef = useRef(null); + + // Render preview whenever dependencies change useEffect(() => { - if (!iframeRef.current) return; - - // We already have 'style' from the component scope, but useEffect needs to be robust - const currentStyle = TYPOGRAPHY_STYLES.find(s => s.id === selectedStyleId) || TYPOGRAPHY_STYLES[0]; + if (!iframeRef.current || !style) return; - const doc = iframeRef.current.contentDocument; - if (doc) { - const html = ` - - - - - - - - - -
- ${htmlContent} -
- - - `; - doc.open(); - doc.write(html); - doc.close(); + // Cleanup old blob URL + if (blobUrlRef.current) { + URL.revokeObjectURL(blobUrlRef.current); + blobUrlRef.current = null; } - }, [htmlContent, paperSize, selectedStyleId]); + + // Get CSS from template - this generates from elements structure + const templateCss = getPreviewCss(style); + console.log('Generated preview CSS (first 500 chars):', templateCss.substring(0, 500)); + + // Get page background from template + const pageBg = style.typography?.colors?.background || 'ffffff'; + + // Build the complete CSS - template CSS now includes .page styles + const allCss = [ + /* Reset styles first */ + '::-webkit-scrollbar { width: 6px !important; height: 6px !important; }', + '::-webkit-scrollbar-track { background: transparent !important; }', + '::-webkit-scrollbar-thumb { background: #71717a !important; border-radius: 3px !important; }', + '* { scrollbar-width: thin; scrollbar-color: #71717a transparent; box-sizing: border-box; }', + 'html, body { margin: 0; padding: 0; min-height: 100%; }', + + /* Dark outer background */ + 'body { background-color: #18181b; padding: 40px 20px; }', + + /* Template CSS - includes .page styles with fonts, colors, etc. */ + templateCss, + + /* Page dimensions (not included in template CSS) */ + `.page {`, + ` width: ${paperSize === 'A4' ? '210mm' : '8.5in'};`, + ` min-height: ${paperSize === 'A4' ? '297mm' : '11in'};`, + ` padding: 25mm;`, + ` box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.4);`, + ` box-sizing: border-box;`, + ` margin: 0 auto;`, + `}`, + + /* Utilities */ + '.page img { max-width: 100%; }' + ].join('\n'); + + // Inject CSS directly as inline style tag + const html = ` + + + + + + + + + +
+ ${htmlContent} + +
+ + + `; + + // Create blob URL for CSP compliance + const blob = new Blob([html], { type: 'text/html' }); + const blobUrl = URL.createObjectURL(blob); + blobUrlRef.current = blobUrl; + iframeRef.current.src = blobUrl; + + // Cleanup on unmount + return () => { + if (blobUrlRef.current) { + URL.revokeObjectURL(blobUrlRef.current); + blobUrlRef.current = null; + } + }; + }, [htmlContent, paperSize, selectedStyleId, templates, style]); + + if (!style) { + return
Loading...
; + } return ( -
- {/* Toolbar */} -
+ +
- +
- - {/* Font List */} -
- Fonts: -
- {usedFonts.map(font => ( - - {font} - - - ))} -
-
- + +
+
-
- - Format: {paperSize} - - + + {successMsg ? ( + + + Saved! + + ) : ( + + {isExporting ? : } + {isExporting ? 'Generating...' : 'Save Word Doc'} + + )} + +
+ + +
+