opencode-skills-collection 4.0.35 → 4.0.37
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 +13 -1
- package/bundled-skills/agent-evaluation-reporting/SKILL.md +136 -0
- package/bundled-skills/agent-harness-fault-injection/SKILL.md +250 -0
- package/bundled-skills/anti-ui-slop/SKILL.md +115 -0
- package/bundled-skills/audit-agent-run-evidence/SKILL.md +165 -0
- package/bundled-skills/boost-asio-pro/SKILL.md +172 -0
- package/bundled-skills/boost-asio-pro/references/build.md +88 -0
- package/bundled-skills/boost-asio-pro/references/classic-boost.md +33 -0
- package/bundled-skills/boost-asio-pro/references/coroutines.md +415 -0
- package/bundled-skills/boost-asio-pro/references/pre-cpp20.md +164 -0
- package/bundled-skills/boost-asio-pro/references/ssl.md +38 -0
- package/bundled-skills/cross-platform-contract-propagation-audit/SKILL.md +159 -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 +1 -1
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/aas-core.md +9 -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/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +3 -3
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/dsh-deepread/SKILL.md +200 -0
- package/bundled-skills/liuguang-banlan-ui/SKILL.md +135 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/favicon.svg +4 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/index.html +32 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/launcher.css +25 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/obsidian/index.html +179 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/obsidian/theme-config.js +105 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/obsidian/theme.css +107 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/opal/index.html +179 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/opal/theme-config.js +105 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/opal/theme.css +107 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/shared/base.css +423 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/shared/spectral-field.js +450 -0
- package/bundled-skills/liuguang-banlan-ui/assets/starter/shared/workbench.js +255 -0
- package/bundled-skills/liuguang-banlan-ui/references/style-contract.md +53 -0
- package/bundled-skills/liuguang-banlan-ui/references/verification.md +70 -0
- package/bundled-skills/liuguang-banlan-ui/scripts/measure_preview.py +144 -0
- package/bundled-skills/liuguang-banlan-ui/scripts/requirements.txt +2 -0
- package/bundled-skills/liuguang-banlan-ui/scripts/scaffold_template.py +43 -0
- package/bundled-skills/liuguang-banlan-ui/scripts/validate_manifest.py +173 -0
- package/bundled-skills/multi-source-search/SKILL.md +139 -0
- package/bundled-skills/multi-source-search/references/report-schema.md +47 -0
- package/bundled-skills/multi-source-search/scripts/validate_report.py +221 -0
- package/bundled-skills/review-multi-agent-orchestration/SKILL.md +201 -0
- package/bundled-skills/ui-slop-score/SKILL.md +80 -0
- package/bundled-skills/using-lwc/LICENSE +201 -0
- package/bundled-skills/using-lwc/README.md +926 -0
- package/bundled-skills/using-lwc/README.zh-CN.md +836 -0
- package/bundled-skills/using-lwc/SKILL.md +156 -0
- package/bundled-skills/using-lwc/agents/openai.yaml +4 -0
- package/bundled-skills/using-lwc/assets/global-purpose.md +17 -0
- package/bundled-skills/using-lwc/assets/global-schema.md +28 -0
- package/bundled-skills/using-lwc/references/active-memory.md +81 -0
- package/bundled-skills/using-lwc/references/agent-onboarding.md +84 -0
- package/bundled-skills/using-lwc/references/code-graph.md +60 -0
- package/bundled-skills/using-lwc/references/core-memory.md +51 -0
- package/bundled-skills/using-lwc/references/document-conversion.md +53 -0
- package/bundled-skills/using-lwc/references/document-graph.md +58 -0
- package/bundled-skills/using-lwc/references/llm-wiki.md +75 -0
- package/bundled-skills/using-lwc/references/memory-policy.md +551 -0
- package/bundled-skills/using-lwc/references/operations-manual.md +503 -0
- package/bundled-skills/using-lwc/references/recovery-maintenance.md +53 -0
- package/bundled-skills/using-lwc/references/strong-context.md +54 -0
- package/bundled-skills/using-lwc/references/trigger-playbook.md +53 -0
- package/bundled-skills/using-lwc/references/word-graph.md +45 -0
- package/bundled-skills/using-lwc/scripts/bootstrap.sh +359 -0
- package/bundled-skills/using-lwc/scripts/install-lwc.sh +172 -0
- package/bundled-skills/youtube-summarizer/SKILL.md +21 -7
- package/bundled-skills/youtube-summarizer/scripts/extract-transcript.py +45 -12
- package/package.json +3 -2
- package/skills_index.json +268 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: liuguang-banlan-ui
|
|
3
|
+
description: Builds two parameterized UI modes—流光溢彩白 (iridescent white) and 五彩斑斓黑 (colorful black)—with OKLCH, WebGL/CSS fallback, vision gating, screenshot QA, and total/per-color intensity reports. Use when a UI request names either mode or needs measured color parameters.
|
|
4
|
+
category: creative
|
|
5
|
+
risk: critical
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
date_added: "2026-08-15"
|
|
9
|
+
author: 3516027002att-ui
|
|
10
|
+
tags: [ui, frontend, oklch, webgl, accessibility]
|
|
11
|
+
tools: [codex, claude, cursor, gemini]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# 流光斑斓 UI 工坊
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
|
|
18
|
+
Use one skill with two explicit modes, not a generic material library. Preserve a stable information workspace while treating the spectral field as a controlled environmental layer. Keep the implementation parameterized so every output can report total color intensity, per-color intensity, OKLCH values, peak opacity, spatial scale, phase, and measured coverage.
|
|
19
|
+
|
|
20
|
+
Read [style-contract.md](references/style-contract.md) before choosing a mode or changing palette semantics. Read [verification.md](references/verification.md) before claiming visual or screenshot validation.
|
|
21
|
+
|
|
22
|
+
## When to Use
|
|
23
|
+
|
|
24
|
+
- Use when a user names 流光溢彩白 or 五彩斑斓黑, asks for one unified skill covering both, or needs a reusable parameterized starter.
|
|
25
|
+
- Use when the final report must include total color intensity, each color's intensity, OKLCH values, and screenshot measurements.
|
|
26
|
+
- Do not use for a generic theme-token library or an unparameterized visual mockup.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
### 1. Classify the request
|
|
31
|
+
|
|
32
|
+
- Map “流光溢彩白” to `opal` and “五彩斑斓黑” to `obsidian`.
|
|
33
|
+
- If both are requested, keep one shared implementation and two explicit theme manifests.
|
|
34
|
+
- Inspect the existing project, framework, route, build system, and uncommitted work before copying starter assets.
|
|
35
|
+
- Use the smallest appropriate change surface; do not replace an existing design system without authorization.
|
|
36
|
+
|
|
37
|
+
### 2. Gate visual verification
|
|
38
|
+
|
|
39
|
+
- Confirm that the executing model can directly inspect images before taking a screenshot-based visual claim.
|
|
40
|
+
- If native image inspection is unavailable, continue with code and deterministic pixel checks but mark the result `visual-unverified`; never infer visual quality from DOM or CSS alone.
|
|
41
|
+
- Record `modelVision`, `screenshotCapture`, `deterministicPixelMetrics`, and `visualVerificationMode` in the final report.
|
|
42
|
+
|
|
43
|
+
### 3. Establish the scene and structure
|
|
44
|
+
|
|
45
|
+
- Choose a neutral, information-dense workbench domain such as field research, inventory, monitoring, or operations.
|
|
46
|
+
- Use a continuous three-pane or similarly coherent workspace: navigation, queue/list, detail, metadata, and one signature observation band.
|
|
47
|
+
- Keep color in the field, ribbon, markers, and state accents; keep text, controls, boundaries, and semantic hierarchy stable.
|
|
48
|
+
- Prefer restrained surfaces and weak fills. Avoid turning every region into a floating card.
|
|
49
|
+
|
|
50
|
+
### 4. Implement the parameter contract
|
|
51
|
+
|
|
52
|
+
Maintain a serializable manifest with these top-level fields:
|
|
53
|
+
|
|
54
|
+
```js
|
|
55
|
+
{
|
|
56
|
+
schemaVersion, mode, label, preset, seed,
|
|
57
|
+
overallColorIntensity,
|
|
58
|
+
base: { oklch },
|
|
59
|
+
colors: [{
|
|
60
|
+
id, label, oklch, srgbFallback,
|
|
61
|
+
intensity, peakOpacity, lightnessBias,
|
|
62
|
+
fieldScale, phase,
|
|
63
|
+
measuredCoverage, effectiveShare
|
|
64
|
+
}],
|
|
65
|
+
field: { scale, octaves, warpStrength, motionSpeed, staticTime, ditherStrength, luminanceCap },
|
|
66
|
+
output: { colorSpace, p3Enhancement, reducedMotion }
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- Keep every intensity in `[0, 1]`; make `overallColorIntensity` the global budget and `colors[].intensity` the per-color budget.
|
|
71
|
+
- Use OKLCH as the authoring space and provide an sRGB fallback for non-OKLCH contexts.
|
|
72
|
+
- Keep the seed, static frame, phases, and field scales deterministic; do not use random per render.
|
|
73
|
+
- Expose sliders for the global intensity and every configured color. Make reset, JSON export, and copy actions available.
|
|
74
|
+
|
|
75
|
+
### 5. Build the spectral field
|
|
76
|
+
|
|
77
|
+
- Use a procedural fBm/domain-warp field or an equivalent continuous field; keep it behind the interface with `pointer-events: none`.
|
|
78
|
+
- Use broad flowing hue regions or ribbons, not obvious radial blobs, spotlight circles, or hard rainbow bands.
|
|
79
|
+
- Upload the complete palette and per-color field scales to the renderer. Apply the dark-mode luminance cap after palette mixing.
|
|
80
|
+
- Provide a CSS fallback with comparable visual intent when WebGL is unavailable.
|
|
81
|
+
- Pause or freeze motion when the document is hidden or `prefers-reduced-motion` is active.
|
|
82
|
+
- Keep the renderer local and dependency-light; do not require remote fonts, images, or APIs for the starter.
|
|
83
|
+
|
|
84
|
+
### 6. Preserve interaction and accessibility
|
|
85
|
+
|
|
86
|
+
- Keep semantic headings, labels, focus-visible states, keyboard escape behavior, and readable contrast.
|
|
87
|
+
- Test navigation, record/list selection, tab selection, parameter panel open/close, slider input, reset, export, and copy fallback.
|
|
88
|
+
- Make the workbench responsive at a narrow mobile viewport; collapse navigation and metadata without losing the primary record flow.
|
|
89
|
+
|
|
90
|
+
### 7. Validate and report
|
|
91
|
+
|
|
92
|
+
- Scaffold a clean starter with `scripts/scaffold_template.py` when a neutral implementation is needed.
|
|
93
|
+
- Treat JavaScript manifests as executable code: inspect them first and run the
|
|
94
|
+
bundled helpers only on reviewed, locally authored configuration. Never pass
|
|
95
|
+
an untrusted or freshly downloaded manifest to either Python helper.
|
|
96
|
+
- Run `scripts/validate_manifest.py` on each theme config before rendering.
|
|
97
|
+
- Capture desktop and mobile screenshots with a real browser. Inspect them directly if visual capability is available.
|
|
98
|
+
- Run `scripts/measure_preview.py` on the pure field screenshot and retain measured chromatic ratio, luminance statistics, per-color coverage, and effective share.
|
|
99
|
+
- Report configured parameters separately from measured values; do not imply that pixel attribution is an exact shader contribution.
|
|
100
|
+
- Use `partial`, `visual-unverified`, or `blocked` when a required capability or native check is unavailable.
|
|
101
|
+
|
|
102
|
+
## Limitations and capability states
|
|
103
|
+
|
|
104
|
+
- WebGL is optional. The starter switches to a CSS spectral fallback when a WebGL context cannot be created or shader/program setup fails; fallback rendering is parameterized but is not pixel-identical to the shader.
|
|
105
|
+
- Native image inspection and browser screenshot capture are runtime capabilities, not guaranteed by this skill. If either is unavailable, keep the result visual-unverified and report the missing capability explicitly.
|
|
106
|
+
- The deterministic measurement helper requires the optional Python packages listed in scripts/requirements.txt. Without them it exits with an unavailable-capability message instead of producing a misleading report.
|
|
107
|
+
- Manifests may contain 3 to 12 colors. The renderer uploads every configured entry up to that validated limit, while the shader ignores only unused capacity slots.
|
|
108
|
+
- Configured values, fallback values, and measured pixel attribution describe different things; do not treat measured per-color coverage as an exact decomposition of shader energy.
|
|
109
|
+
|
|
110
|
+
## Anti-pattern guardrails
|
|
111
|
+
|
|
112
|
+
- Do not rename the two modes into a vague “reusable UI material” abstraction.
|
|
113
|
+
- Do not use pure white as the only white-mode signal, black crush as the only dark-mode signal, or RGB neon as a shortcut to “colorful”.
|
|
114
|
+
- Do not hide weak structure behind full-page glass, excessive blur, or giant gradients.
|
|
115
|
+
- Do not report visual success from screenshot dimensions, DOM state, or static CSS alone.
|
|
116
|
+
- Do not include private project names, links, repository identifiers, or source-chat contents in generated assets or reports.
|
|
117
|
+
|
|
118
|
+
## Bundled resources
|
|
119
|
+
|
|
120
|
+
Use the bundled starter under `assets/starter/` as a neutral base. Copy only the selected mode when integrating into an existing project, and preserve the existing project’s content and build conventions.
|
|
121
|
+
|
|
122
|
+
### scripts/
|
|
123
|
+
|
|
124
|
+
- `scaffold_template.py`: copy the neutral starter for `opal`, `obsidian`, or both.
|
|
125
|
+
- `validate_manifest.py`: parse a JavaScript manifest through Node and validate required fields and ranges.
|
|
126
|
+
- `measure_preview.py`: measure a rendered pure-field PNG against the configured OKLCH palette.
|
|
127
|
+
|
|
128
|
+
### references/
|
|
129
|
+
|
|
130
|
+
- `style-contract.md`: mode-specific visual rules and recommended parameter ranges.
|
|
131
|
+
- `verification.md`: visual-capability gate, browser QA, pixel measurement, and report schema.
|
|
132
|
+
|
|
133
|
+
### assets/
|
|
134
|
+
|
|
135
|
+
`starter/` contains a neutral static workbench, shared renderer, and both theme variants. Treat it as output material, not as documentation to paste into context wholesale.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
|
2
|
+
<defs><linearGradient id="g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#9bded5"/><stop offset=".5" stop-color="#7a8eb9"/><stop offset="1" stop-color="#b88caf"/></linearGradient></defs>
|
|
3
|
+
<circle cx="32" cy="32" r="28" fill="#101419"/><circle cx="32" cy="32" r="18" fill="url(#g)" opacity=".82"/><circle cx="32" cy="32" r="7" fill="none" stroke="#fff" opacity=".72"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<meta name="description" content="两套参数化全场虹彩 UI 模板">
|
|
7
|
+
<title>全场虹彩 UI 模板</title>
|
|
8
|
+
<link rel="icon" href="./favicon.svg" type="image/svg+xml">
|
|
9
|
+
<link rel="stylesheet" href="./launcher.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<main>
|
|
13
|
+
<header>
|
|
14
|
+
<p>Parameterized UI studies</p>
|
|
15
|
+
<h1>两种固定风格,两套完整工作台</h1>
|
|
16
|
+
<span>每套模板都包含实时参数面板、WebGL 全局色场、CSS 降级、响应式布局和 JSON 导出。</span>
|
|
17
|
+
</header>
|
|
18
|
+
<div class="template-list">
|
|
19
|
+
<a class="template opal" href="./opal/index.html">
|
|
20
|
+
<span class="swatch" aria-hidden="true"></span>
|
|
21
|
+
<span class="copy"><small>Template 01</small><strong>流光溢彩白</strong><span>白色是第一视觉,颜色像环境光一样遍布全局。</span></span>
|
|
22
|
+
<span class="arrow" aria-hidden="true">↗</span>
|
|
23
|
+
</a>
|
|
24
|
+
<a class="template obsidian" href="./obsidian/index.html">
|
|
25
|
+
<span class="swatch" aria-hidden="true"></span>
|
|
26
|
+
<span class="copy"><small>Template 02</small><strong>五彩斑斓黑</strong><span>黑色保持基材身份,暗虹彩只作为受控现象出现。</span></span>
|
|
27
|
+
<span class="arrow" aria-hidden="true">↗</span>
|
|
28
|
+
</a>
|
|
29
|
+
</div>
|
|
30
|
+
</main>
|
|
31
|
+
</body>
|
|
32
|
+
</html>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
* { box-sizing: border-box; }
|
|
2
|
+
:root { color-scheme: light dark; font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
|
|
3
|
+
body { margin: 0; min-height: 100vh; background: oklch(17% 0.012 240); color: oklch(94% 0.008 220); }
|
|
4
|
+
main { width: min(980px, calc(100% - 32px)); margin: 0 auto; padding: clamp(48px, 10vw, 120px) 0; }
|
|
5
|
+
header { max-width: 670px; margin-bottom: 48px; }
|
|
6
|
+
header p { margin: 0 0 12px; color: oklch(70% 0.04 204); font-size: 11px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
|
|
7
|
+
header h1 { margin: 0; font-size: clamp(30px, 5vw, 52px); font-weight: 620; letter-spacing: -.045em; }
|
|
8
|
+
header span { display: block; margin-top: 16px; color: oklch(70% 0.01 220); font-size: 14px; line-height: 1.7; }
|
|
9
|
+
.template-list { border-top: 1px solid oklch(100% 0 0 / .12); }
|
|
10
|
+
.template { display: grid; grid-template-columns: 116px minmax(0, 1fr) auto; align-items: center; gap: 24px; padding: 24px 0; border-bottom: 1px solid oklch(100% 0 0 / .12); color: inherit; text-decoration: none; }
|
|
11
|
+
.swatch { width: 116px; height: 76px; border: 1px solid oklch(100% 0 0 / .15); border-radius: 10px; transition: transform 180ms cubic-bezier(.25,1,.5,1); }
|
|
12
|
+
.opal .swatch { background: radial-gradient(circle at 20% 20%, oklch(90% .06 197), transparent 48%), radial-gradient(circle at 80% 35%, oklch(92% .055 18), transparent 48%), radial-gradient(circle at 46% 95%, oklch(90% .05 302), transparent 54%), oklch(98% .004 94); }
|
|
13
|
+
.obsidian .swatch { background: radial-gradient(circle at 20% 20%, oklch(27% .07 188), transparent 50%), radial-gradient(circle at 80% 35%, oklch(23% .06 284), transparent 52%), radial-gradient(circle at 46% 95%, oklch(24% .05 78), transparent 56%), oklch(10% .012 236); }
|
|
14
|
+
.copy small { display: block; color: oklch(58% 0.012 220); font-size: 10px; letter-spacing: .08em; text-transform: uppercase; }
|
|
15
|
+
.copy strong { display: block; margin-top: 5px; font-size: 18px; font-weight: 620; }
|
|
16
|
+
.copy span { display: block; margin-top: 6px; color: oklch(68% 0.012 220); font-size: 12px; }
|
|
17
|
+
.arrow { color: oklch(65% 0.04 202); font-size: 18px; transition: transform 180ms cubic-bezier(.25,1,.5,1); }
|
|
18
|
+
.template:hover .swatch { transform: translateY(-2px); }
|
|
19
|
+
.template:hover .arrow { transform: translate(3px,-3px); }
|
|
20
|
+
.template:focus-visible { outline: 2px solid oklch(72% .10 193); outline-offset: 6px; }
|
|
21
|
+
footer { display: flex; flex-wrap: wrap; gap: 20px; padding-top: 22px; }
|
|
22
|
+
footer a { color: oklch(72% .05 201); font-size: 12px; text-underline-offset: 4px; }
|
|
23
|
+
footer a:hover { color: oklch(84% .05 201); }
|
|
24
|
+
footer a:focus-visible { outline: 2px solid oklch(72% .10 193); outline-offset: 4px; }
|
|
25
|
+
@media (max-width: 580px) { .template { grid-template-columns: 76px minmax(0,1fr) auto; gap: 14px; } .swatch { width: 76px; height: 64px; } .copy span { display: none; } }
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<meta name="description" content="参数化五彩斑斓黑完整 UI 模板">
|
|
7
|
+
<meta name="theme-color" content="#0b0e11">
|
|
8
|
+
<title>Fieldnote · 五彩斑斓黑</title>
|
|
9
|
+
<link rel="icon" href="../favicon.svg" type="image/svg+xml">
|
|
10
|
+
<link rel="stylesheet" href="../shared/base.css">
|
|
11
|
+
<link rel="stylesheet" href="./theme.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<canvas id="spectral-field" aria-hidden="true"></canvas>
|
|
15
|
+
<div class="app-shell">
|
|
16
|
+
<header class="topbar">
|
|
17
|
+
<div class="brand" aria-label="Fieldnote 首页">
|
|
18
|
+
<span class="brand-mark" aria-hidden="true"></span>
|
|
19
|
+
<span><strong>Fieldnote</strong><small>Research workspace</small></span>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="location">
|
|
22
|
+
<button id="menu-toggle" class="icon-button menu-toggle" type="button" aria-label="打开导航" aria-controls="sidebar" aria-expanded="false">
|
|
23
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M4 7h16M4 12h16M4 17h16"/></svg>
|
|
24
|
+
</button>
|
|
25
|
+
<span>北岸观察组</span><span class="location-separator">/</span><span id="page-location">今日概览</span>
|
|
26
|
+
</div>
|
|
27
|
+
<div class="top-actions">
|
|
28
|
+
<button id="motion-toggle" class="button" type="button" aria-pressed="false">
|
|
29
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M8 5v14M16 5v14"/></svg><span>暂停环境</span>
|
|
30
|
+
</button>
|
|
31
|
+
<button id="parameter-toggle" class="button button-primary" type="button" aria-controls="parameter-panel" aria-expanded="false">
|
|
32
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M4 7h10M18 7h2M4 17h2M10 17h10M14 4v6M6 14v6"/></svg><span>参数</span>
|
|
33
|
+
</button>
|
|
34
|
+
</div>
|
|
35
|
+
</header>
|
|
36
|
+
|
|
37
|
+
<aside id="sidebar" class="sidebar" data-open="false" aria-hidden="true" inert aria-label="主导航">
|
|
38
|
+
<div class="sidebar-primary">
|
|
39
|
+
<p class="nav-label">Workspace</p>
|
|
40
|
+
<nav>
|
|
41
|
+
<button class="nav-item" type="button" data-location="今日概览" aria-current="page">
|
|
42
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M4 13h6V4H4v9Zm10 7h6V11h-6v9ZM4 20h6v-3H4v3Zm10-13h6V4h-6v3Z"/></svg>今日概览
|
|
43
|
+
</button>
|
|
44
|
+
<button class="nav-item" type="button" data-location="观察记录">
|
|
45
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M5 4h14v16H5zM8 8h8M8 12h8M8 16h5"/></svg>观察记录
|
|
46
|
+
</button>
|
|
47
|
+
<button class="nav-item" type="button" data-location="样本集合">
|
|
48
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="m12 3 8 4-8 4-8-4 8-4Zm-8 9 8 4 8-4M4 17l8 4 8-4"/></svg>样本集合
|
|
49
|
+
</button>
|
|
50
|
+
<button class="nav-item" type="button" data-location="观测位置">
|
|
51
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M20 10c0 5-8 11-8 11S4 15 4 10a8 8 0 1 1 16 0Z"/><circle cx="12" cy="10" r="2.5"/></svg>观测位置
|
|
52
|
+
</button>
|
|
53
|
+
<button class="nav-item" type="button" data-location="归档">
|
|
54
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M4 7h16v13H4zM3 4h18v3H3zM9 11h6"/></svg>归档
|
|
55
|
+
</button>
|
|
56
|
+
</nav>
|
|
57
|
+
<p class="nav-label">Saved views</p>
|
|
58
|
+
<nav>
|
|
59
|
+
<button class="nav-item" type="button" data-location="待复核">
|
|
60
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="8"/><path d="M12 8v5l3 2"/></svg>待复核 <span class="pane-count">06</span>
|
|
61
|
+
</button>
|
|
62
|
+
<button class="nav-item" type="button" data-location="本周标记">
|
|
63
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="m12 3 2.6 5.3 5.9.9-4.3 4.2 1 5.9-5.2-2.8-5.2 2.8 1-5.9-4.3-4.2 5.9-.9L12 3Z"/></svg>本周标记
|
|
64
|
+
</button>
|
|
65
|
+
</nav>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="sidebar-footer">
|
|
68
|
+
<div class="account"><span class="account-orb" aria-hidden="true"></span><span><strong>林屿</strong><span>Field researcher</span></span></div>
|
|
69
|
+
</div>
|
|
70
|
+
</aside>
|
|
71
|
+
|
|
72
|
+
<main class="main">
|
|
73
|
+
<div class="main-inner">
|
|
74
|
+
<section class="page-head" aria-labelledby="page-title">
|
|
75
|
+
<div>
|
|
76
|
+
<p class="eyebrow"><span data-theme-name>五彩斑斓黑</span> · 现场资料工作台</p>
|
|
77
|
+
<h1 id="page-title">潮间带观测 · 第 18 批</h1>
|
|
78
|
+
<p class="page-summary">整理今日采样、复核异常记录,并在归档前保持时间、位置与样本关系完整。</p>
|
|
79
|
+
</div>
|
|
80
|
+
<div class="status-cluster" role="status">
|
|
81
|
+
<span class="status-dot" aria-hidden="true"></span>
|
|
82
|
+
<span class="status-copy"><strong>同步完成</strong><span>21:36 · 18 项变更</span></span>
|
|
83
|
+
</div>
|
|
84
|
+
</section>
|
|
85
|
+
|
|
86
|
+
<section class="observation-band" aria-label="观测摘要">
|
|
87
|
+
<div class="band-title"><span>观测带</span><strong>北岸 · N37.22</strong></div>
|
|
88
|
+
<div class="metric"><span>有效记录</span><strong>128</strong></div>
|
|
89
|
+
<div class="metric"><span>待复核</span><strong>06</strong></div>
|
|
90
|
+
<div class="metric"><span>样本覆盖</span><strong>84.6%</strong></div>
|
|
91
|
+
<div class="metric"><span>窗口余量</span><strong>01:42</strong></div>
|
|
92
|
+
</section>
|
|
93
|
+
|
|
94
|
+
<section class="workbench" aria-label="观测工作区">
|
|
95
|
+
<section class="pane records-pane" aria-labelledby="records-title">
|
|
96
|
+
<div class="pane-head"><h2 id="records-title">记录队列</h2><span class="pane-count">12 / 128</span></div>
|
|
97
|
+
<div class="records" role="listbox" aria-label="观察记录">
|
|
98
|
+
<button class="record-row" type="button" role="option" aria-selected="true" data-title="潮池边缘 · 样本 042" data-time="19:42">
|
|
99
|
+
<span class="record-marker" style="--marker:var(--marker-cyan)"></span><span class="record-copy"><strong>潮池边缘 · 样本 042</strong><span>盐度偏移 · 已标记</span></span><span class="record-time">19:42</span>
|
|
100
|
+
</button>
|
|
101
|
+
<button class="record-row" type="button" role="option" data-title="岩缝剖面 · 样本 039" data-time="19:18">
|
|
102
|
+
<span class="record-marker" style="--marker:var(--marker-lilac)"></span><span class="record-copy"><strong>岩缝剖面 · 样本 039</strong><span>图像完整 · 待复核</span></span><span class="record-time">19:18</span>
|
|
103
|
+
</button>
|
|
104
|
+
<button class="record-row" type="button" role="option" data-title="浅滩网格 · 样本 036" data-time="18:53">
|
|
105
|
+
<span class="record-marker" style="--marker:var(--marker-gold)"></span><span class="record-copy"><strong>浅滩网格 · 样本 036</strong><span>位置已校正</span></span><span class="record-time">18:53</span>
|
|
106
|
+
</button>
|
|
107
|
+
<button class="record-row" type="button" role="option" data-title="背风侧 · 样本 031" data-time="18:21">
|
|
108
|
+
<span class="record-marker" style="--marker:var(--marker-rose)"></span><span class="record-copy"><strong>背风侧 · 样本 031</strong><span>缺少环境照片</span></span><span class="record-time">18:21</span>
|
|
109
|
+
</button>
|
|
110
|
+
<button class="record-row" type="button" role="option" data-title="南端标尺 · 样本 027" data-time="17:46">
|
|
111
|
+
<span class="record-marker" style="--marker:var(--marker-cyan)"></span><span class="record-copy"><strong>南端标尺 · 样本 027</strong><span>数据完整</span></span><span class="record-time">17:46</span>
|
|
112
|
+
</button>
|
|
113
|
+
</div>
|
|
114
|
+
</section>
|
|
115
|
+
|
|
116
|
+
<article class="pane detail-pane" aria-labelledby="record-title">
|
|
117
|
+
<div class="pane-head">
|
|
118
|
+
<div class="tab-list" role="tablist" aria-label="记录视图">
|
|
119
|
+
<button class="tab" type="button" role="tab" aria-selected="true" aria-controls="detail-copy" data-copy="水线后退约 1.8 米,潮池外缘出现连续盐度跃迁。样本表面保持湿润,未观察到明显扰动。建议与 18:53 的浅滩网格记录并列复核。">记录</button>
|
|
120
|
+
<button class="tab" type="button" role="tab" aria-selected="false" aria-controls="detail-copy" data-copy="关联了 4 张现场照片、2 个水质读数与 1 条位置修正。附件校验通过,原始文件已进入只读归档队列。">附件</button>
|
|
121
|
+
<button class="tab" type="button" role="tab" aria-selected="false" aria-controls="detail-copy" data-copy="19:47 完成盐度标签修正;20:12 补充观察者备注;21:03 进入批次复核队列。所有变更均保留原始记录。">变更</button>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
<div class="detail-title">
|
|
125
|
+
<h2 id="record-title">潮池边缘 · 样本 042</h2>
|
|
126
|
+
<div class="detail-meta"><span>记录时间 <strong id="record-time">19:42</strong></span><span>观察者 LY-04</span><span>定位误差 ±1.2 m</span></div>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="detail-body">
|
|
129
|
+
<div class="field-notes">
|
|
130
|
+
<p id="detail-copy" role="tabpanel">水线后退约 1.8 米,潮池外缘出现连续盐度跃迁。样本表面保持湿润,未观察到明显扰动。建议与 18:53 的浅滩网格记录并列复核。</p>
|
|
131
|
+
<dl>
|
|
132
|
+
<div class="note-rule"><dt>表面温度</dt><dd>18.6 °C · 稳定</dd></div>
|
|
133
|
+
<div class="note-rule"><dt>盐度</dt><dd>31.8 PSU · 高于同批中位值 1.4</dd></div>
|
|
134
|
+
<div class="note-rule"><dt>基质</dt><dd>细砂与贝壳碎屑,局部附着藻膜</dd></div>
|
|
135
|
+
<div class="note-rule"><dt>复核建议</dt><dd>保留;与相邻网格交叉比对后归档</dd></div>
|
|
136
|
+
</dl>
|
|
137
|
+
</div>
|
|
138
|
+
<figure class="mini-map" aria-label="样本位置示意图">
|
|
139
|
+
<svg viewBox="0 0 180 220" fill="none" stroke="currentColor">
|
|
140
|
+
<path d="M-10 52c35-24 62-5 92-18 25-11 45-38 108-16M-10 92c42-24 71 2 103-13 34-16 58-32 97-19M-10 138c38-18 68 6 98-6 36-14 54-37 102-20M-10 181c35-16 68 4 101-7 30-10 61-27 99-16" opacity=".35"/>
|
|
141
|
+
<path d="M118 43c-9 19-25 36-23 59 2 27 30 37 24 65-4 17-19 27-28 43" stroke-width="2"/>
|
|
142
|
+
<circle cx="104" cy="119" r="5" fill="currentColor"/><circle cx="104" cy="119" r="12" opacity=".25"/>
|
|
143
|
+
</svg>
|
|
144
|
+
</figure>
|
|
145
|
+
</div>
|
|
146
|
+
</article>
|
|
147
|
+
|
|
148
|
+
<aside class="pane metadata-pane" aria-labelledby="metadata-title">
|
|
149
|
+
<div class="pane-head"><h2 id="metadata-title">记录属性</h2><span class="pane-count">verified</span></div>
|
|
150
|
+
<div class="metadata">
|
|
151
|
+
<section class="metadata-group"><h3>位置</h3><dl><div><dt>网格</dt><dd>N-18 / C4</dd></div><div><dt>纬度</dt><dd>37.2216</dd></div><div><dt>经度</dt><dd>121.0482</dd></div></dl></section>
|
|
152
|
+
<section class="metadata-group"><h3>采集</h3><dl><div><dt>批次</dt><dd>B-2026-0814</dd></div><div><dt>方法</dt><dd>surface</dd></div><div><dt>容器</dt><dd>V-042</dd></div></dl></section>
|
|
153
|
+
<section class="metadata-group"><h3>完整性</h3><dl><div><dt>字段</dt><dd>18 / 18</dd></div><div><dt>附件</dt><dd>04</dd></div><div><dt>校验</dt><dd>passed</dd></div></dl></section>
|
|
154
|
+
</div>
|
|
155
|
+
</aside>
|
|
156
|
+
</section>
|
|
157
|
+
</div>
|
|
158
|
+
</main>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<aside id="parameter-panel" class="parameter-panel" data-open="false" aria-hidden="true" inert aria-labelledby="parameter-title">
|
|
162
|
+
<div class="parameter-panel-head">
|
|
163
|
+
<div><p class="eyebrow">Parameter manifest</p><h2 id="parameter-title"><span data-theme-name>五彩斑斓黑</span>参数</h2><p><span id="preset-value"></span> · seed <span id="seed-value"></span> · <span id="renderer-value"></span></p></div>
|
|
164
|
+
<button id="parameter-close" class="icon-button" type="button" aria-label="关闭参数面板"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="m6 6 12 12M18 6 6 18"/></svg></button>
|
|
165
|
+
</div>
|
|
166
|
+
<div id="parameter-controls" class="parameter-scroll"></div>
|
|
167
|
+
<div class="parameter-footer">
|
|
168
|
+
<button id="export-parameters" class="button button-primary" type="button">导出参数 JSON</button>
|
|
169
|
+
<button id="copy-parameters" class="button" type="button">复制 JSON</button>
|
|
170
|
+
<button id="reset-parameters" class="button" type="button">恢复预设</button>
|
|
171
|
+
</div>
|
|
172
|
+
</aside>
|
|
173
|
+
<div id="live-status" class="sr-only" role="status" aria-live="polite"></div>
|
|
174
|
+
|
|
175
|
+
<script src="./theme-config.js"></script>
|
|
176
|
+
<script src="../shared/spectral-field.js"></script>
|
|
177
|
+
<script src="../shared/workbench.js"></script>
|
|
178
|
+
</body>
|
|
179
|
+
</html>
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
window.SPECTRAL_THEME = {
|
|
2
|
+
schemaVersion: "1.0",
|
|
3
|
+
mode: "obsidian",
|
|
4
|
+
label: "五彩斑斓黑",
|
|
5
|
+
preset: "obsidian-fieldnote-v1",
|
|
6
|
+
seed: 90821,
|
|
7
|
+
overallColorIntensity: 1.0,
|
|
8
|
+
base: {
|
|
9
|
+
oklch: { l: 0.098, c: 0.012, h: 236 }
|
|
10
|
+
},
|
|
11
|
+
colors: [
|
|
12
|
+
{
|
|
13
|
+
id: "teal",
|
|
14
|
+
label: "深潮青",
|
|
15
|
+
oklch: { l: 0.29, c: 0.055, h: 188 },
|
|
16
|
+
srgbFallback: "#183f3d",
|
|
17
|
+
intensity: 0.72,
|
|
18
|
+
peakOpacity: 0.29,
|
|
19
|
+
lightnessBias: 0.008,
|
|
20
|
+
fieldScale: 0.84,
|
|
21
|
+
phase: [0.11, 0.72],
|
|
22
|
+
measuredCoverage: null,
|
|
23
|
+
effectiveShare: null
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: "petrol",
|
|
27
|
+
label: "石油蓝绿",
|
|
28
|
+
oklch: { l: 0.25, c: 0.048, h: 211 },
|
|
29
|
+
srgbFallback: "#17333a",
|
|
30
|
+
intensity: 0.62,
|
|
31
|
+
peakOpacity: 0.27,
|
|
32
|
+
lightnessBias: 0.006,
|
|
33
|
+
fieldScale: 0.96,
|
|
34
|
+
phase: [0.74, 0.19],
|
|
35
|
+
measuredCoverage: null,
|
|
36
|
+
effectiveShare: null
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "navy",
|
|
40
|
+
label: "夜航海军蓝",
|
|
41
|
+
oklch: { l: 0.225, c: 0.047, h: 251 },
|
|
42
|
+
srgbFallback: "#202b42",
|
|
43
|
+
intensity: 0.54,
|
|
44
|
+
peakOpacity: 0.26,
|
|
45
|
+
lightnessBias: 0.004,
|
|
46
|
+
fieldScale: 1.08,
|
|
47
|
+
phase: [0.37, 0.88],
|
|
48
|
+
measuredCoverage: null,
|
|
49
|
+
effectiveShare: null
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "indigo",
|
|
53
|
+
label: "暗靛",
|
|
54
|
+
oklch: { l: 0.24, c: 0.052, h: 278 },
|
|
55
|
+
srgbFallback: "#2d2948",
|
|
56
|
+
intensity: 0.42,
|
|
57
|
+
peakOpacity: 0.24,
|
|
58
|
+
lightnessBias: 0.005,
|
|
59
|
+
fieldScale: 0.91,
|
|
60
|
+
phase: [0.93, 0.57],
|
|
61
|
+
measuredCoverage: null,
|
|
62
|
+
effectiveShare: null
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "violet",
|
|
66
|
+
label: "紫影",
|
|
67
|
+
oklch: { l: 0.255, c: 0.05, h: 318 },
|
|
68
|
+
srgbFallback: "#3a293d",
|
|
69
|
+
intensity: 0.30,
|
|
70
|
+
peakOpacity: 0.21,
|
|
71
|
+
lightnessBias: 0.004,
|
|
72
|
+
fieldScale: 1.14,
|
|
73
|
+
phase: [0.25, 0.31],
|
|
74
|
+
measuredCoverage: null,
|
|
75
|
+
effectiveShare: null
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "gold",
|
|
79
|
+
label: "氧化暗金",
|
|
80
|
+
oklch: { l: 0.30, c: 0.045, h: 82 },
|
|
81
|
+
srgbFallback: "#473c22",
|
|
82
|
+
intensity: 0.18,
|
|
83
|
+
peakOpacity: 0.17,
|
|
84
|
+
lightnessBias: 0.007,
|
|
85
|
+
fieldScale: 1.03,
|
|
86
|
+
phase: [0.61, 0.46],
|
|
87
|
+
measuredCoverage: null,
|
|
88
|
+
effectiveShare: null
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
field: {
|
|
92
|
+
scale: 0.96,
|
|
93
|
+
octaves: 4,
|
|
94
|
+
warpStrength: 0.41,
|
|
95
|
+
motionSpeed: 0.01,
|
|
96
|
+
staticTime: 2.18,
|
|
97
|
+
ditherStrength: 0.82,
|
|
98
|
+
luminanceCap: 0.165
|
|
99
|
+
},
|
|
100
|
+
output: {
|
|
101
|
+
colorSpace: "srgb",
|
|
102
|
+
p3Enhancement: "feature-detected",
|
|
103
|
+
reducedMotion: "frozen-calibrated-frame"
|
|
104
|
+
}
|
|
105
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
@supports not (color: oklch(0% 0 0)) {
|
|
2
|
+
:root {
|
|
3
|
+
--app-canvas: #111820;
|
|
4
|
+
--app-wash: rgba(17, 24, 32, 0.18);
|
|
5
|
+
--topbar-surface: rgba(19, 27, 35, 0.86);
|
|
6
|
+
--sidebar-surface: rgba(18, 26, 34, 0.82);
|
|
7
|
+
--band-surface: rgba(23, 32, 42, 0.82);
|
|
8
|
+
--workbench-surface: rgba(21, 29, 39, 0.82);
|
|
9
|
+
--pane-surface: rgba(22, 30, 40, 0.79);
|
|
10
|
+
--panel-surface: rgba(20, 28, 37, 0.95);
|
|
11
|
+
--button-surface: rgba(34, 44, 56, 0.66);
|
|
12
|
+
--ink-primary: #e4e9ec;
|
|
13
|
+
--ink-secondary: #abb8bf;
|
|
14
|
+
--ink-tertiary: #829099;
|
|
15
|
+
--ink-muted: #68757f;
|
|
16
|
+
--line-subtle: rgba(222, 231, 236, 0.075);
|
|
17
|
+
--line-default: rgba(222, 231, 236, 0.12);
|
|
18
|
+
--line-strong: rgba(222, 231, 236, 0.22);
|
|
19
|
+
--state-hover: rgba(201, 220, 227, 0.07);
|
|
20
|
+
--state-selected: rgba(102, 184, 181, 0.13);
|
|
21
|
+
--brand-mark: radial-gradient(circle at 35% 30%, #58b3ae, #29445d 43%, #402b4f);
|
|
22
|
+
--brand-mark-detail: rgba(186, 217, 218, 0.64);
|
|
23
|
+
--account-orb: linear-gradient(135deg, #315f61, #40314e);
|
|
24
|
+
--status-good: #4ba885;
|
|
25
|
+
--status-good-wash: rgba(75, 168, 133, 0.12);
|
|
26
|
+
--active-rule: #3c9a9e;
|
|
27
|
+
--focus-ring: #5ab2b5;
|
|
28
|
+
--selection: rgba(70, 166, 163, 0.34);
|
|
29
|
+
--control-accent: #4ca9a6;
|
|
30
|
+
--primary-surface: #a5cecb;
|
|
31
|
+
--primary-hover: #b3d8d4;
|
|
32
|
+
--primary-border: rgba(174, 218, 216, 0.46);
|
|
33
|
+
--primary-ink: #131c24;
|
|
34
|
+
--scroll-thumb: rgba(216, 231, 236, 0.19);
|
|
35
|
+
--observation-ribbon: linear-gradient(90deg, rgba(96, 166, 158, 0.78), rgba(75, 123, 153, 0.72), rgba(96, 82, 145, 0.64), rgba(145, 125, 70, 0.52));
|
|
36
|
+
--workbench-shadow: 0 0 0 1px rgba(255, 255, 255, 0.018);
|
|
37
|
+
--panel-shadow: -18px 0 50px rgba(0, 0, 0, 0.34);
|
|
38
|
+
--mini-map: rgba(24, 39, 49, 0.88);
|
|
39
|
+
--marker-cyan: #3eaaa8;
|
|
40
|
+
--marker-rose: #a66e78;
|
|
41
|
+
--marker-lilac: #8870a6;
|
|
42
|
+
--marker-gold: #a58a4e;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@supports (color: oklch(0% 0 0)) {
|
|
47
|
+
:root {
|
|
48
|
+
--app-canvas: oklch(9.8% 0.012 236);
|
|
49
|
+
--app-wash: oklch(8.5% 0.012 238 / 0.18);
|
|
50
|
+
--topbar-surface: oklch(11.5% 0.014 238 / 0.86);
|
|
51
|
+
--sidebar-surface: oklch(10.8% 0.014 238 / 0.82);
|
|
52
|
+
--band-surface: oklch(13.4% 0.018 226 / 0.82);
|
|
53
|
+
--workbench-surface: oklch(12.3% 0.013 238 / 0.82);
|
|
54
|
+
--pane-surface: oklch(12.8% 0.012 240 / 0.79);
|
|
55
|
+
--panel-surface: oklch(12.2% 0.017 236 / 0.95);
|
|
56
|
+
--button-surface: oklch(17% 0.014 238 / 0.66);
|
|
57
|
+
--ink-primary: oklch(92% 0.012 218);
|
|
58
|
+
--ink-secondary: oklch(73% 0.015 221);
|
|
59
|
+
--ink-tertiary: oklch(58% 0.014 224);
|
|
60
|
+
--ink-muted: oklch(46% 0.013 226);
|
|
61
|
+
--line-subtle: oklch(92% 0.016 218 / 0.075);
|
|
62
|
+
--line-default: oklch(92% 0.016 218 / 0.12);
|
|
63
|
+
--line-strong: oklch(92% 0.018 218 / 0.22);
|
|
64
|
+
--state-hover: oklch(84% 0.028 211 / 0.07);
|
|
65
|
+
--state-selected: oklch(64% 0.07 194 / 0.13);
|
|
66
|
+
--brand-mark: radial-gradient(circle at 35% 30%, oklch(62% 0.085 180), oklch(28% 0.065 220) 43%, oklch(25% 0.06 312));
|
|
67
|
+
--brand-mark-detail: oklch(84% 0.04 192 / 0.64);
|
|
68
|
+
--account-orb: linear-gradient(135deg, oklch(32% 0.065 186), oklch(25% 0.055 308));
|
|
69
|
+
--status-good: oklch(69% 0.12 163);
|
|
70
|
+
--status-good-wash: oklch(69% 0.12 163 / 0.12);
|
|
71
|
+
--active-rule: oklch(69% 0.09 191);
|
|
72
|
+
--focus-ring: oklch(74% 0.11 192);
|
|
73
|
+
--selection: oklch(56% 0.09 191 / 0.34);
|
|
74
|
+
--control-accent: oklch(68% 0.11 190);
|
|
75
|
+
--primary-surface: oklch(72% 0.07 190);
|
|
76
|
+
--primary-hover: oklch(77% 0.075 190);
|
|
77
|
+
--primary-border: oklch(82% 0.06 190 / 0.46);
|
|
78
|
+
--primary-ink: oklch(15% 0.02 225);
|
|
79
|
+
--scroll-thumb: oklch(80% 0.02 220 / 0.19);
|
|
80
|
+
--observation-ribbon: linear-gradient(90deg, oklch(48% 0.075 188 / 0.78), oklch(42% 0.065 224 / 0.72), oklch(40% 0.066 290 / 0.64), oklch(46% 0.065 78 / 0.52));
|
|
81
|
+
--workbench-shadow: 0 0 0 1px oklch(100% 0 0 / 0.018);
|
|
82
|
+
--panel-shadow: -18px 0 50px oklch(0% 0 0 / 0.34);
|
|
83
|
+
--mini-map: oklch(14% 0.022 220 / 0.88);
|
|
84
|
+
--marker-cyan: oklch(62% 0.10 188);
|
|
85
|
+
--marker-rose: oklch(55% 0.08 18);
|
|
86
|
+
--marker-lilac: oklch(55% 0.085 310);
|
|
87
|
+
--marker-gold: oklch(58% 0.08 82);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.field-fallback body {
|
|
92
|
+
background: var(
|
|
93
|
+
--field-fallback-background,
|
|
94
|
+
radial-gradient(ellipse at 12% 18%, rgba(35, 89, 86, 0.70), transparent 50%),
|
|
95
|
+
radial-gradient(ellipse at 78% 22%, rgba(54, 42, 92, 0.55), transparent 52%),
|
|
96
|
+
radial-gradient(ellipse at 44% 82%, rgba(78, 63, 36, 0.38), transparent 56%),
|
|
97
|
+
var(--app-canvas)
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@supports (color: oklch(0% 0 0)) {
|
|
102
|
+
@media (color-gamut: p3) {
|
|
103
|
+
:root {
|
|
104
|
+
--observation-ribbon: linear-gradient(90deg, oklch(48% 0.09 188 / 0.78), oklch(42% 0.078 224 / 0.72), oklch(40% 0.078 290 / 0.64), oklch(46% 0.073 78 / 0.52));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|