opencode-skills-collection 3.1.0 → 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/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/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,278 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: color-blocking
|
|
3
|
+
description: Web and App implementation guide for Color Blocking. Trigger when user wants large color sections, striking layout divisions, and Mondrian-style grids.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Color Blocking
|
|
11
|
+
|
|
12
|
+
> "The grid made visible. Large, solid swaths of contrasting color defining the layout."
|
|
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. **Geometric Division**: The viewport is divided into large rectangles or squares, each filled with a solid, distinct color.
|
|
20
|
+
2. **No Margins Between Blocks**: Blocks touch each other directly, often separated only by a stark, 1px or 2px black line (or no line at all, letting the colors clash).
|
|
21
|
+
3. **Typography as Texture**: Text is placed precisely within these blocks to balance the visual weight of the colors.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Highly contrasting, bold pairings. Use 3 to 4 strong colors from palettes like **Industrial Chic** (Red, Black, Grey, White) or custom bold pairings (Yellow, Navy, Pink).
|
|
25
|
+
- **Typography**: Very clean, bold sans-serifs that can hold their own against massive blocks of color.
|
|
26
|
+
- **Borders**: Often uses thick black borders (`2px solid #000`) between blocks to emphasize the grid, reminiscent of Mondrian paintings.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- CSS Grid is the only way to effectively build this.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
body {
|
|
33
|
+
margin: 0;
|
|
34
|
+
font-family: 'Space Grotesk', sans-serif;
|
|
35
|
+
color: #000;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.color-block-grid {
|
|
39
|
+
display: grid;
|
|
40
|
+
grid-template-columns: 1fr 2fr 1fr;
|
|
41
|
+
grid-template-rows: 60vh 40vh;
|
|
42
|
+
/* Thick black lines between blocks */
|
|
43
|
+
gap: 4px;
|
|
44
|
+
background-color: #000;
|
|
45
|
+
border: 4px solid #000;
|
|
46
|
+
min-height: 100vh;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.block {
|
|
50
|
+
padding: 40px;
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
justify-content: space-between;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.block-yellow { background-color: #FACC15; }
|
|
57
|
+
.block-white { background-color: #FFFFFF; }
|
|
58
|
+
.block-blue { background-color: #2563EB; color: #FFF; }
|
|
59
|
+
.block-red { background-color: #EF4444; }
|
|
60
|
+
|
|
61
|
+
.block-title {
|
|
62
|
+
font-size: 3rem;
|
|
63
|
+
font-weight: 900;
|
|
64
|
+
text-transform: uppercase;
|
|
65
|
+
margin: 0;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## App Implementation
|
|
70
|
+
|
|
71
|
+
### SwiftUI
|
|
72
|
+
```swift
|
|
73
|
+
struct ColorBlockingView: View {
|
|
74
|
+
let gridSpacing: CGFloat = 4 // Thickness of the black lines
|
|
75
|
+
|
|
76
|
+
var body: some View {
|
|
77
|
+
// Black background acts as the grid lines between blocks
|
|
78
|
+
VStack(spacing: gridSpacing) {
|
|
79
|
+
// Top Row
|
|
80
|
+
HStack(spacing: gridSpacing) {
|
|
81
|
+
ColorBlock(color: .yellow, text: "CREATE", textColor: .black)
|
|
82
|
+
ColorBlock(color: .blue, text: "VISION", textColor: .white)
|
|
83
|
+
}
|
|
84
|
+
.frame(height: 300)
|
|
85
|
+
|
|
86
|
+
// Bottom Row
|
|
87
|
+
HStack(spacing: gridSpacing) {
|
|
88
|
+
ColorBlock(color: .red, text: "BOLD", textColor: .white)
|
|
89
|
+
.frame(width: 120) // Fixed narrow block
|
|
90
|
+
ColorBlock(color: .white, text: "MINIMAL", textColor: .black)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
.background(Color.black) // The grid lines
|
|
94
|
+
.border(Color.black, width: gridSpacing) // Outer border
|
|
95
|
+
.ignoresSafeArea()
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
struct ColorBlock: View {
|
|
100
|
+
let color: Color
|
|
101
|
+
let text: String
|
|
102
|
+
let textColor: Color
|
|
103
|
+
var body: some View {
|
|
104
|
+
color
|
|
105
|
+
.overlay(
|
|
106
|
+
Text(text)
|
|
107
|
+
.font(.system(size: 32, weight: .black))
|
|
108
|
+
.foregroundColor(textColor)
|
|
109
|
+
.padding(),
|
|
110
|
+
alignment: .bottomLeading
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
- In SwiftUI, the easiest way to create Mondrian-style thick black grid lines is to set `.background(Color.black)` on the parent stack and use `spacing: 4`. The background peeks through the gaps.
|
|
116
|
+
- `.ignoresSafeArea()` allows the blocks to bleed to the edge of the physical device.
|
|
117
|
+
|
|
118
|
+
### Flutter
|
|
119
|
+
```dart
|
|
120
|
+
class ColorBlockingScreen extends StatelessWidget {
|
|
121
|
+
@override
|
|
122
|
+
Widget build(BuildContext context) {
|
|
123
|
+
return Scaffold(
|
|
124
|
+
// Black background creates the grid lines
|
|
125
|
+
backgroundColor: Colors.black,
|
|
126
|
+
body: SafeArea(
|
|
127
|
+
bottom: false,
|
|
128
|
+
child: Column(
|
|
129
|
+
children: [
|
|
130
|
+
// Top Row
|
|
131
|
+
Expanded(
|
|
132
|
+
flex: 3, // 3/5 of vertical space
|
|
133
|
+
child: Row(
|
|
134
|
+
children: [
|
|
135
|
+
Expanded(flex: 1, child: ColorBlock(color: const Color(0xFFFACC15), text: 'CREATE', textColor: Colors.black)),
|
|
136
|
+
const SizedBox(width: 4), // Grid line
|
|
137
|
+
Expanded(flex: 2, child: ColorBlock(color: const Color(0xFF2563EB), text: 'VISION', textColor: Colors.white)),
|
|
138
|
+
],
|
|
139
|
+
),
|
|
140
|
+
),
|
|
141
|
+
const SizedBox(height: 4), // Horizontal grid line
|
|
142
|
+
// Bottom Row
|
|
143
|
+
Expanded(
|
|
144
|
+
flex: 2, // 2/5 of vertical space
|
|
145
|
+
child: Row(
|
|
146
|
+
children: [
|
|
147
|
+
Expanded(flex: 1, child: ColorBlock(color: const Color(0xFFEF4444), text: 'BOLD', textColor: Colors.white)),
|
|
148
|
+
const SizedBox(width: 4),
|
|
149
|
+
Expanded(flex: 2, child: ColorBlock(color: Colors.white, text: 'MINIMAL', textColor: Colors.black)),
|
|
150
|
+
],
|
|
151
|
+
),
|
|
152
|
+
),
|
|
153
|
+
],
|
|
154
|
+
),
|
|
155
|
+
),
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
class ColorBlock extends StatelessWidget {
|
|
161
|
+
final Color color;
|
|
162
|
+
final String text;
|
|
163
|
+
final Color textColor;
|
|
164
|
+
const ColorBlock({required this.color, required this.text, required this.textColor});
|
|
165
|
+
|
|
166
|
+
@override
|
|
167
|
+
Widget build(BuildContext context) {
|
|
168
|
+
return Container(
|
|
169
|
+
color: color,
|
|
170
|
+
padding: const EdgeInsets.all(24),
|
|
171
|
+
alignment: Alignment.bottomLeft,
|
|
172
|
+
child: Text(text, style: TextStyle(fontSize: 32, fontWeight: FontWeight.w900, color: textColor)),
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
- Use `Expanded` with varying `flex` factors to divide the screen geometrically.
|
|
178
|
+
- Insert `SizedBox(width: 4)` or `height: 4` between rows and columns to expose the black `Scaffold` background, creating the grid lines.
|
|
179
|
+
|
|
180
|
+
### React Native
|
|
181
|
+
```jsx
|
|
182
|
+
const ColorBlockingScreen = () => {
|
|
183
|
+
return (
|
|
184
|
+
<View style={{ flex: 1, backgroundColor: '#000', gap: 4 }}>
|
|
185
|
+
{/* Top Row */}
|
|
186
|
+
<View style={{ flex: 3, flexDirection: 'row', gap: 4 }}>
|
|
187
|
+
<View style={[styles.block, { flex: 1, backgroundColor: '#FACC15' }]}>
|
|
188
|
+
<Text style={[styles.text, { color: '#000' }]}>CREATE</Text>
|
|
189
|
+
</View>
|
|
190
|
+
<View style={[styles.block, { flex: 2, backgroundColor: '#2563EB' }]}>
|
|
191
|
+
<Text style={[styles.text, { color: '#FFF' }]}>VISION</Text>
|
|
192
|
+
</View>
|
|
193
|
+
</View>
|
|
194
|
+
|
|
195
|
+
{/* Bottom Row */}
|
|
196
|
+
<View style={{ flex: 2, flexDirection: 'row', gap: 4 }}>
|
|
197
|
+
<View style={[styles.block, { flex: 1, backgroundColor: '#EF4444' }]}>
|
|
198
|
+
<Text style={[styles.text, { color: '#FFF' }]}>BOLD</Text>
|
|
199
|
+
</View>
|
|
200
|
+
<View style={[styles.block, { flex: 2, backgroundColor: '#FFF' }]}>
|
|
201
|
+
<Text style={[styles.text, { color: '#000' }]}>MINIMAL</Text>
|
|
202
|
+
</View>
|
|
203
|
+
</View>
|
|
204
|
+
</View>
|
|
205
|
+
);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
const styles = StyleSheet.create({
|
|
209
|
+
block: {
|
|
210
|
+
justifyContent: 'flex-end',
|
|
211
|
+
padding: 24,
|
|
212
|
+
},
|
|
213
|
+
text: {
|
|
214
|
+
fontSize: 32,
|
|
215
|
+
fontWeight: '900',
|
|
216
|
+
fontFamily: 'SpaceGrotesk-Bold',
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
- The `gap` property in React Native flexbox makes this trivial. Set a black background on the parent, set `gap: 4`, and the children automatically space out, revealing the thick black lines.
|
|
221
|
+
- Use `flex: 1`, `flex: 2` etc. to determine block proportions.
|
|
222
|
+
|
|
223
|
+
### Jetpack Compose
|
|
224
|
+
```kotlin
|
|
225
|
+
@Composable
|
|
226
|
+
fun ColorBlockingScreen() {
|
|
227
|
+
val gridSpacing = 4.dp
|
|
228
|
+
|
|
229
|
+
Column(
|
|
230
|
+
modifier = Modifier
|
|
231
|
+
.fillMaxSize()
|
|
232
|
+
.background(Color.Black) // Grid lines
|
|
233
|
+
) {
|
|
234
|
+
// Top Row
|
|
235
|
+
Row(
|
|
236
|
+
modifier = Modifier.weight(3f),
|
|
237
|
+
horizontalArrangement = Arrangement.spacedBy(gridSpacing)
|
|
238
|
+
) {
|
|
239
|
+
ColorBlock(Color(0xFFFACC15), "CREATE", Color.Black, Modifier.weight(1f))
|
|
240
|
+
ColorBlock(Color(0xFF2563EB), "VISION", Color.White, Modifier.weight(2f))
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
Spacer(Modifier.height(gridSpacing))
|
|
244
|
+
|
|
245
|
+
// Bottom Row
|
|
246
|
+
Row(
|
|
247
|
+
modifier = Modifier.weight(2f),
|
|
248
|
+
horizontalArrangement = Arrangement.spacedBy(gridSpacing)
|
|
249
|
+
) {
|
|
250
|
+
ColorBlock(Color(0xFFEF4444), "BOLD", Color.White, Modifier.weight(1f))
|
|
251
|
+
ColorBlock(Color.White, "MINIMAL", Color.Black, Modifier.weight(2f))
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
@Composable
|
|
257
|
+
fun ColorBlock(color: Color, text: String, textColor: Color, modifier: Modifier = Modifier) {
|
|
258
|
+
Box(
|
|
259
|
+
modifier = modifier
|
|
260
|
+
.fillMaxHeight()
|
|
261
|
+
.background(color)
|
|
262
|
+
.padding(24.dp),
|
|
263
|
+
contentAlignment = Alignment.BottomStart
|
|
264
|
+
) {
|
|
265
|
+
Text(text, fontSize = 32.sp, fontWeight = FontWeight.Black, color = textColor)
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
- Like other mobile frameworks, `Modifier.background(Color.Black)` combined with `Arrangement.spacedBy(4.dp)` perfectly creates the Mondrian grid.
|
|
270
|
+
- Use `Modifier.weight(Xf)` to mathematically divide the screen real estate.
|
|
271
|
+
|
|
272
|
+
## Do's and Don'ts
|
|
273
|
+
- **DO**: Ensure extreme contrast. Text on a yellow block should be black. Text on a dark blue block should be white.
|
|
274
|
+
- **DON'T**: Use drop shadows, rounded corners, or gradients. Keep it completely flat and sharp.
|
|
275
|
+
|
|
276
|
+
## Limitations
|
|
277
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
278
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: command-center-ui
|
|
3
|
+
description: Web and App implementation guide for Command Center UI. Trigger when user wants monitoring systems, enterprise dashboards, NOCs, and global maps.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Command Center UI
|
|
11
|
+
|
|
12
|
+
> "Mission Control. Global monitoring, real-time alerts, and high-stakes data visualization."
|
|
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. **Dark/Black Backgrounds**: Essential for a room full of glowing monitors (NOCs). It makes the data pop and reduces glare.
|
|
20
|
+
2. **Maps & Topologies**: The center of the UI is almost always a dark-mode geographical map or a node-based network topology.
|
|
21
|
+
3. **Alert Hierarchy**: 90% of the screen is calm and blue/grey. When a warning happens, it flashes bright amber or red to immediately draw the eye.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Pure black (`#000000`) or deep navy (`#0B132B`). Accents are electric cyan (`#00FFFF`), amber (`#FFBF00`), and critical red (`#FF0000`).
|
|
25
|
+
- **Typography**: Clean, tech-focused sans-serifs (`Orbitron`, `Roboto`, `Share Tech`).
|
|
26
|
+
- **Styling**: Glowing borders, radar sweeps, and stark, data-driven charts.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- **CSS Example**:
|
|
30
|
+
```css
|
|
31
|
+
body {
|
|
32
|
+
background-color: #030a16;
|
|
33
|
+
color: #8ab4f8;
|
|
34
|
+
font-family: 'Roboto', sans-serif;
|
|
35
|
+
margin: 0;
|
|
36
|
+
display: grid;
|
|
37
|
+
grid-template-columns: 300px 1fr 300px;
|
|
38
|
+
height: 100vh;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.panel {
|
|
42
|
+
background-color: rgba(13, 27, 42, 0.8);
|
|
43
|
+
border: 1px solid #1c355e;
|
|
44
|
+
box-shadow: inset 0 0 20px rgba(0, 255, 255, 0.05);
|
|
45
|
+
margin: 10px;
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.panel-header {
|
|
51
|
+
background: linear-gradient(90deg, #1c355e, transparent);
|
|
52
|
+
color: #00ffff;
|
|
53
|
+
padding: 8px 16px;
|
|
54
|
+
font-weight: bold;
|
|
55
|
+
text-transform: uppercase;
|
|
56
|
+
letter-spacing: 2px;
|
|
57
|
+
border-bottom: 1px solid #00ffff;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* The Map/Center view */
|
|
61
|
+
.main-view {
|
|
62
|
+
/* Placeholder for a massive globe or map */
|
|
63
|
+
background: radial-gradient(circle, #0d1b2a 0%, #030a16 100%);
|
|
64
|
+
position: relative;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Critical Alert */
|
|
68
|
+
.alert-critical {
|
|
69
|
+
background-color: rgba(255, 0, 0, 0.1);
|
|
70
|
+
border: 1px solid #ff0000;
|
|
71
|
+
color: #ff0000;
|
|
72
|
+
box-shadow: 0 0 10px rgba(255, 0, 0, 0.5);
|
|
73
|
+
animation: pulse-red 2s infinite;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@keyframes pulse-red {
|
|
77
|
+
0% { box-shadow: 0 0 5px rgba(255, 0, 0, 0.2); }
|
|
78
|
+
50% { box-shadow: 0 0 20px rgba(255, 0, 0, 0.8); }
|
|
79
|
+
100% { box-shadow: 0 0 5px rgba(255, 0, 0, 0.2); }
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## App Implementation
|
|
84
|
+
|
|
85
|
+
### SwiftUI
|
|
86
|
+
```swift
|
|
87
|
+
struct CommandCenterView: View {
|
|
88
|
+
@State private var isAlerting = false
|
|
89
|
+
|
|
90
|
+
var body: some View {
|
|
91
|
+
VStack(spacing: 16) {
|
|
92
|
+
// Header
|
|
93
|
+
HStack {
|
|
94
|
+
Text("GLOBAL_OPS // ALPHA")
|
|
95
|
+
.font(.custom("Orbitron", size: 20))
|
|
96
|
+
.foregroundColor(Color(red: 0.0, green: 1.0, blue: 1.0)) // Cyan
|
|
97
|
+
Spacer()
|
|
98
|
+
Text(Date(), style: .time).foregroundColor(.gray)
|
|
99
|
+
}
|
|
100
|
+
.padding()
|
|
101
|
+
.border(Color(red: 0.0, green: 1.0, blue: 1.0), width: 1)
|
|
102
|
+
|
|
103
|
+
// Map or main visual placeholder
|
|
104
|
+
Circle()
|
|
105
|
+
.strokeBorder(
|
|
106
|
+
LinearGradient(colors: [.cyan, .blue], startPoint: .top, endPoint: .bottom),
|
|
107
|
+
lineWidth: 2
|
|
108
|
+
)
|
|
109
|
+
.frame(height: 250)
|
|
110
|
+
.overlay(Text("TOPOLOGY SCAN").foregroundColor(.cyan.opacity(0.5)))
|
|
111
|
+
|
|
112
|
+
// Critical Alert Panel
|
|
113
|
+
VStack(alignment: .leading) {
|
|
114
|
+
Text("WARNING: SECTOR 7G")
|
|
115
|
+
.font(.headline)
|
|
116
|
+
.foregroundColor(.red)
|
|
117
|
+
Text("Anomalous activity detected.")
|
|
118
|
+
.font(.subheadline)
|
|
119
|
+
.foregroundColor(.white)
|
|
120
|
+
}
|
|
121
|
+
.padding()
|
|
122
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
123
|
+
.background(Color.red.opacity(0.1))
|
|
124
|
+
.border(Color.red, width: 2)
|
|
125
|
+
.shadow(color: isAlerting ? .red : .clear, radius: 10)
|
|
126
|
+
}
|
|
127
|
+
.padding()
|
|
128
|
+
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
129
|
+
.background(Color(red: 0.01, green: 0.04, blue: 0.09)) // Very dark navy
|
|
130
|
+
.onAppear {
|
|
131
|
+
withAnimation(.easeInOut(duration: 1.0).repeatForever()) {
|
|
132
|
+
isAlerting.toggle()
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
- Rely heavily on `.border()` and `.strokeBorder()` combined with gradients to create technical, glowing wireframes.
|
|
139
|
+
- Use `.shadow()` animated continuously for pulse alerts.
|
|
140
|
+
|
|
141
|
+
### Flutter
|
|
142
|
+
```dart
|
|
143
|
+
class CommandCenterScreen extends StatefulWidget {
|
|
144
|
+
@override
|
|
145
|
+
State<CommandCenterScreen> createState() => _CommandCenterScreenState();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
class _CommandCenterScreenState extends State<CommandCenterScreen> with SingleTickerProviderStateMixin {
|
|
149
|
+
late AnimationController _pulseController;
|
|
150
|
+
|
|
151
|
+
@override
|
|
152
|
+
void initState() {
|
|
153
|
+
super.initState();
|
|
154
|
+
_pulseController = AnimationController(vsync: this, duration: const Duration(seconds: 1))..repeat(reverse: true);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@override
|
|
158
|
+
Widget build(BuildContext context) {
|
|
159
|
+
return Scaffold(
|
|
160
|
+
backgroundColor: const Color(0xFF030A16), // Dark NOC background
|
|
161
|
+
body: SafeArea(
|
|
162
|
+
child: Padding(
|
|
163
|
+
padding: const EdgeInsets.all(16.0),
|
|
164
|
+
child: Column(
|
|
165
|
+
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
166
|
+
children: [
|
|
167
|
+
// Panel Header
|
|
168
|
+
Container(
|
|
169
|
+
padding: const EdgeInsets.all(12),
|
|
170
|
+
decoration: const BoxDecoration(
|
|
171
|
+
border: Border(bottom: BorderSide(color: Colors.cyan)),
|
|
172
|
+
gradient: LinearGradient(colors: [Color(0xFF1C355E), Colors.transparent]),
|
|
173
|
+
),
|
|
174
|
+
child: const Text('GLOBAL_OPS // ALPHA',
|
|
175
|
+
style: TextStyle(color: Colors.cyan, fontFamily: 'Orbitron', letterSpacing: 2)),
|
|
176
|
+
),
|
|
177
|
+
const SizedBox(height: 24),
|
|
178
|
+
// Map Placeholder
|
|
179
|
+
Expanded(
|
|
180
|
+
child: Container(
|
|
181
|
+
decoration: BoxDecoration(
|
|
182
|
+
shape: BoxShape.circle,
|
|
183
|
+
border: Border.all(color: Colors.cyan.withOpacity(0.5), width: 2),
|
|
184
|
+
),
|
|
185
|
+
child: const Center(child: Text('RADAR ACTIVE', style: TextStyle(color: Colors.cyan))),
|
|
186
|
+
),
|
|
187
|
+
),
|
|
188
|
+
const SizedBox(height: 24),
|
|
189
|
+
// Animated Critical Alert
|
|
190
|
+
AnimatedBuilder(
|
|
191
|
+
animation: _pulseController,
|
|
192
|
+
builder: (context, child) {
|
|
193
|
+
return Container(
|
|
194
|
+
padding: const EdgeInsets.all(16),
|
|
195
|
+
decoration: BoxDecoration(
|
|
196
|
+
color: Colors.red.withOpacity(0.1),
|
|
197
|
+
border: Border.all(color: Colors.red),
|
|
198
|
+
boxShadow: [
|
|
199
|
+
BoxShadow(color: Colors.red.withOpacity(_pulseController.value * 0.8), blurRadius: 20)
|
|
200
|
+
],
|
|
201
|
+
),
|
|
202
|
+
child: const Text('WARNING: SECTOR 7G', style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold)),
|
|
203
|
+
);
|
|
204
|
+
},
|
|
205
|
+
),
|
|
206
|
+
],
|
|
207
|
+
),
|
|
208
|
+
),
|
|
209
|
+
),
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
- A `Container` with a `LinearGradient` that fades to `Colors.transparent` is excellent for high-tech headers.
|
|
215
|
+
- Use `AnimatedBuilder` to manipulate the `blurRadius` and opacity of `BoxShadow` to create flashing alert panels.
|
|
216
|
+
|
|
217
|
+
### React Native
|
|
218
|
+
```jsx
|
|
219
|
+
const CommandCenterScreen = () => {
|
|
220
|
+
const pulseAnim = useRef(new Animated.Value(0)).current;
|
|
221
|
+
|
|
222
|
+
useEffect(() => {
|
|
223
|
+
Animated.loop(
|
|
224
|
+
Animated.sequence([
|
|
225
|
+
Animated.timing(pulseAnim, { toValue: 1, duration: 1000, useNativeDriver: false }),
|
|
226
|
+
Animated.timing(pulseAnim, { toValue: 0, duration: 1000, useNativeDriver: false })
|
|
227
|
+
])
|
|
228
|
+
).start();
|
|
229
|
+
}, []);
|
|
230
|
+
|
|
231
|
+
const shadowOpacity = pulseAnim.interpolate({ inputRange: [0, 1], outputRange: [0.2, 1] });
|
|
232
|
+
|
|
233
|
+
return (
|
|
234
|
+
<View style={{ flex: 1, backgroundColor: '#030A16', padding: 16 }}>
|
|
235
|
+
{/* Header Panel */}
|
|
236
|
+
<View style={{
|
|
237
|
+
borderBottomWidth: 1, borderColor: '#00FFFF', padding: 12, backgroundColor: '#1C355E'
|
|
238
|
+
}}>
|
|
239
|
+
<Text style={{ color: '#00FFFF', fontFamily: 'monospace', letterSpacing: 2 }}>
|
|
240
|
+
GLOBAL_OPS // ALPHA
|
|
241
|
+
</Text>
|
|
242
|
+
</View>
|
|
243
|
+
|
|
244
|
+
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
|
245
|
+
<View style={{
|
|
246
|
+
width: 250, height: 250, borderRadius: 125, borderWidth: 2, borderColor: '#00FFFF',
|
|
247
|
+
justifyContent: 'center', alignItems: 'center'
|
|
248
|
+
}}>
|
|
249
|
+
<Text style={{ color: '#00FFFF', opacity: 0.5 }}>SCANNING...</Text>
|
|
250
|
+
</View>
|
|
251
|
+
</View>
|
|
252
|
+
|
|
253
|
+
{/* Critical Alert */}
|
|
254
|
+
<Animated.View style={{
|
|
255
|
+
backgroundColor: 'rgba(255,0,0,0.1)',
|
|
256
|
+
borderWidth: 2, borderColor: '#FF0000', padding: 16,
|
|
257
|
+
shadowColor: '#FF0000', shadowRadius: 15, shadowOpacity, elevation: 10
|
|
258
|
+
}}>
|
|
259
|
+
<Text style={{ color: '#FF0000', fontWeight: 'bold', fontSize: 18 }}>WARNING: SECTOR 7G</Text>
|
|
260
|
+
<Text style={{ color: '#FFF' }}>Anomalous activity detected.</Text>
|
|
261
|
+
</Animated.View>
|
|
262
|
+
</View>
|
|
263
|
+
);
|
|
264
|
+
};
|
|
265
|
+
```
|
|
266
|
+
- Rely on sharp 1px or 2px borders with bright hex values (`#00FFFF`, `#FF0000`) instead of border radii.
|
|
267
|
+
- Keep backgrounds extremely dark navy (`#030A16`) rather than pure black to avoid OLED smearing while maintaining the NOC feel.
|
|
268
|
+
|
|
269
|
+
### Jetpack Compose
|
|
270
|
+
```kotlin
|
|
271
|
+
@Composable
|
|
272
|
+
fun CommandCenterScreen() {
|
|
273
|
+
val infiniteTransition = rememberInfiniteTransition()
|
|
274
|
+
val pulseAlpha by infiniteTransition.animateFloat(
|
|
275
|
+
initialValue = 0.2f,
|
|
276
|
+
targetValue = 1.0f,
|
|
277
|
+
animationSpec = infiniteRepeatable(
|
|
278
|
+
animation = tween(1000, easing = LinearEasing),
|
|
279
|
+
repeatMode = RepeatMode.Reverse
|
|
280
|
+
)
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
Column(
|
|
284
|
+
modifier = Modifier
|
|
285
|
+
.fillMaxSize()
|
|
286
|
+
.background(Color(0xFF030A16))
|
|
287
|
+
.padding(16.dp)
|
|
288
|
+
) {
|
|
289
|
+
// Header
|
|
290
|
+
Box(
|
|
291
|
+
modifier = Modifier
|
|
292
|
+
.fillMaxWidth()
|
|
293
|
+
.background(Brush.horizontalGradient(listOf(Color(0xFF1C355E), Color.Transparent)))
|
|
294
|
+
.border(width = 1.dp, color = Color.Cyan) // Simplified border
|
|
295
|
+
.padding(12.dp)
|
|
296
|
+
) {
|
|
297
|
+
Text("GLOBAL_OPS // ALPHA", color = Color.Cyan, fontFamily = FontFamily.Monospace, letterSpacing = 2.sp)
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
Spacer(Modifier.height(32.dp))
|
|
301
|
+
|
|
302
|
+
// Main Visual
|
|
303
|
+
Box(
|
|
304
|
+
modifier = Modifier
|
|
305
|
+
.weight(1f)
|
|
306
|
+
.fillMaxWidth(),
|
|
307
|
+
contentAlignment = Alignment.Center
|
|
308
|
+
) {
|
|
309
|
+
Box(
|
|
310
|
+
modifier = Modifier
|
|
311
|
+
.size(250.dp)
|
|
312
|
+
.border(2.dp, Color.Cyan.copy(alpha = 0.5f), CircleShape),
|
|
313
|
+
contentAlignment = Alignment.Center
|
|
314
|
+
) {
|
|
315
|
+
Text("SCANNING...", color = Color.Cyan.copy(alpha = 0.5f))
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
Spacer(Modifier.height(32.dp))
|
|
320
|
+
|
|
321
|
+
// Critical Alert
|
|
322
|
+
Column(
|
|
323
|
+
modifier = Modifier
|
|
324
|
+
.fillMaxWidth()
|
|
325
|
+
.shadow(20.dp, spotColor = Color.Red.copy(alpha = pulseAlpha), ambientColor = Color.Red.copy(alpha = pulseAlpha))
|
|
326
|
+
.background(Color.Red.copy(alpha = 0.1f))
|
|
327
|
+
.border(2.dp, Color.Red)
|
|
328
|
+
.padding(16.dp)
|
|
329
|
+
) {
|
|
330
|
+
Text("WARNING: SECTOR 7G", color = Color.Red, fontWeight = FontWeight.Bold, fontSize = 18.sp)
|
|
331
|
+
Text("Anomalous activity detected.", color = Color.White)
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
- Compose handles neon interfaces very well. Use `Modifier.border(..., CircleShape)` for radar rings.
|
|
337
|
+
- To make a container glow in Compose, you must use `Modifier.shadow` with the `spotColor` and `ambientColor` set to your neon color, bypassing the default black shadow.
|
|
338
|
+
|
|
339
|
+
## Do's and Don'ts
|
|
340
|
+
- **DO**: Create a distinct visual rhythm. The screen should feel calm until a specific alert requires attention.
|
|
341
|
+
- **DON'T**: Fill the screen with bright, solid white panels. A command center should glow softly, not blind the user.
|
|
342
|
+
|
|
343
|
+
## Limitations
|
|
344
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
345
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|