@microi.net/cli 4.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +66 -0
- package/dist/mcp-codex-stdio-adapter.js +189 -0
- package/dist/mcp-server.js +972 -0
- package/dist/mcp-trae-windows-launcher.cmd +21 -0
- package/dist/microi-cli-mcp.js +7 -0
- package/dist/microi-cli.js +1645 -0
- package/dist/microi-skills.meta.json +335 -0
- package/dist/microi.skills/.microi-skills-version.json +6 -0
- package/dist/microi.skills/README.md +276 -0
- package/dist/microi.skills/ai-engine/SKILL.md +140 -0
- package/dist/microi.skills/ai-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/app-store/SKILL.md +105 -0
- package/dist/microi.skills/app-store/agents/openai.yaml +4 -0
- package/dist/microi.skills/business-blueprint/SKILL.md +184 -0
- package/dist/microi.skills/datasource-engine/SKILL.md +89 -0
- package/dist/microi.skills/datasource-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/dos-orm/SKILL.md +76 -0
- package/dist/microi.skills/dos-orm/references/api-reference.md +229 -0
- package/dist/microi.skills/job-engine/SKILL.md +141 -0
- package/dist/microi.skills/job-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/message-notification/SKILL.md +113 -0
- package/dist/microi.skills/message-notification/agents/openai.yaml +6 -0
- package/dist/microi.skills/message-notification/references/contracts.md +99 -0
- package/dist/microi.skills/microi-ai-app-auth.js +651 -0
- package/dist/microi.skills/microi-ai-application/SKILL.md +80 -0
- package/dist/microi.skills/microi-ai-application/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-ai-application/references/frontend-baseline.md +164 -0
- package/dist/microi.skills/microi-client-frontend/SKILL.md +562 -0
- package/dist/microi.skills/microi-datasource-mapping/SKILL.md +108 -0
- package/dist/microi.skills/microi-db-schema/SKILL.md +170 -0
- package/dist/microi.skills/microi-db-schema/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-db-schema/references/core-tables.md +695 -0
- package/dist/microi.skills/microi-db-schema/references/form-component-options.md +256 -0
- package/dist/microi.skills/microi-db-schema/references/schema-overview.md +203 -0
- package/dist/microi.skills/microi-db-schema/references/schema.md +647 -0
- package/dist/microi.skills/microi-db-schema/references/table-catalog.md +1607 -0
- package/dist/microi.skills/microi-deployment/SKILL.md +117 -0
- package/dist/microi.skills/microi-deployment/references/deployment-matrix.md +94 -0
- package/dist/microi.skills/microi-docs-coverage/SKILL.md +91 -0
- package/dist/microi.skills/microi-docs-coverage/references/capability-map.md +65 -0
- package/dist/microi.skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +887 -0
- package/dist/microi.skills/microi-form-engine/SKILL.md +159 -0
- package/dist/microi.skills/microi-form-engine/references/component-catalog.md +116 -0
- package/dist/microi.skills/microi-form-engine/references/data-source-events.md +117 -0
- package/dist/microi.skills/microi-form-layout/SKILL.md +373 -0
- package/dist/microi.skills/microi-frontend-sdk/SKILL.md +304 -0
- package/dist/microi.skills/microi-left-right-layout/SKILL.md +132 -0
- package/dist/microi.skills/microi-microservice/SKILL.md +115 -0
- package/dist/microi.skills/microi-microservice/references/runtime-delivery.md +145 -0
- package/dist/microi.skills/microi-mobile-app-quality/SKILL.md +436 -0
- package/dist/microi.skills/microi-solution-quotation/SKILL.md +76 -0
- package/dist/microi.skills/microi-solution-quotation/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -0
- package/dist/microi.skills/microi-system-delivery/SKILL.md +446 -0
- package/dist/microi.skills/microi-ui/SKILL.md +321 -0
- package/dist/microi.skills/microi-uniapp-frontend/SKILL.md +483 -0
- package/dist/microi.skills/microi.v8.js +1758 -0
- package/dist/microi.skills/module-engine/SKILL.md +131 -0
- package/dist/microi.skills/module-engine/references/module-config.md +174 -0
- package/dist/microi.skills/page-engine/SKILL.md +397 -0
- package/dist/microi.skills/performance-testing/SKILL.md +207 -0
- package/dist/microi.skills/playwright-e2e/SKILL.md +769 -0
- package/dist/microi.skills/print-engine/SKILL.md +237 -0
- package/dist/microi.skills/production-readonly-audit/SKILL.md +39 -0
- package/dist/microi.skills/report-engine/SKILL.md +69 -0
- package/dist/microi.skills/report-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/search-engine/SKILL.md +73 -0
- package/dist/microi.skills/search-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/spider-engine/SKILL.md +188 -0
- package/dist/microi.skills/translate-engine/SKILL.md +91 -0
- package/dist/microi.skills/translate-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/ui-design/SKILL.md +1575 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/app.js +54 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/index.html +163 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/styles.css +311 -0
- package/dist/microi.skills/ui-design/assets/templates/MCI-DESIGN.md +98 -0
- package/dist/microi.skills/ui-design/references/design-pattern-library.md +171 -0
- package/dist/microi.skills/ui-design/references/mci-design-contract.md +84 -0
- package/dist/microi.skills/ui-design/references/motion-and-media.md +71 -0
- package/dist/microi.skills/ui-design/references/product-flow-recipes.md +94 -0
- package/dist/microi.skills/uniapp-mall-assets/SKILL.md +105 -0
- package/dist/microi.skills/v8-api-config/SKILL.md +272 -0
- package/dist/microi.skills/v8-cache-pattern/SKILL.md +286 -0
- package/dist/microi.skills/v8-crud-api/SKILL.md +398 -0
- package/dist/microi.skills/v8-debugging/SKILL.md +279 -0
- package/dist/microi.skills/v8-explorer-tree/SKILL.md +224 -0
- package/dist/microi.skills/v8-export-import/SKILL.md +590 -0
- package/dist/microi.skills/v8-file-upload/SKILL.md +497 -0
- package/dist/microi.skills/v8-formengine-http/SKILL.md +218 -0
- package/dist/microi.skills/v8-frontend-events/SKILL.md +349 -0
- package/dist/microi.skills/v8-frontend-events/references/bluetooth-print-api.md +107 -0
- package/dist/microi.skills/v8-frontend-events/references/bluetooth-print.md +185 -0
- package/dist/microi.skills/v8-http-integration/SKILL.md +379 -0
- package/dist/microi.skills/v8-image-processing/SKILL.md +187 -0
- package/dist/microi.skills/v8-image-processing/agents/openai.yaml +4 -0
- package/dist/microi.skills/v8-image-processing/references/api-reference.md +620 -0
- package/dist/microi.skills/v8-menu-buttons/SKILL.md +661 -0
- package/dist/microi.skills/v8-mongodb/SKILL.md +149 -0
- package/dist/microi.skills/v8-mq-mqtt/SKILL.md +227 -0
- package/dist/microi.skills/v8-saas-multi-tenant/SKILL.md +193 -0
- package/dist/microi.skills/v8-security/SKILL.md +417 -0
- package/dist/microi.skills/v8-sql-query/SKILL.md +290 -0
- package/dist/microi.skills/v8-table-event/SKILL.md +385 -0
- package/dist/microi.skills/v8-template-engine/SKILL.md +165 -0
- package/dist/microi.skills/v8-utilities/SKILL.md +79 -0
- package/dist/microi.skills/v8-utilities/references/client-api-index.md +136 -0
- package/dist/microi.skills/v8-utilities/references/platform-http-routes.md +80 -0
- package/dist/microi.skills/v8-utilities/references/server-api-index.md +129 -0
- package/dist/microi.skills/v8-workflow/SKILL.md +322 -0
- package/dist/microi.skills/workspace-conventions/SKILL.md +479 -0
- package/package.json +40 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
(function () {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var root = document.documentElement;
|
|
5
|
+
var themeToggle = document.getElementById('themeToggle');
|
|
6
|
+
var filterButtons = Array.prototype.slice.call(document.querySelectorAll('[data-filter]'));
|
|
7
|
+
var cards = Array.prototype.slice.call(document.querySelectorAll('[data-kind]'));
|
|
8
|
+
var form = document.getElementById('flowForm');
|
|
9
|
+
var nameInput = document.getElementById('workspaceName');
|
|
10
|
+
var status = document.getElementById('formStatus');
|
|
11
|
+
var submit = document.getElementById('flowSubmit');
|
|
12
|
+
|
|
13
|
+
themeToggle.addEventListener('click', function () {
|
|
14
|
+
var nextTheme = root.dataset.mciTheme === 'dark' ? 'light' : 'dark';
|
|
15
|
+
root.dataset.mciTheme = nextTheme;
|
|
16
|
+
themeToggle.setAttribute('aria-pressed', nextTheme === 'light' ? 'true' : 'false');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
filterButtons.forEach(function (button) {
|
|
20
|
+
button.addEventListener('click', function () {
|
|
21
|
+
var filter = button.dataset.filter;
|
|
22
|
+
filterButtons.forEach(function (item) { item.classList.toggle('is-active', item === button); });
|
|
23
|
+
cards.forEach(function (card) {
|
|
24
|
+
var visible = filter === 'all' || card.dataset.kind === filter;
|
|
25
|
+
card.classList.toggle('is-hidden', !visible);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
form.addEventListener('submit', function (event) {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
var value = nameInput.value.trim();
|
|
33
|
+
status.className = 'mci-flow-card__status';
|
|
34
|
+
if (value.length < 2 || value.length > 24) {
|
|
35
|
+
status.textContent = '请输入 2—24 个字符的空间名称。';
|
|
36
|
+
status.classList.add('is-error');
|
|
37
|
+
nameInput.focus();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
submit.disabled = true;
|
|
42
|
+
submit.classList.add('is-loading');
|
|
43
|
+
submit.querySelector('span').textContent = '正在创建';
|
|
44
|
+
status.textContent = '正在校验空间配置,请稍候…';
|
|
45
|
+
|
|
46
|
+
window.setTimeout(function () {
|
|
47
|
+
submit.disabled = false;
|
|
48
|
+
submit.classList.remove('is-loading');
|
|
49
|
+
submit.querySelector('span').textContent = '重新演示';
|
|
50
|
+
status.textContent = '“' + value + '”已准备好,可以继续邀请成员。';
|
|
51
|
+
status.classList.add('is-success');
|
|
52
|
+
}, 760);
|
|
53
|
+
});
|
|
54
|
+
}());
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN" data-mci-theme="dark" data-mci-shape="rounded">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
|
6
|
+
<meta name="color-scheme" content="dark light">
|
|
7
|
+
<title>Microi 设计模式实验室</title>
|
|
8
|
+
<link rel="stylesheet" href="./styles.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<main class="mci-lab" data-mci-ui-root>
|
|
12
|
+
<header class="mci-lab__nav">
|
|
13
|
+
<a class="mci-lab__brand" href="#top" aria-label="返回顶部">
|
|
14
|
+
<span class="mci-lab__brand-mark" aria-hidden="true">M</span>
|
|
15
|
+
<span>Microi Pattern Lab</span>
|
|
16
|
+
</a>
|
|
17
|
+
<nav class="mci-lab__nav-links" aria-label="页面导航">
|
|
18
|
+
<a href="#patterns">设计模式</a>
|
|
19
|
+
<a href="#flow">产品流程</a>
|
|
20
|
+
<a href="#contract">设计契约</a>
|
|
21
|
+
</nav>
|
|
22
|
+
<button class="mci-icon-button" id="themeToggle" type="button" aria-label="切换明暗主题" aria-pressed="false">
|
|
23
|
+
<span class="mci-icon-button__sun" aria-hidden="true">☀</span>
|
|
24
|
+
<span class="mci-icon-button__moon" aria-hidden="true">◐</span>
|
|
25
|
+
</button>
|
|
26
|
+
</header>
|
|
27
|
+
|
|
28
|
+
<section class="mci-hero" id="top">
|
|
29
|
+
<div class="mci-hero__ambient" aria-hidden="true">
|
|
30
|
+
<span></span><span></span><span></span>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="mci-hero__content">
|
|
33
|
+
<span class="mci-eyebrow">MICROI ORIGINAL DESIGN SYSTEM</span>
|
|
34
|
+
<h1>让业务界面先有<br><em>清晰的设计意图</em></h1>
|
|
35
|
+
<p>六类内置设计模式覆盖品牌、产品流程、趋势构图、沉浸互动、动态首屏与数据工作台。每一种模式都复用同一套 Microi token、状态和响应式规则。</p>
|
|
36
|
+
<div class="mci-hero__actions">
|
|
37
|
+
<a class="mci-button mci-button--primary" href="#patterns">浏览设计模式 <span aria-hidden="true">↘</span></a>
|
|
38
|
+
<a class="mci-button mci-button--quiet" href="#flow">查看真实流程</a>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="mci-hero__console" aria-label="设计系统实时状态">
|
|
42
|
+
<div class="mci-console__head"><span></span><span></span><span></span><b>MCI-DESIGN</b></div>
|
|
43
|
+
<div class="mci-console__orbit" aria-hidden="true"><i></i><i></i><i></i></div>
|
|
44
|
+
<div class="mci-console__metric"><small>组件状态覆盖率</small><strong>08</strong><span>default → error</span></div>
|
|
45
|
+
<div class="mci-console__footer"><span>responsive</span><span>accessible</span><span>reduced-motion</span></div>
|
|
46
|
+
</div>
|
|
47
|
+
</section>
|
|
48
|
+
|
|
49
|
+
<section class="mci-section" id="patterns">
|
|
50
|
+
<div class="mci-section__head">
|
|
51
|
+
<div><span class="mci-eyebrow">PATTERN LIBRARY</span><h2>六种模式,一套品牌语言</h2></div>
|
|
52
|
+
<div class="mci-filter" role="group" aria-label="设计模式筛选">
|
|
53
|
+
<button class="is-active" type="button" data-filter="all">全部</button>
|
|
54
|
+
<button type="button" data-filter="story">叙事</button>
|
|
55
|
+
<button type="button" data-filter="product">产品</button>
|
|
56
|
+
<button type="button" data-filter="motion">互动</button>
|
|
57
|
+
<button type="button" data-filter="data">数据</button>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div class="mci-pattern-grid">
|
|
62
|
+
<article class="mci-pattern mci-pattern--story" data-kind="story">
|
|
63
|
+
<div class="mci-pattern__visual">
|
|
64
|
+
<span class="mci-pattern__index">01</span>
|
|
65
|
+
<div class="mci-story-word">MAKE<br><em>MEANING</em></div>
|
|
66
|
+
<i class="mci-story-line"></i>
|
|
67
|
+
</div>
|
|
68
|
+
<div class="mci-pattern__copy"><span>品牌叙事</span><h3>用观点建立首屏记忆</h3><p>大标题、单一主张、章节节奏与克制的行动路径。</p></div>
|
|
69
|
+
</article>
|
|
70
|
+
|
|
71
|
+
<article class="mci-pattern mci-pattern--product" data-kind="product">
|
|
72
|
+
<div class="mci-pattern__visual">
|
|
73
|
+
<span class="mci-pattern__index">02</span>
|
|
74
|
+
<div class="mci-phone-card">
|
|
75
|
+
<div class="mci-phone-card__bar"><i></i><span>新建空间</span><b>2 / 3</b></div>
|
|
76
|
+
<div class="mci-phone-card__progress"><i></i></div>
|
|
77
|
+
<strong>选择工作方式</strong>
|
|
78
|
+
<div class="mci-phone-card__choice is-selected"><i>✓</i><span>团队协作<small>角色与权限可配置</small></span></div>
|
|
79
|
+
<div class="mci-phone-card__choice"><i></i><span>个人项目<small>从轻量空间开始</small></span></div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="mci-pattern__copy"><span>真实产品流程</span><h3>状态比装饰更重要</h3><p>从登录到成功页,覆盖加载、空、错误、禁用与权限状态。</p></div>
|
|
83
|
+
</article>
|
|
84
|
+
|
|
85
|
+
<article class="mci-pattern mci-pattern--editorial" data-kind="story">
|
|
86
|
+
<div class="mci-pattern__visual">
|
|
87
|
+
<span class="mci-pattern__index">03</span>
|
|
88
|
+
<div class="mci-editorial-type"><b>32</b><span>结构化构图<br>打破均匀排版</span></div>
|
|
89
|
+
<div class="mci-editorial-card"><i></i><i></i><i></i><strong>一主两辅</strong></div>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="mci-pattern__copy"><span>趋势构图</span><h3>不对称但保持秩序</h3><p>超大字号、编辑式留白、几何切片与明确阅读顺序。</p></div>
|
|
92
|
+
</article>
|
|
93
|
+
|
|
94
|
+
<article class="mci-pattern mci-pattern--immersive" data-kind="motion">
|
|
95
|
+
<div class="mci-pattern__visual">
|
|
96
|
+
<span class="mci-pattern__index">04</span>
|
|
97
|
+
<div class="mci-orb" aria-hidden="true"><i></i><i></i><i></i><b></b></div>
|
|
98
|
+
<div class="mci-orb-copy"><strong>FOCUS OBJECT</strong><span>界面 → 氛围 → 焦点对象</span></div>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="mci-pattern__copy"><span>沉浸互动</span><h3>互动服务于理解</h3><p>场景只强化产品对象,并准备静态、低配和无动效降级。</p></div>
|
|
101
|
+
</article>
|
|
102
|
+
|
|
103
|
+
<article class="mci-pattern mci-pattern--motion" data-kind="motion">
|
|
104
|
+
<div class="mci-pattern__visual">
|
|
105
|
+
<span class="mci-pattern__index">05</span>
|
|
106
|
+
<div class="mci-motion-copy"><small>0—1200 MS</small><strong>第一秒<br>说清楚</strong></div>
|
|
107
|
+
<div class="mci-motion-track"><i></i><i></i><i></i><i></i></div>
|
|
108
|
+
</div>
|
|
109
|
+
<div class="mci-pattern__copy"><span>动态首屏</span><h3>用时间线组织注意力</h3><p>标题、说明、主操作依次出现;循环动效不制造操作噪声。</p></div>
|
|
110
|
+
</article>
|
|
111
|
+
|
|
112
|
+
<article class="mci-pattern mci-pattern--data" data-kind="data">
|
|
113
|
+
<div class="mci-pattern__visual">
|
|
114
|
+
<span class="mci-pattern__index">06</span>
|
|
115
|
+
<div class="mci-data-head"><span>运营总览</span><b>实时</b></div>
|
|
116
|
+
<div class="mci-data-metrics"><span><small>服务中</small><b>128</b></span><span><small>完成率</small><b>96%</b></span><span><small>风险项</small><b>07</b></span></div>
|
|
117
|
+
<div class="mci-data-chart" aria-hidden="true"><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div>
|
|
118
|
+
</div>
|
|
119
|
+
<div class="mci-pattern__copy"><span>数据工作台</span><h3>先异常,再趋势,后明细</h3><p>紧凑密度、统一数值格式、筛选回显与可追溯数据状态。</p></div>
|
|
120
|
+
</article>
|
|
121
|
+
</div>
|
|
122
|
+
</section>
|
|
123
|
+
|
|
124
|
+
<section class="mci-flow" id="flow">
|
|
125
|
+
<div class="mci-flow__intro">
|
|
126
|
+
<span class="mci-eyebrow">REAL PRODUCT FLOW</span>
|
|
127
|
+
<h2>流程不是一张好看的静态图</h2>
|
|
128
|
+
<p>这个原创演示包含真实输入、校验、加载和成功反馈。界面在任何状态下都保持稳定尺寸,避免闪烁和跳动。</p>
|
|
129
|
+
<ul>
|
|
130
|
+
<li><span>01</span>默认状态可理解</li>
|
|
131
|
+
<li><span>02</span>错误状态可恢复</li>
|
|
132
|
+
<li><span>03</span>成功状态有下一步</li>
|
|
133
|
+
</ul>
|
|
134
|
+
</div>
|
|
135
|
+
<form class="mci-flow-card" id="flowForm" novalidate>
|
|
136
|
+
<div class="mci-flow-card__head"><span>创建协作空间</span><small>安全演示 · 不会提交数据</small></div>
|
|
137
|
+
<label class="mci-field"><span>空间名称</span><input id="workspaceName" name="workspace" autocomplete="organization" placeholder="例如:品牌增长中心"><small>2—24 个字符</small></label>
|
|
138
|
+
<fieldset class="mci-plan-group"><legend>协作规模</legend><label><input type="radio" name="plan" value="small" checked><span><b>轻量团队</b><small>1—10 人</small></span></label><label><input type="radio" name="plan" value="growth"><span><b>成长团队</b><small>11—50 人</small></span></label></fieldset>
|
|
139
|
+
<div class="mci-flow-card__status" id="formStatus" role="status" aria-live="polite">填写名称后即可创建演示空间。</div>
|
|
140
|
+
<button class="mci-button mci-button--primary mci-flow-card__submit" id="flowSubmit" type="submit"><span>创建演示空间</span><i aria-hidden="true">→</i></button>
|
|
141
|
+
</form>
|
|
142
|
+
</section>
|
|
143
|
+
|
|
144
|
+
<section class="mci-contract" id="contract">
|
|
145
|
+
<div class="mci-contract__copy"><span class="mci-eyebrow">MCI-DESIGN CONTRACT</span><h2>让下一位开发者与 AI 都能延续同一套界面</h2><p>设计模式、token、组件状态、页面顺序、响应式和降级策略都写进项目契约,不依赖口头描述。</p></div>
|
|
146
|
+
<div class="mci-contract__tokens" aria-label="设计 token 示例">
|
|
147
|
+
<span style="--token:#5b7cfa"><i></i><b>Primary</b><small>#5B7CFA</small></span>
|
|
148
|
+
<span style="--token:#26d7b0"><i></i><b>Success</b><small>#26D7B0</small></span>
|
|
149
|
+
<span style="--token:#ffca68"><i></i><b>Warning</b><small>#FFCA68</small></span>
|
|
150
|
+
<span style="--token:#ff6b88"><i></i><b>Danger</b><small>#FF6B88</small></span>
|
|
151
|
+
</div>
|
|
152
|
+
<pre class="mci-contract__code"><code><span>mode</span>: data-workspace
|
|
153
|
+
<span>density</span>: compact
|
|
154
|
+
<span>states</span>: [default, loading, empty, error, success]
|
|
155
|
+
<span>responsive</span>: [390, 768, 1440]
|
|
156
|
+
<span>motion</span>: reduced-motion-ready</code></pre>
|
|
157
|
+
</section>
|
|
158
|
+
|
|
159
|
+
<footer class="mci-lab__footer"><span>Microi.UI Original Pattern Asset</span><span>Local only · No external dependency</span></footer>
|
|
160
|
+
</main>
|
|
161
|
+
<script src="./app.js"></script>
|
|
162
|
+
</body>
|
|
163
|
+
</html>
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: dark;
|
|
3
|
+
--mci-bg: #07101f;
|
|
4
|
+
--mci-bg-soft: #0d1830;
|
|
5
|
+
--mci-surface: rgba(15, 28, 52, 0.78);
|
|
6
|
+
--mci-surface-solid: #111f39;
|
|
7
|
+
--mci-border: rgba(151, 173, 216, 0.16);
|
|
8
|
+
--mci-text: #f4f7ff;
|
|
9
|
+
--mci-text-muted: #9aa9c6;
|
|
10
|
+
--mci-primary: #6b87ff;
|
|
11
|
+
--mci-primary-strong: #4f6df0;
|
|
12
|
+
--mci-cyan: #38dcff;
|
|
13
|
+
--mci-success: #26d7b0;
|
|
14
|
+
--mci-warning: #ffca68;
|
|
15
|
+
--mci-danger: #ff6b88;
|
|
16
|
+
--mci-shape-card: 28px;
|
|
17
|
+
--mci-shape-panel: 22px;
|
|
18
|
+
--mci-shape-button: 999px;
|
|
19
|
+
--mci-shape-input: 14px;
|
|
20
|
+
--mci-shadow-card: 0 20px 70px rgba(0, 0, 0, 0.22);
|
|
21
|
+
--mci-shadow-float: 0 22px 60px rgba(32, 61, 141, 0.28);
|
|
22
|
+
font-family: Inter, "SF Pro Display", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
:root[data-mci-theme="light"] {
|
|
26
|
+
color-scheme: light;
|
|
27
|
+
--mci-bg: #f2f5fb;
|
|
28
|
+
--mci-bg-soft: #e9eef8;
|
|
29
|
+
--mci-surface: rgba(255, 255, 255, 0.86);
|
|
30
|
+
--mci-surface-solid: #ffffff;
|
|
31
|
+
--mci-border: rgba(31, 50, 91, 0.12);
|
|
32
|
+
--mci-text: #14203a;
|
|
33
|
+
--mci-text-muted: #66738d;
|
|
34
|
+
--mci-shadow-card: 0 20px 70px rgba(42, 62, 112, 0.12);
|
|
35
|
+
--mci-shadow-float: 0 22px 60px rgba(66, 91, 162, 0.18);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
* { box-sizing: border-box; }
|
|
39
|
+
html { scroll-behavior: smooth; }
|
|
40
|
+
body { margin: 0; min-width: 320px; background: var(--mci-bg); color: var(--mci-text); }
|
|
41
|
+
button, input { font: inherit; }
|
|
42
|
+
button, a { -webkit-tap-highlight-color: transparent; }
|
|
43
|
+
|
|
44
|
+
.mci-lab {
|
|
45
|
+
min-height: 100vh;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
background:
|
|
48
|
+
linear-gradient(rgba(107, 135, 255, 0.035) 1px, transparent 1px),
|
|
49
|
+
linear-gradient(90deg, rgba(107, 135, 255, 0.035) 1px, transparent 1px),
|
|
50
|
+
radial-gradient(circle at 12% 0%, rgba(66, 105, 255, 0.18), transparent 28%),
|
|
51
|
+
var(--mci-bg);
|
|
52
|
+
background-size: 44px 44px, 44px 44px, auto, auto;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.mci-lab a { color: inherit; text-decoration: none; }
|
|
56
|
+
.mci-lab__nav {
|
|
57
|
+
position: relative;
|
|
58
|
+
z-index: 20;
|
|
59
|
+
display: grid;
|
|
60
|
+
grid-template-columns: 1fr auto 1fr;
|
|
61
|
+
align-items: center;
|
|
62
|
+
width: min(1180px, calc(100% - 40px));
|
|
63
|
+
height: 84px;
|
|
64
|
+
margin: 0 auto;
|
|
65
|
+
border-bottom: 1px solid var(--mci-border);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.mci-lab__brand { display: inline-flex; align-items: center; gap: 10px; width: max-content; font-size: 14px; font-weight: 700; letter-spacing: .02em; }
|
|
69
|
+
.mci-lab__brand-mark { display: grid; width: 34px; height: 34px; place-items: center; border-radius: 11px; color: white; background: linear-gradient(145deg, var(--mci-primary), #935fff); box-shadow: 0 10px 24px rgba(92, 112, 255, .28); }
|
|
70
|
+
.mci-lab__nav-links { display: flex; gap: 30px; font-size: 13px; color: var(--mci-text-muted); }
|
|
71
|
+
.mci-lab__nav-links a { position: relative; padding: 10px 0; }
|
|
72
|
+
.mci-lab__nav-links a::after { position: absolute; right: 50%; bottom: 4px; left: 50%; height: 1px; content: ""; background: var(--mci-primary); transition: .25s ease; }
|
|
73
|
+
.mci-lab__nav-links a:hover::after, .mci-lab__nav-links a:focus-visible::after { right: 0; left: 0; }
|
|
74
|
+
|
|
75
|
+
.mci-icon-button { justify-self: end; display: grid; grid-template-columns: 1fr 1fr; align-items: center; width: 68px; height: 36px; padding: 4px; border: 1px solid var(--mci-border); border-radius: 999px; color: var(--mci-text-muted); background: var(--mci-surface); cursor: pointer; }
|
|
76
|
+
.mci-icon-button span { display: grid; height: 26px; place-items: center; border-radius: 50%; transition: .2s ease; }
|
|
77
|
+
:root[data-mci-theme="dark"] .mci-icon-button__moon,
|
|
78
|
+
:root[data-mci-theme="light"] .mci-icon-button__sun { color: #fff; background: var(--mci-primary); box-shadow: 0 4px 12px rgba(91, 124, 250, .28); }
|
|
79
|
+
|
|
80
|
+
.mci-hero {
|
|
81
|
+
position: relative;
|
|
82
|
+
z-index: 1;
|
|
83
|
+
display: grid;
|
|
84
|
+
grid-template-columns: minmax(0, 1.06fr) minmax(390px, .94fr);
|
|
85
|
+
gap: clamp(50px, 8vw, 112px);
|
|
86
|
+
align-items: center;
|
|
87
|
+
width: min(1180px, calc(100% - 40px));
|
|
88
|
+
min-height: 670px;
|
|
89
|
+
margin: 0 auto;
|
|
90
|
+
padding: 78px 0 96px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.mci-hero__ambient { position: absolute; z-index: -1; inset: 0; pointer-events: none; }
|
|
94
|
+
.mci-hero__ambient span { position: absolute; border: 1px solid rgba(107, 135, 255, .13); border-radius: 50%; animation: mci-drift 12s ease-in-out infinite alternate; }
|
|
95
|
+
.mci-hero__ambient span:nth-child(1) { top: 90px; right: -170px; width: 540px; height: 540px; }
|
|
96
|
+
.mci-hero__ambient span:nth-child(2) { top: 188px; right: -74px; width: 340px; height: 340px; animation-delay: -3s; }
|
|
97
|
+
.mci-hero__ambient span:nth-child(3) { top: 256px; right: -6px; width: 200px; height: 200px; animation-delay: -6s; }
|
|
98
|
+
|
|
99
|
+
.mci-eyebrow { display: inline-flex; align-items: center; gap: 9px; color: var(--mci-cyan); font-size: 11px; font-weight: 800; letter-spacing: .22em; }
|
|
100
|
+
.mci-eyebrow::before { width: 26px; height: 1px; content: ""; background: currentColor; }
|
|
101
|
+
.mci-hero h1 { margin: 26px 0 24px; font-size: clamp(56px, 6.6vw, 92px); line-height: .97; letter-spacing: -.065em; }
|
|
102
|
+
.mci-hero h1 em { color: transparent; font-style: normal; background: linear-gradient(100deg, #9aaeff 0%, #5ee7ff 48%, #a784ff 100%); -webkit-background-clip: text; background-clip: text; }
|
|
103
|
+
.mci-hero__content > p { max-width: 650px; margin: 0; color: var(--mci-text-muted); font-size: 16px; line-height: 1.9; }
|
|
104
|
+
.mci-hero__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 34px; }
|
|
105
|
+
|
|
106
|
+
.mci-button { display: inline-flex; min-height: 48px; align-items: center; justify-content: center; gap: 12px; padding: 0 24px; border: 1px solid transparent; border-radius: var(--mci-shape-button); font-size: 14px; font-weight: 700; line-height: 1; cursor: pointer; transition: transform .2s ease, box-shadow .2s ease, background .2s ease; }
|
|
107
|
+
.mci-button:hover, .mci-button:focus-visible { transform: translateY(-2px); }
|
|
108
|
+
.mci-button:active { transform: translateY(0) scale(.98); }
|
|
109
|
+
.mci-button--primary { color: #fff !important; background: linear-gradient(135deg, var(--mci-primary), var(--mci-primary-strong)); box-shadow: 0 13px 32px rgba(79, 109, 240, .32); }
|
|
110
|
+
.mci-button--quiet { border-color: var(--mci-border); background: var(--mci-surface); }
|
|
111
|
+
|
|
112
|
+
.mci-hero__console { position: relative; min-height: 420px; padding: 22px; overflow: hidden; border: 1px solid rgba(131, 156, 232, .23); border-radius: 34px; background: linear-gradient(160deg, rgba(25, 45, 81, .94), rgba(10, 20, 40, .86)); box-shadow: 0 35px 100px rgba(0, 0, 0, .35), inset 0 1px rgba(255, 255, 255, .09); }
|
|
113
|
+
:root[data-mci-theme="light"] .mci-hero__console { background: linear-gradient(160deg, #fdfdff, #e9effc); box-shadow: var(--mci-shadow-float); }
|
|
114
|
+
.mci-console__head { display: flex; align-items: center; gap: 7px; padding-bottom: 18px; border-bottom: 1px solid var(--mci-border); }
|
|
115
|
+
.mci-console__head span { width: 7px; height: 7px; border-radius: 50%; background: var(--mci-danger); }
|
|
116
|
+
.mci-console__head span:nth-child(2) { background: var(--mci-warning); }
|
|
117
|
+
.mci-console__head span:nth-child(3) { background: var(--mci-success); }
|
|
118
|
+
.mci-console__head b { margin-left: auto; color: var(--mci-text-muted); font-size: 10px; letter-spacing: .18em; }
|
|
119
|
+
.mci-console__orbit { position: absolute; top: 90px; left: 50%; width: 230px; height: 230px; transform: translateX(-50%); }
|
|
120
|
+
.mci-console__orbit::before, .mci-console__orbit i { position: absolute; inset: 0; content: ""; border: 1px solid rgba(96, 224, 255, .18); border-radius: 50%; }
|
|
121
|
+
.mci-console__orbit::before { inset: 38px; border: 0; background: radial-gradient(circle at 35% 30%, #93f4ff, #5573ff 34%, #5c35a2 62%, transparent 64%); filter: drop-shadow(0 0 30px rgba(83, 120, 255, .45)); animation: mci-orbit-pulse 4s ease-in-out infinite; }
|
|
122
|
+
.mci-console__orbit i:nth-child(1) { transform: rotateX(65deg); animation: mci-orbit 8s linear infinite; }
|
|
123
|
+
.mci-console__orbit i:nth-child(2) { transform: rotateY(65deg); animation: mci-orbit 11s linear reverse infinite; }
|
|
124
|
+
.mci-console__orbit i:nth-child(3) { inset: 24px; border-style: dashed; animation: mci-orbit 14s linear infinite; }
|
|
125
|
+
.mci-console__metric { position: absolute; right: 22px; bottom: 68px; left: 22px; display: grid; grid-template-columns: 1fr auto; align-items: end; padding: 20px; border: 1px solid var(--mci-border); border-radius: 18px; background: rgba(5, 13, 30, .62); backdrop-filter: blur(14px); }
|
|
126
|
+
:root[data-mci-theme="light"] .mci-console__metric { background: rgba(255, 255, 255, .74); }
|
|
127
|
+
.mci-console__metric small { align-self: start; color: var(--mci-text-muted); }
|
|
128
|
+
.mci-console__metric strong { grid-row: span 2; color: var(--mci-cyan); font-size: 52px; line-height: .9; }
|
|
129
|
+
.mci-console__metric span { color: var(--mci-text-muted); font-size: 11px; }
|
|
130
|
+
.mci-console__footer { position: absolute; right: 22px; bottom: 22px; left: 22px; display: flex; justify-content: space-between; color: var(--mci-text-muted); font-size: 9px; letter-spacing: .08em; }
|
|
131
|
+
|
|
132
|
+
.mci-section { width: min(1180px, calc(100% - 40px)); margin: 0 auto; padding: 110px 0 120px; border-top: 1px solid var(--mci-border); }
|
|
133
|
+
.mci-section__head { display: flex; align-items: end; justify-content: space-between; gap: 24px; margin-bottom: 34px; }
|
|
134
|
+
.mci-section h2, .mci-flow h2, .mci-contract h2 { margin: 14px 0 0; font-size: clamp(34px, 4vw, 52px); line-height: 1.1; letter-spacing: -.045em; }
|
|
135
|
+
.mci-filter { display: flex; gap: 4px; padding: 5px; border: 1px solid var(--mci-border); border-radius: 999px; background: var(--mci-surface); }
|
|
136
|
+
.mci-filter button { min-height: 34px; padding: 0 15px; border: 0; border-radius: 999px; color: var(--mci-text-muted); background: transparent; font-size: 12px; cursor: pointer; }
|
|
137
|
+
.mci-filter button.is-active { color: #fff; background: var(--mci-primary); box-shadow: 0 7px 18px rgba(91, 124, 250, .23); }
|
|
138
|
+
|
|
139
|
+
.mci-pattern-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
|
|
140
|
+
.mci-pattern { min-width: 0; padding: 12px; overflow: hidden; border: 1px solid var(--mci-border); border-radius: var(--mci-shape-card); background: var(--mci-surface); box-shadow: var(--mci-shadow-card); transition: opacity .25s ease, transform .25s ease, border-color .25s ease; }
|
|
141
|
+
.mci-pattern:hover { transform: translateY(-4px); border-color: rgba(107, 135, 255, .4); }
|
|
142
|
+
.mci-pattern.is-hidden { display: none; }
|
|
143
|
+
.mci-pattern__visual { position: relative; height: 318px; padding: 28px; overflow: hidden; border-radius: calc(var(--mci-shape-card) - 10px); background: #101b33; color: #fff; }
|
|
144
|
+
.mci-pattern__index { position: absolute; z-index: 3; top: 20px; right: 22px; color: rgba(255, 255, 255, .55); font-size: 11px; font-weight: 800; letter-spacing: .16em; }
|
|
145
|
+
.mci-pattern__copy { padding: 20px 12px 14px; }
|
|
146
|
+
.mci-pattern__copy > span { color: var(--mci-primary); font-size: 11px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; }
|
|
147
|
+
.mci-pattern__copy h3 { margin: 9px 0 8px; font-size: 22px; letter-spacing: -.025em; }
|
|
148
|
+
.mci-pattern__copy p { margin: 0; color: var(--mci-text-muted); font-size: 13px; line-height: 1.7; }
|
|
149
|
+
|
|
150
|
+
.mci-pattern--story .mci-pattern__visual { background: #f2f0e8; color: #151515; }
|
|
151
|
+
.mci-pattern--story .mci-pattern__visual::before { position: absolute; right: -40px; bottom: -100px; width: 260px; height: 260px; content: ""; border-radius: 50%; background: #ff4f3d; opacity: .9; }
|
|
152
|
+
.mci-story-word { position: absolute; top: 76px; left: 28px; z-index: 1; font-size: clamp(46px, 5vw, 70px); font-weight: 900; line-height: .82; letter-spacing: -.08em; }
|
|
153
|
+
.mci-story-word em { color: #3e52df; font-style: normal; }
|
|
154
|
+
.mci-story-line { position: absolute; right: 28px; bottom: 30px; left: 28px; height: 1px; background: rgba(0, 0, 0, .32); }
|
|
155
|
+
.mci-story-line::before { position: absolute; left: 0; bottom: 10px; content: "THE IDEA BECOMES THE INTERFACE"; font-size: 9px; font-style: normal; letter-spacing: .14em; }
|
|
156
|
+
|
|
157
|
+
.mci-pattern--product .mci-pattern__visual { display: grid; place-items: center; background: radial-gradient(circle at 0 0, #dce6ff, transparent 45%), #f5f7fb; color: #18233c; }
|
|
158
|
+
.mci-phone-card { width: min(330px, 90%); padding: 20px; border: 1px solid #e2e7f1; border-radius: 22px; background: #fff; box-shadow: 0 22px 55px rgba(38, 54, 94, .18); }
|
|
159
|
+
.mci-phone-card__bar { display: flex; align-items: center; gap: 9px; font-size: 11px; }
|
|
160
|
+
.mci-phone-card__bar i { width: 24px; height: 24px; border-radius: 8px; background: #5b7cfa; }
|
|
161
|
+
.mci-phone-card__bar b { margin-left: auto; color: #7c889f; font-size: 9px; }
|
|
162
|
+
.mci-phone-card__progress { height: 3px; margin: 14px 0 20px; overflow: hidden; border-radius: 4px; background: #edf0f6; }
|
|
163
|
+
.mci-phone-card__progress i { display: block; width: 66%; height: 100%; background: #5b7cfa; }
|
|
164
|
+
.mci-phone-card > strong { display: block; margin-bottom: 12px; font-size: 14px; }
|
|
165
|
+
.mci-phone-card__choice { display: grid; grid-template-columns: 24px 1fr; gap: 10px; margin-top: 8px; padding: 11px; border: 1px solid #e5e9f1; border-radius: 12px; }
|
|
166
|
+
.mci-phone-card__choice > i { display: grid; width: 20px; height: 20px; place-items: center; border: 1px solid #d0d7e5; border-radius: 50%; font-size: 10px; font-style: normal; }
|
|
167
|
+
.mci-phone-card__choice span { font-size: 11px; font-weight: 700; }
|
|
168
|
+
.mci-phone-card__choice small { display: block; margin-top: 3px; color: #8a96ab; font-size: 8px; font-weight: 400; }
|
|
169
|
+
.mci-phone-card__choice.is-selected { border-color: #5b7cfa; background: #f2f5ff; }
|
|
170
|
+
.mci-phone-card__choice.is-selected > i { color: white; border-color: #5b7cfa; background: #5b7cfa; }
|
|
171
|
+
|
|
172
|
+
.mci-pattern--editorial .mci-pattern__visual { background: #ffcd55; color: #191919; }
|
|
173
|
+
.mci-editorial-type { position: absolute; top: 38px; left: 32px; display: flex; align-items: start; gap: 14px; }
|
|
174
|
+
.mci-editorial-type b { font-size: 114px; line-height: .85; letter-spacing: -.1em; }
|
|
175
|
+
.mci-editorial-type span { max-width: 95px; padding-top: 10px; font-size: 13px; font-weight: 700; line-height: 1.4; }
|
|
176
|
+
.mci-editorial-card { position: absolute; right: -20px; bottom: -44px; width: 285px; height: 190px; padding: 22px; transform: rotate(-7deg); background: #3527a5; box-shadow: 0 20px 50px rgba(47, 38, 132, .3); }
|
|
177
|
+
.mci-editorial-card i { display: inline-block; width: 42px; height: 42px; margin-right: -6px; border: 2px solid #fff; border-radius: 50%; }
|
|
178
|
+
.mci-editorial-card i:nth-child(2) { background: #ff6257; }
|
|
179
|
+
.mci-editorial-card i:nth-child(3) { background: #5ce3cc; }
|
|
180
|
+
.mci-editorial-card strong { display: block; margin-top: 18px; color: #fff; font-size: 25px; }
|
|
181
|
+
|
|
182
|
+
.mci-pattern--immersive .mci-pattern__visual { background: radial-gradient(circle at 52% 48%, #1c3350, #050914 70%); }
|
|
183
|
+
.mci-pattern--immersive .mci-pattern__visual::before { position: absolute; inset: 0; content: ""; background-image: linear-gradient(rgba(73, 220, 255, .05) 1px, transparent 1px), linear-gradient(90deg, rgba(73, 220, 255, .05) 1px, transparent 1px); background-size: 22px 22px; mask-image: linear-gradient(to bottom, black, transparent); }
|
|
184
|
+
.mci-orb { position: absolute; top: 50%; left: 50%; width: 180px; height: 180px; transform: translate(-50%, -58%); }
|
|
185
|
+
.mci-orb::before { position: absolute; inset: 34px; content: ""; border-radius: 38% 62% 44% 56%; background: radial-gradient(circle at 34% 28%, #eaffff, #61eaff 16%, #5d63fa 54%, #17165e 72%); filter: drop-shadow(0 0 34px rgba(80, 201, 255, .5)); animation: mci-blob 7s ease-in-out infinite; }
|
|
186
|
+
.mci-orb i { position: absolute; inset: 0; border: 1px solid rgba(107, 222, 255, .35); border-radius: 50%; }
|
|
187
|
+
.mci-orb i:nth-child(1) { transform: rotateX(72deg); }
|
|
188
|
+
.mci-orb i:nth-child(2) { transform: rotateY(72deg); }
|
|
189
|
+
.mci-orb i:nth-child(3) { inset: 20px; border-style: dashed; animation: mci-orbit 12s linear infinite; }
|
|
190
|
+
.mci-orb b { position: absolute; top: 22px; right: 18px; width: 9px; height: 9px; border-radius: 50%; background: #62efff; box-shadow: 0 0 16px #62efff; animation: mci-point 4s ease-in-out infinite; }
|
|
191
|
+
.mci-orb-copy { position: absolute; right: 24px; bottom: 22px; left: 24px; display: flex; justify-content: space-between; color: rgba(255, 255, 255, .62); font-size: 9px; letter-spacing: .08em; }
|
|
192
|
+
|
|
193
|
+
.mci-pattern--motion .mci-pattern__visual { background: #f8f7fc; color: #121526; }
|
|
194
|
+
.mci-pattern--motion .mci-pattern__visual::after { position: absolute; top: -120px; right: -80px; width: 300px; height: 300px; content: ""; border-radius: 50%; background: conic-gradient(from 35deg, #7259ff, #44dcff, #ff76ac, #7259ff); filter: blur(20px); opacity: .72; animation: mci-spin 10s linear infinite; }
|
|
195
|
+
.mci-motion-copy { position: absolute; z-index: 1; top: 44px; left: 32px; }
|
|
196
|
+
.mci-motion-copy small { display: block; margin-bottom: 22px; color: #5a6680; font-size: 9px; font-weight: 800; letter-spacing: .16em; }
|
|
197
|
+
.mci-motion-copy strong { font-size: 52px; line-height: .95; letter-spacing: -.06em; }
|
|
198
|
+
.mci-motion-track { position: absolute; z-index: 1; right: 32px; bottom: 28px; left: 32px; display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; }
|
|
199
|
+
.mci-motion-track i { height: 4px; border-radius: 6px; background: #dfe3ed; }
|
|
200
|
+
.mci-motion-track i:nth-child(1), .mci-motion-track i:nth-child(2) { background: #5b7cfa; }
|
|
201
|
+
|
|
202
|
+
.mci-pattern--data .mci-pattern__visual { background: #0c1729; }
|
|
203
|
+
.mci-data-head { display: flex; align-items: center; justify-content: space-between; padding-bottom: 17px; border-bottom: 1px solid rgba(255, 255, 255, .08); }
|
|
204
|
+
.mci-data-head span { font-size: 13px; font-weight: 700; }
|
|
205
|
+
.mci-data-head b { padding: 5px 8px; border: 1px solid rgba(38, 215, 176, .3); border-radius: 999px; color: #6ff0d2; font-size: 8px; }
|
|
206
|
+
.mci-data-metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 18px 0; }
|
|
207
|
+
.mci-data-metrics > span { padding: 11px; border: 1px solid rgba(255, 255, 255, .08); border-radius: 11px; background: rgba(255, 255, 255, .03); }
|
|
208
|
+
.mci-data-metrics small { display: block; margin-bottom: 8px; color: rgba(255, 255, 255, .5); font-size: 8px; }
|
|
209
|
+
.mci-data-metrics b { font-size: 22px; }
|
|
210
|
+
.mci-data-chart { display: flex; height: 112px; align-items: end; gap: 8px; padding: 14px 10px 0; border-top: 1px solid rgba(255, 255, 255, .06); background: linear-gradient(to top, rgba(91, 124, 250, .08), transparent); }
|
|
211
|
+
.mci-data-chart i { flex: 1; height: var(--h, 50%); border-radius: 5px 5px 1px 1px; background: linear-gradient(to top, #536bf0, #46dffc); transform-origin: bottom; animation: mci-bars 2.6s ease-in-out infinite alternate; }
|
|
212
|
+
.mci-data-chart i:nth-child(1) { --h: 42%; }
|
|
213
|
+
.mci-data-chart i:nth-child(2) { --h: 66%; animation-delay: -.3s; }
|
|
214
|
+
.mci-data-chart i:nth-child(3) { --h: 51%; animation-delay: -.6s; }
|
|
215
|
+
.mci-data-chart i:nth-child(4) { --h: 88%; animation-delay: -.9s; }
|
|
216
|
+
.mci-data-chart i:nth-child(5) { --h: 72%; animation-delay: -1.2s; }
|
|
217
|
+
.mci-data-chart i:nth-child(6) { --h: 96%; animation-delay: -1.5s; }
|
|
218
|
+
.mci-data-chart i:nth-child(7) { --h: 78%; animation-delay: -1.8s; }
|
|
219
|
+
|
|
220
|
+
.mci-flow { display: grid; grid-template-columns: .9fr 1.1fr; gap: clamp(40px, 8vw, 110px); align-items: center; width: min(1180px, calc(100% - 40px)); margin: 0 auto; padding: 110px 0; border-top: 1px solid var(--mci-border); }
|
|
221
|
+
.mci-flow__intro > p { max-width: 520px; margin: 22px 0; color: var(--mci-text-muted); line-height: 1.8; }
|
|
222
|
+
.mci-flow__intro ul { display: grid; gap: 8px; margin: 32px 0 0; padding: 0; list-style: none; }
|
|
223
|
+
.mci-flow__intro li { display: flex; align-items: center; gap: 13px; padding: 12px 0; border-bottom: 1px solid var(--mci-border); font-size: 13px; }
|
|
224
|
+
.mci-flow__intro li span { color: var(--mci-primary); font-size: 10px; font-weight: 800; letter-spacing: .12em; }
|
|
225
|
+
.mci-flow-card { min-height: 480px; padding: clamp(24px, 4vw, 42px); border: 1px solid var(--mci-border); border-radius: var(--mci-shape-card); background: var(--mci-surface); box-shadow: var(--mci-shadow-card); }
|
|
226
|
+
.mci-flow-card__head { display: flex; align-items: center; justify-content: space-between; padding-bottom: 23px; border-bottom: 1px solid var(--mci-border); }
|
|
227
|
+
.mci-flow-card__head span { font-size: 20px; font-weight: 750; }
|
|
228
|
+
.mci-flow-card__head small { color: var(--mci-text-muted); font-size: 10px; }
|
|
229
|
+
.mci-field { display: grid; gap: 9px; margin-top: 26px; }
|
|
230
|
+
.mci-field > span, .mci-plan-group legend { font-size: 12px; font-weight: 700; }
|
|
231
|
+
.mci-field input { width: 100%; height: 50px; padding: 0 16px; border: 1px solid var(--mci-border); border-radius: var(--mci-shape-input); outline: 0; color: var(--mci-text); background: var(--mci-bg-soft); transition: border .2s, box-shadow .2s; }
|
|
232
|
+
.mci-field input:focus { border-color: var(--mci-primary); box-shadow: 0 0 0 3px rgba(91, 124, 250, .15); }
|
|
233
|
+
.mci-field small { color: var(--mci-text-muted); font-size: 10px; }
|
|
234
|
+
.mci-plan-group { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 22px 0 0; padding: 0; border: 0; }
|
|
235
|
+
.mci-plan-group legend { grid-column: 1 / -1; margin-bottom: 8px; }
|
|
236
|
+
.mci-plan-group label { position: relative; cursor: pointer; }
|
|
237
|
+
.mci-plan-group input { position: absolute; opacity: 0; pointer-events: none; }
|
|
238
|
+
.mci-plan-group label > span { display: block; padding: 14px; border: 1px solid var(--mci-border); border-radius: var(--mci-shape-input); background: var(--mci-bg-soft); transition: .2s ease; }
|
|
239
|
+
.mci-plan-group input:checked + span { border-color: var(--mci-primary); box-shadow: inset 0 0 0 1px var(--mci-primary); }
|
|
240
|
+
.mci-plan-group b, .mci-plan-group small { display: block; font-size: 11px; }
|
|
241
|
+
.mci-plan-group small { margin-top: 5px; color: var(--mci-text-muted); font-size: 9px; }
|
|
242
|
+
.mci-flow-card__status { min-height: 42px; margin: 20px 0 12px; padding: 12px 14px; border-radius: 11px; color: var(--mci-text-muted); background: rgba(107, 135, 255, .08); font-size: 11px; line-height: 1.6; }
|
|
243
|
+
.mci-flow-card__status.is-error { color: var(--mci-danger); background: rgba(255, 107, 136, .09); }
|
|
244
|
+
.mci-flow-card__status.is-success { color: var(--mci-success); background: rgba(38, 215, 176, .09); }
|
|
245
|
+
.mci-flow-card__submit { width: 100%; border: 0; }
|
|
246
|
+
.mci-flow-card__submit.is-loading i { display: block; width: 14px; height: 14px; border: 2px solid rgba(255, 255, 255, .45); border-top-color: white; border-radius: 50%; font-size: 0; animation: mci-spin .7s linear infinite; }
|
|
247
|
+
|
|
248
|
+
.mci-contract { display: grid; grid-template-columns: 1.1fr .7fr .95fr; gap: 28px; align-items: stretch; width: min(1180px, calc(100% - 40px)); margin: 0 auto 100px; padding: clamp(28px, 5vw, 54px); border: 1px solid rgba(107, 135, 255, .28); border-radius: 34px; background: linear-gradient(145deg, rgba(91, 124, 250, .15), var(--mci-surface)); box-shadow: var(--mci-shadow-card); }
|
|
249
|
+
.mci-contract h2 { font-size: clamp(29px, 3vw, 42px); }
|
|
250
|
+
.mci-contract__copy p { margin: 18px 0 0; color: var(--mci-text-muted); font-size: 13px; line-height: 1.8; }
|
|
251
|
+
.mci-contract__tokens { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
|
|
252
|
+
.mci-contract__tokens > span { padding: 13px; border: 1px solid var(--mci-border); border-radius: 14px; background: var(--mci-bg-soft); }
|
|
253
|
+
.mci-contract__tokens i { display: block; width: 100%; height: 42px; margin-bottom: 10px; border-radius: 9px; background: var(--token); }
|
|
254
|
+
.mci-contract__tokens b, .mci-contract__tokens small { display: block; font-size: 9px; }
|
|
255
|
+
.mci-contract__tokens small { margin-top: 3px; color: var(--mci-text-muted); }
|
|
256
|
+
.mci-contract__code { display: flex; align-items: center; margin: 0; padding: 22px; overflow: auto; border: 1px solid var(--mci-border); border-radius: 18px; color: #c7d3eb; background: #07101e; font: 11px/1.9 "Cascadia Code", Consolas, monospace; }
|
|
257
|
+
.mci-contract__code span { color: #72e7ff; }
|
|
258
|
+
.mci-lab__footer { display: flex; justify-content: space-between; width: min(1180px, calc(100% - 40px)); margin: 0 auto; padding: 30px 0 42px; border-top: 1px solid var(--mci-border); color: var(--mci-text-muted); font-size: 10px; letter-spacing: .08em; }
|
|
259
|
+
|
|
260
|
+
@keyframes mci-drift { to { transform: translate3d(-18px, 14px, 0) scale(1.03); } }
|
|
261
|
+
@keyframes mci-orbit { to { transform: rotate(360deg); } }
|
|
262
|
+
@keyframes mci-orbit-pulse { 50% { transform: scale(.94) rotate(8deg); filter: drop-shadow(0 0 46px rgba(83, 120, 255, .62)); } }
|
|
263
|
+
@keyframes mci-blob { 50% { transform: rotate(14deg) scale(.92); border-radius: 58% 42% 64% 36%; } }
|
|
264
|
+
@keyframes mci-point { 50% { transform: translate(-130px, 128px); } }
|
|
265
|
+
@keyframes mci-spin { to { transform: rotate(360deg); } }
|
|
266
|
+
@keyframes mci-bars { to { transform: scaleY(.65); opacity: .72; } }
|
|
267
|
+
|
|
268
|
+
@media (max-width: 900px) {
|
|
269
|
+
.mci-lab__nav { grid-template-columns: 1fr auto; }
|
|
270
|
+
.mci-lab__nav-links { display: none; }
|
|
271
|
+
.mci-hero { grid-template-columns: 1fr; gap: 50px; padding-top: 64px; }
|
|
272
|
+
.mci-hero__console { width: min(560px, 100%); }
|
|
273
|
+
.mci-flow { grid-template-columns: 1fr; }
|
|
274
|
+
.mci-contract { grid-template-columns: 1fr 1fr; }
|
|
275
|
+
.mci-contract__copy { grid-column: 1 / -1; }
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
@media (max-width: 680px) {
|
|
279
|
+
.mci-lab__nav, .mci-hero, .mci-section, .mci-flow, .mci-contract, .mci-lab__footer { width: min(100% - 28px, 1180px); }
|
|
280
|
+
.mci-lab__nav { height: 68px; }
|
|
281
|
+
.mci-lab__brand { font-size: 12px; }
|
|
282
|
+
.mci-lab__brand-mark { width: 30px; height: 30px; border-radius: 9px; }
|
|
283
|
+
.mci-icon-button { width: 62px; height: 34px; }
|
|
284
|
+
.mci-hero { min-height: auto; padding: 64px 0 70px; }
|
|
285
|
+
.mci-hero h1 { margin-top: 20px; font-size: clamp(48px, 14vw, 64px); }
|
|
286
|
+
.mci-hero__content > p { font-size: 14px; line-height: 1.75; }
|
|
287
|
+
.mci-hero__actions, .mci-hero__actions .mci-button { width: 100%; }
|
|
288
|
+
.mci-hero__console { min-height: 360px; border-radius: 26px; }
|
|
289
|
+
.mci-console__orbit { top: 78px; transform: translateX(-50%) scale(.82); }
|
|
290
|
+
.mci-section { padding: 80px 0; }
|
|
291
|
+
.mci-section__head { display: grid; align-items: start; }
|
|
292
|
+
.mci-filter { width: 100%; overflow-x: auto; border-radius: 14px; }
|
|
293
|
+
.mci-filter button { flex: 0 0 auto; }
|
|
294
|
+
.mci-pattern-grid { grid-template-columns: 1fr; }
|
|
295
|
+
.mci-pattern__visual { height: 286px; padding: 22px; }
|
|
296
|
+
.mci-story-word { left: 22px; font-size: 55px; }
|
|
297
|
+
.mci-editorial-type b { font-size: 92px; }
|
|
298
|
+
.mci-flow { padding: 80px 0; }
|
|
299
|
+
.mci-flow-card { min-height: 0; padding: 22px; }
|
|
300
|
+
.mci-flow-card__head { display: grid; gap: 7px; }
|
|
301
|
+
.mci-plan-group { grid-template-columns: 1fr; }
|
|
302
|
+
.mci-contract { grid-template-columns: 1fr; margin-bottom: 60px; padding: 24px; border-radius: 26px; }
|
|
303
|
+
.mci-contract__copy { grid-column: auto; }
|
|
304
|
+
.mci-contract__code { min-height: 210px; }
|
|
305
|
+
.mci-lab__footer { display: grid; gap: 8px; }
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
@media (prefers-reduced-motion: reduce) {
|
|
309
|
+
html { scroll-behavior: auto; }
|
|
310
|
+
.mci-lab *, .mci-lab *::before, .mci-lab *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
|
|
311
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# MCI-DESIGN
|
|
2
|
+
|
|
3
|
+
## 1. 产品目标
|
|
4
|
+
|
|
5
|
+
- 页面服务的用户:
|
|
6
|
+
- 用户进入页面后的首要任务:
|
|
7
|
+
- 首屏必须回答的问题:
|
|
8
|
+
- 成功衡量方式:
|
|
9
|
+
|
|
10
|
+
## 2. 设计模式
|
|
11
|
+
|
|
12
|
+
- 主模式:品牌叙事 / 真实产品流程 / 趋势构图 / 沉浸互动 / 动态首屏 / 数据工作台
|
|
13
|
+
- 辅助能力(最多两项):
|
|
14
|
+
- 明确不采用的视觉手法:
|
|
15
|
+
|
|
16
|
+
## 3. 信息架构
|
|
17
|
+
|
|
18
|
+
1. 首屏:
|
|
19
|
+
2. 核心任务:
|
|
20
|
+
3. 证据或数据:
|
|
21
|
+
4. 辅助内容:
|
|
22
|
+
5. 最终行动:
|
|
23
|
+
|
|
24
|
+
## 4. Design Tokens
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
color:
|
|
28
|
+
background: var(--mci-bg)
|
|
29
|
+
surface: var(--mci-surface)
|
|
30
|
+
text: var(--mci-text)
|
|
31
|
+
muted: var(--mci-text-muted)
|
|
32
|
+
primary: var(--mci-primary)
|
|
33
|
+
success: var(--mci-success)
|
|
34
|
+
warning: var(--mci-warning)
|
|
35
|
+
danger: var(--mci-danger)
|
|
36
|
+
spacing: [4, 8, 12, 16, 24, 32, 48, 64]
|
|
37
|
+
radius:
|
|
38
|
+
input: var(--mci-shape-input)
|
|
39
|
+
panel: var(--mci-shape-panel)
|
|
40
|
+
card: var(--mci-shape-card)
|
|
41
|
+
button: var(--mci-shape-button)
|
|
42
|
+
shadow:
|
|
43
|
+
card: var(--mci-shadow-card)
|
|
44
|
+
float: var(--mci-shadow-float)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 5. 字体层级
|
|
48
|
+
|
|
49
|
+
| 用途 | 桌面 | 移动 | 字重 | 行高 |
|
|
50
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
51
|
+
| Display | 64 | 40 | 700 | 1.05 |
|
|
52
|
+
| H1 | 40 | 32 | 700 | 1.15 |
|
|
53
|
+
| H2 | 28 | 24 | 650 | 1.25 |
|
|
54
|
+
| Body | 16 | 15 | 400 | 1.7 |
|
|
55
|
+
| Meta | 13 | 12 | 500 | 1.5 |
|
|
56
|
+
|
|
57
|
+
## 6. 组件与状态
|
|
58
|
+
|
|
59
|
+
| 组件 | 默认 | Hover / Pressed | Loading | Empty | Error | Disabled | Success |
|
|
60
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
61
|
+
| 主按钮 | | | | - | | | |
|
|
62
|
+
| 搜索 / 筛选 | | | | | | | |
|
|
63
|
+
| 列表 / 卡片 | | | | | | - | |
|
|
64
|
+
| 表单 | | | | - | | | |
|
|
65
|
+
|
|
66
|
+
## 7. 动效时间线
|
|
67
|
+
|
|
68
|
+
- 0—120ms:
|
|
69
|
+
- 120—360ms:
|
|
70
|
+
- 360—800ms:
|
|
71
|
+
- 循环动效:
|
|
72
|
+
- `prefers-reduced-motion` 降级:
|
|
73
|
+
|
|
74
|
+
## 8. 响应式
|
|
75
|
+
|
|
76
|
+
| 宽度 | 栅格 | 导航 | 主操作 | 内容重排 |
|
|
77
|
+
| --- | --- | --- | --- | --- |
|
|
78
|
+
| 390 | 4 列 | | | |
|
|
79
|
+
| 768 | 8 列 | | | |
|
|
80
|
+
| 1440 | 12 列 | | | |
|
|
81
|
+
|
|
82
|
+
## 9. 媒体与性能
|
|
83
|
+
|
|
84
|
+
- 图片格式、尺寸与 `object-fit`:
|
|
85
|
+
- 视频 / Canvas / WebGL 的存在理由:
|
|
86
|
+
- 静态降级资源:
|
|
87
|
+
- 首屏资源预算:
|
|
88
|
+
- 失败与超时处理:
|
|
89
|
+
|
|
90
|
+
## 10. 验收清单
|
|
91
|
+
|
|
92
|
+
- [ ] 首屏在 3 秒内说清产品、对象和主操作。
|
|
93
|
+
- [ ] 默认、加载、空、错误、禁用、权限、成功状态可验证。
|
|
94
|
+
- [ ] 390 / 768 / 1440 无横向滚动、遮挡和错位。
|
|
95
|
+
- [ ] 明亮、暗黑主题均有足够对比度。
|
|
96
|
+
- [ ] 所有可点击元素有 hover/focus/pressed 和真实结果。
|
|
97
|
+
- [ ] 动效尊重 `prefers-reduced-motion`。
|
|
98
|
+
- [ ] 所有图片、字体、模型和代码资产来源合法且可离线构建。
|