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,296 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: monochromatic-ui
|
|
3
|
+
description: Web and App implementation guide for Monochromatic UI. Trigger when user wants a single-color palette, high elegance, and strict color discipline.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Monochromatic UI
|
|
11
|
+
|
|
12
|
+
> "Elegance through constraint. A single hue, explored through all its tints, tones, and shades."
|
|
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. **Single Hue**: Choose one base color (e.g., deep blue). The entire UI is built using lighter (tints) and darker (shades) versions of that exact hue.
|
|
20
|
+
2. **High Contrast for Legibility**: The darkest shade and the lightest tint must have enough contrast to pass accessibility standards when placed together.
|
|
21
|
+
3. **Texture over Color**: Since color is restricted, use subtle textures, patterns, or varying opacities to differentiate sections.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: **Monochromatic Brown** or pick one dominant hue from **Earth-Grounded Elegance** and extrapolate it.
|
|
25
|
+
- **Typography**: Clean and unobtrusive. The layout relies heavily on font weights to establish hierarchy since color cannot.
|
|
26
|
+
- **Shadows**: Shadows must be tinted with the base hue, never pure black.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- Use HSL (Hue, Saturation, Lightness) heavily in CSS to make building the palette easy.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
:root {
|
|
33
|
+
/* Base Hue: Deep Blue (210) */
|
|
34
|
+
--mono-900: hsl(210, 80%, 10%); /* Very dark */
|
|
35
|
+
--mono-700: hsl(210, 70%, 30%); /* Dark */
|
|
36
|
+
--mono-500: hsl(210, 60%, 50%); /* Base */
|
|
37
|
+
--mono-300: hsl(210, 50%, 80%); /* Light */
|
|
38
|
+
--mono-100: hsl(210, 40%, 95%); /* Very light background */
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
body {
|
|
42
|
+
background-color: var(--mono-100);
|
|
43
|
+
color: var(--mono-900);
|
|
44
|
+
font-family: 'Inter', sans-serif;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.mono-card {
|
|
48
|
+
background-color: #ffffff; /* Or mono-100 */
|
|
49
|
+
border: 1px solid var(--mono-300);
|
|
50
|
+
border-radius: 8px;
|
|
51
|
+
padding: 32px;
|
|
52
|
+
/* Tinted shadow */
|
|
53
|
+
box-shadow: 0 10px 25px hsla(210, 80%, 10%, 0.05);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.mono-btn {
|
|
57
|
+
background-color: var(--mono-500);
|
|
58
|
+
color: #ffffff;
|
|
59
|
+
border: none;
|
|
60
|
+
border-radius: 4px;
|
|
61
|
+
padding: 12px 24px;
|
|
62
|
+
transition: background-color 0.2s;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.mono-btn:hover {
|
|
66
|
+
background-color: var(--mono-700);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.mono-subtext {
|
|
70
|
+
color: var(--mono-500); /* Use mid-tones for secondary text */
|
|
71
|
+
font-weight: 500;
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## App Implementation
|
|
76
|
+
|
|
77
|
+
### SwiftUI
|
|
78
|
+
```swift
|
|
79
|
+
struct MonochromaticView: View {
|
|
80
|
+
// Base Hue: Deep Blue (210 in 360-degree HSB/HSL)
|
|
81
|
+
// In SwiftUI, hue is 0.0 to 1.0 (210/360 = 0.58)
|
|
82
|
+
let mono900 = Color(hue: 0.58, saturation: 0.80, brightness: 0.10)
|
|
83
|
+
let mono700 = Color(hue: 0.58, saturation: 0.70, brightness: 0.30)
|
|
84
|
+
let mono500 = Color(hue: 0.58, saturation: 0.60, brightness: 0.50)
|
|
85
|
+
let mono300 = Color(hue: 0.58, saturation: 0.50, brightness: 0.80)
|
|
86
|
+
let mono100 = Color(hue: 0.58, saturation: 0.40, brightness: 0.95)
|
|
87
|
+
|
|
88
|
+
var body: some View {
|
|
89
|
+
VStack(spacing: 24) {
|
|
90
|
+
// Card
|
|
91
|
+
VStack(alignment: .leading, spacing: 12) {
|
|
92
|
+
Text("Monochromatic Elegance")
|
|
93
|
+
.font(.title2).fontWeight(.semibold)
|
|
94
|
+
.foregroundColor(mono900)
|
|
95
|
+
|
|
96
|
+
Text("Using only variations in saturation and brightness of a single hue.")
|
|
97
|
+
.foregroundColor(mono500)
|
|
98
|
+
}
|
|
99
|
+
.padding(32)
|
|
100
|
+
.background(Color.white)
|
|
101
|
+
.border(mono300, width: 1)
|
|
102
|
+
.shadow(color: mono900.opacity(0.1), radius: 15, y: 5) // Tinted shadow
|
|
103
|
+
|
|
104
|
+
// Button
|
|
105
|
+
Button(action: {}) {
|
|
106
|
+
Text("Primary Action")
|
|
107
|
+
.fontWeight(.bold)
|
|
108
|
+
.foregroundColor(.white)
|
|
109
|
+
.frame(maxWidth: .infinity)
|
|
110
|
+
.padding()
|
|
111
|
+
.background(mono500)
|
|
112
|
+
.cornerRadius(8)
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
.padding()
|
|
116
|
+
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
117
|
+
.background(mono100)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
- Define your colors using `Color(hue: saturation: brightness:)`. This ensures math-perfect monochromatic harmony.
|
|
122
|
+
- *Always* tint your drop shadows with your `mono900` color. Pure black shadows look dirty in a strict monochromatic UI.
|
|
123
|
+
|
|
124
|
+
### Flutter
|
|
125
|
+
```dart
|
|
126
|
+
class MonochromaticScreen extends StatelessWidget {
|
|
127
|
+
// Base Hue: Deep Blue (210)
|
|
128
|
+
// Flutter HSVColor uses Hue 0-360, Saturation 0.0-1.0, Value 0.0-1.0
|
|
129
|
+
final Color mono900 = const HSVColor.fromAHSV(1.0, 210, 0.80, 0.10).toColor();
|
|
130
|
+
final Color mono500 = const HSVColor.fromAHSV(1.0, 210, 0.60, 0.50).toColor();
|
|
131
|
+
final Color mono300 = const HSVColor.fromAHSV(1.0, 210, 0.50, 0.80).toColor();
|
|
132
|
+
final Color mono100 = const HSVColor.fromAHSV(1.0, 210, 0.40, 0.95).toColor();
|
|
133
|
+
|
|
134
|
+
@override
|
|
135
|
+
Widget build(BuildContext context) {
|
|
136
|
+
return Scaffold(
|
|
137
|
+
backgroundColor: mono100,
|
|
138
|
+
body: Center(
|
|
139
|
+
child: Padding(
|
|
140
|
+
padding: const EdgeInsets.all(24.0),
|
|
141
|
+
child: Column(
|
|
142
|
+
mainAxisAlignment: MainAxisAlignment.center,
|
|
143
|
+
children: [
|
|
144
|
+
// Card
|
|
145
|
+
Container(
|
|
146
|
+
width: double.infinity,
|
|
147
|
+
padding: const EdgeInsets.all(32),
|
|
148
|
+
decoration: BoxDecoration(
|
|
149
|
+
color: Colors.white,
|
|
150
|
+
border: Border.all(color: mono300),
|
|
151
|
+
borderRadius: BorderRadius.circular(8),
|
|
152
|
+
boxShadow: [
|
|
153
|
+
BoxShadow(color: mono900.withOpacity(0.1), blurRadius: 15, offset: const Offset(0, 5))
|
|
154
|
+
],
|
|
155
|
+
),
|
|
156
|
+
child: Column(
|
|
157
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
158
|
+
children: [
|
|
159
|
+
Text('Monochromatic', style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: mono900)),
|
|
160
|
+
const SizedBox(height: 12),
|
|
161
|
+
Text('Variations of a single hue.', style: TextStyle(fontSize: 16, color: mono500)),
|
|
162
|
+
],
|
|
163
|
+
),
|
|
164
|
+
),
|
|
165
|
+
const SizedBox(height: 24),
|
|
166
|
+
// Button
|
|
167
|
+
ElevatedButton(
|
|
168
|
+
onPressed: () {},
|
|
169
|
+
style: ElevatedButton.styleFrom(
|
|
170
|
+
backgroundColor: mono500,
|
|
171
|
+
foregroundColor: Colors.white,
|
|
172
|
+
minimumSize: const Size(double.infinity, 56),
|
|
173
|
+
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
|
174
|
+
elevation: 0,
|
|
175
|
+
),
|
|
176
|
+
child: const Text('Primary Action', style: TextStyle(fontWeight: FontWeight.bold)),
|
|
177
|
+
),
|
|
178
|
+
],
|
|
179
|
+
),
|
|
180
|
+
),
|
|
181
|
+
),
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
- Flutter's `HSVColor.fromAHSV()` is the best way to explicitly code a monochromatic palette without guessing hex codes.
|
|
187
|
+
|
|
188
|
+
### React Native
|
|
189
|
+
```jsx
|
|
190
|
+
// Base Hue: Deep Blue (210)
|
|
191
|
+
const theme = {
|
|
192
|
+
mono900: 'hsl(210, 80%, 10%)',
|
|
193
|
+
mono700: 'hsl(210, 70%, 30%)',
|
|
194
|
+
mono500: 'hsl(210, 60%, 50%)',
|
|
195
|
+
mono300: 'hsl(210, 50%, 80%)',
|
|
196
|
+
mono100: 'hsl(210, 40%, 95%)',
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
const MonochromaticScreen = () => {
|
|
200
|
+
return (
|
|
201
|
+
<View style={{ flex: 1, backgroundColor: theme.mono100, padding: 24, justifyContent: 'center' }}>
|
|
202
|
+
|
|
203
|
+
<View style={{
|
|
204
|
+
backgroundColor: '#FFFFFF',
|
|
205
|
+
borderColor: theme.mono300,
|
|
206
|
+
borderWidth: 1,
|
|
207
|
+
borderRadius: 8,
|
|
208
|
+
padding: 32,
|
|
209
|
+
marginBottom: 24,
|
|
210
|
+
// Tinted shadow (iOS)
|
|
211
|
+
shadowColor: theme.mono900, shadowOffset: { width: 0, height: 5 },
|
|
212
|
+
shadowOpacity: 0.1, shadowRadius: 15,
|
|
213
|
+
}}>
|
|
214
|
+
<Text style={{ fontSize: 24, fontWeight: '600', color: theme.mono900, marginBottom: 12 }}>
|
|
215
|
+
Monochromatic
|
|
216
|
+
</Text>
|
|
217
|
+
<Text style={{ fontSize: 16, color: theme.mono500 }}>
|
|
218
|
+
Using HSL strings in React Native makes palette generation trivial.
|
|
219
|
+
</Text>
|
|
220
|
+
</View>
|
|
221
|
+
|
|
222
|
+
<TouchableOpacity style={{
|
|
223
|
+
backgroundColor: theme.mono500,
|
|
224
|
+
padding: 16,
|
|
225
|
+
borderRadius: 8,
|
|
226
|
+
alignItems: 'center'
|
|
227
|
+
}}>
|
|
228
|
+
<Text style={{ fontWeight: 'bold', color: '#FFFFFF', fontSize: 16 }}>
|
|
229
|
+
Primary Action
|
|
230
|
+
</Text>
|
|
231
|
+
</TouchableOpacity>
|
|
232
|
+
|
|
233
|
+
</View>
|
|
234
|
+
);
|
|
235
|
+
};
|
|
236
|
+
```
|
|
237
|
+
- React Native's StyleSheet accepts CSS `hsl()` strings natively. Use them! It makes debugging and tweaking a monochromatic palette a million times easier than using hex codes.
|
|
238
|
+
|
|
239
|
+
### Jetpack Compose
|
|
240
|
+
```kotlin
|
|
241
|
+
@Composable
|
|
242
|
+
fun MonochromaticScreen() {
|
|
243
|
+
// Base Hue: Deep Blue (210)
|
|
244
|
+
// Compose Color.hsv requires Hue 0-360f, Saturation 0-1f, Value 0-1f
|
|
245
|
+
val mono900 = Color.hsv(210f, 0.80f, 0.10f)
|
|
246
|
+
val mono500 = Color.hsv(210f, 0.60f, 0.50f)
|
|
247
|
+
val mono300 = Color.hsv(210f, 0.50f, 0.80f)
|
|
248
|
+
val mono100 = Color.hsv(210f, 0.40f, 0.95f)
|
|
249
|
+
|
|
250
|
+
Column(
|
|
251
|
+
modifier = Modifier
|
|
252
|
+
.fillMaxSize()
|
|
253
|
+
.background(mono100)
|
|
254
|
+
.padding(24.dp),
|
|
255
|
+
verticalArrangement = Arrangement.Center
|
|
256
|
+
) {
|
|
257
|
+
// Card
|
|
258
|
+
Box(
|
|
259
|
+
modifier = Modifier
|
|
260
|
+
.fillMaxWidth()
|
|
261
|
+
.shadow(15.dp, RoundedCornerShape(8.dp), spotColor = mono900.copy(alpha = 0.2f))
|
|
262
|
+
.background(Color.White, RoundedCornerShape(8.dp))
|
|
263
|
+
.border(1.dp, mono300, RoundedCornerShape(8.dp))
|
|
264
|
+
.padding(32.dp)
|
|
265
|
+
) {
|
|
266
|
+
Column {
|
|
267
|
+
Text("Monochromatic", fontSize = 24.sp, fontWeight = FontWeight.SemiBold, color = mono900)
|
|
268
|
+
Spacer(Modifier.height(12.dp))
|
|
269
|
+
Text("Strictly enforced hue discipline.", color = mono500)
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
Spacer(Modifier.height(24.dp))
|
|
274
|
+
|
|
275
|
+
// Button
|
|
276
|
+
Button(
|
|
277
|
+
onClick = { },
|
|
278
|
+
colors = ButtonDefaults.buttonColors(containerColor = mono500, contentColor = Color.White),
|
|
279
|
+
shape = RoundedCornerShape(8.dp),
|
|
280
|
+
modifier = Modifier.fillMaxWidth().height(56.dp)
|
|
281
|
+
) {
|
|
282
|
+
Text("Primary Action", fontWeight = FontWeight.Bold)
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
- Use `Color.hsv()` to define the palette.
|
|
288
|
+
- Set the `spotColor` in your `Modifier.shadow` to `mono900` to keep the shadows from looking muddy or disjointed from the design system.
|
|
289
|
+
|
|
290
|
+
## Do's and Don'ts
|
|
291
|
+
- **DO**: Use pure white or pure black as absolute extremes if needed for text legibility.
|
|
292
|
+
- **DON'T**: Sneak in an accent color. If you add a red error button to a blue monochromatic UI, it immediately breaks the aesthetic and becomes "duotone" or standard UI. Find a way to signify errors using bold text or dark shades of the base hue.
|
|
293
|
+
|
|
294
|
+
## Limitations
|
|
295
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
296
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: neo-brutalism
|
|
3
|
+
description: Web and App implementation guide for Neo-Brutalism. Trigger when user wants thick borders, hard shadows, bright colors, and a playful yet structured look.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Neo-Brutalism
|
|
11
|
+
|
|
12
|
+
> "Brutalism, but make it pop. Hard lines, stark shadows, and vibrant, unashamed colors."
|
|
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. **Hard Drop Shadows**: Solid black shadows with no blur. Usually offset by a few pixels down and to the right.
|
|
20
|
+
2. **Thick Outlines**: Everything has a heavy, solid black border (usually 2px-4px).
|
|
21
|
+
3. **Flat, High-Contrast Colors**: Bright, saturated pastels or primary colors contrasting against pure white or black.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Start with an off-white background (like `#FDF8F5`), add stark black borders `#000000`, and use saturated accents like lemon yellow, bright cyan, or coral.
|
|
25
|
+
- **Typography**: Very bold, geometric sans-serifs (e.g., `Space Grotesk`, `Archivo Black`, `Inter Black`).
|
|
26
|
+
- **Shapes**: Sharp rectangles or completely rounded pill shapes, but always with a heavy stroke.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- The defining feature is the `box-shadow` with `0` blur.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
:root {
|
|
33
|
+
--neo-border: 3px solid #000000;
|
|
34
|
+
--neo-shadow: 6px 6px 0px #000000;
|
|
35
|
+
--neo-bg: #F4F4F0;
|
|
36
|
+
--neo-accent: #FF3366;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
body {
|
|
40
|
+
background-color: var(--neo-bg);
|
|
41
|
+
font-family: 'Space Grotesk', sans-serif;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.neo-card {
|
|
45
|
+
background-color: #ffffff;
|
|
46
|
+
border: var(--neo-border);
|
|
47
|
+
box-shadow: var(--neo-shadow);
|
|
48
|
+
border-radius: 8px; /* Optional, sharp is fine too */
|
|
49
|
+
padding: 32px;
|
|
50
|
+
transition: transform 0.1s, box-shadow 0.1s;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.neo-btn {
|
|
54
|
+
background-color: var(--neo-accent);
|
|
55
|
+
color: #000;
|
|
56
|
+
font-weight: 800;
|
|
57
|
+
text-transform: uppercase;
|
|
58
|
+
border: var(--neo-border);
|
|
59
|
+
box-shadow: 4px 4px 0px #000000;
|
|
60
|
+
padding: 16px 32px;
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
transition: all 0.1s ease;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.neo-btn:active {
|
|
66
|
+
/* The "press" effect is removing the shadow and moving it down */
|
|
67
|
+
transform: translate(4px, 4px);
|
|
68
|
+
box-shadow: 0px 0px 0px #000000;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## App Implementation
|
|
73
|
+
|
|
74
|
+
### SwiftUI
|
|
75
|
+
```swift
|
|
76
|
+
struct NeoCard: View {
|
|
77
|
+
@State private var isPressed = false
|
|
78
|
+
let neoBorder: CGFloat = 3
|
|
79
|
+
let neoShadow: CGFloat = 6
|
|
80
|
+
|
|
81
|
+
var body: some View {
|
|
82
|
+
Button(action: {}) {
|
|
83
|
+
VStack(alignment: .leading, spacing: 16) {
|
|
84
|
+
Text("NEO-BRUTALISM")
|
|
85
|
+
.font(.system(size: 24, weight: .black, design: .default))
|
|
86
|
+
.foregroundColor(.black)
|
|
87
|
+
Text("Stark shadows, bright colors.")
|
|
88
|
+
.font(.system(size: 16, weight: .bold))
|
|
89
|
+
.foregroundColor(.black)
|
|
90
|
+
}
|
|
91
|
+
.padding(24)
|
|
92
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
93
|
+
.background(Color(red: 1.0, green: 0.2, blue: 0.4)) // Bright Coral
|
|
94
|
+
// Neo-brutalist solid outline
|
|
95
|
+
.overlay(
|
|
96
|
+
Rectangle()
|
|
97
|
+
.stroke(Color.black, lineWidth: neoBorder)
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
.buttonStyle(.plain)
|
|
101
|
+
// Hard drop shadow (0 blur)
|
|
102
|
+
.shadow(color: .black, radius: 0, x: isPressed ? 0 : neoShadow, y: isPressed ? 0 : neoShadow)
|
|
103
|
+
// Translate the button physically when pressed to cover the shadow
|
|
104
|
+
.offset(x: isPressed ? neoShadow : 0, y: isPressed ? neoShadow : 0)
|
|
105
|
+
.simultaneousGesture(
|
|
106
|
+
DragGesture(minimumDistance: 0)
|
|
107
|
+
.onChanged { _ in isPressed = true }
|
|
108
|
+
.onEnded { _ in isPressed = false }
|
|
109
|
+
)
|
|
110
|
+
// Instant pop, no smooth animation
|
|
111
|
+
.animation(.none, value: isPressed)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
- `.shadow(radius: 0)` is the secret. Set an offset (e.g. `x: 6, y: 6`).
|
|
116
|
+
- For interactions, remove the shadow and translate the element by the same offset amounts using `.offset()`.
|
|
117
|
+
- Ensure `.animation(.none)` — Neo-brutalism interactions should be instant, snapping like physical switches.
|
|
118
|
+
|
|
119
|
+
### Flutter
|
|
120
|
+
```dart
|
|
121
|
+
class NeoCard extends StatefulWidget {
|
|
122
|
+
@override
|
|
123
|
+
State<NeoCard> createState() => _NeoCardState();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
class _NeoCardState extends State<NeoCard> {
|
|
127
|
+
bool _isPressed = false;
|
|
128
|
+
final double neoOffset = 6.0;
|
|
129
|
+
|
|
130
|
+
@override
|
|
131
|
+
Widget build(BuildContext context) {
|
|
132
|
+
return GestureDetector(
|
|
133
|
+
onTapDown: (_) => setState(() => _isPressed = true),
|
|
134
|
+
onTapUp: (_) => setState(() => _isPressed = false),
|
|
135
|
+
onTapCancel: () => setState(() => _isPressed = false),
|
|
136
|
+
child: Transform.translate(
|
|
137
|
+
// Move the container when pressed
|
|
138
|
+
offset: Offset(_isPressed ? neoOffset : 0, _isPressed ? neoOffset : 0),
|
|
139
|
+
child: Container(
|
|
140
|
+
padding: const EdgeInsets.all(24),
|
|
141
|
+
decoration: BoxDecoration(
|
|
142
|
+
color: const Color(0xFFFF3366), // Bright coral
|
|
143
|
+
border: Border.all(color: Colors.black, width: 3),
|
|
144
|
+
// Sharp shadow disappears on press
|
|
145
|
+
boxShadow: _isPressed ? [] : [
|
|
146
|
+
BoxShadow(
|
|
147
|
+
color: Colors.black,
|
|
148
|
+
blurRadius: 0, // Critical: 0 blur
|
|
149
|
+
spreadRadius: 0,
|
|
150
|
+
offset: Offset(neoOffset, neoOffset),
|
|
151
|
+
),
|
|
152
|
+
],
|
|
153
|
+
),
|
|
154
|
+
child: Column(
|
|
155
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
156
|
+
mainAxisSize: MainAxisSize.min,
|
|
157
|
+
children: const [
|
|
158
|
+
Text('NEO-BRUTALISM',
|
|
159
|
+
style: TextStyle(fontSize: 24, fontWeight: FontWeight.w900, color: Colors.black)),
|
|
160
|
+
SizedBox(height: 16),
|
|
161
|
+
Text('Stark shadows, bright colors.',
|
|
162
|
+
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold, color: Colors.black)),
|
|
163
|
+
],
|
|
164
|
+
),
|
|
165
|
+
),
|
|
166
|
+
),
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
- `blurRadius: 0` inside `BoxShadow` creates the solid block color.
|
|
172
|
+
- Remove the shadow array entirely when `_isPressed` is true, and simultaneously use `Transform.translate` to shift the widget down-right.
|
|
173
|
+
|
|
174
|
+
### React Native
|
|
175
|
+
```jsx
|
|
176
|
+
const NeoCard = () => {
|
|
177
|
+
const [pressed, setPressed] = useState(false);
|
|
178
|
+
const offset = 6;
|
|
179
|
+
|
|
180
|
+
return (
|
|
181
|
+
<Pressable
|
|
182
|
+
onPressIn={() => setPressed(true)}
|
|
183
|
+
onPressOut={() => setPressed(false)}
|
|
184
|
+
style={{
|
|
185
|
+
backgroundColor: '#FF3366',
|
|
186
|
+
padding: 24,
|
|
187
|
+
borderWidth: 3,
|
|
188
|
+
borderColor: '#000',
|
|
189
|
+
transform: [
|
|
190
|
+
{ translateX: pressed ? offset : 0 },
|
|
191
|
+
{ translateY: pressed ? offset : 0 }
|
|
192
|
+
],
|
|
193
|
+
// iOS Hard Shadow
|
|
194
|
+
shadowColor: '#000',
|
|
195
|
+
shadowOffset: { width: pressed ? 0 : offset, height: pressed ? 0 : offset },
|
|
196
|
+
shadowOpacity: pressed ? 0 : 1,
|
|
197
|
+
shadowRadius: 0,
|
|
198
|
+
// Android elevation cannot do 0-blur offset shadows natively
|
|
199
|
+
// elevation: 0
|
|
200
|
+
}}
|
|
201
|
+
>
|
|
202
|
+
<Text style={{ fontSize: 24, fontWeight: '900', color: '#000' }}>
|
|
203
|
+
NEO-BRUTALISM
|
|
204
|
+
</Text>
|
|
205
|
+
</Pressable>
|
|
206
|
+
);
|
|
207
|
+
};
|
|
208
|
+
```
|
|
209
|
+
- **Android Limitation**: Standard `elevation` CANNOT create an unblurred, offset drop shadow.
|
|
210
|
+
- **Solution**: To make this work on Android, you MUST use the `react-native-drop-shadow` library or fake it by rendering an identical black `<View>` absolutely positioned directly behind the main card.
|
|
211
|
+
|
|
212
|
+
### Jetpack Compose
|
|
213
|
+
```kotlin
|
|
214
|
+
@Composable
|
|
215
|
+
fun NeoCard() {
|
|
216
|
+
var isPressed by remember { mutableStateOf(false) }
|
|
217
|
+
val neoOffset = 6.dp
|
|
218
|
+
|
|
219
|
+
// Compose Modifier.shadow() always blurs.
|
|
220
|
+
// To get a solid hard shadow, we use Modifier.drawBehind.
|
|
221
|
+
Box(
|
|
222
|
+
modifier = Modifier
|
|
223
|
+
.padding(16.dp)
|
|
224
|
+
.offset(
|
|
225
|
+
x = if (isPressed) neoOffset else 0.dp,
|
|
226
|
+
y = if (isPressed) neoOffset else 0.dp
|
|
227
|
+
)
|
|
228
|
+
.drawBehind {
|
|
229
|
+
if (!isPressed) {
|
|
230
|
+
drawRect(
|
|
231
|
+
color = Color.Black,
|
|
232
|
+
topLeft = Offset(neoOffset.toPx(), neoOffset.toPx()),
|
|
233
|
+
size = size
|
|
234
|
+
)
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
.background(Color(0xFFFF3366))
|
|
238
|
+
.border(3.dp, Color.Black)
|
|
239
|
+
.pointerInput(Unit) {
|
|
240
|
+
detectTapGestures(
|
|
241
|
+
onPress = {
|
|
242
|
+
isPressed = true
|
|
243
|
+
tryAwaitRelease()
|
|
244
|
+
isPressed = false
|
|
245
|
+
}
|
|
246
|
+
)
|
|
247
|
+
}
|
|
248
|
+
.padding(24.dp)
|
|
249
|
+
) {
|
|
250
|
+
Column {
|
|
251
|
+
Text("NEO-BRUTALISM",
|
|
252
|
+
fontSize = 24.sp, fontWeight = FontWeight.Black, color = Color.Black)
|
|
253
|
+
Spacer(Modifier.height(16.dp))
|
|
254
|
+
Text("Stark shadows, bright colors.",
|
|
255
|
+
fontSize = 16.sp, fontWeight = FontWeight.Bold, color = Color.Black)
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
- **Compose Limitation**: Native `Modifier.shadow()` applies ambient blur which breaks the neo-brutalist aesthetic.
|
|
261
|
+
- Use `Modifier.drawBehind { drawRect(...) }` with an offset to manually draw the solid shadow block behind the container.
|
|
262
|
+
- Shift the container using `Modifier.offset` on press, while hiding the shadow layer.
|
|
263
|
+
|
|
264
|
+
## Do's and Don'ts
|
|
265
|
+
- **DO**: Make the active/pressed state visually translate the button to cover its shadow, creating a physical "click" feel.
|
|
266
|
+
- **DON'T**: Use gradients or blurred shadows. The aesthetic relies entirely on flat, sharp vectors.
|
|
267
|
+
|
|
268
|
+
## Limitations
|
|
269
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
270
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|