@fieldwangai/agentflow 0.1.100 → 0.1.101
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/bin/lib/ui-server.mjs
CHANGED
|
@@ -7421,9 +7421,7 @@ function prdWorkflowReviewRenderTable(lines) {
|
|
|
7421
7421
|
].join("");
|
|
7422
7422
|
}
|
|
7423
7423
|
|
|
7424
|
-
function
|
|
7425
|
-
const { frontmatter, body } = prdWorkflowReviewSplitFrontmatter(markdown);
|
|
7426
|
-
const lines = String(body || "").replace(/\r\n/g, "\n").split("\n");
|
|
7424
|
+
function prdWorkflowReviewMarkdownLinesToHtml(lines) {
|
|
7427
7425
|
const html = [];
|
|
7428
7426
|
let paragraph = [];
|
|
7429
7427
|
let list = [];
|
|
@@ -7500,11 +7498,147 @@ function prdWorkflowReviewMarkdownToHtml(markdown) {
|
|
|
7500
7498
|
}
|
|
7501
7499
|
if (code) html.push(`<pre><code>${htmlEscapeAttribute(prdWorkflowReviewNormalizeText(code.lines.join("\n")))}</code></pre>`);
|
|
7502
7500
|
flushBlocks();
|
|
7503
|
-
return
|
|
7501
|
+
return html.join("\n");
|
|
7504
7502
|
}
|
|
7505
7503
|
|
|
7506
|
-
function
|
|
7507
|
-
const
|
|
7504
|
+
function prdWorkflowReviewActionLine(line) {
|
|
7505
|
+
const match = String(line || "").match(/^\s*[-*]\s+(?:\[( |x|X)\]\s+)?(A\d+|Action\s*\d+)(?=\s|[((::.-]|$)(.*)$/i);
|
|
7506
|
+
if (!match) return null;
|
|
7507
|
+
return {
|
|
7508
|
+
checked: match[1] ? match[1].toLowerCase() === "x" : null,
|
|
7509
|
+
label: match[2].replace(/\s+/g, " ").toUpperCase(),
|
|
7510
|
+
title: String(match[3] || "").replace(/^\s*[-::]\s*/, "").trim(),
|
|
7511
|
+
};
|
|
7512
|
+
}
|
|
7513
|
+
|
|
7514
|
+
function prdWorkflowReviewIsActionsHeading(line) {
|
|
7515
|
+
const heading = String(line || "").trim().match(/^(#{1,6})\s+(.+)$/);
|
|
7516
|
+
if (!heading) return null;
|
|
7517
|
+
const title = heading[2].replace(/[*_`]/g, "").trim();
|
|
7518
|
+
if (!/(?:\bTODO\s+Actions?\b|\bActions?\b|待办(?:事项|行动)?|行动项)/i.test(title)) return null;
|
|
7519
|
+
return { level: heading[1].length };
|
|
7520
|
+
}
|
|
7521
|
+
|
|
7522
|
+
function prdWorkflowReviewRenderActionSection(lines, sectionIndex) {
|
|
7523
|
+
const actionStarts = [];
|
|
7524
|
+
lines.forEach((line, index) => {
|
|
7525
|
+
const action = prdWorkflowReviewActionLine(line);
|
|
7526
|
+
if (action) actionStarts.push({ index, action });
|
|
7527
|
+
});
|
|
7528
|
+
if (!actionStarts.length) return prdWorkflowReviewMarkdownLinesToHtml(lines);
|
|
7529
|
+
|
|
7530
|
+
const ids = new Map();
|
|
7531
|
+
const actions = actionStarts.map(({ index, action }, actionIndex) => {
|
|
7532
|
+
const nextStart = actionStarts[actionIndex + 1]?.index ?? lines.length;
|
|
7533
|
+
let bodyStart = index + 1;
|
|
7534
|
+
const titleParts = [action.title].filter(Boolean);
|
|
7535
|
+
while (bodyStart < nextStart) {
|
|
7536
|
+
const continuation = String(lines[bodyStart] || "");
|
|
7537
|
+
if (!/^\s{2,}\S/.test(continuation) || /^\s*[-*]\s+/.test(continuation) || /^\s*```/.test(continuation)) break;
|
|
7538
|
+
titleParts.push(continuation.trim());
|
|
7539
|
+
bodyStart += 1;
|
|
7540
|
+
}
|
|
7541
|
+
const labelId = action.label.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || actionIndex + 1;
|
|
7542
|
+
const baseId = `action-${labelId}${sectionIndex ? `-${sectionIndex + 1}` : ""}`;
|
|
7543
|
+
const duplicate = ids.get(baseId) || 0;
|
|
7544
|
+
ids.set(baseId, duplicate + 1);
|
|
7545
|
+
return {
|
|
7546
|
+
...action,
|
|
7547
|
+
id: duplicate ? `${baseId}-${sectionIndex + 1}-${duplicate + 1}` : baseId,
|
|
7548
|
+
title: titleParts.join(" ") || action.label,
|
|
7549
|
+
body: lines.slice(bodyStart, nextStart),
|
|
7550
|
+
};
|
|
7551
|
+
});
|
|
7552
|
+
|
|
7553
|
+
const intro = prdWorkflowReviewMarkdownLinesToHtml(lines.slice(0, actionStarts[0].index));
|
|
7554
|
+
const navigation = actions.length > 1
|
|
7555
|
+
? `<nav class="action-index" aria-label="Action 快速跳转"><span class="action-index__label">快速跳转</span>${actions.map((action) => `<a href="#${htmlEscapeAttribute(action.id)}">${htmlEscapeAttribute(action.label)}</a>`).join("")}</nav>`
|
|
7556
|
+
: "";
|
|
7557
|
+
const cards = actions.map((action) => {
|
|
7558
|
+
const status = action.checked === null
|
|
7559
|
+
? ""
|
|
7560
|
+
: `<span class="action-card__status${action.checked ? " is-complete" : ""}">${action.checked ? "已完成" : "待完成"}</span>`;
|
|
7561
|
+
const body = prdWorkflowReviewMarkdownLinesToHtml(action.body);
|
|
7562
|
+
return `<section class="action-card${action.checked ? " is-complete" : ""}" id="${htmlEscapeAttribute(action.id)}">
|
|
7563
|
+
<div class="action-card__header">
|
|
7564
|
+
<span class="action-card__index">${htmlEscapeAttribute(action.label)}</span>
|
|
7565
|
+
<h3 class="action-card__title">${prdWorkflowReviewInlineMarkdown(action.title)}</h3>
|
|
7566
|
+
${status}
|
|
7567
|
+
</div>
|
|
7568
|
+
<div class="action-card__body">${body}</div>
|
|
7569
|
+
</section>`;
|
|
7570
|
+
}).join("\n");
|
|
7571
|
+
return [intro, navigation, cards].filter(Boolean).join("\n");
|
|
7572
|
+
}
|
|
7573
|
+
|
|
7574
|
+
function prdWorkflowReviewBodyToHtml(body) {
|
|
7575
|
+
const lines = String(body || "").replace(/\r\n/g, "\n").split("\n");
|
|
7576
|
+
const html = [];
|
|
7577
|
+
let cursor = 0;
|
|
7578
|
+
let sectionIndex = 0;
|
|
7579
|
+
while (cursor < lines.length) {
|
|
7580
|
+
const actionsHeading = prdWorkflowReviewIsActionsHeading(lines[cursor]);
|
|
7581
|
+
if (!actionsHeading) {
|
|
7582
|
+
const nextHeading = lines.findIndex((line, index) => index > cursor && prdWorkflowReviewIsActionsHeading(line));
|
|
7583
|
+
const end = nextHeading >= 0 ? nextHeading : lines.length;
|
|
7584
|
+
html.push(prdWorkflowReviewMarkdownLinesToHtml(lines.slice(cursor, end)));
|
|
7585
|
+
cursor = end;
|
|
7586
|
+
continue;
|
|
7587
|
+
}
|
|
7588
|
+
let end = cursor + 1;
|
|
7589
|
+
while (end < lines.length) {
|
|
7590
|
+
const heading = String(lines[end] || "").trim().match(/^(#{1,6})\s+/);
|
|
7591
|
+
if (heading && heading[1].length <= actionsHeading.level) break;
|
|
7592
|
+
end += 1;
|
|
7593
|
+
}
|
|
7594
|
+
html.push(prdWorkflowReviewMarkdownLinesToHtml([lines[cursor]]));
|
|
7595
|
+
html.push(prdWorkflowReviewRenderActionSection(lines.slice(cursor + 1, end), sectionIndex));
|
|
7596
|
+
sectionIndex += 1;
|
|
7597
|
+
cursor = end;
|
|
7598
|
+
}
|
|
7599
|
+
return html.filter(Boolean).join("\n");
|
|
7600
|
+
}
|
|
7601
|
+
|
|
7602
|
+
export function prdWorkflowReviewMarkdownToHtml(markdown) {
|
|
7603
|
+
const { frontmatter, body } = prdWorkflowReviewSplitFrontmatter(markdown);
|
|
7604
|
+
return [
|
|
7605
|
+
prdWorkflowReviewRenderFrontmatter(frontmatter),
|
|
7606
|
+
prdWorkflowReviewBodyToHtml(body),
|
|
7607
|
+
].filter(Boolean).join("\n");
|
|
7608
|
+
}
|
|
7609
|
+
|
|
7610
|
+
function prdWorkflowReviewExtractPageTitle(markdown, fallbackTitle) {
|
|
7611
|
+
const { frontmatter, body } = prdWorkflowReviewSplitFrontmatter(markdown);
|
|
7612
|
+
const lines = String(body || "").replace(/\r\n/g, "\n").split("\n");
|
|
7613
|
+
const firstContentIndex = lines.findIndex((line) => String(line || "").trim());
|
|
7614
|
+
const heading = firstContentIndex >= 0
|
|
7615
|
+
? String(lines[firstContentIndex] || "").trim().match(/^#\s+(.+)$/)
|
|
7616
|
+
: null;
|
|
7617
|
+
if (!heading) {
|
|
7618
|
+
return {
|
|
7619
|
+
markdown: String(markdown || ""),
|
|
7620
|
+
title: String(fallbackTitle || "PRD Workflow Review"),
|
|
7621
|
+
};
|
|
7622
|
+
}
|
|
7623
|
+
|
|
7624
|
+
lines.splice(firstContentIndex, 1);
|
|
7625
|
+
const markdownTitle = prdWorkflowReviewNormalizeText(heading[1])
|
|
7626
|
+
.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
|
|
7627
|
+
.replace(/[`*_~]/g, "")
|
|
7628
|
+
.trim();
|
|
7629
|
+
const bodyWithoutTitle = lines.join("\n").replace(/^\n+/, "");
|
|
7630
|
+
return {
|
|
7631
|
+
markdown: [
|
|
7632
|
+
frontmatter ? `---\n${frontmatter}\n---` : "",
|
|
7633
|
+
bodyWithoutTitle,
|
|
7634
|
+
].filter(Boolean).join("\n\n"),
|
|
7635
|
+
title: markdownTitle || String(fallbackTitle || "PRD Workflow Review"),
|
|
7636
|
+
};
|
|
7637
|
+
}
|
|
7638
|
+
|
|
7639
|
+
export function prdWorkflowReviewHtml(title, markdown, meta = {}) {
|
|
7640
|
+
const page = prdWorkflowReviewExtractPageTitle(markdown, title);
|
|
7641
|
+
const escapedTitle = htmlEscapeAttribute(page.title);
|
|
7508
7642
|
const escapedMeta = htmlEscapeAttribute([
|
|
7509
7643
|
meta.tapdId ? `TAPD ${meta.tapdId}` : "",
|
|
7510
7644
|
meta.stage ? `stage ${meta.stage}` : "",
|
|
@@ -7518,7 +7652,7 @@ function prdWorkflowReviewHtml(title, markdown, meta = {}) {
|
|
|
7518
7652
|
meta.persistence ? `persistence ${meta.persistence}` : "",
|
|
7519
7653
|
].filter(Boolean).join(" · ");
|
|
7520
7654
|
const escapedLifecycle = htmlEscapeAttribute(lifecycle);
|
|
7521
|
-
const renderedMarkdown = prdWorkflowReviewMarkdownToHtml(markdown
|
|
7655
|
+
const renderedMarkdown = prdWorkflowReviewMarkdownToHtml(page.markdown);
|
|
7522
7656
|
const rawHref = htmlEscapeAttribute(meta.rawHref || "?raw=1");
|
|
7523
7657
|
return `<!doctype html>
|
|
7524
7658
|
<html lang="zh-CN" data-theme="dark">
|
|
@@ -7530,57 +7664,80 @@ function prdWorkflowReviewHtml(title, markdown, meta = {}) {
|
|
|
7530
7664
|
:root {
|
|
7531
7665
|
color-scheme: dark;
|
|
7532
7666
|
font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
7533
|
-
--bg: #
|
|
7534
|
-
--
|
|
7535
|
-
--panel:
|
|
7536
|
-
--panel-
|
|
7537
|
-
--
|
|
7538
|
-
--border:
|
|
7539
|
-
--border-soft: rgba(148,163,184,.14);
|
|
7667
|
+
--bg: #1a1b26;
|
|
7668
|
+
--panel: #1f2335;
|
|
7669
|
+
--panel-strong: #24283b;
|
|
7670
|
+
--panel-soft: #292e42;
|
|
7671
|
+
--border: #3b4261;
|
|
7672
|
+
--border-soft: #30364f;
|
|
7540
7673
|
--text: #e5e7eb;
|
|
7541
|
-
--heading: #
|
|
7542
|
-
--muted: #
|
|
7543
|
-
--body: #
|
|
7544
|
-
--link: #
|
|
7545
|
-
--
|
|
7546
|
-
--
|
|
7547
|
-
--
|
|
7548
|
-
--
|
|
7549
|
-
--
|
|
7674
|
+
--heading: #f4f4f5;
|
|
7675
|
+
--muted: #8b90a0;
|
|
7676
|
+
--body: #d4d4d8;
|
|
7677
|
+
--link: #7dcfff;
|
|
7678
|
+
--interactive: #7aa2f7;
|
|
7679
|
+
--purple: #bb9af7;
|
|
7680
|
+
--button: #24283b;
|
|
7681
|
+
--button-text: #cbd0da;
|
|
7682
|
+
--code-bg: #292e42;
|
|
7683
|
+
--code-inline: #7dcfff;
|
|
7684
|
+
--code-block: #16161e;
|
|
7685
|
+
--code-block-text: #e5e7eb;
|
|
7686
|
+
--action-bg: #1f2335;
|
|
7687
|
+
--action-header: #24283b;
|
|
7688
|
+
--pending-bg: rgba(224,175,104,.10);
|
|
7689
|
+
--pending-border: rgba(224,175,104,.34);
|
|
7690
|
+
--pending-text: #e0af68;
|
|
7691
|
+
--complete-bg: rgba(158,206,106,.10);
|
|
7692
|
+
--complete-border: rgba(158,206,106,.34);
|
|
7693
|
+
--complete-text: #9ece6a;
|
|
7694
|
+
--shadow: rgba(9,10,15,.28);
|
|
7550
7695
|
background: var(--bg);
|
|
7551
7696
|
}
|
|
7552
7697
|
:root[data-theme="light"] {
|
|
7553
7698
|
color-scheme: light;
|
|
7554
|
-
--bg: #
|
|
7555
|
-
--
|
|
7556
|
-
--panel:
|
|
7557
|
-
--panel-
|
|
7558
|
-
--
|
|
7559
|
-
--border:
|
|
7560
|
-
--
|
|
7561
|
-
--
|
|
7562
|
-
--
|
|
7563
|
-
--
|
|
7564
|
-
--
|
|
7565
|
-
--
|
|
7566
|
-
--
|
|
7567
|
-
--button
|
|
7568
|
-
--
|
|
7569
|
-
--code-
|
|
7570
|
-
--
|
|
7699
|
+
--bg: #e1e2e7;
|
|
7700
|
+
--panel: #f3f3f5;
|
|
7701
|
+
--panel-strong: #e9e9ed;
|
|
7702
|
+
--panel-soft: #dcdfe7;
|
|
7703
|
+
--border: #c8cad4;
|
|
7704
|
+
--border-soft: #d5d7df;
|
|
7705
|
+
--text: #4c505e;
|
|
7706
|
+
--heading: #343b58;
|
|
7707
|
+
--muted: #7f849c;
|
|
7708
|
+
--body: #4c505e;
|
|
7709
|
+
--link: #007197;
|
|
7710
|
+
--interactive: #2e7de9;
|
|
7711
|
+
--purple: #7847bd;
|
|
7712
|
+
--button: #e7e8ed;
|
|
7713
|
+
--button-text: #4c505e;
|
|
7714
|
+
--code-bg: #dcdfe7;
|
|
7715
|
+
--code-inline: #007197;
|
|
7716
|
+
--code-block: #d5d8e1;
|
|
7717
|
+
--code-block-text: #343b58;
|
|
7718
|
+
--action-bg: #f3f3f5;
|
|
7719
|
+
--action-header: #e9e9ed;
|
|
7720
|
+
--pending-bg: rgba(177,92,0,.08);
|
|
7721
|
+
--pending-border: rgba(177,92,0,.28);
|
|
7722
|
+
--pending-text: #9a5200;
|
|
7723
|
+
--complete-bg: rgba(88,117,57,.10);
|
|
7724
|
+
--complete-border: rgba(88,117,57,.28);
|
|
7725
|
+
--complete-text: #587539;
|
|
7726
|
+
--shadow: rgba(52,59,88,.10);
|
|
7571
7727
|
}
|
|
7572
7728
|
*, *::before, *::after { box-sizing: border-box; }
|
|
7573
7729
|
html, body { overflow-x: hidden; }
|
|
7574
|
-
body { margin: 0; min-height: 100vh; background:
|
|
7575
|
-
main { width: min(100%,
|
|
7730
|
+
body { margin: 0; min-height: 100vh; background: var(--bg); color: var(--text); }
|
|
7731
|
+
main { width: min(100%, 1180px); margin: 0 auto; padding: 40px 24px 72px; min-width: 0; }
|
|
7576
7732
|
header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; margin-bottom: 22px; }
|
|
7577
|
-
h1 { margin: 0 0 10px; font-size: clamp(28px,
|
|
7733
|
+
h1 { margin: 0 0 10px; font-size: clamp(28px, 4vw, 44px); line-height: 1.12; letter-spacing: -.015em; }
|
|
7578
7734
|
.meta { margin: 0; color: var(--muted); font-size: 14px; }
|
|
7579
7735
|
.toolbar { flex: 0 0 auto; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; }
|
|
7580
|
-
.raw, .theme-toggle { border: 1px solid
|
|
7736
|
+
.raw, .theme-toggle { border: 1px solid var(--border); border-radius: 999px; color: var(--button-text); background: var(--button); padding: 9px 14px; text-decoration: none; font-size: 13px; font-weight: 800; line-height: 1.2; }
|
|
7737
|
+
.raw:hover, .theme-toggle:hover { border-color: var(--interactive); color: var(--link); }
|
|
7581
7738
|
.theme-toggle { cursor: pointer; font-family: inherit; }
|
|
7582
|
-
.lifecycle { margin-top: 10px; display: inline-flex; max-width: 100%; border: 1px solid
|
|
7583
|
-
article { min-width: 0; border: 1px solid var(--border); border-radius: 14px; background: var(--panel); box-shadow: 0
|
|
7739
|
+
.lifecycle { margin-top: 10px; display: inline-flex; max-width: 100%; border: 1px solid var(--border); border-radius: 999px; background: var(--button); color: var(--muted); padding: 6px 10px; font-size: 12px; font-weight: 800; line-height: 1.35; overflow-wrap: anywhere; }
|
|
7740
|
+
article { min-width: 0; border: 1px solid var(--border); border-radius: 14px; background: var(--panel); box-shadow: 0 18px 50px var(--shadow); padding: clamp(20px, 4vw, 34px); }
|
|
7584
7741
|
article > *:first-child { margin-top: 0; }
|
|
7585
7742
|
article > *:last-child { margin-bottom: 0; }
|
|
7586
7743
|
h2, h3, h4, h5, h6 { margin: 1.7em 0 .65em; line-height: 1.25; letter-spacing: 0; color: var(--heading); overflow-wrap: anywhere; }
|
|
@@ -7591,10 +7748,10 @@ function prdWorkflowReviewHtml(title, markdown, meta = {}) {
|
|
|
7591
7748
|
ul { margin: .65rem 0 1rem; padding-left: 1.35rem; }
|
|
7592
7749
|
li { margin: .28rem 0; color: var(--body); }
|
|
7593
7750
|
li input { margin-right: .38rem; transform: translateY(1px); }
|
|
7594
|
-
code { display: inline; max-width: 100%; border: 1px solid var(--border-soft); border-radius: 6px; background: var(--code-bg); color: var(--
|
|
7751
|
+
code { display: inline; max-width: 100%; border: 1px solid var(--border-soft); border-radius: 6px; background: var(--code-bg); color: var(--code-inline); padding: .1rem .34rem; font-family: "SFMono-Regular", Consolas, monospace; font-size: .92em; white-space: normal; overflow-wrap: anywhere; word-break: break-word; }
|
|
7595
7752
|
pre { max-width: 100%; overflow: auto; border: 1px solid var(--border); border-radius: 10px; background: var(--code-block); padding: 16px; line-height: 1.65; }
|
|
7596
|
-
pre code { border: 0; background: transparent; padding: 0; white-space: pre; overflow-wrap: normal; word-break: normal; }
|
|
7597
|
-
blockquote { margin: 1rem 0; border-left: 3px solid
|
|
7753
|
+
pre code { border: 0; background: transparent; color: var(--code-block-text); padding: 0; white-space: pre; overflow-wrap: normal; word-break: normal; }
|
|
7754
|
+
blockquote { margin: 1rem 0; border-left: 3px solid var(--purple); background: var(--panel-soft); padding: .75rem 1rem; color: var(--body); }
|
|
7598
7755
|
a { color: var(--link); text-decoration-thickness: .08em; text-underline-offset: .16em; overflow-wrap: anywhere; }
|
|
7599
7756
|
.table-wrap { max-width: 100%; overflow-x: auto; margin: 1rem 0 1.25rem; border: 1px solid var(--border-soft); border-radius: 10px; background: var(--panel-strong); }
|
|
7600
7757
|
table { width: 100%; max-width: 100%; border-collapse: collapse; table-layout: fixed; }
|
|
@@ -7606,7 +7763,34 @@ function prdWorkflowReviewHtml(title, markdown, meta = {}) {
|
|
|
7606
7763
|
.frontmatter table { min-width: 0; margin-top: .7rem; }
|
|
7607
7764
|
.frontmatter th { width: min(34%, 12rem); background: var(--panel-soft); color: var(--body); }
|
|
7608
7765
|
.frontmatter-list { margin: 0; padding-left: 1.1rem; }
|
|
7609
|
-
|
|
7766
|
+
.action-index { position: sticky; top: 10px; z-index: 4; display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: 1rem 0 1.25rem; border: 1px solid var(--border); border-radius: 12px; background: var(--panel-strong); box-shadow: 0 8px 22px var(--shadow); padding: 10px 12px; }
|
|
7767
|
+
.action-index__label { margin-right: 2px; color: var(--muted); font-size: 12px; font-weight: 800; }
|
|
7768
|
+
.action-index a { min-width: 38px; border: 1px solid color-mix(in srgb, var(--interactive) 38%, var(--border)); border-radius: 999px; background: color-mix(in srgb, var(--interactive) 10%, var(--button)); color: var(--interactive); padding: 5px 10px; text-align: center; text-decoration: none; font-size: 12px; font-weight: 900; }
|
|
7769
|
+
.action-index a:hover { border-color: var(--link); background: color-mix(in srgb, var(--interactive) 18%, var(--button)); color: var(--link); }
|
|
7770
|
+
.action-card { scroll-margin-top: 78px; margin: 0 0 20px; overflow: hidden; border: 1px solid var(--border); border-radius: 12px; background: var(--action-bg); box-shadow: 0 8px 24px var(--shadow); }
|
|
7771
|
+
.action-card:target { border-color: var(--interactive); box-shadow: 0 0 0 2px color-mix(in srgb, var(--interactive) 18%, transparent), 0 8px 24px var(--shadow); }
|
|
7772
|
+
.action-card__header { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; gap: 12px; border-bottom: 1px solid var(--border-soft); background: var(--action-header); padding: 16px 18px; }
|
|
7773
|
+
.action-card__index { display: inline-grid; place-items: center; min-width: 42px; min-height: 30px; border: 1px solid color-mix(in srgb, var(--interactive) 34%, var(--border)); border-radius: 8px; background: color-mix(in srgb, var(--interactive) 10%, var(--panel-soft)); color: var(--interactive); font: 900 13px/1 "SFMono-Regular", Consolas, monospace; }
|
|
7774
|
+
.action-card__title { margin: 3px 0 0; font-size: 16px; line-height: 1.55; letter-spacing: 0; color: var(--heading); }
|
|
7775
|
+
.action-card__status { margin-top: 2px; border: 1px solid var(--pending-border); border-radius: 999px; background: var(--pending-bg); color: var(--pending-text); padding: 5px 9px; font-size: 11px; font-weight: 900; white-space: nowrap; }
|
|
7776
|
+
.action-card__status.is-complete { border-color: var(--complete-border); background: var(--complete-bg); color: var(--complete-text); }
|
|
7777
|
+
.action-card__body { padding: 15px 20px 20px; }
|
|
7778
|
+
.action-card__body > *:first-child { margin-top: 0; }
|
|
7779
|
+
.action-card__body > *:last-child { margin-bottom: 0; }
|
|
7780
|
+
.action-card__body > ul { margin: 0 0 1rem; padding-left: 1.3rem; }
|
|
7781
|
+
.action-card__body > ul > li { margin: .55rem 0; padding-left: .15rem; }
|
|
7782
|
+
.action-card__body pre { margin: .9rem 0 1.1rem; }
|
|
7783
|
+
@media (max-width: 720px) {
|
|
7784
|
+
main { padding: 28px 14px 48px; }
|
|
7785
|
+
header { display: block; }
|
|
7786
|
+
.toolbar { justify-content: flex-start; margin-top: 14px; }
|
|
7787
|
+
article { padding: 18px; }
|
|
7788
|
+
th, td { padding: .58rem .65rem; }
|
|
7789
|
+
.action-index { top: 6px; }
|
|
7790
|
+
.action-card__header { grid-template-columns: auto minmax(0, 1fr); padding: 14px; }
|
|
7791
|
+
.action-card__status { grid-column: 2; justify-self: start; }
|
|
7792
|
+
.action-card__body { padding: 14px 16px 18px; }
|
|
7793
|
+
}
|
|
7610
7794
|
</style>
|
|
7611
7795
|
</head>
|
|
7612
7796
|
<body>
|