opencode-skills-collection 3.1.0 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +84 -1
- package/bundled-skills/2slides-ppt-generator/SKILL.md +8 -7
- package/bundled-skills/android-cli/SKILL.md +19 -7
- package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
- package/bundled-skills/apple-notes-search/SKILL.md +12 -2
- package/bundled-skills/ask-matt/SKILL.md +92 -0
- package/bundled-skills/atlas-ledger/SKILL.md +8 -0
- package/bundled-skills/bugs-are-annoying/SKILL.md +137 -0
- package/bundled-skills/codebase-design/DEEPENING.md +37 -0
- package/bundled-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/bundled-skills/codebase-design/SKILL.md +145 -0
- package/bundled-skills/codex-fable5/SKILL.md +10 -2
- package/bundled-skills/competitor-analysis/LICENSE.txt +21 -0
- package/bundled-skills/competitor-analysis/SKILL.md +434 -0
- package/bundled-skills/competitor-analysis/references/battle-card-subagent.md +127 -0
- package/bundled-skills/competitor-analysis/references/battle-card.md +91 -0
- package/bundled-skills/competitor-analysis/references/example-research.md +130 -0
- package/bundled-skills/competitor-analysis/references/report-template.html +127 -0
- package/bundled-skills/competitor-analysis/references/research-patterns.md +217 -0
- package/bundled-skills/competitor-analysis/references/workflow.md +434 -0
- package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +142 -0
- package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +929 -0
- package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +140 -0
- package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +224 -0
- package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +90 -0
- package/bundled-skills/competitor-analysis/scripts/md_utils.mjs +50 -0
- package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +291 -0
- package/bundled-skills/competitor-analysis/scripts/package.json +6 -0
- package/bundled-skills/design-it/3d-ui/SKILL.md +259 -0
- package/bundled-skills/design-it/SKILL.md +170 -0
- package/bundled-skills/design-it/ai-native-ui/SKILL.md +295 -0
- package/bundled-skills/design-it/aurora-ui/SKILL.md +307 -0
- package/bundled-skills/design-it/bento-ui/SKILL.md +314 -0
- package/bundled-skills/design-it/brutalism/SKILL.md +270 -0
- package/bundled-skills/design-it/brutalist-typography/SKILL.md +287 -0
- package/bundled-skills/design-it/card-based-design/SKILL.md +262 -0
- package/bundled-skills/design-it/claymorphism/SKILL.md +287 -0
- package/bundled-skills/design-it/color-blocking/SKILL.md +278 -0
- package/bundled-skills/design-it/command-center-ui/SKILL.md +345 -0
- package/bundled-skills/design-it/cyber-y2k/SKILL.md +312 -0
- package/bundled-skills/design-it/cyberpunk-ui/SKILL.md +262 -0
- package/bundled-skills/design-it/dark-mode/SKILL.md +289 -0
- package/bundled-skills/design-it/dashboard-design/SKILL.md +331 -0
- package/bundled-skills/design-it/data-dense-design/SKILL.md +322 -0
- package/bundled-skills/design-it/duotone-design/SKILL.md +248 -0
- package/bundled-skills/design-it/editorial-design/SKILL.md +328 -0
- package/bundled-skills/design-it/flat-design/SKILL.md +221 -0
- package/bundled-skills/design-it/flat-design-2/SKILL.md +240 -0
- package/bundled-skills/design-it/floating-ui/SKILL.md +299 -0
- package/bundled-skills/design-it/frutiger-aero/SKILL.md +274 -0
- package/bundled-skills/design-it/glassmorphism/SKILL.md +272 -0
- package/bundled-skills/design-it/gradient-design/SKILL.md +309 -0
- package/bundled-skills/design-it/high-contrast/SKILL.md +288 -0
- package/bundled-skills/design-it/holographic-ui/SKILL.md +310 -0
- package/bundled-skills/design-it/isometric-design/SKILL.md +228 -0
- package/bundled-skills/design-it/layered-design/SKILL.md +247 -0
- package/bundled-skills/design-it/material-design/SKILL.md +275 -0
- package/bundled-skills/design-it/maximalism/SKILL.md +297 -0
- package/bundled-skills/design-it/minimalism/SKILL.md +267 -0
- package/bundled-skills/design-it/monochromatic-ui/SKILL.md +296 -0
- package/bundled-skills/design-it/neo-brutalism/SKILL.md +270 -0
- package/bundled-skills/design-it/neumorphism/SKILL.md +248 -0
- package/bundled-skills/design-it/retro-design/SKILL.md +283 -0
- package/bundled-skills/design-it/retro-futurism/SKILL.md +259 -0
- package/bundled-skills/design-it/sci-fi-interface/SKILL.md +309 -0
- package/bundled-skills/design-it/skeuomorphism/SKILL.md +280 -0
- package/bundled-skills/design-it/soft-pastel/SKILL.md +307 -0
- package/bundled-skills/design-it/spatial-computing-ui/SKILL.md +300 -0
- package/bundled-skills/design-it/spatial-design/SKILL.md +268 -0
- package/bundled-skills/design-it/swiss-design/SKILL.md +293 -0
- package/bundled-skills/design-it/synthwave/SKILL.md +257 -0
- package/bundled-skills/design-it/tile-design/SKILL.md +297 -0
- package/bundled-skills/design-it/typography-first/SKILL.md +247 -0
- package/bundled-skills/design-it/vaporwave/SKILL.md +331 -0
- package/bundled-skills/design-it/vibrant-maximalism/SKILL.md +291 -0
- package/bundled-skills/design-it/widget-based-design/SKILL.md +274 -0
- package/bundled-skills/design-it/y2k-design/SKILL.md +268 -0
- package/bundled-skills/diagnosing-bugs/SKILL.md +165 -0
- package/bundled-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/bundled-skills/docs/contributors/skill-scoring.md +235 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/bundles.md +145 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/specialized-plugin-roadmap.md +11 -4
- package/bundled-skills/docs/users/usage.md +4 -4
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/bundled-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/bundled-skills/domain-modeling/SKILL.md +105 -0
- package/bundled-skills/dos-verify-done-claims/SKILL.md +16 -4
- package/bundled-skills/ecl-harness-engineer/agents/creator-config.md +1 -1
- package/bundled-skills/ecl-harness-engineer/references/environment-config-guide.md +2 -2
- package/bundled-skills/ecl-harness-engineer/references/environment-detection-guide.md +4 -4
- package/bundled-skills/event-staffing-ordering/SKILL.md +4 -0
- package/bundled-skills/grill-me/SKILL.md +36 -0
- package/bundled-skills/grill-with-docs/SKILL.md +36 -0
- package/bundled-skills/grilling/SKILL.md +39 -0
- package/bundled-skills/handoff/SKILL.md +45 -0
- package/bundled-skills/image-generator/.env.example +7 -0
- package/bundled-skills/image-generator/SKILL.md +509 -0
- package/bundled-skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/bundled-skills/improve-codebase-architecture/SKILL.md +97 -0
- package/bundled-skills/learn/SKILL.md +156 -0
- package/bundled-skills/lesson-generator/SKILL.md +90 -0
- package/bundled-skills/llm-council/.env.example +7 -0
- package/bundled-skills/llm-council/SKILL.md +602 -0
- package/bundled-skills/loop-library/SKILL.md +208 -0
- package/bundled-skills/loop-library/agents/openai.yaml +4 -0
- package/bundled-skills/loop-library/references/catalog.md +270 -0
- package/bundled-skills/lovable-cleanup/SKILL.md +9 -7
- package/bundled-skills/macos-screen-recorder/SKILL.md +9 -1
- package/bundled-skills/mailtrap-managing-contacts/SKILL.md +112 -0
- package/bundled-skills/mailtrap-sending-emails/SKILL.md +167 -0
- package/bundled-skills/mailtrap-setting-up-sending-domain/SKILL.md +77 -0
- package/bundled-skills/mailtrap-testing-with-sandbox/SKILL.md +110 -0
- package/bundled-skills/prototype/LOGIC.md +79 -0
- package/bundled-skills/prototype/SKILL.md +62 -0
- package/bundled-skills/prototype/UI.md +112 -0
- package/bundled-skills/screenstudio-alt/SKILL.md +9 -1
- package/bundled-skills/setup-matt-pocock-skills/SKILL.md +158 -0
- package/bundled-skills/setup-matt-pocock-skills/domain.md +51 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
- package/bundled-skills/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/bundled-skills/survey-generator/LICENSE +21 -0
- package/bundled-skills/survey-generator/SKILL.md +143 -0
- package/bundled-skills/survey-generator/build_artifact.py +208 -0
- package/bundled-skills/survey-generator/examples/agentic-engineering/research_bundle.json +1196 -0
- package/bundled-skills/survey-generator/examples/agentic-engineering/survey.html +706 -0
- package/bundled-skills/survey-generator/style_spec.json +85 -0
- package/bundled-skills/survey-generator/templates/research_bundle_template.json +69 -0
- package/bundled-skills/tdd/SKILL.md +139 -0
- package/bundled-skills/tdd/mocking.md +59 -0
- package/bundled-skills/tdd/refactoring.md +10 -0
- package/bundled-skills/tdd/tests.md +61 -0
- package/bundled-skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/bundled-skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/bundled-skills/teach/MISSION-FORMAT.md +31 -0
- package/bundled-skills/teach/RESOURCES-FORMAT.md +32 -0
- package/bundled-skills/teach/SKILL.md +169 -0
- package/bundled-skills/to-issues/SKILL.md +115 -0
- package/bundled-skills/to-prd/SKILL.md +104 -0
- package/bundled-skills/tools-page-seo-optimizer/SKILL.md +616 -0
- package/bundled-skills/triage/AGENT-BRIEF.md +207 -0
- package/bundled-skills/triage/OUT-OF-SCOPE.md +105 -0
- package/bundled-skills/triage/SKILL.md +143 -0
- package/bundled-skills/vibecode-production-qa-validator/SKILL.md +371 -141
- package/bundled-skills/wiki-builder/SKILL.md +157 -0
- package/bundled-skills/wiki-builder/agents/openai.yaml +5 -0
- package/bundled-skills/wiki-builder/references/wiki-flavors.md +98 -0
- package/bundled-skills/wiki-builder/scripts/init_wiki.sh +105 -0
- package/bundled-skills/wiki-builder/templates/index.md +20 -0
- package/bundled-skills/wiki-builder/templates/maintenance-log.md +7 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-concept-page.md +12 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-index.md +11 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-source-page.md +12 -0
- package/bundled-skills/wiki-builder/templates/prompts/lint-wiki.md +10 -0
- package/bundled-skills/wiki-builder/templates/prompts/query-and-file.md +11 -0
- package/bundled-skills/wiki-builder/templates/sources.md +9 -0
- package/bundled-skills/wiki-builder/templates/wiki.config.md +53 -0
- package/bundled-skills/writing-great-skills/GLOSSARY.md +181 -0
- package/bundled-skills/writing-great-skills/SKILL.md +111 -0
- package/bundled-skills/yao-meta-skill/SKILL.md +86 -0
- package/bundled-skills/yao-meta-skill/agents/interface.yaml +26 -0
- package/bundled-skills/yao-meta-skill/manifest.json +24 -0
- package/bundled-skills/yao-meta-skill/references/artifact-design-doctrine.md +49 -0
- package/bundled-skills/yao-meta-skill/references/authoring-discipline.md +78 -0
- package/bundled-skills/yao-meta-skill/references/autonomous-adaptation.md +65 -0
- package/bundled-skills/yao-meta-skill/references/distribution-registry-method.md +60 -0
- package/bundled-skills/yao-meta-skill/references/eval-playbook.md +69 -0
- package/bundled-skills/yao-meta-skill/references/gate-selection.md +68 -0
- package/bundled-skills/yao-meta-skill/references/governance.md +134 -0
- package/bundled-skills/yao-meta-skill/references/human-review-template.md +54 -0
- package/bundled-skills/yao-meta-skill/references/intent-dialogue.md +138 -0
- package/bundled-skills/yao-meta-skill/references/iteration-philosophy.md +30 -0
- package/bundled-skills/yao-meta-skill/references/non-skill-decision-tree.md +39 -0
- package/bundled-skills/yao-meta-skill/references/operating-modes.md +107 -0
- package/bundled-skills/yao-meta-skill/references/output-eval-method.md +113 -0
- package/bundled-skills/yao-meta-skill/references/output-quality-risk.md +41 -0
- package/bundled-skills/yao-meta-skill/references/output-visual-quality.md +53 -0
- package/bundled-skills/yao-meta-skill/references/packaging-contracts.md +70 -0
- package/bundled-skills/yao-meta-skill/references/pattern-extraction-doctrine.md +76 -0
- package/bundled-skills/yao-meta-skill/references/platform-capability-matrix.md +49 -0
- package/bundled-skills/yao-meta-skill/references/prompt-engineering-doctrine.md +76 -0
- package/bundled-skills/yao-meta-skill/references/qa-ladder.md +57 -0
- package/bundled-skills/yao-meta-skill/references/reference-scan.md +126 -0
- package/bundled-skills/yao-meta-skill/references/regression-cause-taxonomy.md +80 -0
- package/bundled-skills/yao-meta-skill/references/resource-boundaries.md +120 -0
- package/bundled-skills/yao-meta-skill/references/review-studio-method.md +87 -0
- package/bundled-skills/yao-meta-skill/references/review-waiver-method.md +76 -0
- package/bundled-skills/yao-meta-skill/references/runtime-conformance-method.md +21 -0
- package/bundled-skills/yao-meta-skill/references/skill-archetypes.md +86 -0
- package/bundled-skills/yao-meta-skill/references/skill-atlas-method.md +35 -0
- package/bundled-skills/yao-meta-skill/references/skill-engineering-method.md +210 -0
- package/bundled-skills/yao-meta-skill/references/skill-ir-method.md +41 -0
- package/bundled-skills/yao-meta-skill/references/skillops-decision-policy.md +53 -0
- package/bundled-skills/yao-meta-skill/references/systems-thinking-doctrine.md +75 -0
- package/bundled-skills/yao-meta-skill/references/telemetry-drift-method.md +182 -0
- package/bundled-skills/yao-meta-skill/references/trust-security-method.md +79 -0
- package/bundled-skills/yao-meta-skill/references/user-memory-policy.md +35 -0
- package/bundled-skills/youtube-notetaker/SKILL.md +209 -0
- package/bundled-skills/youtube-notetaker/reference/artifact.html +269 -0
- package/bundled-skills/youtube-notetaker/scripts/contact_sheet.py +53 -0
- package/bundled-skills/youtube-notetaker/scripts/detect_slides.sh +19 -0
- package/bundled-skills/youtube-notetaker/scripts/download.sh +24 -0
- package/bundled-skills/youtube-notetaker/scripts/extract_slides.py +43 -0
- package/bundled-skills/youtube-notetaker/scripts/serve.py +222 -0
- package/bundled-skills/youtube-notetaker/scripts/setup.sh +27 -0
- package/bundled-skills/youtube-notetaker/scripts/verify.sh +31 -0
- package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +59 -0
- package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +69 -0
- package/package.json +1 -1
- package/skills_index.json +2013 -330
- package/bundled-skills/ai-md/SKILL.md +0 -523
- package/bundled-skills/atlas-contract/SKILL.md +0 -650
- package/bundled-skills/busybox-on-windows/SKILL.md +0 -40
- package/bundled-skills/monte-carlo-prevent/SKILL.md +0 -257
- package/bundled-skills/monte-carlo-prevent/references/TROUBLESHOOTING.md +0 -23
- package/bundled-skills/monte-carlo-prevent/references/parameters.md +0 -32
- package/bundled-skills/monte-carlo-prevent/references/workflows.md +0 -478
- package/bundled-skills/monte-carlo-push-ingestion/SKILL.md +0 -372
- package/bundled-skills/monte-carlo-push-ingestion/references/anomaly-detection.md +0 -87
- package/bundled-skills/monte-carlo-push-ingestion/references/custom-lineage.md +0 -203
- package/bundled-skills/monte-carlo-push-ingestion/references/direct-http-api.md +0 -207
- package/bundled-skills/monte-carlo-push-ingestion/references/prerequisites.md +0 -150
- package/bundled-skills/monte-carlo-push-ingestion/references/push-lineage.md +0 -160
- package/bundled-skills/monte-carlo-push-ingestion/references/push-metadata.md +0 -158
- package/bundled-skills/monte-carlo-push-ingestion/references/push-query-logs.md +0 -219
- package/bundled-skills/monte-carlo-push-ingestion/references/validation.md +0 -257
- package/bundled-skills/monte-carlo-push-ingestion/scripts/sample_verify.py +0 -357
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_lineage.py +0 -70
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_metadata.py +0 -65
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_query_logs.py +0 -70
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_lineage.py +0 -214
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_metadata.py +0 -160
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_query_logs.py +0 -164
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_lineage.py +0 -198
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_metadata.py +0 -193
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_query_logs.py +0 -207
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_metadata.py +0 -71
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_query_logs.py +0 -64
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_metadata.py +0 -253
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_query_logs.py +0 -149
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_metadata.py +0 -190
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_query_logs.py +0 -208
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_lineage.py +0 -83
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_metadata.py +0 -77
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_query_logs.py +0 -83
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_lineage.py +0 -240
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_metadata.py +0 -212
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_query_logs.py +0 -204
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_lineage.py +0 -192
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_metadata.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_query_logs.py +0 -200
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_lineage.py +0 -119
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_metadata.py +0 -119
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_query_logs.py +0 -117
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_lineage.py +0 -265
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_metadata.py +0 -313
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_query_logs.py +0 -284
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_lineage.py +0 -309
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_metadata.py +0 -245
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_query_logs.py +0 -255
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_lineage.py +0 -78
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_metadata.py +0 -80
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_query_logs.py +0 -88
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_lineage.py +0 -235
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_metadata.py +0 -219
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_query_logs.py +0 -239
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_lineage.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_metadata.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_query_logs.py +0 -196
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_lineage.py +0 -154
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_metadata.py +0 -137
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_query_logs.py +0 -137
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_lineage.py +0 -349
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_metadata.py +0 -329
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_query_logs.py +0 -254
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_lineage.py +0 -307
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_metadata.py +0 -228
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_query_logs.py +0 -248
- package/bundled-skills/monte-carlo-push-ingestion/scripts/test_template_sdk_usage.py +0 -340
- package/bundled-skills/skill-optimizer/SKILL.md +0 -271
- package/bundled-skills/using-superpowers/SKILL.md +0 -98
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: neumorphism
|
|
3
|
+
description: Web and App implementation guide for Neumorphism (Soft UI). Trigger when user wants soft shadows, extruded appearance, and light source simulation.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Neumorphism (Soft UI)
|
|
11
|
+
|
|
12
|
+
> "Elements extruded from the background material itself, shaped by a singular, persistent light source."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the `design-it` skill and is not meant to be triggered directly.
|
|
17
|
+
|
|
18
|
+
## Core Principles
|
|
19
|
+
1. **Unified Surface Color**: The background and the elements MUST share the exact same base color.
|
|
20
|
+
2. **Dual Shadows**: Elements are shaped by two shadows: a light shadow (highlight) on the side facing the light source, and a dark shadow on the opposite side.
|
|
21
|
+
3. **No Borders**: The shape is entirely defined by the shadows.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Works best with mid-tone neutrals. **Desert Mirage**, **Earth-Grounded Elegance**, or **Sophisticated Neutral** are perfect. Avoid pure white or pure black (shadows/highlights won't show).
|
|
25
|
+
- **Typography**: Soft, rounded sans-serifs (e.g., `Nunito`, `Quicksand`).
|
|
26
|
+
- **Shapes**: Pill shapes, rounded rectangles. Sharp corners break the illusion of extruded material.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- The magic is entirely in `box-shadow` manipulating light and dark variants of the base color.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
:root {
|
|
33
|
+
--base-color: #E6E2DD; /* From Sophisticated Neutral */
|
|
34
|
+
--highlight: #ffffff;
|
|
35
|
+
--shadow: #c4c0bc;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
body {
|
|
39
|
+
background-color: var(--base-color);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.neu-element {
|
|
43
|
+
background-color: var(--base-color);
|
|
44
|
+
border-radius: 20px;
|
|
45
|
+
/* Top-left highlight, Bottom-right shadow */
|
|
46
|
+
box-shadow: 9px 9px 18px var(--shadow),
|
|
47
|
+
-9px -9px 18px var(--highlight);
|
|
48
|
+
padding: 32px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.neu-pressed {
|
|
52
|
+
/* Inset shadows for pressed/active state */
|
|
53
|
+
border-radius: 20px;
|
|
54
|
+
background: var(--base-color);
|
|
55
|
+
box-shadow: inset 9px 9px 18px var(--shadow),
|
|
56
|
+
inset -9px -9px 18px var(--highlight);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## App Implementation
|
|
61
|
+
|
|
62
|
+
### SwiftUI
|
|
63
|
+
```swift
|
|
64
|
+
struct NeuCard: View {
|
|
65
|
+
let baseColor = Color(red: 0.90, green: 0.89, blue: 0.87) // #E6E2DD
|
|
66
|
+
|
|
67
|
+
var body: some View {
|
|
68
|
+
VStack(spacing: 24) {
|
|
69
|
+
Text("Neumorphic Card")
|
|
70
|
+
.font(.system(size: 20, weight: .semibold, design: .rounded))
|
|
71
|
+
|
|
72
|
+
Text("Extruded from the surface itself.")
|
|
73
|
+
.font(.system(size: 15, design: .rounded))
|
|
74
|
+
.foregroundColor(.secondary)
|
|
75
|
+
}
|
|
76
|
+
.padding(32)
|
|
77
|
+
.background(baseColor)
|
|
78
|
+
.cornerRadius(20)
|
|
79
|
+
// Light shadow (top-left)
|
|
80
|
+
.shadow(color: Color.white.opacity(0.7), radius: 10, x: -8, y: -8)
|
|
81
|
+
// Dark shadow (bottom-right)
|
|
82
|
+
.shadow(color: Color.black.opacity(0.15), radius: 10, x: 8, y: 8)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Pressed / inset neumorphic button
|
|
87
|
+
struct NeuButton: View {
|
|
88
|
+
@State private var isPressed = false
|
|
89
|
+
let baseColor = Color(red: 0.90, green: 0.89, blue: 0.87)
|
|
90
|
+
|
|
91
|
+
var body: some View {
|
|
92
|
+
Button(action: {}) {
|
|
93
|
+
Text("Press Me")
|
|
94
|
+
.font(.system(size: 16, weight: .semibold, design: .rounded))
|
|
95
|
+
.foregroundColor(.primary)
|
|
96
|
+
.padding(.horizontal, 32)
|
|
97
|
+
.padding(.vertical, 16)
|
|
98
|
+
}
|
|
99
|
+
.background(
|
|
100
|
+
Group {
|
|
101
|
+
if isPressed {
|
|
102
|
+
// Inset effect using inner shadow (ZStack trick)
|
|
103
|
+
RoundedRectangle(cornerRadius: 16)
|
|
104
|
+
.fill(baseColor)
|
|
105
|
+
.overlay(
|
|
106
|
+
RoundedRectangle(cornerRadius: 16)
|
|
107
|
+
.stroke(baseColor, lineWidth: 4)
|
|
108
|
+
.shadow(color: Color.black.opacity(0.2), radius: 4, x: 4, y: 4)
|
|
109
|
+
.clipShape(RoundedRectangle(cornerRadius: 16))
|
|
110
|
+
)
|
|
111
|
+
.overlay(
|
|
112
|
+
RoundedRectangle(cornerRadius: 16)
|
|
113
|
+
.stroke(baseColor, lineWidth: 4)
|
|
114
|
+
.shadow(color: Color.white.opacity(0.7), radius: 4, x: -4, y: -4)
|
|
115
|
+
.clipShape(RoundedRectangle(cornerRadius: 16))
|
|
116
|
+
)
|
|
117
|
+
} else {
|
|
118
|
+
RoundedRectangle(cornerRadius: 16)
|
|
119
|
+
.fill(baseColor)
|
|
120
|
+
.shadow(color: Color.white.opacity(0.7), radius: 10, x: -8, y: -8)
|
|
121
|
+
.shadow(color: Color.black.opacity(0.15), radius: 10, x: 8, y: 8)
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
.buttonStyle(.plain)
|
|
126
|
+
.simultaneousGesture(
|
|
127
|
+
DragGesture(minimumDistance: 0)
|
|
128
|
+
.onChanged { _ in isPressed = true }
|
|
129
|
+
.onEnded { _ in isPressed = false }
|
|
130
|
+
)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
- The key trick: two `.shadow()` modifiers — one white (top-left), one dark (bottom-right).
|
|
135
|
+
- Inner shadow (pressed state) requires a ZStack/overlay hack since SwiftUI doesn't have native `inset` shadows. Clip stroked shapes to simulate.
|
|
136
|
+
- The view's background color MUST match its parent's background exactly.
|
|
137
|
+
|
|
138
|
+
### Flutter
|
|
139
|
+
```dart
|
|
140
|
+
class NeuCard extends StatelessWidget {
|
|
141
|
+
final Color baseColor = const Color(0xFFE6E2DD);
|
|
142
|
+
|
|
143
|
+
@override
|
|
144
|
+
Widget build(BuildContext context) {
|
|
145
|
+
return Container(
|
|
146
|
+
padding: const EdgeInsets.all(32),
|
|
147
|
+
decoration: BoxDecoration(
|
|
148
|
+
color: baseColor,
|
|
149
|
+
borderRadius: BorderRadius.circular(20),
|
|
150
|
+
boxShadow: [
|
|
151
|
+
// Dark shadow (bottom-right)
|
|
152
|
+
BoxShadow(
|
|
153
|
+
color: Colors.black.withOpacity(0.15),
|
|
154
|
+
offset: const Offset(8, 8),
|
|
155
|
+
blurRadius: 16,
|
|
156
|
+
),
|
|
157
|
+
// Light shadow (top-left)
|
|
158
|
+
BoxShadow(
|
|
159
|
+
color: Colors.white.withOpacity(0.7),
|
|
160
|
+
offset: const Offset(-8, -8),
|
|
161
|
+
blurRadius: 16,
|
|
162
|
+
),
|
|
163
|
+
],
|
|
164
|
+
),
|
|
165
|
+
child: Column(
|
|
166
|
+
children: [
|
|
167
|
+
const Text('Neumorphic Card',
|
|
168
|
+
style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600)),
|
|
169
|
+
const SizedBox(height: 16),
|
|
170
|
+
Text('Extruded from the surface itself.',
|
|
171
|
+
style: TextStyle(fontSize: 15, color: Colors.black54)),
|
|
172
|
+
],
|
|
173
|
+
),
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
- **Inner shadows** (for pressed state) are NOT natively supported in Flutter's `BoxShadow`.
|
|
179
|
+
- Use the `flutter_inset_box_shadow` package OR fake it with a layered `Stack`: place a `Container` with a dark gradient overlay on top and a light gradient below.
|
|
180
|
+
- Set the `Scaffold` background to the SAME `baseColor` so elements look extruded.
|
|
181
|
+
|
|
182
|
+
### React Native
|
|
183
|
+
```jsx
|
|
184
|
+
const NeuCard = () => (
|
|
185
|
+
<View style={{
|
|
186
|
+
padding: 32,
|
|
187
|
+
backgroundColor: '#E6E2DD',
|
|
188
|
+
borderRadius: 20,
|
|
189
|
+
// Light shadow (top-left) — iOS only supports one shadow
|
|
190
|
+
shadowColor: '#FFFFFF',
|
|
191
|
+
shadowOffset: { width: -8, height: -8 },
|
|
192
|
+
shadowOpacity: 0.7,
|
|
193
|
+
shadowRadius: 10,
|
|
194
|
+
// Android — use elevation for basic shadow
|
|
195
|
+
elevation: 8,
|
|
196
|
+
}}>
|
|
197
|
+
<Text style={{ fontSize: 20, fontWeight: '600' }}>Neumorphic Card</Text>
|
|
198
|
+
<Text style={{ fontSize: 15, color: '#888', marginTop: 16 }}>
|
|
199
|
+
Extruded from the surface itself.
|
|
200
|
+
</Text>
|
|
201
|
+
</View>
|
|
202
|
+
);
|
|
203
|
+
```
|
|
204
|
+
- **Major limitation**: React Native only supports ONE shadow per view. True neumorphism requires TWO opposing shadows.
|
|
205
|
+
- **Workaround**: Use `react-native-shadow-2` or `react-native-neomorph-shadows` which provide multi-shadow support.
|
|
206
|
+
- Alternative: Wrap two nested `View`s — the outer one has the dark shadow, the inner one has the light shadow.
|
|
207
|
+
- Inner shadows for pressed states require SVG-based solutions or pre-rendered images.
|
|
208
|
+
|
|
209
|
+
### Jetpack Compose
|
|
210
|
+
```kotlin
|
|
211
|
+
@Composable
|
|
212
|
+
fun NeuCard() {
|
|
213
|
+
val baseColor = Color(0xFFE6E2DD)
|
|
214
|
+
|
|
215
|
+
Box(
|
|
216
|
+
modifier = Modifier
|
|
217
|
+
.padding(24.dp)
|
|
218
|
+
.shadow(
|
|
219
|
+
elevation = 8.dp,
|
|
220
|
+
shape = RoundedCornerShape(20.dp),
|
|
221
|
+
ambientColor = Color.Black.copy(alpha = 0.15f),
|
|
222
|
+
spotColor = Color.Black.copy(alpha = 0.15f),
|
|
223
|
+
)
|
|
224
|
+
.background(baseColor, RoundedCornerShape(20.dp))
|
|
225
|
+
.padding(32.dp)
|
|
226
|
+
) {
|
|
227
|
+
Column {
|
|
228
|
+
Text("Neumorphic Card",
|
|
229
|
+
fontSize = 20.sp, fontWeight = FontWeight.SemiBold)
|
|
230
|
+
Spacer(Modifier.height(16.dp))
|
|
231
|
+
Text("Extruded from the surface itself.",
|
|
232
|
+
fontSize = 15.sp, color = Color(0xFF888888))
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
- **Compose limitation**: Like React Native, Compose `Modifier.shadow()` only supports a single directional shadow.
|
|
238
|
+
- For true dual-shadow neumorphism, use a custom `Modifier.drawBehind { }` with `drawIntoCanvas` to paint two separate shadow paths (one light, one dark).
|
|
239
|
+
- The `neumorphic-compose` library provides a pre-built `Modifier.neumorphic()` that handles both shadows.
|
|
240
|
+
- Set the `Scaffold` background to the same `baseColor` — this is non-negotiable.
|
|
241
|
+
|
|
242
|
+
## Do's and Don'ts
|
|
243
|
+
- **DO**: Use inset shadows for "active" states (like pressed buttons or filled form fields).
|
|
244
|
+
- **DON'T**: Rely on Neumorphism for critical elements without secondary indicators. Contrast is inherently low, making it an accessibility nightmare if used improperly.
|
|
245
|
+
|
|
246
|
+
## Limitations
|
|
247
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
248
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: retro-design
|
|
3
|
+
description: Web and App implementation guide for Retro Design (60s-80s). Trigger when user wants vintage aesthetics, warm muted colors, and nostalgic layouts.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Retro Design
|
|
11
|
+
|
|
12
|
+
> "A warm, analog feeling. Nostalgia through muted tones, grain, and classic typography."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the `design-it` skill and is not meant to be triggered directly.
|
|
17
|
+
|
|
18
|
+
## Core Principles
|
|
19
|
+
1. **Warm, Analog Color Palettes**: Colors look faded by the sun or printed on aged paper.
|
|
20
|
+
2. **Texture and Noise**: A slight grain overlay to simulate film or old print media.
|
|
21
|
+
3. **Classic Typography Pairings**: Heavy, groovy display fonts paired with typewriter or classic serif body copy.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: **Monochromatic Brown** or warm, faded palettes (mustard yellow, burnt orange, sage green, off-white).
|
|
25
|
+
- **Typography**: Display fonts like `Cooper Black`, `Garamond`, or `Courier`.
|
|
26
|
+
- **Styling**: Badges, stamps, wavy borders, and halftone patterns.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- Use CSS filters and background noise images to create texture.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
body {
|
|
33
|
+
background-color: #F4E8D1; /* Aged paper */
|
|
34
|
+
color: #3E2723; /* Deep brown ink */
|
|
35
|
+
font-family: 'Georgia', serif;
|
|
36
|
+
|
|
37
|
+
/* Apply a subtle noise overlay using a pseudo-element or background image */
|
|
38
|
+
background-image: url('noise-texture.png');
|
|
39
|
+
background-blend-mode: multiply;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.retro-header {
|
|
43
|
+
font-family: 'Cooper Black', serif;
|
|
44
|
+
font-size: 4rem;
|
|
45
|
+
color: #D35400; /* Burnt orange */
|
|
46
|
+
text-shadow: 2px 2px 0px #F1C40F; /* Mustard yellow drop shadow */
|
|
47
|
+
letter-spacing: -1px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.retro-card {
|
|
51
|
+
background-color: #FFF3E0;
|
|
52
|
+
border: 2px solid #3E2723;
|
|
53
|
+
border-radius: 12px;
|
|
54
|
+
padding: 24px;
|
|
55
|
+
|
|
56
|
+
/* Vintage offset shadow */
|
|
57
|
+
box-shadow: 8px 8px 0px #795548;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.retro-badge {
|
|
61
|
+
display: inline-block;
|
|
62
|
+
background-color: #E74C3C;
|
|
63
|
+
color: #F4E8D1;
|
|
64
|
+
font-family: monospace;
|
|
65
|
+
font-weight: bold;
|
|
66
|
+
padding: 8px 16px;
|
|
67
|
+
border-radius: 50%; /* Make it look like a sticker */
|
|
68
|
+
transform: rotate(-10deg);
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## App Implementation
|
|
73
|
+
|
|
74
|
+
### SwiftUI
|
|
75
|
+
```swift
|
|
76
|
+
struct RetroCard: View {
|
|
77
|
+
let paperColor = Color(red: 0.96, green: 0.91, blue: 0.82) // #F4E8D1
|
|
78
|
+
let inkColor = Color(red: 0.24, green: 0.15, blue: 0.14) // #3E2723
|
|
79
|
+
|
|
80
|
+
var body: some View {
|
|
81
|
+
ZStack {
|
|
82
|
+
paperColor.ignoresSafeArea()
|
|
83
|
+
|
|
84
|
+
// Optional: Noise texture
|
|
85
|
+
Image("film_grain")
|
|
86
|
+
.resizable()
|
|
87
|
+
.blendMode(.multiply)
|
|
88
|
+
.opacity(0.3)
|
|
89
|
+
.ignoresSafeArea()
|
|
90
|
+
|
|
91
|
+
VStack(alignment: .leading, spacing: 24) {
|
|
92
|
+
Text("RETRO DESIGN")
|
|
93
|
+
.font(.custom("Cooper Black", size: 36))
|
|
94
|
+
.foregroundColor(Color(red: 0.83, green: 0.33, blue: 0.0)) // #D35400
|
|
95
|
+
.shadow(color: Color(red: 0.95, green: 0.77, blue: 0.06), radius: 0, x: 2, y: 2)
|
|
96
|
+
|
|
97
|
+
Text("Analog warmth and classic typography.")
|
|
98
|
+
.font(.custom("Georgia", size: 18))
|
|
99
|
+
.foregroundColor(inkColor)
|
|
100
|
+
}
|
|
101
|
+
.padding(32)
|
|
102
|
+
.background(Color(red: 1.0, green: 0.95, blue: 0.88))
|
|
103
|
+
.cornerRadius(12)
|
|
104
|
+
.overlay(
|
|
105
|
+
RoundedRectangle(cornerRadius: 12)
|
|
106
|
+
.stroke(inkColor, lineWidth: 2)
|
|
107
|
+
)
|
|
108
|
+
// Vintage solid offset shadow
|
|
109
|
+
.shadow(color: Color(red: 0.47, green: 0.33, blue: 0.28), radius: 0, x: 8, y: 8)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
- A grain texture image can be overlaid using `.blendMode(.multiply)`. Be aware of memory usage with full-screen textures.
|
|
115
|
+
- Use `.shadow(radius: 0)` to create the hard offset shadows typical of 70s print media.
|
|
116
|
+
- Custom fonts like Cooper Black are absolutely required.
|
|
117
|
+
|
|
118
|
+
### Flutter
|
|
119
|
+
```dart
|
|
120
|
+
class RetroCard extends StatelessWidget {
|
|
121
|
+
final Color paperColor = const Color(0xFFF4E8D1);
|
|
122
|
+
final Color inkColor = const Color(0xFF3E2723);
|
|
123
|
+
|
|
124
|
+
@override
|
|
125
|
+
Widget build(BuildContext context) {
|
|
126
|
+
return Container(
|
|
127
|
+
color: paperColor,
|
|
128
|
+
child: Stack(
|
|
129
|
+
fit: StackFit.expand,
|
|
130
|
+
children: [
|
|
131
|
+
// Noise texture
|
|
132
|
+
Opacity(
|
|
133
|
+
opacity: 0.3,
|
|
134
|
+
child: Image.asset('assets/film_grain.png',
|
|
135
|
+
fit: BoxFit.cover,
|
|
136
|
+
colorBlendMode: BlendMode.multiply),
|
|
137
|
+
),
|
|
138
|
+
Center(
|
|
139
|
+
child: Container(
|
|
140
|
+
padding: const EdgeInsets.all(32),
|
|
141
|
+
decoration: BoxDecoration(
|
|
142
|
+
color: const Color(0xFFFFF3E0),
|
|
143
|
+
borderRadius: BorderRadius.circular(12),
|
|
144
|
+
border: Border.all(color: inkColor, width: 2),
|
|
145
|
+
boxShadow: const [
|
|
146
|
+
BoxShadow(
|
|
147
|
+
color: Color(0xFF795548),
|
|
148
|
+
blurRadius: 0, // Hard offset shadow
|
|
149
|
+
offset: Offset(8, 8),
|
|
150
|
+
),
|
|
151
|
+
],
|
|
152
|
+
),
|
|
153
|
+
child: Column(
|
|
154
|
+
mainAxisSize: MainAxisSize.min,
|
|
155
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
156
|
+
children: [
|
|
157
|
+
const Text('RETRO DESIGN',
|
|
158
|
+
style: TextStyle(
|
|
159
|
+
fontFamily: 'Cooper',
|
|
160
|
+
fontSize: 36,
|
|
161
|
+
color: Color(0xFFD35400),
|
|
162
|
+
shadows: [Shadow(color: Color(0xFFF1C40F), offset: Offset(2, 2))],
|
|
163
|
+
)),
|
|
164
|
+
const SizedBox(height: 24),
|
|
165
|
+
Text('Analog warmth and classic typography.',
|
|
166
|
+
style: TextStyle(fontFamily: 'Georgia', fontSize: 18, color: inkColor)),
|
|
167
|
+
],
|
|
168
|
+
),
|
|
169
|
+
),
|
|
170
|
+
),
|
|
171
|
+
],
|
|
172
|
+
),
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
- Wrap backgrounds in a `Stack` to place a semi-transparent film grain asset over the solid color.
|
|
178
|
+
- Drop shadows for text and containers must have `blurRadius: 0` to emulate offset misregistered ink prints.
|
|
179
|
+
|
|
180
|
+
### React Native
|
|
181
|
+
```jsx
|
|
182
|
+
const RetroCard = () => {
|
|
183
|
+
return (
|
|
184
|
+
<ImageBackground
|
|
185
|
+
source={require('./film_grain.png')}
|
|
186
|
+
style={{ flex: 1, backgroundColor: '#F4E8D1', padding: 24, justifyContent: 'center' }}
|
|
187
|
+
imageStyle={{ opacity: 0.3, tintColor: '#3E2723' }}
|
|
188
|
+
>
|
|
189
|
+
<View style={{
|
|
190
|
+
backgroundColor: '#FFF3E0',
|
|
191
|
+
padding: 32,
|
|
192
|
+
borderRadius: 12,
|
|
193
|
+
borderWidth: 2,
|
|
194
|
+
borderColor: '#3E2723',
|
|
195
|
+
// Hard drop shadow
|
|
196
|
+
shadowColor: '#795548',
|
|
197
|
+
shadowOffset: { width: 8, height: 8 },
|
|
198
|
+
shadowOpacity: 1,
|
|
199
|
+
shadowRadius: 0,
|
|
200
|
+
elevation: 8, // Fallback for Android, though it blurs
|
|
201
|
+
}}>
|
|
202
|
+
<Text style={{
|
|
203
|
+
fontFamily: 'CooperBlack',
|
|
204
|
+
fontSize: 36,
|
|
205
|
+
color: '#D35400',
|
|
206
|
+
textShadowColor: '#F1C40F',
|
|
207
|
+
textShadowOffset: { width: 2, height: 2 },
|
|
208
|
+
textShadowRadius: 0,
|
|
209
|
+
marginBottom: 24
|
|
210
|
+
}}>
|
|
211
|
+
RETRO DESIGN
|
|
212
|
+
</Text>
|
|
213
|
+
<Text style={{ fontFamily: 'Georgia', fontSize: 18, color: '#3E2723' }}>
|
|
214
|
+
Analog warmth and classic typography.
|
|
215
|
+
</Text>
|
|
216
|
+
</View>
|
|
217
|
+
</ImageBackground>
|
|
218
|
+
);
|
|
219
|
+
};
|
|
220
|
+
```
|
|
221
|
+
- Use `ImageBackground` on the root view for the grain.
|
|
222
|
+
- Android's `elevation` cannot do unblurred offset shadows natively. Use `react-native-drop-shadow` for perfect retro shadows on Android.
|
|
223
|
+
|
|
224
|
+
### Jetpack Compose
|
|
225
|
+
```kotlin
|
|
226
|
+
@Composable
|
|
227
|
+
fun RetroCard() {
|
|
228
|
+
val inkColor = Color(0xFF3E2723)
|
|
229
|
+
|
|
230
|
+
Box(modifier = Modifier.fillMaxSize().background(Color(0xFFF4E8D1))) {
|
|
231
|
+
// Noise Texture Overlay
|
|
232
|
+
Image(
|
|
233
|
+
painter = painterResource(id = R.drawable.film_grain),
|
|
234
|
+
contentDescription = null,
|
|
235
|
+
contentScale = ContentScale.Crop,
|
|
236
|
+
modifier = Modifier.matchParentSize().alpha(0.3f),
|
|
237
|
+
colorFilter = ColorFilter.tint(Color.Black, BlendMode.Multiply)
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
Box(
|
|
241
|
+
modifier = Modifier
|
|
242
|
+
.align(Alignment.Center)
|
|
243
|
+
.padding(24.dp)
|
|
244
|
+
// Fake hard shadow in compose by drawing behind
|
|
245
|
+
.drawBehind {
|
|
246
|
+
drawRoundRect(
|
|
247
|
+
color = Color(0xFF795548),
|
|
248
|
+
topLeft = Offset(8.dp.toPx(), 8.dp.toPx()),
|
|
249
|
+
size = size,
|
|
250
|
+
cornerRadius = CornerRadius(12.dp.toPx())
|
|
251
|
+
)
|
|
252
|
+
}
|
|
253
|
+
.background(Color(0xFFFFF3E0), RoundedCornerShape(12.dp))
|
|
254
|
+
.border(2.dp, inkColor, RoundedCornerShape(12.dp))
|
|
255
|
+
.padding(32.dp)
|
|
256
|
+
) {
|
|
257
|
+
Column {
|
|
258
|
+
Text("RETRO DESIGN",
|
|
259
|
+
fontFamily = FontFamily(Font(R.font.cooper_black)),
|
|
260
|
+
fontSize = 36.sp,
|
|
261
|
+
color = Color(0xFFD35400),
|
|
262
|
+
style = TextStyle(shadow = Shadow(Color(0xFFF1C40F), Offset(4f, 4f), 0f))
|
|
263
|
+
)
|
|
264
|
+
Spacer(Modifier.height(24.dp))
|
|
265
|
+
Text("Analog warmth and classic typography.",
|
|
266
|
+
fontFamily = FontFamily.Serif,
|
|
267
|
+
fontSize = 18.sp,
|
|
268
|
+
color = inkColor)
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
- Native `Modifier.shadow` creates soft blurs. Use `Modifier.drawBehind` to draw an offset `drawRoundRect` for the hard retro shadow block.
|
|
275
|
+
- Text shadows support hard offsets perfectly via `Shadow(color, offset, blurRadius = 0f)`.
|
|
276
|
+
|
|
277
|
+
## Do's and Don'ts
|
|
278
|
+
- **DO**: Use slightly off-white backgrounds (cream, beige) instead of pure `#FFFFFF` to simulate aged paper.
|
|
279
|
+
- **DON'T**: Use sleek, modern geometric sans-serifs or tech-focused neon colors.
|
|
280
|
+
|
|
281
|
+
## Limitations
|
|
282
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
283
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|