opencode-skills-collection 3.0.51 → 3.1.1
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/README.md +44 -12
- package/bundled-skills/.antigravity-install-manifest.json +84 -1
- package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
- package/bundled-skills/ask-matt/SKILL.md +92 -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/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 +194 -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 +1 -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/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/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 +205 -0
- package/bundled-skills/loop-library/agents/openai.yaml +4 -0
- package/bundled-skills/loop-library/references/catalog.md +270 -0
- 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/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 +173 -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/dist/skill-pointer/config-loader.d.ts +14 -0
- package/dist/skill-pointer/config-loader.js +30 -3
- package/dist/skill-pointer/content-scanner.d.ts +38 -0
- package/dist/skill-pointer/content-scanner.js +118 -0
- package/dist/skill-pointer/index.d.ts +7 -2
- package/dist/skill-pointer/index.js +14 -4
- package/dist/skill-pointer/pointer-generator.js +2 -0
- package/dist/skill-pointer/skill-patcher.d.ts +13 -0
- package/dist/skill-pointer/skill-patcher.js +99 -0
- package/package.json +1 -1
- package/skills_index.json +1956 -286
- 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,240 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flat-design-2
|
|
3
|
+
description: Web and App implementation guide for Flat Design 2.0 (Semi-Flat). Trigger when the user wants flat design with subtle shadows and improved usability.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Flat Design 2.0 (Semi-Flat)
|
|
11
|
+
|
|
12
|
+
> "Flat aesthetics, but with subtle hints of physics to communicate interactability."
|
|
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. **Mostly Flat**: The primary aesthetic remains 2D and solid.
|
|
20
|
+
2. **Subtle Elevation**: Use extremely soft, large-spread shadows strictly to indicate interactable elements (buttons, floating action buttons) or layers (modals).
|
|
21
|
+
3. **Micro-Gradients**: Occasional, barely noticeable linear gradients to prevent large surfaces from feeling dead.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Pairs well with **Warm Tech** or **Earth-Grounded Elegance**.
|
|
25
|
+
- **Typography**: Clean, readable sans-serifs.
|
|
26
|
+
- **Shadows**: Shadows must be low opacity, high blur, and usually tinted with the background color, not pure black.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- **CSS Example**:
|
|
30
|
+
```css
|
|
31
|
+
:root {
|
|
32
|
+
--shadow-color: rgba(43, 48, 58, 0.08); /* Tinted shadow */
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.flat2-card {
|
|
36
|
+
background-color: var(--bg-primary);
|
|
37
|
+
border-radius: 8px;
|
|
38
|
+
padding: 32px;
|
|
39
|
+
/* Very subtle, diffuse shadow */
|
|
40
|
+
box-shadow: 0 10px 30px var(--shadow-color);
|
|
41
|
+
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.flat2-card:hover {
|
|
45
|
+
transform: translateY(-4px);
|
|
46
|
+
box-shadow: 0 20px 40px rgba(43, 48, 58, 0.12);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.flat2-btn {
|
|
50
|
+
background: var(--cta-highlight);
|
|
51
|
+
border-radius: 4px;
|
|
52
|
+
padding: 12px 24px;
|
|
53
|
+
color: white;
|
|
54
|
+
border: none;
|
|
55
|
+
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## App Implementation
|
|
60
|
+
|
|
61
|
+
### SwiftUI
|
|
62
|
+
```swift
|
|
63
|
+
struct SemiFlatCard: View {
|
|
64
|
+
@State private var isPressed = false
|
|
65
|
+
|
|
66
|
+
var body: some View {
|
|
67
|
+
VStack(alignment: .leading, spacing: 16) {
|
|
68
|
+
Text("Semi-Flat Card")
|
|
69
|
+
.font(.system(size: 18, weight: .semibold))
|
|
70
|
+
Text("Flat aesthetic with just enough depth to hint at interactivity.")
|
|
71
|
+
.font(.system(size: 15))
|
|
72
|
+
.foregroundColor(.secondary)
|
|
73
|
+
}
|
|
74
|
+
.padding(24)
|
|
75
|
+
.background(Color(.systemBackground))
|
|
76
|
+
.cornerRadius(8)
|
|
77
|
+
// The key: very soft, tinted shadow — NOT harsh black
|
|
78
|
+
.shadow(color: Color.black.opacity(0.06), radius: 12, x: 0, y: 4)
|
|
79
|
+
.scaleEffect(isPressed ? 0.98 : 1.0)
|
|
80
|
+
.animation(.easeOut(duration: 0.2), value: isPressed)
|
|
81
|
+
.onLongPressGesture(minimumDuration: .infinity, pressing: { pressing in
|
|
82
|
+
isPressed = pressing
|
|
83
|
+
}, perform: {})
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
struct SemiFlatButton: View {
|
|
88
|
+
var body: some View {
|
|
89
|
+
Button(action: {}) {
|
|
90
|
+
Text("Continue")
|
|
91
|
+
.font(.system(size: 15, weight: .semibold))
|
|
92
|
+
.foregroundColor(.white)
|
|
93
|
+
.padding(.horizontal, 24)
|
|
94
|
+
.padding(.vertical, 12)
|
|
95
|
+
.background(Color.accentColor)
|
|
96
|
+
.cornerRadius(4)
|
|
97
|
+
// Subtle button shadow
|
|
98
|
+
.shadow(color: Color.accentColor.opacity(0.25), radius: 8, x: 0, y: 4)
|
|
99
|
+
}
|
|
100
|
+
.buttonStyle(.plain)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
- Shadow color should be tinted (e.g., `Color.accentColor.opacity(0.15)`), never pure black.
|
|
105
|
+
- Use `radius: 10...16` with `opacity: 0.05...0.08` — if you can immediately see the shadow, it's too heavy.
|
|
106
|
+
- Add subtle `scaleEffect` on press to hint at physical feedback.
|
|
107
|
+
|
|
108
|
+
### Flutter
|
|
109
|
+
```dart
|
|
110
|
+
class SemiFlatCard extends StatelessWidget {
|
|
111
|
+
@override
|
|
112
|
+
Widget build(BuildContext context) {
|
|
113
|
+
return Container(
|
|
114
|
+
padding: const EdgeInsets.all(24),
|
|
115
|
+
decoration: BoxDecoration(
|
|
116
|
+
color: Colors.white,
|
|
117
|
+
borderRadius: BorderRadius.circular(8),
|
|
118
|
+
// Very soft, tinted shadow
|
|
119
|
+
boxShadow: [
|
|
120
|
+
BoxShadow(
|
|
121
|
+
color: const Color(0xFF2B303A).withOpacity(0.08),
|
|
122
|
+
blurRadius: 24,
|
|
123
|
+
offset: const Offset(0, 8),
|
|
124
|
+
spreadRadius: 0,
|
|
125
|
+
),
|
|
126
|
+
],
|
|
127
|
+
),
|
|
128
|
+
child: Column(
|
|
129
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
130
|
+
children: [
|
|
131
|
+
const Text('Semi-Flat Card',
|
|
132
|
+
style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600)),
|
|
133
|
+
const SizedBox(height: 16),
|
|
134
|
+
const Text('Flat aesthetic with just enough depth to hint at interactivity.',
|
|
135
|
+
style: TextStyle(fontSize: 15, color: Colors.black54)),
|
|
136
|
+
const SizedBox(height: 20),
|
|
137
|
+
ElevatedButton(
|
|
138
|
+
onPressed: () {},
|
|
139
|
+
style: ElevatedButton.styleFrom(
|
|
140
|
+
elevation: 2, // Very low — just enough to feel clickable
|
|
141
|
+
shadowColor: Theme.of(context).primaryColor.withOpacity(0.3),
|
|
142
|
+
backgroundColor: Theme.of(context).primaryColor,
|
|
143
|
+
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)),
|
|
144
|
+
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
|
|
145
|
+
),
|
|
146
|
+
child: const Text('Continue', style: TextStyle(fontWeight: FontWeight.w600)),
|
|
147
|
+
),
|
|
148
|
+
],
|
|
149
|
+
),
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
- Use `elevation: 1` to `elevation: 4` max. Never exceed `elevation: 6`.
|
|
155
|
+
- Tint the `shadowColor` to match the card's background or the brand color.
|
|
156
|
+
- Use `InkWell` for ripple effects and a slight `Transform.translate` animation on press.
|
|
157
|
+
|
|
158
|
+
### React Native
|
|
159
|
+
```jsx
|
|
160
|
+
const SemiFlatCard = () => (
|
|
161
|
+
<View style={{
|
|
162
|
+
padding: 24,
|
|
163
|
+
backgroundColor: '#FFFFFF',
|
|
164
|
+
borderRadius: 8,
|
|
165
|
+
// Very subtle, diffuse shadow
|
|
166
|
+
shadowColor: '#2B303A',
|
|
167
|
+
shadowOffset: { width: 0, height: 8 },
|
|
168
|
+
shadowOpacity: 0.08,
|
|
169
|
+
shadowRadius: 24,
|
|
170
|
+
// Android
|
|
171
|
+
elevation: 3,
|
|
172
|
+
}}>
|
|
173
|
+
<Text style={{ fontSize: 18, fontWeight: '600', marginBottom: 16 }}>
|
|
174
|
+
Semi-Flat Card
|
|
175
|
+
</Text>
|
|
176
|
+
<Text style={{ fontSize: 15, color: '#666', marginBottom: 20 }}>
|
|
177
|
+
Flat aesthetic with just enough depth to hint at interactivity.
|
|
178
|
+
</Text>
|
|
179
|
+
<Pressable
|
|
180
|
+
style={({ pressed }) => ({
|
|
181
|
+
backgroundColor: '#4A90D9',
|
|
182
|
+
paddingHorizontal: 24,
|
|
183
|
+
paddingVertical: 12,
|
|
184
|
+
borderRadius: 4,
|
|
185
|
+
alignSelf: 'flex-start',
|
|
186
|
+
transform: [{ scale: pressed ? 0.97 : 1 }],
|
|
187
|
+
shadowColor: '#4A90D9',
|
|
188
|
+
shadowOffset: { width: 0, height: 4 },
|
|
189
|
+
shadowOpacity: 0.25,
|
|
190
|
+
shadowRadius: 8,
|
|
191
|
+
})}
|
|
192
|
+
>
|
|
193
|
+
<Text style={{ color: '#FFF', fontWeight: '600' }}>Continue</Text>
|
|
194
|
+
</Pressable>
|
|
195
|
+
</View>
|
|
196
|
+
);
|
|
197
|
+
```
|
|
198
|
+
- On iOS use `shadowOpacity: 0.05...0.10` with `shadowRadius: 16...24` for a diffuse spread.
|
|
199
|
+
- On Android, `elevation: 2...4` is equivalent. Avoid going above `elevation: 6`.
|
|
200
|
+
- Use `Pressable` with `({ pressed })` style callback for animated press states.
|
|
201
|
+
|
|
202
|
+
### Jetpack Compose
|
|
203
|
+
```kotlin
|
|
204
|
+
@Composable
|
|
205
|
+
fun SemiFlatCard() {
|
|
206
|
+
Card(
|
|
207
|
+
modifier = Modifier.fillMaxWidth(),
|
|
208
|
+
shape = RoundedCornerShape(8.dp),
|
|
209
|
+
elevation = CardDefaults.cardElevation(defaultElevation = 2.dp),
|
|
210
|
+
colors = CardDefaults.cardColors(containerColor = Color.White),
|
|
211
|
+
) {
|
|
212
|
+
Column(modifier = Modifier.padding(24.dp)) {
|
|
213
|
+
Text("Semi-Flat Card", fontSize = 18.sp, fontWeight = FontWeight.SemiBold)
|
|
214
|
+
Spacer(Modifier.height(16.dp))
|
|
215
|
+
Text("Flat aesthetic with just enough depth to hint at interactivity.",
|
|
216
|
+
fontSize = 15.sp, color = Color(0xFF666666))
|
|
217
|
+
Spacer(Modifier.height(20.dp))
|
|
218
|
+
Button(
|
|
219
|
+
onClick = {},
|
|
220
|
+
shape = RoundedCornerShape(4.dp),
|
|
221
|
+
elevation = ButtonDefaults.buttonElevation(defaultElevation = 2.dp),
|
|
222
|
+
contentPadding = PaddingValues(horizontal = 24.dp, vertical = 12.dp),
|
|
223
|
+
) {
|
|
224
|
+
Text("Continue", fontWeight = FontWeight.SemiBold)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
- Use `CardDefaults.cardElevation(defaultElevation = 2.dp)` — keep it under 4dp.
|
|
231
|
+
- On hover/press: `hoveredElevation = 4.dp, pressedElevation = 1.dp` for subtle physics.
|
|
232
|
+
- Tint shadows by using `Modifier.shadow(elevation, shape, ambientColor, spotColor)` with custom tinted colors.
|
|
233
|
+
|
|
234
|
+
## Do's and Don'ts
|
|
235
|
+
- **DO**: Keep shadows incredibly subtle. If you immediately notice the shadow, it's too dark.
|
|
236
|
+
- **DON'T**: Use inner shadows, heavy gradients, or skeuomorphic textures.
|
|
237
|
+
|
|
238
|
+
## Limitations
|
|
239
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
240
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: floating-ui
|
|
3
|
+
description: Web and App implementation guide for Floating UI. Trigger when user wants detached cards, elevated components, and a light, airy feel.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Floating UI
|
|
11
|
+
|
|
12
|
+
> "Defying gravity. Elements that hover effortlessly above the surface."
|
|
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. **Detachment**: UI elements (like nav bars, sidebars, or main content cards) do not touch the edges of the screen. They float with margins on all sides.
|
|
20
|
+
2. **Soft, Diffuse Shadows**: Large, highly blurred shadows directly beneath elements.
|
|
21
|
+
3. **Pill Shapes & Rounds**: Fully rounded corners (pill shapes) enhance the floating, bubble-like aesthetic.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: **Earth-Grounded Elegance** or **Minimalist Slate**. Use a slightly tinted background (off-white or very light gray) so the floating white elements pop.
|
|
25
|
+
- **Typography**: Clean, airy sans-serifs with generous line height.
|
|
26
|
+
- **Layout**: The "floating island" pattern for navigation (a pill-shaped nav bar centered at the bottom or top of the screen).
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- Focus on large margins and specific shadow styles.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
body {
|
|
33
|
+
background-color: var(--bg-primary); /* e.g., #F4F4F9 */
|
|
34
|
+
padding: 24px; /* Ensure nothing touches the edge */
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.floating-nav {
|
|
38
|
+
position: fixed;
|
|
39
|
+
bottom: 32px;
|
|
40
|
+
left: 50%;
|
|
41
|
+
transform: translateX(-50%);
|
|
42
|
+
background: white;
|
|
43
|
+
border-radius: 50px; /* Pill shape */
|
|
44
|
+
padding: 12px 32px;
|
|
45
|
+
|
|
46
|
+
/* Large, soft shadow */
|
|
47
|
+
box-shadow: 0 16px 40px rgba(0,0,0,0.08);
|
|
48
|
+
|
|
49
|
+
display: flex;
|
|
50
|
+
gap: 24px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.floating-card {
|
|
54
|
+
background: white;
|
|
55
|
+
border-radius: 24px;
|
|
56
|
+
padding: 32px;
|
|
57
|
+
margin-bottom: 24px;
|
|
58
|
+
box-shadow: 0 10px 30px rgba(0,0,0,0.05);
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## App Implementation
|
|
63
|
+
|
|
64
|
+
### SwiftUI
|
|
65
|
+
```swift
|
|
66
|
+
struct FloatingUIView: View {
|
|
67
|
+
var body: some View {
|
|
68
|
+
ZStack {
|
|
69
|
+
// Very light background
|
|
70
|
+
Color(red: 0.95, green: 0.95, blue: 0.97).ignoresSafeArea()
|
|
71
|
+
|
|
72
|
+
ScrollView {
|
|
73
|
+
VStack(spacing: 24) {
|
|
74
|
+
// Floating Content Card
|
|
75
|
+
VStack(alignment: .leading, spacing: 12) {
|
|
76
|
+
Text("Floating Card")
|
|
77
|
+
.font(.title2).fontWeight(.bold)
|
|
78
|
+
Text("This card hovers above the background, with massive soft shadows and completely rounded corners.")
|
|
79
|
+
.foregroundColor(.secondary)
|
|
80
|
+
}
|
|
81
|
+
.padding(32)
|
|
82
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
83
|
+
.background(Color.white)
|
|
84
|
+
.cornerRadius(32) // Very large radius
|
|
85
|
+
// Large, highly blurred shadow
|
|
86
|
+
.shadow(color: Color.black.opacity(0.05), radius: 30, x: 0, y: 15)
|
|
87
|
+
.padding(.horizontal, 24) // Keeps it detached from edges
|
|
88
|
+
}
|
|
89
|
+
.padding(.top, 40)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Floating Pill Navigation
|
|
93
|
+
VStack {
|
|
94
|
+
Spacer()
|
|
95
|
+
HStack(spacing: 40) {
|
|
96
|
+
Image(systemName: "house.fill").foregroundColor(.blue)
|
|
97
|
+
Image(systemName: "magnifyingglass").foregroundColor(.gray)
|
|
98
|
+
Image(systemName: "bell.fill").foregroundColor(.gray)
|
|
99
|
+
Image(systemName: "person.fill").foregroundColor(.gray)
|
|
100
|
+
}
|
|
101
|
+
.padding(.vertical, 16)
|
|
102
|
+
.padding(.horizontal, 32)
|
|
103
|
+
.background(Color.white)
|
|
104
|
+
.clipShape(Capsule()) // Pill shape
|
|
105
|
+
.shadow(color: Color.black.opacity(0.1), radius: 25, x: 0, y: 10)
|
|
106
|
+
.padding(.bottom, 32) // Detached from bottom edge
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
- A `.clipShape(Capsule())` with a massive `.shadow()` creates the perfect floating pill navigation bar.
|
|
113
|
+
- Push the `.shadow(radius: ...)` up to 25 or 30 with a very low opacity (0.05) to get the soft, diffuse hover effect.
|
|
114
|
+
|
|
115
|
+
### Flutter
|
|
116
|
+
```dart
|
|
117
|
+
class FloatingUIScreen extends StatelessWidget {
|
|
118
|
+
@override
|
|
119
|
+
Widget build(BuildContext context) {
|
|
120
|
+
return Scaffold(
|
|
121
|
+
backgroundColor: const Color(0xFFF4F4F9),
|
|
122
|
+
body: Stack(
|
|
123
|
+
children: [
|
|
124
|
+
ListView(
|
|
125
|
+
padding: const EdgeInsets.all(24),
|
|
126
|
+
children: [
|
|
127
|
+
// Floating Content Card
|
|
128
|
+
Container(
|
|
129
|
+
margin: const EdgeInsets.only(bottom: 24),
|
|
130
|
+
padding: const EdgeInsets.all(32),
|
|
131
|
+
decoration: BoxDecoration(
|
|
132
|
+
color: Colors.white,
|
|
133
|
+
borderRadius: BorderRadius.circular(32), // Large radius
|
|
134
|
+
boxShadow: [
|
|
135
|
+
BoxShadow(
|
|
136
|
+
color: Colors.black.withOpacity(0.05),
|
|
137
|
+
blurRadius: 30,
|
|
138
|
+
offset: const Offset(0, 15),
|
|
139
|
+
)
|
|
140
|
+
],
|
|
141
|
+
),
|
|
142
|
+
child: Column(
|
|
143
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
144
|
+
children: const [
|
|
145
|
+
Text('Floating Card', style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),
|
|
146
|
+
SizedBox(height: 12),
|
|
147
|
+
Text('This card hovers above the background.', style: TextStyle(color: Colors.grey)),
|
|
148
|
+
],
|
|
149
|
+
),
|
|
150
|
+
),
|
|
151
|
+
],
|
|
152
|
+
),
|
|
153
|
+
|
|
154
|
+
// Floating Bottom Nav
|
|
155
|
+
Align(
|
|
156
|
+
alignment: Alignment.bottomCenter,
|
|
157
|
+
child: Container(
|
|
158
|
+
margin: const EdgeInsets.only(bottom: 32),
|
|
159
|
+
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
|
|
160
|
+
decoration: BoxDecoration(
|
|
161
|
+
color: Colors.white,
|
|
162
|
+
borderRadius: BorderRadius.circular(50), // Pill shape
|
|
163
|
+
boxShadow: [
|
|
164
|
+
BoxShadow(color: Colors.black.withOpacity(0.1), blurRadius: 25, offset: const Offset(0, 10))
|
|
165
|
+
],
|
|
166
|
+
),
|
|
167
|
+
child: Row(
|
|
168
|
+
mainAxisSize: MainAxisSize.min, // Wrap content
|
|
169
|
+
children: const [
|
|
170
|
+
Icon(Icons.home, color: Colors.blue),
|
|
171
|
+
SizedBox(width: 40),
|
|
172
|
+
Icon(Icons.search, color: Colors.grey),
|
|
173
|
+
SizedBox(width: 40),
|
|
174
|
+
Icon(Icons.person, color: Colors.grey),
|
|
175
|
+
],
|
|
176
|
+
),
|
|
177
|
+
),
|
|
178
|
+
),
|
|
179
|
+
],
|
|
180
|
+
),
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
- Avoid the native `BottomNavigationBar`. Instead, use a `Stack` and `Align(alignment: Alignment.bottomCenter)` with a `Container` to build the floating pill menu.
|
|
186
|
+
- Use `blurRadius: 30` in `BoxShadow` for the diffuse look.
|
|
187
|
+
|
|
188
|
+
### React Native
|
|
189
|
+
```jsx
|
|
190
|
+
const FloatingUIScreen = () => {
|
|
191
|
+
return (
|
|
192
|
+
<View style={{ flex: 1, backgroundColor: '#F4F4F9' }}>
|
|
193
|
+
<ScrollView contentContainerStyle={{ padding: 24 }}>
|
|
194
|
+
{/* Floating Card */}
|
|
195
|
+
<View style={styles.floatingCard}>
|
|
196
|
+
<Text style={{ fontSize: 24, fontWeight: 'bold', marginBottom: 12 }}>Floating Card</Text>
|
|
197
|
+
<Text style={{ color: '#666' }}>This card hovers above the background, detached from all edges.</Text>
|
|
198
|
+
</View>
|
|
199
|
+
</ScrollView>
|
|
200
|
+
|
|
201
|
+
{/* Floating Pill Nav */}
|
|
202
|
+
<View style={styles.floatingNav}>
|
|
203
|
+
<Text style={{ fontSize: 20 }}>🏠</Text>
|
|
204
|
+
<Text style={{ fontSize: 20, opacity: 0.5 }}>🔍</Text>
|
|
205
|
+
<Text style={{ fontSize: 20, opacity: 0.5 }}>👤</Text>
|
|
206
|
+
</View>
|
|
207
|
+
</View>
|
|
208
|
+
);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const styles = StyleSheet.create({
|
|
212
|
+
floatingCard: {
|
|
213
|
+
backgroundColor: '#FFF',
|
|
214
|
+
borderRadius: 32,
|
|
215
|
+
padding: 32,
|
|
216
|
+
marginBottom: 24,
|
|
217
|
+
// iOS shadow
|
|
218
|
+
shadowColor: '#000',
|
|
219
|
+
shadowOffset: { width: 0, height: 15 },
|
|
220
|
+
shadowOpacity: 0.05,
|
|
221
|
+
shadowRadius: 30,
|
|
222
|
+
// Android shadow
|
|
223
|
+
elevation: 8,
|
|
224
|
+
},
|
|
225
|
+
floatingNav: {
|
|
226
|
+
position: 'absolute',
|
|
227
|
+
bottom: 40,
|
|
228
|
+
alignSelf: 'center',
|
|
229
|
+
flexDirection: 'row',
|
|
230
|
+
backgroundColor: '#FFF',
|
|
231
|
+
borderRadius: 50,
|
|
232
|
+
paddingVertical: 16,
|
|
233
|
+
paddingHorizontal: 32,
|
|
234
|
+
gap: 40, // Needs RN 0.71+
|
|
235
|
+
|
|
236
|
+
shadowColor: '#000',
|
|
237
|
+
shadowOffset: { width: 0, height: 10 },
|
|
238
|
+
shadowOpacity: 0.1,
|
|
239
|
+
shadowRadius: 25,
|
|
240
|
+
elevation: 10,
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
```
|
|
244
|
+
- `position: 'absolute'` with `alignSelf: 'center'` is the easiest way to place the pill nav in React Native.
|
|
245
|
+
- Android's `elevation` doesn't support massive blur radii very well, so the effect is stronger and softer on iOS.
|
|
246
|
+
|
|
247
|
+
### Jetpack Compose
|
|
248
|
+
```kotlin
|
|
249
|
+
@Composable
|
|
250
|
+
fun FloatingUIScreen() {
|
|
251
|
+
Box(modifier = Modifier.fillMaxSize().background(Color(0xFFF4F4F9))) {
|
|
252
|
+
Column(
|
|
253
|
+
modifier = Modifier
|
|
254
|
+
.fillMaxSize()
|
|
255
|
+
.padding(24.dp)
|
|
256
|
+
) {
|
|
257
|
+
// Floating Card
|
|
258
|
+
Box(
|
|
259
|
+
modifier = Modifier
|
|
260
|
+
.fillMaxWidth()
|
|
261
|
+
.shadow(15.dp, RoundedCornerShape(32.dp), spotColor = Color.Black.copy(alpha = 0.05f))
|
|
262
|
+
.background(Color.White, RoundedCornerShape(32.dp))
|
|
263
|
+
.padding(32.dp)
|
|
264
|
+
) {
|
|
265
|
+
Column {
|
|
266
|
+
Text("Floating Card", fontSize = 24.sp, fontWeight = FontWeight.Bold)
|
|
267
|
+
Spacer(Modifier.height(12.dp))
|
|
268
|
+
Text("This card hovers above the background.", color = Color.Gray)
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Floating Pill Nav
|
|
274
|
+
Row(
|
|
275
|
+
modifier = Modifier
|
|
276
|
+
.align(Alignment.BottomCenter)
|
|
277
|
+
.padding(bottom = 32.dp)
|
|
278
|
+
.shadow(20.dp, CircleShape, spotColor = Color.Black.copy(alpha = 0.1f))
|
|
279
|
+
.background(Color.White, CircleShape)
|
|
280
|
+
.padding(horizontal = 32.dp, vertical = 16.dp),
|
|
281
|
+
horizontalArrangement = Arrangement.spacedBy(40.dp)
|
|
282
|
+
) {
|
|
283
|
+
Icon(Icons.Default.Home, contentDescription = null, tint = Color.Blue)
|
|
284
|
+
Icon(Icons.Default.Search, contentDescription = null, tint = Color.Gray)
|
|
285
|
+
Icon(Icons.Default.Person, contentDescription = null, tint = Color.Gray)
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
- Use `CircleShape` for the pill nav background.
|
|
291
|
+
- Crucially, lower the `alpha` of the `spotColor` in `Modifier.shadow` to achieve the soft, diffuse shadow look, otherwise Compose defaults to a harsh, dark shadow.
|
|
292
|
+
|
|
293
|
+
## Do's and Don'ts
|
|
294
|
+
- **DO**: Animate floating elements! A slow, continuous 2px up/down translateY animation makes them feel truly buoyant.
|
|
295
|
+
- **DON'T**: Pin elements to the screen edges (except perhaps background images).
|
|
296
|
+
|
|
297
|
+
## Limitations
|
|
298
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
299
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|