01Tabler 设计系统界面预览
查看设计决策和封面方案,添加经过验证的检查点,并切换原生颜色模式。
Tabler 1.6.1 编译后的 CSS 及其内置模态框 JavaScript。原始项目内容与封面设计方案。·
实现参考 Tabler 1.6.1 编译后的 CSS 变量。此版本使用 OKLCH 基础色值,并在语义角色中使用 light-dark()/color-mix();不应将较早版本基于十六进制值的 Tabler 示例视为同一主题。以下为实际安装的默认值。
| 名称 / 规则 | 值 / 配置 | 用途 |
|---|
--tblr-primary | oklch(54.6% 0.1724 254.2deg) | 主要操作角色。 |
--tblr-secondary | oklch(55.55% 0 0deg) | 次要角色。 |
--tblr-success | oklch(67.38% 0.1885 145.43deg) | 成功角色。 |
--tblr-info | oklch(66.26% 0.1358 246.81deg) | 信息角色。 |
--tblr-warning | oklch(77.02% 0.1658 71.02deg) | 警告角色。 |
--tblr-danger | oklch(58.29% 0.1941 25.59deg) | 危险角色。 |
--tblr-purple | oklch(57.83% 0.2186 319.15deg) | 此应用中的原型类别颜色。 |
--tblr-body-color | light-dark(oklch(26.86% 0 0deg), oklch(92.19% 0 0deg)) | 文本会适配当前配色方案。 |
--tblr-body-bg | light-dark(oklch(98.51% 0 0deg), oklch(20.46% 0 0deg)) | 页面背景会适配配色方案。 |
--tblr-bg-surface | light-dark(var(--tblr-bg-surface-primary), var(--tblr-gray-800)) | 卡片/界面表面背景角色。 |
| 名称 / 规则 | 值 / 配置 | 用途 |
|---|
--tblr-font-sans-serif | system-ui, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif | 已安装版本中的系统无衬线字体栈。 |
--tblr-body-font-size | 0.875rem | 默认值相当于浏览器根字号为 16px 时的 14px。 |
--tblr-body-font-weight | 400 | 常规正文字重。 |
--tblr-body-line-height | 1.4285714286 | 按默认正文大小计算约为 20px。 |
--tblr-border-radius | 6px | 默认 6px 圆角。 |
--tblr-border-radius-sm | 4px | 小号圆角:4px。 |
--tblr-border-radius-lg | 8px | 较大圆角,8px。 |
--tblr-border-radius-xl | 1rem | 特大圆角,1rem。 |
--tblr-border-radius-pill | 100rem | 胶囊形圆角。 |
| 名称 / 规则 | 值 / 配置 | 用途 |
|---|
--tblr-spacer-0 | 0 | 原生命名间距值。 |
--tblr-spacer-1 | 0.25rem | 原生命名间距值。 |
--tblr-spacer-2 | 0.5rem | 原生命名间距值。 |
--tblr-spacer-3 | 1rem | 原生命名间距值。 |
--tblr-spacer-4 | 1.5rem | 原生命名间距值。 |
--tblr-spacer-5 | 2rem | 原生命名间距值。 |
--tblr-spacer-6 | 2.5rem | 原生命名间距值。 |
--tblr-page-padding | var(--tblr-spacer-3) | 页面/时间线间距变量;响应式覆盖规则可能会改变它。 |
--tblr-card-spacer-x | 1.25rem | 默认卡片正文水平内边距。 |
--tblr-card-spacer-y | 1.25rem | 默认卡片正文垂直内边距。 |
--tblr-timeline-icon-size | 2.5rem | 默认根字号为 16px 时,图标节点为 40px。 |
| 名称 / 规则 | 值 / 配置 | 用途 |
|---|
Project layout | col-lg-8 + col-lg-4 | 原生网格;从 lg 断点开始为两列。 |
Page padding | 32px; 24px 14px below 650px | 自定义应用内边距。 |
Journal title | 32px / 1.2; 27px on mobile | 原始页面标题覆盖样式。 |
Cover studies | 155px tall; 120px on mobile | 原始装饰性 CSS 插画。 |
03Tabler 设计系统完整指南
实用指南,介绍如何为真实界面选择、应用和评审此系统。
DESIGN-tabler.md完整指导、实现起点和源代码链接。
下载指南Tabler 设计系统:使用与 Tabler 版本相匹配的主题
使用与 Tabler 版本匹配的主题
项目日志使用 Tabler 1.6.1 构建。其编译后的调色板采用 OKLCH 颜色,而语义变量使用 light-dark 和 color-mix。因此,本参考展示的是实际使用的表达式,而非照搬旧版 Bootstrap 或 Tabler 指南中的十六进制值。主要操作、状态徽标和界面表面角色均来自此已安装版本。
Tabler 在 Bootstrap 的组件体系基础上,加入了自身的布局与信息展示模式。此示例将原生时间线、页面标题区、数据网格和头像类与常见的卡片、表单和模态框搭配使用。这些细节使其成为 Tabler 风格的组合,而不是仅换了标志的通用卡片网格。
阅读配套规范
Tabler 设计系统:配色模式会同时改变界面表面和文本
配色模式会同时改变界面表面和文本
主题控件会更改 html 元素上的 data-bs-theme,并更新自身的按下状态和操作标签。随后,Tabler 的语义表达式会选择浅色或深色值。对于这个简单的双状态示例,无需单独的 JavaScript 主题管理器,也不会在页面之外保存偏好设置。
Decision、Prototype 和 Review 使用原生蓝色、紫色和绿色色调类。即使不依赖颜色,文本标签也能传达含义。封面研究插画在两种模式下都保留原有的纸张质感配色;周围的卡片、页面和文本则使用组件实际主题。
阅读配套规范
Tabler 设计系统:紧凑的正文字体与独立的页面层级
正文排版紧凑,页面层级另行处理
默认正文大小为 0.875rem,行高接近 1.4286;根字号为 16px 时,文本约为 14px。已安装的字体栈采用系统无衬线字体,因此此预览无需加载远程字体。卡片标题和元数据保留其原生类,页面标题则使用原有的 32px 字号。
原生间距值依次为 0、0.25、0.5、1、1.5、2 和 2.5rem。它们是已安装 CSS 中的命名变量,并非推测出来的比例尺。卡片正文的默认内边距在两个方向上均为 1.25rem。时间线节点为 2.5rem,连接线则使用页面内边距变量,跨越条目之间的间隙。
阅读配套规范
Tabler 设计系统:时间线不只是垂直边框
时间线不只是垂直边框
每个检查点都是包含 timeline-event-icon 和 timeline-event-card 的时间线事件列表项。原生 CSS 会定位节点、绘制非末项之间的连接线,并根据节点宽度加页面内边距的距离偏移内容卡片。此示例不会用背景图伪造连线,也不依赖为每张卡片设置绝对定位。
卡片内容各不相同:一张记录结构决策,一张包含三幅实际封面研究图,另一张记录参考资料审阅。项目背景信息置于序列之外,因为格式和当前重点是持续有效的属性,而非按日期发生的事件。在较小屏幕上,侧栏会按文档顺序显示在时间线之后。
阅读配套规范
Tabler 设计系统:小型标签和值组使用数据网格
用 Datagrid 展示简洁的标签与值分组
“项目背景”卡片使用 datagrid-item、datagrid-title 和 datagrid-content 配对展示内容。Format、Team、Checkpoints 和 Current focus 是并列属性,因此使用紧凑的原生数据网格呈现,而不是使用带有重复行标题的表格。头像使用文本首字母,无需远程图片资源。
此示例只会修改上下文中的检查点数量。在本地添加一条记录后,数量从三变为四,而原始项目说明保持不变。这样可以避免捏造仪表板指标:数字与列表中可见的条目直接对应。
阅读配套规范
Tabler 设计系统:由内置模态框管理显示状态和焦点
可见性和焦点由内置模态框管理
点击“添加检查点”后,会通过 data-bs-toggle 和 data-bs-target 打开原生模态框。内置的 Tabler JavaScript 提供模态框实现。shown.bs.modal 事件监听器会在过渡完成、输入框实际显示后将焦点移至标题字段。“关闭”和“取消”按钮使用 data-bs-dismiss,因此会遵循相同的组件生命周期。
该模态框包含一个真实表单。必填项和长度限制会在提交处理程序运行前拒绝未填写完整的字段。处理程序还会检查去除首尾空格后的长度,因为全为空格的字符串不能作为有效标题或原因。验证失败时会保留已输入的文本,方便修改;只有成功添加条目后,表单才会重置。
- 打开模态框并提交空字段,检查第一个无效控件。
- 填写标题、选择检查点类型,并说明原因。
- 提交后确认新条目和上下文中的数量同步更新。
阅读配套规范
Tabler 设计系统:安全插入文本,并标明本地记录
以安全方式追加文本,并标明本地处理边界
应用会创建已知的卡片骨架,并通过 textContent 插入标题和原因。只有固定映射会根据选择框中的三种类型选择对应的色调类。用户提供的文本绝不会插入卡片 HTML。新条目会置于列表开头,并清楚标注为“本地记录”,而不是伪造服务器时间戳。
插入条目后,现有的模态框实例会关闭,并显示一条注明新检查点的状态通知。通知会明确说明项目服务并未更新。真正的协作日志需要持久化、作者身份和排序保证;仅在本地 DOM 中添加条目并不具备这些能力。
阅读配套规范
Tabler 设计系统:让时间线中的密集内容在窄屏上依然清晰易读
让窄屏时间线上的密集内容清晰易读
主网格使用 col-lg-8 和 col-lg-4。在原生 large 断点以下,项目上下文会移至日志下方。原有的小屏样式会缩小时间线的侧边距,让标题和徽章组可以换行,并缩放封面示例,同时保留相同的文本和操作。
图标列、卡片内边距和较长的标题挤在同一宽度内时,时间线可能会显得拥挤。移动端示例保留了节点作为稳定的视觉引导,同时采用紧凑的偏移量。原有的封面示例仍保留三张小图进行对比,因为它们之间的关系很重要;图注只是对相邻说明段落的补充。
- 换行后,标题和检查点类型仍应清晰易读。
- 保留原因文本,不要截断每个时间线条目。
- 在移动端的主要阅读内容之后显示上下文卡片。
阅读配套规范
Tabler 设计系统:加载一组匹配的 CSS 和 JavaScript
加载一组匹配的 CSS 和 JavaScript
此配置使用 @tabler/core 1.6.1,并将其 dist 资源复制到本地 public 目录。请先加载 tabler.min.css,再加载应用样式表;先加载 tabler.min.js,再加载本地交互代码。再加入一个无关的 Bootstrap 包可能会导致相同的数据属性被初始化两次;此示例仅使用配套的 Tabler 包。
当前样式表使用现代颜色函数。将其用于有旧版浏览器支持要求的产品时,请查看 Tabler 的浏览器支持指南。本地示例已在 Chromium 中检查原生模态框验证、时间线插入、深色模式和 390px 布局;它不是生产部署,也不代表已在所有可能的浏览器中验证。
阅读配套规范
Tabler 设计系统组件示例
时间线、上下文卡片和条目模态框
原生时间线事件、卡片、数据网格、徽章和模态框的结构。
html
<main class="project-log"><header class="page-header d-print-none"><div class="row align-items-center"><div class="col"><div class="page-pretitle">TABLER · PROJECT JOURNAL</div><h1 class="page-title">Atlas field notes</h1><p class="text-secondary mt-2 mb-0">Decisions, prototypes and review checkpoints for a small editorial project.</p></div><div class="col-auto d-flex gap-2"><button id="theme" class="btn" aria-pressed="false">Dark mode</button><button id="add" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#entry-modal">Add checkpoint</button></div></div></header><div class="row g-4 mt-1"><section class="col-lg-8" aria-label="Project checkpoints"><ul id="timeline" class="timeline"><li class="timeline-event"><div class="timeline-event-icon bg-blue-lt" aria-hidden="true">AM</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">A clearer route through the issue</h2><span class="badge bg-blue-lt">Decision</span></div><div class="text-secondary small mb-3">Alex Morgan · 02 OCT</div><p class="mb-0">Group the field essays by landscape rather than author. Each chapter opens with a short map and a single question.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-purple-lt" aria-hidden="true">JC</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Three cover directions</h2><span class="badge bg-purple-lt">Prototype</span></div><div class="text-secondary small mb-3">Jules Chen · 01 OCT</div><div class="cover-strip" aria-label="Three original cover studies"><div><b>ATLAS</b><i></i><small>RIDGE / 01</small></div><div><b>ATLAS</b><i></i><small>RIVER / 02</small></div><div><b>ATLAS</b><i></i><small>PLAIN / 03</small></div></div><p class="mt-3 mb-0">Compare the quiet title treatment against the stronger geographic silhouette before selecting a direction.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-green-lt" aria-hidden="true">SR</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Reference package reviewed</h2><span class="badge bg-green-lt">Review</span></div><div class="text-secondary small mb-3">Sam Rivera · 30 SEP</div><p class="mb-0">Image captions, credit lines and print dimensions are recorded alongside each selected reference.</p></div></div></li></ul></section><aside class="col-lg-4"><div class="card"><div class="card-header"><h2 class="card-title">Project context</h2></div><div class="card-body"><div class="datagrid"><div class="datagrid-item"><div class="datagrid-title">Format</div><div class="datagrid-content">Editorial field journal</div></div><div class="datagrid-item"><div class="datagrid-title">Team</div><div class="datagrid-content"><span class="avatar avatar-xs me-1">AM</span><span class="avatar avatar-xs me-1">JC</span><span class="avatar avatar-xs">SR</span></div></div><div class="datagrid-item"><div class="datagrid-title">Checkpoints</div><div id="count" class="datagrid-content">3 recorded</div></div><div class="datagrid-item"><div class="datagrid-title">Current focus</div><div class="datagrid-content">Cover selection</div></div></div></div><div class="card-footer text-secondary">Sample project. New entries stay in this page.</div></div><div class="card mt-4"><div class="card-body"><h2 class="card-title">A useful checkpoint</h2><p class="text-secondary">Record the decision and the reason together. A future reader should understand what changed without reopening the meeting.</p><p class="mb-0 small">Choose Decision, Prototype or Review when adding a local entry.</p></div></div></aside></div><div id="notice" class="alert alert-success mt-3" role="status" hidden></div></main><div id="entry-modal" class="modal modal-blur fade" tabindex="-1" aria-labelledby="entry-title" aria-hidden="true"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><form id="entry-form"><div class="modal-header"><h2 id="entry-title" class="modal-title">Add a local checkpoint</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="entry-name" class="form-label">Title</label><input id="entry-name" class="form-control" required minlength="5" maxlength="80" placeholder="What changed?"></div><div class="mb-3"><label for="entry-type" class="form-label">Kind</label><select id="entry-type" class="form-select"><option>Decision</option><option>Prototype</option><option>Review</option></select></div><div><label for="entry-detail" class="form-label">Reason or evidence</label><textarea id="entry-detail" class="form-control" required minlength="15" maxlength="360" rows="4" placeholder="Explain why this checkpoint matters."></textarea></div></div><div class="modal-footer"><button type="button" class="btn" data-bs-dismiss="modal">Cancel</button><button class="btn btn-primary" type="submit">Add to journal</button></div></form></div></div></div>
代码参考
- 时间线采用真实列表,并按阅读顺序排列。
- 项目上下文使用数据网格的标题/内容对。
- 模态框触发器使用与内置 Bootstrap 兼容的数据 API。
已验证的本地检查点添加流程
模态框生命周期、安全文本插入、数量同步和颜色模式。
javascript
const q=s=>document.querySelector(s),modalEl=q('#entry-modal');let count=3;
modalEl.addEventListener('shown.bs.modal',()=>q('#entry-name').focus());
q('#theme').onclick=e=>{let dark=document.documentElement.dataset.bsTheme!=='dark';document.documentElement.dataset.bsTheme=dark?'dark':'light';e.currentTarget.setAttribute('aria-pressed',String(dark));e.currentTarget.textContent=dark?'Light mode':'Dark mode';};
q('#entry-form').onsubmit=e=>{e.preventDefault();const title=q('#entry-name'),detail=q('#entry-detail'),kind=q('#entry-type').value;if(title.value.trim().length<5){title.setCustomValidity('Use at least five non-space characters.');title.reportValidity();return;}if(detail.value.trim().length<15){detail.setCustomValidity('Use at least fifteen non-space characters.');detail.reportValidity();return;}const li=document.createElement('li');li.className='timeline-event';const color={Decision:'blue',Prototype:'purple',Review:'green'}[kind];li.innerHTML=`<div class="timeline-event-icon bg-${color}-lt" aria-hidden="true">YOU</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1"></h2><span class="badge bg-${color}-lt"></span></div><div class="text-secondary small mb-3">You · LOCAL ENTRY</div><p class="mb-0"></p></div></div>`;li.querySelector('h2').textContent=title.value.trim();li.querySelector('.badge').textContent=kind;li.querySelector('p').textContent=detail.value.trim();q('#timeline').prepend(li);q('#count').textContent=`${++count} recorded`;tabler.Modal.getInstance(modalEl).hide();q('#notice').hidden=false;q('#notice').textContent=`Local ${kind.toLowerCase()} added: ${title.value.trim()}. No project service was updated.`;e.target.reset();};['#entry-name','#entry-detail'].forEach(s=>q(s).oninput=e=>e.target.setCustomValidity(''));
代码参考
- 用户输入的字符串通过 textContent 赋值。
- 只有成功添加有效条目后,模态框才会重置。
- 通知明确说明项目服务并未更新。
原始日志布局和封面示例
围绕原生 Tabler 组件进行响应式调整。
css
html,body{min-height:0;height:auto}body{margin:0}.project-log{max-width:1160px;padding:32px;margin:auto}.project-log .page-header{margin:0 0 24px}.project-log .page-title{font-size:32px;line-height:1.2}.cover-strip{display:flex;gap:12px}.cover-strip>div{flex:1;min-width:0;height:155px;padding:14px;background:#d6dfd2;color:#334834;position:relative;overflow:hidden;border-radius:4px}.cover-strip>div:nth-child(2){background:#cbdbe3;color:#2d4857}.cover-strip>div:nth-child(3){background:#e9d9bc;color:#6a5439}.cover-strip b{letter-spacing:.15em;font-size:14px}.cover-strip i{position:absolute;width:120px;height:90px;border-radius:50%;background:currentColor;opacity:.2;left:20%;top:38%;transform:rotate(-25deg)}.cover-strip>div:nth-child(2) i{width:40px;height:150px;top:30%;left:50%;border-radius:40%}.cover-strip>div:nth-child(3) i{width:160px;height:60px;top:45%;left:10%;border-radius:0;transform:rotate(-12deg)}.cover-strip small{position:absolute;bottom:12px;left:14px;font-size:9px;letter-spacing:.12em}[hidden]{display:none!important}.timeline-event-card .badge{height:fit-content;white-space:nowrap}.timeline-event-card p{line-height:1.65}.timeline-event-icon{font-size:11px;font-weight:700}@media(max-width:650px){.project-log{padding:24px 14px}.project-log .page-title{font-size:27px}.page-header .col-auto{width:100%;margin-top:16px}.cover-strip{gap:6px}.cover-strip>div{height:120px;padding:8px}.cover-strip b{font-size:10px}.cover-strip small{left:8px;font-size:7px}.timeline-event-card .d-flex{flex-wrap:wrap}.timeline-event-card{margin-inline-start:calc(var(--tblr-timeline-icon-size) + 12px)}}
代码参考
- 封面插图展示了三项虚构的设计研究。
- 文档采用内容高度,适用于嵌入场景。
04Tabler 设计系统:AI Agent 设置
实现起点
已验证 Tabler 1.6.1。将附带的布局和应用模块分别保存为 style.css 和 app.js。使用原生模态框数据 API。HTML 封装器包含完整的 body 标记;请按此处引用的文件名保存提供的交互示例和 CSS 示例。
html
<!-- npm install @tabler/[email protected] -->
<!-- Copy node_modules/@tabler/core/dist to public/vendor/tabler. -->
<html lang="en" data-bs-theme="light">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/vendor/tabler/css/tabler.min.css">
<link rel="stylesheet" href="style.css">
<main class="project-log"><header class="page-header d-print-none"><div class="row align-items-center"><div class="col"><div class="page-pretitle">TABLER · PROJECT JOURNAL</div><h1 class="page-title">Atlas field notes</h1><p class="text-secondary mt-2 mb-0">Decisions, prototypes and review checkpoints for a small editorial project.</p></div><div class="col-auto d-flex gap-2"><button id="theme" class="btn" aria-pressed="false">Dark mode</button><button id="add" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#entry-modal">Add checkpoint</button></div></div></header><div class="row g-4 mt-1"><section class="col-lg-8" aria-label="Project checkpoints"><ul id="timeline" class="timeline"><li class="timeline-event"><div class="timeline-event-icon bg-blue-lt" aria-hidden="true">AM</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">A clearer route through the issue</h2><span class="badge bg-blue-lt">Decision</span></div><div class="text-secondary small mb-3">Alex Morgan · 02 OCT</div><p class="mb-0">Group the field essays by landscape rather than author. Each chapter opens with a short map and a single question.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-purple-lt" aria-hidden="true">JC</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Three cover directions</h2><span class="badge bg-purple-lt">Prototype</span></div><div class="text-secondary small mb-3">Jules Chen · 01 OCT</div><div class="cover-strip" aria-label="Three original cover studies"><div><b>ATLAS</b><i></i><small>RIDGE / 01</small></div><div><b>ATLAS</b><i></i><small>RIVER / 02</small></div><div><b>ATLAS</b><i></i><small>PLAIN / 03</small></div></div><p class="mt-3 mb-0">Compare the quiet title treatment against the stronger geographic silhouette before selecting a direction.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-green-lt" aria-hidden="true">SR</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Reference package reviewed</h2><span class="badge bg-green-lt">Review</span></div><div class="text-secondary small mb-3">Sam Rivera · 30 SEP</div><p class="mb-0">Image captions, credit lines and print dimensions are recorded alongside each selected reference.</p></div></div></li></ul></section><aside class="col-lg-4"><div class="card"><div class="card-header"><h2 class="card-title">Project context</h2></div><div class="card-body"><div class="datagrid"><div class="datagrid-item"><div class="datagrid-title">Format</div><div class="datagrid-content">Editorial field journal</div></div><div class="datagrid-item"><div class="datagrid-title">Team</div><div class="datagrid-content"><span class="avatar avatar-xs me-1">AM</span><span class="avatar avatar-xs me-1">JC</span><span class="avatar avatar-xs">SR</span></div></div><div class="datagrid-item"><div class="datagrid-title">Checkpoints</div><div id="count" class="datagrid-content">3 recorded</div></div><div class="datagrid-item"><div class="datagrid-title">Current focus</div><div class="datagrid-content">Cover selection</div></div></div></div><div class="card-footer text-secondary">Sample project. New entries stay in this page.</div></div><div class="card mt-4"><div class="card-body"><h2 class="card-title">A useful checkpoint</h2><p class="text-secondary">Record the decision and the reason together. A future reader should understand what changed without reopening the meeting.</p><p class="mb-0 small">Choose Decision, Prototype or Review when adding a local entry.</p></div></div></aside></div><div id="notice" class="alert alert-success mt-3" role="status" hidden></div></main><div id="entry-modal" class="modal modal-blur fade" tabindex="-1" aria-labelledby="entry-title" aria-hidden="true"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><form id="entry-form"><div class="modal-header"><h2 id="entry-title" class="modal-title">Add a local checkpoint</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="entry-name" class="form-label">Title</label><input id="entry-name" class="form-control" required minlength="5" maxlength="80" placeholder="What changed?"></div><div class="mb-3"><label for="entry-type" class="form-label">Kind</label><select id="entry-type" class="form-select"><option>Decision</option><option>Prototype</option><option>Review</option></select></div><div><label for="entry-detail" class="form-label">Reason or evidence</label><textarea id="entry-detail" class="form-control" required minlength="15" maxlength="360" rows="4" placeholder="Explain why this checkpoint matters."></textarea></div></div><div class="modal-footer"><button type="button" class="btn" data-bs-dismiss="modal">Cancel</button><button class="btn btn-primary" type="submit">Add to journal</button></div></form></div></div></div>
<script src="/vendor/tabler/js/tabler.min.js"></script>
<script src="app.js"></script>
<!-- The bundle exposes tabler.Modal; no second Bootstrap bundle is needed. -->
</html>
适用于你项目的提示词
Agent 提示词
使用 Tabler 1.6.1 重现 Atlas 项目日志,其中包含时间线、背景信息卡片、数据网格和原生 Modal。将已验证的节点表单与已提交的时间线分开:取消操作不会更改日志,有效提交会将输入的节点添加到本地记录。保留 data-bs 属性、匹配的 Tabler 程序包和主题样式。原始封面设计仅作装饰,节点文本在窄屏上也应清晰易读。不要暗示这是基础设施清单或已对外发布。
Tabler 1.6.1。实际主题变量和原生组件与原创项目内容及封面插画分别标明。新节点仅保存在本地。