@my-life-buddies/cli 0.13.3 → 0.15.0
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/README.md +74 -22
- package/dist/bin/buddy.js +29 -10
- package/dist/bin/buddy.js.map +2 -2
- package/dist/bin/core.js +1480 -611
- package/dist/bin/core.js.map +4 -4
- package/dist/bin/preview.js +324 -27
- package/dist/bin/preview.js.map +4 -4
- package/dist/web/app.css +65 -6
- package/dist/web/app.js +103 -39
- package/dist/web/diagnostics.js +184 -0
- package/dist/web/index.html +34 -34
- package/dist/web/widgets.css +59 -28
- package/dist/web/widgets.js +230 -76
- package/package.json +3 -3
- package/resources/README.md +6 -50
- package/resources/agent-template/package-lock.json +4 -4
- package/resources/agent-template/package.json +2 -2
- package/resources/buddy-creator/INSTALL.md +0 -25
- package/resources/buddy-creator/PATCHES.md +0 -53
- package/resources/buddy-creator/SKILL.md +0 -76
- package/resources/buddy-creator/THIRD_PARTY_NOTICES.md +0 -154
- package/resources/buddy-creator/agents/openai.yaml +0 -4
- package/resources/buddy-creator/assets/licenses/bail.txt +0 -26
- package/resources/buddy-creator/assets/licenses/ccount.txt +0 -26
- package/resources/buddy-creator/assets/licenses/character-entities-html4.txt +0 -26
- package/resources/buddy-creator/assets/licenses/character-entities-legacy.txt +0 -26
- package/resources/buddy-creator/assets/licenses/character-entities.txt +0 -26
- package/resources/buddy-creator/assets/licenses/character-reference-invalid.txt +0 -26
- package/resources/buddy-creator/assets/licenses/comma-separated-tokens.txt +0 -26
- package/resources/buddy-creator/assets/licenses/debug.txt +0 -24
- package/resources/buddy-creator/assets/licenses/decode-named-character-reference.txt +0 -26
- package/resources/buddy-creator/assets/licenses/dequal.txt +0 -25
- package/resources/buddy-creator/assets/licenses/devlop.txt +0 -26
- package/resources/buddy-creator/assets/licenses/escape-string-regexp.txt +0 -13
- package/resources/buddy-creator/assets/licenses/estree-util-is-identifier-name.txt +0 -26
- package/resources/buddy-creator/assets/licenses/extend.txt +0 -27
- package/resources/buddy-creator/assets/licenses/hast-util-to-jsx-runtime.txt +0 -26
- package/resources/buddy-creator/assets/licenses/hast-util-whitespace.txt +0 -26
- package/resources/buddy-creator/assets/licenses/html-url-attributes.txt +0 -25
- package/resources/buddy-creator/assets/licenses/inline-style-parser.txt +0 -13
- package/resources/buddy-creator/assets/licenses/is-alphabetical.txt +0 -26
- package/resources/buddy-creator/assets/licenses/is-alphanumerical.txt +0 -26
- package/resources/buddy-creator/assets/licenses/is-decimal.txt +0 -26
- package/resources/buddy-creator/assets/licenses/is-hexadecimal.txt +0 -26
- package/resources/buddy-creator/assets/licenses/is-plain-obj.txt +0 -13
- package/resources/buddy-creator/assets/licenses/longest-streak.txt +0 -26
- package/resources/buddy-creator/assets/licenses/markdown-table.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-find-and-replace.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-from-markdown.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-gfm-autolink-literal.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-gfm-footnote.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-gfm-strikethrough.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-gfm-table.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-gfm-task-list-item.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-gfm.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-mdx-expression.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-mdx-jsx.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-mdxjs-esm.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-phrasing.txt +0 -27
- package/resources/buddy-creator/assets/licenses/mdast-util-to-hast.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-to-markdown.txt +0 -26
- package/resources/buddy-creator/assets/licenses/mdast-util-to-string.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-core-commonmark.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-autolink-literal.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-footnote.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-strikethrough.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-table.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-tagfilter.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-task-list-item.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-extension-gfm.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-factory-destination.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-factory-label.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-factory-space.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-factory-title.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-factory-whitespace.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-character.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-chunked.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-classify-character.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-combine-extensions.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-decode-numeric-character-reference.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-decode-string.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-encode.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-html-tag-name.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-normalize-identifier.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-resolve-all.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-sanitize-uri.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-subtokenize.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-symbol.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark-util-types.txt +0 -26
- package/resources/buddy-creator/assets/licenses/micromark.txt +0 -26
- package/resources/buddy-creator/assets/licenses/ms.txt +0 -25
- package/resources/buddy-creator/assets/licenses/parse-entities.txt +0 -26
- package/resources/buddy-creator/assets/licenses/phosphor-icons--react.txt +0 -25
- package/resources/buddy-creator/assets/licenses/property-information.txt +0 -26
- package/resources/buddy-creator/assets/licenses/react-dom.txt +0 -25
- package/resources/buddy-creator/assets/licenses/react-markdown.txt +0 -25
- package/resources/buddy-creator/assets/licenses/react.txt +0 -25
- package/resources/buddy-creator/assets/licenses/remark-gfm.txt +0 -26
- package/resources/buddy-creator/assets/licenses/remark-parse.txt +0 -25
- package/resources/buddy-creator/assets/licenses/remark-rehype.txt +0 -26
- package/resources/buddy-creator/assets/licenses/remark-stringify.txt +0 -25
- package/resources/buddy-creator/assets/licenses/scheduler.txt +0 -25
- package/resources/buddy-creator/assets/licenses/space-separated-tokens.txt +0 -26
- package/resources/buddy-creator/assets/licenses/stringify-entities.txt +0 -26
- package/resources/buddy-creator/assets/licenses/style-to-js.txt +0 -26
- package/resources/buddy-creator/assets/licenses/style-to-object.txt +0 -26
- package/resources/buddy-creator/assets/licenses/trim-lines.txt +0 -26
- package/resources/buddy-creator/assets/licenses/trough.txt +0 -25
- package/resources/buddy-creator/assets/licenses/types--debug.txt +0 -25
- package/resources/buddy-creator/assets/licenses/types--estree-jsx.txt +0 -25
- package/resources/buddy-creator/assets/licenses/types--estree.txt +0 -25
- package/resources/buddy-creator/assets/licenses/types--hast.txt +0 -25
- package/resources/buddy-creator/assets/licenses/types--mdast.txt +0 -25
- package/resources/buddy-creator/assets/licenses/types--ms.txt +0 -25
- package/resources/buddy-creator/assets/licenses/types--unist.txt +0 -25
- package/resources/buddy-creator/assets/licenses/ungap--structured-clone.txt +0 -19
- package/resources/buddy-creator/assets/licenses/unified.txt +0 -25
- package/resources/buddy-creator/assets/licenses/unist-util-is.txt +0 -26
- package/resources/buddy-creator/assets/licenses/unist-util-position.txt +0 -26
- package/resources/buddy-creator/assets/licenses/unist-util-stringify-position.txt +0 -26
- package/resources/buddy-creator/assets/licenses/unist-util-visit-parents.txt +0 -26
- package/resources/buddy-creator/assets/licenses/unist-util-visit.txt +0 -26
- package/resources/buddy-creator/assets/licenses/vfile-message.txt +0 -26
- package/resources/buddy-creator/assets/licenses/vfile.txt +0 -25
- package/resources/buddy-creator/assets/licenses/zwitch.txt +0 -26
- package/resources/buddy-creator/assets/preview/assets/index-B5VmkoSx.js +0 -39
- package/resources/buddy-creator/assets/preview/assets/index-DWKP6b-3.css +0 -4
- package/resources/buddy-creator/assets/preview/brand-logo.png +0 -0
- package/resources/buddy-creator/assets/preview/brand.css +0 -100
- package/resources/buddy-creator/assets/preview/index.html +0 -7
- package/resources/buddy-creator/assets/preview/reader.css +0 -165
- package/resources/buddy-creator/assets/preview/reader.js +0 -135
- package/resources/buddy-creator/assets/preview/widgets.css +0 -1
- package/resources/buddy-creator/assets/preview/widgets.js +0 -168
- package/resources/buddy-creator/assets/widget-reference/conversation.png +0 -0
- package/resources/buddy-creator/assets/widget-reference/expanded.png +0 -0
- package/resources/buddy-creator/assets/widget-v2/app.js +0 -62
- package/resources/buddy-creator/assets/widget-v2/style.css +0 -1
- package/resources/buddy-creator/assets/widget-v3/app.js +0 -65
- package/resources/buddy-creator/assets/widget-v3/style.css +0 -103
- package/resources/buddy-creator/assets/widget-v4/app.js +0 -66
- package/resources/buddy-creator/assets/widget-v4/style.css +0 -187
- package/resources/buddy-creator/references/artifact-schema.md +0 -70
- package/resources/buddy-creator/references/catalog.json +0 -401
- package/resources/buddy-creator/references/definition.md +0 -24
- package/resources/buddy-creator/references/dialogue-examples.md +0 -133
- package/resources/buddy-creator/references/host-guide.md +0 -219
- package/resources/buddy-creator/references/interview.md +0 -235
- package/resources/buddy-creator/references/knowledge.md +0 -40
- package/resources/buddy-creator/references/methods.md +0 -77
- package/resources/buddy-creator/references/opening.md +0 -14
- package/resources/buddy-creator/references/preview-panel.md +0 -66
- package/resources/buddy-creator/references/recovery.md +0 -46
- package/resources/buddy-creator/references/service.md +0 -76
- package/resources/buddy-creator/references/widgets-protocol.md +0 -83
- package/resources/buddy-creator/references/widgets.md +0 -99
- package/resources/buddy-creator/scripts/buddy.py +0 -108
- package/resources/buddy-creator/scripts/buddy_client.py +0 -67
- package/resources/buddy-creator/scripts/buddy_core.py +0 -865
- package/resources/buddy-creator/scripts/completion.py +0 -296
- package/resources/buddy-creator/scripts/interview.py +0 -215
- package/resources/buddy-creator/scripts/preview.py +0 -617
- package/resources/buddy-creator/scripts/preview_panel.py +0 -80
- package/resources/buddy-creator/scripts/sources.py +0 -239
- package/resources/buddy-creator/scripts/widget_render.py +0 -66
- package/resources/buddy-creator/scripts/widget_render_v1.py +0 -176
- package/resources/buddy-creator/scripts/widget_render_v2.py +0 -98
- package/resources/buddy-creator/scripts/widget_render_v3.py +0 -86
- package/resources/buddy-creator/scripts/widget_render_v4.py +0 -121
- package/resources/buddy-creator/scripts/widgets.py +0 -227
- package/resources/buddy-creator/version.json +0 -8
- package/resources/buddy-creator.manifest.json +0 -791
- package/resources/dada-object-avatar/SKILL.md +0 -37
- package/resources/dada-object-avatar/agents/openai.yaml +0 -4
- package/resources/dada-object-avatar/assets/examples/cat.png +0 -0
- package/resources/dada-object-avatar/assets/examples/cooking.png +0 -0
- package/resources/dada-object-avatar/assets/examples/divination.png +0 -0
- package/resources/dada-object-avatar/assets/examples/doctor.png +0 -0
- package/resources/dada-object-avatar/assets/examples/relationship.png +0 -0
- package/resources/dada-object-avatar/assets/examples/work.png +0 -0
- package/resources/dada-object-avatar/assets/preview.png +0 -0
- package/resources/dada-object-avatar/references/evaluation-rubric.md +0 -22
- package/resources/dada-object-avatar/references/examples.json +0 -8
- package/resources/dada-object-avatar/references/prompt-template.md +0 -27
- package/resources/dada-object-avatar/references/style-system.md +0 -54
- package/resources/dada-object-avatar/references/subject-design.md +0 -23
- package/resources/dada-object-avatar/references/training-guide.md +0 -14
- package/resources/dada-object-avatar/references/training-log.jsonl +0 -0
- package/resources/dada-object-avatar/references/training-record.schema.json +0 -20
- package/resources/dada-object-avatar/scripts/choose_gaze.py +0 -36
- package/resources/dada-object-avatar/scripts/record_example.py +0 -22
- package/resources/dada-object-avatar/scripts/validate_png.py +0 -52
- package/resources/dada-object-avatar.manifest.json +0 -85
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
:root{font-family:var(--font-body);font-synthesis:none;color:var(--color-ink);background:var(--color-paper);--accent:var(--color-accent);--line:var(--color-rule);--line-strong:var(--color-rule-strong);--muted:var(--color-muted);--muted-strong:var(--color-ink-soft);--text:var(--color-ink-strong);--surface:var(--color-paper-raised);--document:var(--color-paper-raised)}*{box-sizing:border-box}body{margin:0}button,a,summary{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}a{color:inherit}button:focus-visible,a:focus-visible,summary:focus-visible,[tabindex="-1"]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}h1,h2,h3,p{margin-top:0}p{line-height:1.8}button,summary{touch-action:manipulation}button:active{opacity:.85}.shell{min-height:100dvh}.preview-header{position:sticky;top:0;z-index:10;background:var(--color-paper-raised);border-bottom:1px solid var(--line)}.header-inner,.workspace{width:100%;max-width:880px;margin:0 auto;padding:0 28px}.header-inner{padding-bottom:12px}.brand-row{height:48px;display:flex;align-items:center;justify-content:space-between;gap:18px}.brand{display:flex;align-items:center;gap:9px;min-width:0}.brand strong{font-size:15px;letter-spacing:-.4px}.project-name{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-left:7px;padding-left:16px;border-left:1px solid var(--line)}.activity-status{flex:none;max-width:52%;display:flex;flex-direction:column;align-items:flex-end;gap:3px;font-size:12px;line-height:1.4;color:var(--muted)}.activity-line{display:flex;align-items:center;gap:7px;white-space:nowrap}.activity-status small{color:var(--muted);font-size:10px;line-height:1.3}.activity-status.working,.activity-status.ready{color:var(--accent)}.activity-status.attention,.activity-status.offline{color:var(--color-warning)}.activity-dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}.activity-status.online .activity-dot{background:var(--accent)}.activity-dots{display:inline-flex;align-items:center;gap:3px;height:12px;flex:none}.activity-dots i{width:4px;height:4px;border-radius:50%;background:currentColor;animation:activity-pulse 1.5s ease-in-out infinite}.activity-dots i:nth-child(2){animation-delay:.18s}.activity-dots i:nth-child(3){animation-delay:.36s}@keyframes activity-pulse{0%,70%,to{opacity:.35;transform:translateY(0)}35%{opacity:1;transform:translateY(-2px)}}.stage-nav{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.stage-link{display:flex;align-items:center;gap:9px;padding:10px 12px;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;text-align:left;min-width:0}.stage-link:hover{background:var(--color-accent-soft)}.stage-link.selected{background:var(--color-accent-soft);border-color:var(--color-accent)}.stage-link.selected.in-progress{background:var(--color-accent-soft);border-color:var(--color-accent)}.step-number{color:var(--muted-strong);display:flex;align-items:center;justify-content:center;flex:none;width:23px;height:23px;border:1px solid var(--color-rule-strong);border-radius:50%;font-size:12px;font-variant-numeric:tabular-nums}.in-progress .step-number{color:var(--color-accent-ink);background:var(--accent);border-color:var(--accent);font-weight:650}.stage-copy{min-width:0}.stage-name{display:block;font-size:15px;line-height:1.3;font-weight:600}.stage-link small{display:block;color:var(--muted);font-size:12px;margin-top:5px;white-space:nowrap}.in-progress small{color:var(--accent)}.position-row{display:flex;align-items:center;justify-content:space-between;gap:8px 14px;font-size:12px;padding-top:12px;flex-wrap:wrap}.position-row .muted{margin-right:8px}.position-count{color:var(--accent);margin-left:10px;font-variant-numeric:tabular-nums;white-space:nowrap}.muted{color:var(--muted)}.text-button{display:inline-flex;align-items:center;justify-content:center;gap:5px;background:transparent;border:0;padding:4px 0;font-size:12px;color:var(--muted-strong);flex:none}.text-button:hover{color:var(--accent)}.workspace{padding-top:26px;padding-bottom:20px}.stage-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}.stage-heading>div{display:flex;align-items:center;gap:12px}.stage-heading h1{font-size:26px;line-height:1.4;font-weight:650;letter-spacing:-.5px;margin:0}.stage-heading-status{color:var(--muted);font-size:12px}.structure-button{display:inline-flex;align-items:center;gap:6px;font-size:12px;background:transparent;border:1px solid var(--color-rule-strong);border-radius:var(--radius-md);padding:8px 10px;color:var(--muted-strong)}.structure-button:hover{background:var(--color-accent-soft);color:var(--text)}.view-tabs{display:flex;align-items:stretch;gap:28px;border-bottom:1px solid var(--line);margin-bottom:24px}.view-tabs button{display:inline-flex;gap:8px;align-items:center;padding:12px 0;background:none;border:0;border-bottom:2px solid transparent;color:var(--muted);font-size:14px;white-space:nowrap}.view-tabs button[aria-selected=true]{color:var(--text);font-weight:600;border-bottom-color:var(--accent)}.tab-count{font-size:11px;line-height:1.4;padding:2px 6px;border-radius:var(--radius-xs);color:var(--muted-strong);background:var(--color-paper-soft);font-weight:400}.current-section{margin-bottom:28px}.focus-paper{border:1px solid var(--color-accent);background:var(--color-brand-panel);border-radius:var(--radius-lg);overflow:hidden}.focus-context{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 22px;border-bottom:1px solid var(--color-accent);background:var(--color-brand-panel);font-size:12px}.focus-context strong{font-weight:600;color:var(--color-accent)}.focus-context>span{color:var(--color-ink-soft)}.focus-content{padding:22px 24px 17px}.focus-title{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:17px}.focus-title h2{font-size:22px;font-weight:650;letter-spacing:-.4px;line-height:1.5;margin:0}.focus-title .status{margin-top:4px}.status{display:inline-flex;align-items:center;gap:4px;color:var(--muted-strong);font-size:12px;white-space:nowrap;line-height:1.5}.status.pending,.status.revised{background:var(--color-accent-soft);border:1px solid var(--color-accent);border-radius:var(--radius-xs);padding:2px 7px;color:var(--color-ink-soft)}.status.accepted,.status.confirmed,.status.ready{color:var(--color-success)}.status.rejected{color:var(--muted)}.status.failed{color:var(--color-danger)}.focus-summary h2{font-size:22px;font-weight:600;line-height:1.5;margin:0 0 10px}.focus-summary p{margin:0;color:var(--muted-strong);font-size:15px;white-space:pre-wrap}.focus-summary .text-button{margin-top:14px;color:var(--accent)}.prose{font-size:15px;line-height:1.85;color:var(--color-ink-soft);overflow-wrap:anywhere}.prose p{margin:0 0 13px}.prose>:last-child{margin-bottom:0}.prose h1,.prose h2,.prose h3,.prose h4{font-family:inherit;font-size:16px;font-weight:600;color:var(--text);margin:22px 0 10px}.prose pre{white-space:pre-wrap}.prose ul,.prose ol{padding-left:23px}.prose table{border-collapse:collapse;width:100%;font-size:13px;table-layout:fixed}.prose td,.prose th{border:1px solid var(--line);padding:8px;text-align:left}.prose blockquote{border-left:2px solid var(--color-accent);padding-left:15px;margin-left:0;color:var(--color-ink-soft)}.prose dt{color:var(--muted);font-size:12px;margin-top:13px}.prose dd{margin:3px 0 0}.paper-footer{display:flex;align-items:flex-start;flex-wrap:wrap;gap:8px 20px;margin-top:20px;padding-top:12px;border-top:1px solid var(--color-rule);color:var(--muted);font-size:12px}.paper-footer>button{margin-left:auto}.paper-footer summary{cursor:pointer;padding:4px 0}.paper-footer details{flex:1;min-width:0}.paper-footer blockquote{margin:13px 0;border-left:1px solid var(--line-strong);padding-left:12px;line-height:1.7;overflow-wrap:anywhere}.paper-footer blockquote small{display:block;margin-top:6px;font-size:12px;color:var(--muted)}.copy-error{color:var(--color-danger);font-size:12px;margin:10px 0 0}.unresolved{border-top:1px dashed var(--line-strong);margin-top:18px;padding-top:13px;font-size:13px;color:var(--color-warning)}.unresolved strong{font-size:12px;font-weight:500}.unresolved p{margin:6px 0 0}.record-group,.notes-group,.sources{border:1px solid var(--line);background:var(--color-paper-raised);border-radius:var(--radius-lg);overflow:hidden;margin:0 0 26px}.record-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:15px 20px;background:var(--color-paper-soft)}.record-heading h2{font-size:13px;font-weight:600;margin:0;color:var(--color-ink-soft)}.record-heading>span{font-size:12px;color:var(--muted)}.artifact-fold{margin:0 20px;border-top:1px solid var(--line)}.artifact-fold:first-of-type{border-top:0}.artifact-fold>summary{display:flex;align-items:center;gap:12px;padding:18px 0;list-style:none;cursor:pointer}.artifact-fold>summary>span:first-child{flex:1;font-size:14px;line-height:1.65;color:var(--color-ink)}.artifact-fold>summary>svg{color:var(--muted);transition:transform .14s ease}summary::-webkit-details-marker{display:none}details[open]>summary>svg:last-child{transform:rotate(180deg)}.fold-body{padding:0 0 20px}.fold-body .prose{font-size:14px}.notes-group dl{margin:0;padding:0 20px}.notes-group dl>div{padding:18px 0;border-top:1px solid var(--line)}.notes-group dl>div:first-child{border-top:0}.notes-group dt{font-size:13px;font-weight:600;margin-bottom:8px}.notes-group dd{margin:0;color:var(--muted-strong);font-size:14px;line-height:1.8;white-space:pre-wrap}.booklet-document{background:var(--document);border:1px solid var(--color-rule-strong);border-radius:var(--radius-lg);overflow:hidden}.booklet-cover{display:flex;align-items:center;gap:14px;padding:26px 28px;background:var(--color-paper-soft);border-bottom:1px solid var(--color-rule-strong)}.booklet-cover>svg{color:var(--accent);flex:none}.booklet-cover h2{margin:0 0 6px;font-size:22px;line-height:1.4;font-weight:600}.booklet-cover p{font-size:12px;color:var(--color-ink-soft);margin:0}.document-count{margin-left:auto;color:var(--color-ink-soft);font-size:12px;white-space:nowrap}.chapter{padding:28px 0;margin:0 28px;border-top:1px solid var(--color-rule)}.chapter:first-of-type{border-top:0}.chapter-head{display:flex;align-items:baseline;gap:12px;margin-bottom:13px}.chapter-head h3{flex:1;font-size:18px;font-weight:650;line-height:1.5;margin:0}.chapter-number{flex:none;width:22px;font-size:12px;color:var(--color-ink-soft);font-variant-numeric:tabular-nums}.chapter-body{margin-left:34px}.chapter-current .chapter-number{color:var(--accent)}.chapter .paper-footer{border-top:0;margin-top:15px;padding-top:0}.booklet-empty,.view-empty{padding:28px;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface)}.booklet-empty>svg,.view-empty>svg{color:var(--muted-strong);margin-bottom:18px}.booklet-empty h2,.view-empty h2{font-size:20px;font-weight:550;margin:0 0 10px}.booklet-empty p,.view-empty p{color:var(--muted);font-size:13px;margin:0}.booklet-empty ol{margin:24px 0 0;padding:22px 0 0;border-top:1px solid var(--line);list-style:none;counter-reset:chapters;display:grid;grid-template-columns:1fr 1fr;gap:17px 25px}.booklet-empty li{counter-increment:chapters;font-size:14px;color:var(--color-ink-soft)}.booklet-empty li:before{content:counter(chapters,decimal-leading-zero);font-size:11px;color:var(--muted);margin-right:12px}.view-empty{margin-bottom:26px}.view-empty .text-button{color:var(--accent);margin-top:14px}[data-buddy-object-id]{scroll-margin-top:calc(var(--header-height, 130px) + 22px)}.draft{padding:18px;border:1px dashed var(--line-strong);border-radius:var(--radius-lg);margin-bottom:26px}.draft h2{font-size:18px;margin:10px 0}.sources article{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:18px 20px;border-top:1px solid var(--line)}.sources strong{font-size:14px;font-weight:500;overflow-wrap:anywhere}.sources p{font-size:12px;color:var(--muted);margin:8px 0 0}.sources>.empty{padding:0 20px 18px;margin:0}.empty{color:var(--muted);font-size:13px}.notice{background:var(--color-paper-soft);border-left:2px solid var(--accent);padding:12px 16px;margin:0 0 20px;color:var(--muted-strong);font-size:13px;line-height:1.6}.page-footer{font-size:12px;color:var(--muted);padding:8px 0;margin-top:24px}.section-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:16px}.section-title h1,.section-title h2{font-size:16px;margin:0;font-weight:600}.section-title>span{font-size:12px;color:var(--muted)}.structure-dialog{width:min(560px,calc(100vw - 24px));max-width:none;max-height:calc(100dvh - 24px);padding:0;border:1px solid var(--color-rule-strong);border-radius:var(--radius-lg);background:var(--color-paper-raised);color:var(--text)}.structure-dialog::backdrop{background:var(--color-overlay)}.structure-dialog .dialog-header{position:sticky;top:0;background:var(--color-paper-soft);z-index:1}.dialog-context{display:block;margin-bottom:5px;font-size:12px;color:var(--muted-strong)}.icon-button{display:flex;align-items:center;justify-content:center;padding:6px;border-radius:var(--radius-md);border:1px solid var(--color-rule-strong);background:none;color:var(--muted-strong)}.icon-button:hover{background:var(--color-accent-soft);color:var(--text)}.structure-content{padding:24px}.structure-group+.structure-group{margin-top:26px}.structure-group-title{display:flex;align-items:center;gap:12px;margin-bottom:9px}.structure-index{width:23px;height:23px;display:flex;align-items:center;justify-content:center;border:1px solid var(--color-rule-strong);border-radius:50%;font-size:12px;color:var(--color-ink-soft)}.structure-group-title h3{font-size:15px;font-weight:600;margin:0}.structure-topics{margin-left:11px;padding-left:24px;border-left:1px solid var(--color-rule)}.structure-group>.empty{margin-left:36px}.outline-topic{display:flex;align-items:baseline;gap:12px;padding:10px 0;font-size:13px}.outline-topic>span,.outline-topic button{flex:1;min-width:0}.outline-topic button{display:flex;gap:6px;align-items:baseline;text-align:left;border:0;padding:0;background:none;line-height:1.65}.outline-topic button>svg{flex:none;color:var(--muted)}.outline-topic button:hover{color:var(--accent)}.outline-topic small{font-size:12px;color:var(--muted);flex:none;display:inline-flex;align-items:center;gap:4px}.outline-topic.current>*{color:var(--accent)}.loading{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:24px}.loading h1{font-size:20px;font-weight:500;margin:0}.loading p{font-size:13px;color:var(--muted);margin:0}.loading-lines{width:min(100%,340px);display:grid;gap:12px}.loading-lines i{background:var(--color-paper-soft);height:12px;border-radius:var(--radius-xs)}.loading-lines i:last-child{width:60%}@media(max-width:640px){.header-inner,.workspace{padding-left:18px;padding-right:18px}.stage-link{gap:7px;padding:9px 8px}.project-name{padding-left:10px;margin-left:2px}.focus-context{padding:12px 18px}.focus-content{padding:19px 18px 15px}.focus-title{flex-wrap:wrap;gap:9px}.focus-title h2{font-size:21px}.focus-title .status{margin-top:0}.booklet-cover{padding:22px}.chapter{margin:0 22px}.chapter-body{margin-left:0}}@media(max-width:420px){.header-inner,.workspace{padding-left:14px;padding-right:14px}.stage-nav{gap:5px}.stage-link{padding:8px 6px;gap:4px}.step-number{width:20px;height:20px}.stage-name{font-size:14px}.stage-link small{font-size:10px}.activity-status{font-size:11px}.position-row .muted{display:none}.focus-context{align-items:flex-start}.focus-context>span{max-width:65%;text-align:right}.booklet-empty ol{grid-template-columns:1fr}.view-tabs{gap:23px}.artifact-fold{margin:0 16px}.artifact-fold>summary{gap:8px}.chapter-head{flex-wrap:wrap;gap:9px}.structure-content{padding:20px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.completion-notice{padding:16px 20px;margin-bottom:24px;border-left:2px solid var(--accent);background:var(--color-brand-panel)}.completion-notice h2{margin:0 0 6px;font-size:17px;line-height:1.5}.completion-notice p{margin:0;color:var(--muted-strong);font-size:13px;line-height:1.7}.completion-notice.failed{border-left-color:var(--color-danger)}.service-section{margin:24px 0}.map-frame{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:var(--color-paper-raised)}.map-caption{display:flex;justify-content:space-between;gap:12px;font-size:12px;color:var(--muted);padding:16px 18px 0}.service-stage-guide{margin:18px;display:grid;gap:16px}.service-stage-guide>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:14px;align-items:baseline}.service-stage-guide dt{font-size:12px;color:var(--muted)}.service-stage-guide dd{margin:0;font-size:13px;line-height:1.65}.service-stage-guide strong{font-weight:550;color:var(--text)}.service-stage-guide p{margin:3px 0 0;color:var(--muted)}.service-stage-meaning{color:var(--muted);font-size:13px;line-height:1.7}.service-policy-update{margin:0 18px;padding:12px 0;border-top:1px solid var(--line);color:var(--accent);font-size:12px;line-height:1.65}.subscription-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0;padding:14px 18px 0}.subscription-summary dt{color:var(--muted);font-size:12px}.subscription-summary dd{margin:5px 0 0;font-size:14px;line-height:1.5;overflow-wrap:anywhere}.service-blueprint-pane{min-width:0;background:var(--color-paper-raised)}.service-pane-head{padding:20px 24px 12px}.service-pane-head span{display:block;font-size:12px;color:var(--muted);margin-bottom:8px}.service-pane-head strong{font-size:17px;font-weight:550}.service-blueprint-status{display:flex;gap:20px;padding:6px 24px 0;font-size:12px;color:var(--muted)}.service-blueprint-status span{display:flex;align-items:center;gap:6px}.service-blueprint-status i{height:6px;width:6px;border:1px solid var(--muted);border-radius:50%}.service-blueprint-status .status-suggested{background:var(--muted)}.service-blueprint-status .status-confirmed{background:var(--accent);border-color:var(--accent)}.service-map{position:relative;height:640px}.service-transition-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible;opacity:0}.service-map.connectors-ready .service-transition-lines{opacity:1}.service-transition-lines path:not([d^=M0]){fill:none;stroke:var(--color-rule-strong);stroke-width:1.3;vector-effect:non-scaling-stroke;marker-end:var(--service-arrow)}.service-transition-lines marker path{fill:var(--color-rule-strong)}.service-transition-lines .line-paid-renewal{stroke:var(--accent)}.service-transition-lines .system-line{stroke-dasharray:4 4}.service-stage-card{position:absolute;z-index:2;width:34%;height:218px;display:flex;flex-direction:column;align-items:flex-start;padding:18px;border:1px solid var(--color-rule-strong);border-radius:var(--radius-lg);background:var(--color-paper-raised);text-align:left}.service-stage-card:hover{border-color:var(--accent)}.service-stage-card.selected{border-color:var(--accent);background:var(--color-accent-soft)}.service-stage-card>span{font-size:13px;font-weight:550;color:var(--accent)}.service-stage-card>strong{margin-top:12px;color:var(--text);font-size:15px;font-weight:500;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.service-stage-card>small{font-size:12px;color:var(--muted);margin-top:8px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.service-stage-card>em{font-size:12px;font-style:normal;color:var(--muted);margin-top:auto;padding-top:8px}.service-stage-card.status-confirmed>em{color:var(--accent)}.service-stage-card.stage-acquisition{top:11%;left:4%}.service-stage-card.stage-paid{top:11%;right:4%}.service-stage-card.stage-maintenance{bottom:8%;left:31%}.service-stage-core{width:100%;display:grid;gap:7px;margin:12px 0 0}.service-stage-core>div{display:grid;grid-template-columns:90px 1fr;gap:8px}.service-stage-core dt{color:var(--muted);font-size:12px;line-height:1.5}.service-stage-core dd{margin:0;font-size:12px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.service-stage-card.has-core-plan{height:270px}.service-stage-card.has-core-plan.stage-maintenance{height:185px}.transition-chip{position:absolute;z-index:3;display:inline-flex;align-items:center;gap:4px;padding:6px 8px;border:1px solid var(--color-rule-strong);border-radius:var(--radius-pill);background:var(--color-accent-soft);color:var(--color-ink-soft);font-size:12px;white-space:nowrap;opacity:0}.service-map.connectors-ready .transition-chip{opacity:1}.transition-chip:hover,.transition-chip.selected{border-color:var(--accent);color:var(--accent);background:var(--color-accent-soft)}.transition-chip.system-transition{border-style:dashed}.compact-blueprint .service-map{height:400px}.compact-blueprint .service-stage-card{width:34%;height:126px;padding:13px}.compact-blueprint .service-stage-card>strong{font-size:13px;margin-top:8px}.compact-blueprint .service-stage-card>em{font-size:12px}.compact-blueprint .service-stage-card.stage-maintenance{bottom:11%}.compact-blueprint .transition-chip{font-size:11px;padding:5px 7px}.service-blueprint-summary{display:grid;grid-template-columns:repeat(4,1fr);padding:18px 24px;gap:18px;border-top:1px solid var(--line)}.service-blueprint-summary span{display:block;color:var(--muted);font-size:12px;margin-bottom:8px}.service-blueprint-summary strong{font-size:13px;font-weight:500;line-height:1.6;overflow-wrap:anywhere}.map-hint{text-align:center;margin:0;padding:0 16px 18px;font-size:12px;color:var(--muted)}.service-detail{border-top:1px solid var(--line);padding:20px}.service-detail h3{font-size:16px;font-weight:550;margin:0}.service-detail dl{margin:0}.service-detail dl>div{display:grid;grid-template-columns:92px 1fr;gap:12px;margin-top:12px;font-size:14px;line-height:1.7}.service-detail dt{color:var(--muted);font-size:12px}.service-detail dd{margin:0;overflow-wrap:anywhere}.service-detail .empty{font-size:12px;margin:18px 0 0}.blueprint-dialog{width:min(1140px,calc(100vw - 24px));max-width:none;max-height:calc(100dvh - 24px);padding:0;border:1px solid var(--line-strong);border-radius:var(--radius-lg);background:var(--color-paper-raised);color:var(--text)}.blueprint-dialog::backdrop{background:var(--color-overlay)}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:14px 22px;border-bottom:1px solid var(--line)}.dialog-header h2{margin:0;font-size:17px;font-weight:550}.dialog-scroll{overflow:auto;max-height:calc(100dvh - 95px)}.large-map{min-width:740px}.large-map .service-stage-core{display:none}.large-map .service-stage-card.has-core-plan{height:218px}@media(max-width:480px){.map-caption{padding:14px 12px 0;font-size:11px}.subscription-summary{padding:12px 12px 0}.service-stage-guide{margin:16px 12px;gap:14px}.service-stage-guide>div{gap:10px}.compact-blueprint .service-stage-card{padding:10px}.compact-blueprint .service-stage-card>span{font-size:12px}.compact-blueprint .transition-chip{font-size:10px;padding:5px;gap:2px}.service-detail dl>div{grid-template-columns:74px 1fr;gap:10px}}
|
|
2
|
-
|
|
3
|
-
/* Platform brand patch; retain upstream layout and read-only behavior. */
|
|
4
|
-
.brand::before{content:"";width:28px;height:28px;flex:none;background:url("../brand-logo.png") center/contain no-repeat}.brand>svg{display:none}.stage-link.selected,.stage-link.selected.in-progress{color:var(--color-accent)}.structure-button,.icon-button{min-height:40px}.brand-row{height:64px}
|
|
Binary file
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/* Dada product palette: cool white, ink and the supplied cyan brand mark.
|
|
2
|
-
Controls: 12px; content panels: 20px; brand surfaces: 28px; status: pill. */
|
|
3
|
-
:root {
|
|
4
|
-
color-scheme: light;
|
|
5
|
-
--color-paper: #f4f8fc;
|
|
6
|
-
--color-paper-soft: #eaf1f7;
|
|
7
|
-
--color-paper-raised: #ffffff;
|
|
8
|
-
--color-ink: #203344;
|
|
9
|
-
--color-ink-strong: #102738;
|
|
10
|
-
--color-ink-soft: #506577;
|
|
11
|
-
--color-muted: #566d80;
|
|
12
|
-
--color-rule: #dce6ee;
|
|
13
|
-
--color-rule-strong: #b5c9d8;
|
|
14
|
-
--color-accent: #007399;
|
|
15
|
-
--color-accent-hover: #006889;
|
|
16
|
-
--color-accent-soft: #e0f5fd;
|
|
17
|
-
--color-accent-ink: #ffffff;
|
|
18
|
-
--color-brand-bright: #24c9f1;
|
|
19
|
-
--color-brand-panel: #e3f5fc;
|
|
20
|
-
--color-focus: #007399;
|
|
21
|
-
--color-success: #13704e;
|
|
22
|
-
--color-success-soft: #e5f5ed;
|
|
23
|
-
--color-warning: #85531b;
|
|
24
|
-
--color-warning-soft: #fff1da;
|
|
25
|
-
--color-danger: #b33845;
|
|
26
|
-
--color-danger-soft: #ffedf0;
|
|
27
|
-
--color-overlay: rgb(12 31 48 / 38%);
|
|
28
|
-
--color-shadow: rgb(27 74 106 / 8%);
|
|
29
|
-
--color-transparent: transparent;
|
|
30
|
-
--font-display: "SF Pro Display", "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
31
|
-
--font-body: "SF Pro Text", "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
32
|
-
--font-mono: "SFMono-Regular", Consolas, monospace;
|
|
33
|
-
--space-3xs: .125rem;
|
|
34
|
-
--space-2xs: .25rem;
|
|
35
|
-
--space-xs: .5rem;
|
|
36
|
-
--space-sm: .75rem;
|
|
37
|
-
--space-md: 1rem;
|
|
38
|
-
--space-lg: 1.5rem;
|
|
39
|
-
--space-xl: 2.5rem;
|
|
40
|
-
--space-2xl: 4rem;
|
|
41
|
-
--space-3xl: 6rem;
|
|
42
|
-
--space-4xl: 9rem;
|
|
43
|
-
--text-xs: .75rem;
|
|
44
|
-
--text-sm: .875rem;
|
|
45
|
-
--text-base: 1rem;
|
|
46
|
-
--text-md: 1.125rem;
|
|
47
|
-
--text-lg: 1.25rem;
|
|
48
|
-
--text-xl: 1.625rem;
|
|
49
|
-
--text-2xl: 2rem;
|
|
50
|
-
--text-display: clamp(2rem, 3.2vw, 2.75rem);
|
|
51
|
-
--ease-out: cubic-bezier(.16, 1, .3, 1);
|
|
52
|
-
--dur-micro: 100ms;
|
|
53
|
-
--dur-short: 180ms;
|
|
54
|
-
--dur-long: 320ms;
|
|
55
|
-
--rule-thin: 1px;
|
|
56
|
-
--radius-xs: .5rem;
|
|
57
|
-
--radius-sm: .75rem;
|
|
58
|
-
--radius-md: .75rem;
|
|
59
|
-
--radius-lg: 1.25rem;
|
|
60
|
-
--radius-xl: 1.75rem;
|
|
61
|
-
--radius-pill: 999px;
|
|
62
|
-
--control-height: 3rem;
|
|
63
|
-
--shadow-whisper: 0 4px 16px var(--color-shadow);
|
|
64
|
-
--shadow-sheet: 0 16px 48px var(--color-shadow);
|
|
65
|
-
--z-base: 1;
|
|
66
|
-
--z-raised: 10;
|
|
67
|
-
--z-dropdown: 100;
|
|
68
|
-
--z-sticky: 200;
|
|
69
|
-
--z-modal: 400;
|
|
70
|
-
--z-toast: 500;
|
|
71
|
-
--z-tooltip: 600;
|
|
72
|
-
}
|
|
73
|
-
@media (prefers-color-scheme: dark) {
|
|
74
|
-
:root {
|
|
75
|
-
color-scheme: dark;
|
|
76
|
-
--color-paper: #101922;
|
|
77
|
-
--color-paper-soft: #203240;
|
|
78
|
-
--color-paper-raised: #17242f;
|
|
79
|
-
--color-ink: #e3edf5;
|
|
80
|
-
--color-ink-strong: #f4faff;
|
|
81
|
-
--color-ink-soft: #b1c3d1;
|
|
82
|
-
--color-muted: #98afc0;
|
|
83
|
-
--color-rule: #2d4252;
|
|
84
|
-
--color-rule-strong: #4b677b;
|
|
85
|
-
--color-accent: #46cef0;
|
|
86
|
-
--color-accent-hover: #82e5ff;
|
|
87
|
-
--color-accent-soft: #143b4b;
|
|
88
|
-
--color-accent-ink: #092e3b;
|
|
89
|
-
--color-brand-panel: #14303f;
|
|
90
|
-
--color-focus: #46cef0;
|
|
91
|
-
--color-success: #7ae0b0;
|
|
92
|
-
--color-success-soft: #173b31;
|
|
93
|
-
--color-warning: #efc787;
|
|
94
|
-
--color-warning-soft: #3b3021;
|
|
95
|
-
--color-danger: #ff9aa5;
|
|
96
|
-
--color-danger-soft: #402a33;
|
|
97
|
-
--color-overlay: rgb(2 10 18 / 65%);
|
|
98
|
-
--color-shadow: rgb(0 8 18 / 25%);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="color-scheme" content="light dark"><link rel="icon" type="image/png" href="./brand-logo.png"><link rel="stylesheet" href="./brand.css"><title>Buddy · 创作手册</title> <script type="module" crossorigin src="./assets/index-B5VmkoSx.js"></script>
|
|
2
|
-
<link rel="stylesheet" crossorigin href="./assets/index-DWKP6b-3.css">
|
|
3
|
-
<link rel="stylesheet" href="./reader.css?v=1">
|
|
4
|
-
<script type="module" src="./reader.js?v=1"></script>
|
|
5
|
-
<link rel="stylesheet" href="./widgets.css?v=1">
|
|
6
|
-
<script type="module" src="./widgets.js?v=1"></script>
|
|
7
|
-
</head><body><div id="root"></div></body></html>
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/* Booklet reading experience. Shared colors and type come from brand.css. */
|
|
2
|
-
.header-inner, .workspace { max-width: 1184px; padding-inline: 32px; }
|
|
3
|
-
.preview-header { box-shadow: 0 4px 16px var(--color-shadow); }
|
|
4
|
-
.header-inner { padding-bottom: 12px; }
|
|
5
|
-
.brand-row { height: 58px; }
|
|
6
|
-
.brand { gap: 12px; }
|
|
7
|
-
.brand::before { width: 30px; height: 30px; }
|
|
8
|
-
.brand strong { font-size: 16px; letter-spacing: -.02em; }
|
|
9
|
-
.project-name { max-width: 32ch; font-size: 13px; }
|
|
10
|
-
.activity-status { font-size: 12px; }
|
|
11
|
-
.stage-nav { gap: 8px; }
|
|
12
|
-
.stage-link { min-height: 52px; padding: 9px 14px; gap: 10px; }
|
|
13
|
-
.stage-link.selected, .stage-link.selected.in-progress { border-color: transparent; }
|
|
14
|
-
.stage-link small { margin-top: 3px; font-size: 11px; }
|
|
15
|
-
.step-number { width: 28px; height: 28px; border-radius: 9px; background: var(--color-paper); border: 0; }
|
|
16
|
-
.selected .step-number { background: var(--color-accent); color: var(--color-accent-ink); }
|
|
17
|
-
.position-row { padding-top: 10px; }
|
|
18
|
-
.workspace { padding-top: 24px; padding-bottom: 24px; }
|
|
19
|
-
.stage-heading { margin-bottom: 16px; }
|
|
20
|
-
.stage-heading h1 { font-size: 27px; letter-spacing: -.035em; }
|
|
21
|
-
.stage-heading-status { padding: 5px 10px; border-radius: var(--radius-pill); background: var(--color-paper-soft); }
|
|
22
|
-
.structure-button, .icon-button { min-height: 38px; background: var(--color-paper-raised); }
|
|
23
|
-
.structure-button { padding: 8px 12px; }
|
|
24
|
-
.view-tabs { display: inline-flex; gap: 4px; padding: 4px; margin-bottom: 20px; border: 1px solid var(--color-rule); border-radius: 16px; background: var(--color-paper-raised); max-width: 100%; }
|
|
25
|
-
.view-tabs button { min-height: 36px; padding: 7px 16px; border: 0; border-radius: 11px; }
|
|
26
|
-
.view-tabs button[aria-selected=true] { background: var(--color-accent-soft); color: var(--color-accent); }
|
|
27
|
-
.view-tabs button[aria-selected=true] .tab-count { background: var(--color-paper-raised); color: var(--color-accent); }
|
|
28
|
-
.view-tabs button:hover { color: var(--color-accent); }
|
|
29
|
-
.tab-count { padding: 3px 7px; border-radius: var(--radius-pill); }
|
|
30
|
-
.booklet:has(.reader-navigation) { display: grid; grid-template-columns: minmax(0, 1fr) 200px; gap: 20px; align-items: start; }
|
|
31
|
-
.booklet > .draft { grid-column: 1 / -1; }
|
|
32
|
-
.booklet-document { min-width: 0; border-color: var(--color-rule); border-radius: 20px; box-shadow: var(--shadow-whisper); }
|
|
33
|
-
.booklet-cover { padding: 20px 26px; gap: 12px; background: var(--color-brand-panel); border-color: var(--color-rule); }
|
|
34
|
-
.booklet-cover > svg { width: 26px; height: 26px; }
|
|
35
|
-
.booklet-cover h2 { font-size: 22px; letter-spacing: -.025em; }
|
|
36
|
-
.booklet-cover p { font-size: 13px; line-height: 1.7; }
|
|
37
|
-
.document-count { background: var(--color-paper-raised); border-radius: 10px; padding: 7px 10px; color: var(--color-accent); }
|
|
38
|
-
.chapter { margin: 0 26px; padding: 24px 0; }
|
|
39
|
-
.chapter-head { align-items: center; gap: 10px; margin-bottom: 14px; }
|
|
40
|
-
.chapter-number { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 8px; background: var(--color-paper); color: var(--color-muted); }
|
|
41
|
-
.chapter-current .chapter-number { background: var(--color-accent-soft); color: var(--color-accent); }
|
|
42
|
-
.chapter-head h3 { font-size: 18px; letter-spacing: -.02em; }
|
|
43
|
-
.chapter-body { margin-left: 0; }
|
|
44
|
-
.chapter .prose { color: var(--color-ink); font-size: 14px; line-height: 1.8; }
|
|
45
|
-
.prose p { margin-bottom: 12px; }
|
|
46
|
-
.prose h1, .prose h2, .prose h3, .prose h4 { margin-top: 18px; margin-bottom: 9px; }
|
|
47
|
-
.prose li + li { margin-top: 5px; }
|
|
48
|
-
.prose a { color: var(--color-accent); text-underline-offset: 3px; }
|
|
49
|
-
.prose blockquote { padding: 10px 14px; margin: 14px 0; background: var(--color-accent-soft); border-radius: 0 12px 12px 0; }
|
|
50
|
-
.prose pre { padding: 16px; border-radius: 12px; background: var(--color-paper); font: 13px/1.8 var(--font-mono); }
|
|
51
|
-
.prose table { line-height: 1.7; }
|
|
52
|
-
.prose th { background: var(--color-paper); }
|
|
53
|
-
.status { font-size: 12px; }
|
|
54
|
-
.status.pending, .status.revised { padding: 5px 9px; border: 0; border-radius: var(--radius-pill); color: var(--color-accent); }
|
|
55
|
-
.status.accepted, .status.confirmed, .status.ready { padding: 5px 9px; background: var(--color-success-soft); border-radius: var(--radius-pill); }
|
|
56
|
-
.paper-footer { align-items: center; gap: 12px; }
|
|
57
|
-
.chapter .paper-footer { margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--color-rule); }
|
|
58
|
-
.paper-footer > .text-button { min-height: 36px; padding: 7px 10px; border-radius: 11px; background: var(--color-paper); color: var(--color-accent); }
|
|
59
|
-
.paper-footer > .text-button:hover { background: var(--color-accent-soft); }
|
|
60
|
-
.paper-footer summary { display: inline-flex; align-items: center; min-height: 40px; padding: 8px 0; }
|
|
61
|
-
.unresolved { margin-top: 16px; padding: 12px 14px; border: 0; border-radius: 12px; background: var(--color-warning-soft); }
|
|
62
|
-
.unresolved strong { font-weight: 600; }
|
|
63
|
-
.reader-navigation { position: sticky; top: calc(var(--header-height, 160px) + 24px); min-width: 0; padding: 14px 10px 12px; border: 1px solid var(--color-rule); border-radius: 16px; background: var(--color-paper-raised); max-height: calc(100dvh - var(--header-height, 160px) - 48px); overflow-y: auto; }
|
|
64
|
-
.reader-navigation > summary { display: flex; align-items: center; gap: 10px; padding: 0 8px 10px; list-style: none; cursor: pointer; }
|
|
65
|
-
.reader-navigation > summary strong { flex: 1; font-size: 13px; font-weight: 600; }
|
|
66
|
-
.reader-navigation > summary > span { font-size: 12px; color: var(--color-muted); }
|
|
67
|
-
.reader-navigation > summary::after { content: "+"; font-size: 18px; color: var(--color-muted); }
|
|
68
|
-
.reader-navigation[open] > summary::after { content: "−"; }
|
|
69
|
-
.reader-navigation:not([open]) > summary { padding-bottom: 0; }
|
|
70
|
-
.reader-navigation ol { padding: 0; margin: 0; list-style: none; display: grid; gap: 4px; }
|
|
71
|
-
.reader-navigation a { display: flex; gap: 10px; align-items: baseline; padding: 8px 10px; min-height: 38px; border-radius: 11px; font-size: 13px; line-height: 1.6; text-decoration: none; color: var(--color-ink-soft); }
|
|
72
|
-
.reader-navigation a:hover { background: var(--color-paper); color: var(--color-accent); }
|
|
73
|
-
.reader-navigation a[aria-current] { background: var(--color-accent-soft); color: var(--color-accent); font-weight: 600; }
|
|
74
|
-
.reader-chapter-number { flex: none; color: var(--color-muted); font-size: 11px; font-variant-numeric: tabular-nums; }
|
|
75
|
-
.reader-navigation a[aria-current] .reader-chapter-number { color: var(--color-accent); }
|
|
76
|
-
.reader-pending { display: block; font-size: 11px; font-weight: 400; color: var(--color-muted); }
|
|
77
|
-
.reader-hint { margin: 12px 8px 0; padding-top: 12px; border-top: 1px solid var(--color-rule); font-size: 12px; color: var(--color-muted); line-height: 1.8; }
|
|
78
|
-
.focus-paper { border-color: var(--color-rule); background: var(--color-paper-raised); box-shadow: var(--shadow-whisper); }
|
|
79
|
-
.focus-context { padding: 12px 22px; border-color: var(--color-rule); }
|
|
80
|
-
.focus-content { padding: 20px 24px; }
|
|
81
|
-
.record-heading { padding: 14px 20px; background: var(--color-paper-raised); }
|
|
82
|
-
.record-heading h2 { font-size: 14px; color: var(--color-ink); }
|
|
83
|
-
.artifact-fold > summary { min-height: 52px; padding-block: 13px; border-radius: 8px; }
|
|
84
|
-
.artifact-fold > summary:hover { color: var(--color-accent); }
|
|
85
|
-
.artifact-fold > summary:hover > span:first-child { color: var(--color-accent); }
|
|
86
|
-
.booklet-empty, .view-empty { padding: 28px; }
|
|
87
|
-
.booklet-empty > svg, .view-empty > svg { width: 36px; height: 36px; color: var(--color-accent); }
|
|
88
|
-
.booklet-empty h2, .view-empty h2 { font-size: 21px; }
|
|
89
|
-
.booklet-empty ol { gap: 16px 24px; }
|
|
90
|
-
.notice, .completion-notice { border: 1px solid var(--color-rule); border-radius: 16px; background: var(--color-brand-panel); }
|
|
91
|
-
.structure-dialog { width: min(620px, calc(100vw - 32px)); border: 1px solid var(--color-rule); border-radius: 24px; box-shadow: var(--shadow-sheet); }
|
|
92
|
-
.structure-dialog .dialog-header { padding: 16px 22px; background: var(--color-paper-raised); }
|
|
93
|
-
.structure-content { padding: 20px; }
|
|
94
|
-
.structure-group + .structure-group { margin-top: 22px; }
|
|
95
|
-
.outline-topic { align-items: center; padding: 5px 0; gap: 14px; }
|
|
96
|
-
.outline-topic button, .outline-topic > span { min-height: 44px; padding: 10px; border-radius: 10px; }
|
|
97
|
-
.outline-topic button:hover { background: var(--color-accent-soft); }
|
|
98
|
-
.page-footer { padding-top: 20px; text-align: center; line-height: 1.8; }
|
|
99
|
-
button, a, summary { transition: color var(--dur-short) ease, background-color var(--dur-short) ease, border-color var(--dur-short) ease; }
|
|
100
|
-
button:active { opacity: 1; }
|
|
101
|
-
button:focus-visible, a:focus-visible, summary:focus-visible, .chapter:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 4px; }
|
|
102
|
-
@media (max-width: 900px) {
|
|
103
|
-
.header-inner, .workspace { padding-inline: 24px; }
|
|
104
|
-
.booklet:has(.reader-navigation) { display: flex; flex-direction: column; gap: 16px; }
|
|
105
|
-
.booklet > * { width: 100%; }
|
|
106
|
-
.booklet > .draft { order: -2; }
|
|
107
|
-
.reader-navigation { order: -1; position: static; max-height: none; padding: 16px; border-radius: 16px; }
|
|
108
|
-
.reader-navigation > summary { padding: 0; min-height: 24px; }
|
|
109
|
-
.reader-navigation[open] > summary { padding-bottom: 14px; }
|
|
110
|
-
.reader-navigation ol { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
111
|
-
.reader-hint { margin-inline: 8px; }
|
|
112
|
-
.stage-link { padding: 11px 12px; gap: 9px; }
|
|
113
|
-
}
|
|
114
|
-
@media (max-width: 600px) {
|
|
115
|
-
.header-inner, .workspace { padding-inline: 16px; }
|
|
116
|
-
.brand-row { height: 56px; gap: 12px; }
|
|
117
|
-
.brand { gap: 8px; flex-wrap: wrap; }
|
|
118
|
-
.brand::before { width: 28px; height: 28px; }
|
|
119
|
-
.brand strong { font-size: 16px; }
|
|
120
|
-
.project-name { max-width: 15ch; font-size: 11px; border: 0; margin: 0; padding-left: 0; }
|
|
121
|
-
.activity-status { max-width: 40%; font-size: 11px; }
|
|
122
|
-
.activity-status small { max-width: 16ch; }
|
|
123
|
-
.stage-nav { gap: 6px; }
|
|
124
|
-
.stage-link { flex-direction: column; align-items: flex-start; gap: 6px; padding: 8px 10px; min-height: 82px; }
|
|
125
|
-
.stage-name { font-size: 14px; }
|
|
126
|
-
.stage-link small { font-size: 11px; }
|
|
127
|
-
.step-number { width: 24px; height: 24px; font-size: 11px; border-radius: 8px; }
|
|
128
|
-
.workspace { padding-top: 20px; }
|
|
129
|
-
.stage-heading { gap: 10px; margin-bottom: 14px; }
|
|
130
|
-
.stage-heading > div { gap: 8px; }
|
|
131
|
-
.stage-heading h1 { font-size: 25px; }
|
|
132
|
-
.stage-heading-status { font-size: 11px; padding: 4px 7px; }
|
|
133
|
-
.structure-button { font-size: 12px; padding: 9px 11px; }
|
|
134
|
-
.view-tabs { width: 100%; margin-bottom: 20px; gap: 4px; }
|
|
135
|
-
.view-tabs button { flex: 1; justify-content: center; padding: 9px 8px; gap: 6px; font-size: 13px; }
|
|
136
|
-
.tab-count { font-size: 10px; }
|
|
137
|
-
.view-tabs button, .structure-button, .icon-button, .paper-footer > .text-button, .reader-navigation a { min-height: 44px; }
|
|
138
|
-
.booklet-document { border-radius: 20px; }
|
|
139
|
-
.booklet-cover { padding: 18px 20px; gap: 12px; }
|
|
140
|
-
.booklet-cover h2 { font-size: 21px; }
|
|
141
|
-
.booklet-cover > svg { width: 26px; height: 26px; }
|
|
142
|
-
.document-count { font-size: 11px; padding: 6px 8px; }
|
|
143
|
-
.chapter { margin-inline: 20px; padding-block: 22px; }
|
|
144
|
-
.chapter-head { flex-wrap: wrap; gap: 10px; }
|
|
145
|
-
.chapter-head h3 { font-size: 18px; }
|
|
146
|
-
.chapter-head .status { margin-left: auto; }
|
|
147
|
-
.chapter .prose { font-size: 14px; }
|
|
148
|
-
.focus-context { padding: 14px 18px; }
|
|
149
|
-
.focus-content { padding: 18px 20px; }
|
|
150
|
-
.booklet-empty, .view-empty { padding: 26px 22px; }
|
|
151
|
-
.booklet-empty h2, .view-empty h2 { font-size: 21px; }
|
|
152
|
-
.structure-content { padding: 20px; }
|
|
153
|
-
.structure-dialog .dialog-header { padding: 18px 20px; }
|
|
154
|
-
}
|
|
155
|
-
@media (max-width: 374px) {
|
|
156
|
-
.project-name { display: none; }
|
|
157
|
-
.activity-status { max-width: 48%; }
|
|
158
|
-
.stage-link { padding: 9px 7px; }
|
|
159
|
-
.view-tabs button { gap: 4px; padding-inline: 6px; }
|
|
160
|
-
.reader-navigation ol { grid-template-columns: 1fr; }
|
|
161
|
-
.chapter { margin-inline: 16px; }
|
|
162
|
-
}
|
|
163
|
-
@media (prefers-reduced-motion: reduce) {
|
|
164
|
-
*, *::before, *::after { scroll-behavior: auto !important; transition: none !important; animation: none !important; }
|
|
165
|
-
}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
// Progressive reading controls for the pinned Creator preview. Content and
|
|
2
|
-
// confirmations remain owned by the upstream application and Coding Agent.
|
|
3
|
-
const root = document.getElementById("root");
|
|
4
|
-
const compact = window.matchMedia("(max-width: 900px)");
|
|
5
|
-
const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
6
|
-
let currentDocument;
|
|
7
|
-
let navigation;
|
|
8
|
-
let signature = "";
|
|
9
|
-
let frame;
|
|
10
|
-
let chapterObserver;
|
|
11
|
-
let headerObserver;
|
|
12
|
-
let activeId;
|
|
13
|
-
|
|
14
|
-
function markActive(id) {
|
|
15
|
-
activeId = id;
|
|
16
|
-
navigation?.querySelectorAll("a[data-chapter]").forEach(link => {
|
|
17
|
-
if (link.dataset.chapter === id) link.setAttribute("aria-current", "location");
|
|
18
|
-
else link.removeAttribute("aria-current");
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function observeChapters(chapters) {
|
|
23
|
-
chapterObserver?.disconnect();
|
|
24
|
-
const headerHeight = document.querySelector(".preview-header")?.getBoundingClientRect().height || 0;
|
|
25
|
-
chapterObserver = new IntersectionObserver(entries => {
|
|
26
|
-
const visible = entries.filter(entry => entry.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top);
|
|
27
|
-
if (visible[0]) markActive(visible[0].target.id);
|
|
28
|
-
}, { rootMargin: `-${Math.ceil(headerHeight + 20)}px 0px -45% 0px` });
|
|
29
|
-
chapters.forEach(chapter => chapterObserver.observe(chapter));
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function clearNavigation() {
|
|
33
|
-
chapterObserver?.disconnect();
|
|
34
|
-
headerObserver?.disconnect();
|
|
35
|
-
navigation?.remove();
|
|
36
|
-
navigation = undefined;
|
|
37
|
-
currentDocument = undefined;
|
|
38
|
-
signature = "";
|
|
39
|
-
activeId = undefined;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function syncNavigation() {
|
|
43
|
-
const book = root.querySelector(".booklet-document");
|
|
44
|
-
if (!book) {
|
|
45
|
-
if (navigation) clearNavigation();
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const chapters = [...book.querySelectorAll(".chapter[id]")];
|
|
49
|
-
const nextSignature = JSON.stringify(chapters.map(chapter => [chapter.id, chapter.querySelector("h3")?.textContent, chapter.querySelector(".status")?.textContent]));
|
|
50
|
-
if (book === currentDocument && navigation?.isConnected && signature === nextSignature) return;
|
|
51
|
-
const previousOpen = book === currentDocument ? navigation?.open : undefined;
|
|
52
|
-
const previousActive = book === currentDocument ? activeId : undefined;
|
|
53
|
-
clearNavigation();
|
|
54
|
-
currentDocument = book;
|
|
55
|
-
signature = nextSignature;
|
|
56
|
-
if (!chapters.length) return;
|
|
57
|
-
|
|
58
|
-
navigation = document.createElement("details");
|
|
59
|
-
navigation.className = "reader-navigation";
|
|
60
|
-
navigation.open = previousOpen ?? !compact.matches;
|
|
61
|
-
const summary = document.createElement("summary");
|
|
62
|
-
const title = document.createElement("strong");
|
|
63
|
-
title.textContent = "本册目录";
|
|
64
|
-
const count = document.createElement("span");
|
|
65
|
-
count.textContent = `${chapters.length} 章`;
|
|
66
|
-
summary.append(title, count);
|
|
67
|
-
const nav = document.createElement("nav");
|
|
68
|
-
nav.setAttribute("aria-label", "本册章节");
|
|
69
|
-
const list = document.createElement("ol");
|
|
70
|
-
for (const chapter of chapters) {
|
|
71
|
-
const item = document.createElement("li");
|
|
72
|
-
const link = document.createElement("a");
|
|
73
|
-
link.href = `#${encodeURIComponent(chapter.id)}`;
|
|
74
|
-
link.dataset.chapter = chapter.id;
|
|
75
|
-
const number = document.createElement("span");
|
|
76
|
-
number.className = "reader-chapter-number";
|
|
77
|
-
number.textContent = chapter.querySelector(".chapter-number")?.textContent || "";
|
|
78
|
-
const label = document.createElement("span");
|
|
79
|
-
label.textContent = chapter.querySelector("h3")?.textContent || chapter.id;
|
|
80
|
-
const status = chapter.querySelector(".status");
|
|
81
|
-
if (status) link.setAttribute("aria-label", `${label.textContent},${status.textContent}`);
|
|
82
|
-
if (status?.matches(".pending, .revised")) {
|
|
83
|
-
const pending = document.createElement("small");
|
|
84
|
-
pending.className = "reader-pending";
|
|
85
|
-
pending.textContent = status.textContent;
|
|
86
|
-
label.append(pending);
|
|
87
|
-
}
|
|
88
|
-
link.append(number, label);
|
|
89
|
-
item.append(link);
|
|
90
|
-
list.append(item);
|
|
91
|
-
}
|
|
92
|
-
nav.append(list);
|
|
93
|
-
const hint = document.createElement("p");
|
|
94
|
-
hint.className = "reader-hint";
|
|
95
|
-
hint.textContent = "想调整某一章?复制章节下方的修改引用,回到 Coding Agent 继续。";
|
|
96
|
-
navigation.append(summary, nav, hint);
|
|
97
|
-
navigation.addEventListener("click", event => {
|
|
98
|
-
const link = event.target.closest("a[data-chapter]");
|
|
99
|
-
if (!link || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
|
|
100
|
-
const target = document.getElementById(link.dataset.chapter);
|
|
101
|
-
if (!target) return;
|
|
102
|
-
event.preventDefault();
|
|
103
|
-
// Tell upstream to preserve this reading position on the next live update.
|
|
104
|
-
document.dispatchEvent(new Event("buddy:reader-browse"));
|
|
105
|
-
if (compact.matches) navigation.open = false;
|
|
106
|
-
requestAnimationFrame(() => {
|
|
107
|
-
if (!target.isConnected) return;
|
|
108
|
-
target.focus({ preventScroll: true });
|
|
109
|
-
target.scrollIntoView({ behavior: reducedMotion.matches ? "instant" : "smooth", block: "start" });
|
|
110
|
-
markActive(target.id);
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
book.after(navigation);
|
|
114
|
-
markActive(previousActive && chapters.some(chapter => chapter.id === previousActive) ? previousActive : chapters[0].id);
|
|
115
|
-
observeChapters(chapters);
|
|
116
|
-
const header = document.querySelector(".preview-header");
|
|
117
|
-
if (header) {
|
|
118
|
-
headerObserver = new ResizeObserver(() => observeChapters(chapters));
|
|
119
|
-
headerObserver.observe(header);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function scheduleSync() {
|
|
124
|
-
cancelAnimationFrame(frame);
|
|
125
|
-
frame = requestAnimationFrame(syncNavigation);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Status text, stage changes and replacement snapshots update the outline.
|
|
129
|
-
// Attribute changes from our active marker do not retrigger this observer.
|
|
130
|
-
const observer = new MutationObserver(scheduleSync);
|
|
131
|
-
observer.observe(root, { childList: true, characterData: true, subtree: true });
|
|
132
|
-
compact.addEventListener("change", () => {
|
|
133
|
-
if (navigation) navigation.open = !compact.matches;
|
|
134
|
-
});
|
|
135
|
-
scheduleSync();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.design-navigation{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:14px max(20px,calc((100vw - 1120px)/2));border-bottom:1px solid var(--color-rule,#e7e9e5);background:var(--color-paper-raised,#fff);font:14px/1.5 -apple-system,BlinkMacSystemFont,sans-serif}.design-navigation button,.design-state-tabs button{font:inherit;border:1px solid var(--color-rule,#ddd);border-radius:12px;background:transparent;padding:9px 15px;color:var(--color-ink,#222);cursor:pointer}.design-navigation button[aria-pressed=true],.design-state-tabs button[aria-pressed=true]{background:var(--color-accent-soft,#eff4e9);border-color:var(--color-accent,#536f38);color:var(--color-accent,#536f38)}.design-progress{margin-left:auto;font-size:12px;color:var(--color-muted,#777)}#root[hidden],.design-workspace[hidden]{display:none!important}.design-workspace{max-width:1184px;margin:0 auto;padding:36px 32px 80px;color:var(--color-ink,#222);font:16px/1.65 -apple-system,BlinkMacSystemFont,sans-serif}.design-heading h1{font-size:30px;letter-spacing:-.04em;line-height:1.3;margin:8px 0 14px;font-weight:600}.design-heading>p{color:var(--color-muted,#73786f);margin:8px 0}.design-eyebrow{font-size:12px;letter-spacing:.09em}.design-steps{padding:0;list-style:none;display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:30px 0 20px}.design-steps li{display:flex;gap:10px;align-items:center;border-bottom:2px solid var(--color-rule,#e5e7e1);padding:12px 0;font-size:14px;color:var(--color-muted,#7b8175)}.design-steps li>span{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;background:var(--color-paper-soft,#f1f3ed);font-size:12px}.design-steps li.current{color:var(--color-accent,#536f38);border-color:var(--color-accent,#536f38)}.design-steps li.done{color:var(--color-ink,#333)}.design-callout{border-radius:12px;padding:14px 18px;background:var(--color-accent-soft,#eff4e9);font-size:14px}.design-card{border:1px solid var(--color-rule,#e5e7e1);background:var(--color-paper-raised,#fff);border-radius:20px;padding:24px;margin-top:22px;min-width:0}.design-card h2{font-size:20px;font-weight:600;margin:0 0 16px}.design-card h3{font-size:18px;font-weight:500;margin:6px 0}.design-card p{margin:12px 0;white-space:pre-wrap;overflow-wrap:anywhere}.design-muted{color:var(--color-muted,#777);font-size:14px}.design-badge{display:inline-block;font-size:12px;padding:4px 10px;border-radius:99px;background:var(--color-paper-soft,#f4f4f1);color:var(--color-muted,#777)}.design-badge.passed{background:var(--color-accent-soft,#eff4e9);color:var(--color-accent,#536f38)}.design-specs{display:grid;grid-template-columns:1fr 1fr;gap:18px 28px;margin:20px 0}.design-field dt{font-size:12px;color:var(--color-muted,#777);margin-bottom:5px}.design-field dd{margin:0;white-space:pre-wrap;overflow-wrap:anywhere}.design-list-item{border-top:1px solid var(--color-rule,#e5e7e1);padding:18px 0;margin-top:16px}.design-card summary{cursor:pointer;font-weight:500}.design-card table{width:100%;border-collapse:collapse;font-size:14px;table-layout:fixed}.design-card th,.design-card td{padding:12px 10px;text-align:left;vertical-align:top;border-bottom:1px solid var(--color-rule,#e5e7e1);overflow-wrap:anywhere}.design-card th{font-size:12px;color:var(--color-muted,#777);font-weight:500}.design-prototype,.design-acceptance{padding:20px 0;border-top:1px solid var(--color-rule,#e5e7e1);margin-top:20px}.design-state-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}.design-views{display:grid;grid-template-columns:1fr 1fr;gap:20px;background:var(--color-paper-soft,#f4f5f1);padding:24px 16px;border-radius:16px;overflow-x:auto}.design-views figure{margin:0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:14px}.design-views figcaption{font-size:14px;color:var(--color-muted,#777)}.design-views iframe{border:0;outline:1px solid #ddd;border-radius:24px;background:#fff;flex:none;max-width:100%;box-shadow:0 10px 36px #0000000a}.design-views a,.design-card a{color:var(--color-accent,#536f38);font-size:14px;overflow-wrap:anywhere}.design-download{display:inline-block;border:1px solid var(--color-rule,#ddd);padding:9px 14px;border-radius:12px;margin:8px 12px 16px 0}.design-navigation button:focus-visible,.design-workspace :is(button,a,summary):focus-visible{outline:3px solid var(--color-accent,#536f38);outline-offset:3px}@media(max-width:700px){.design-navigation{padding:12px 16px}.design-progress{width:100%;margin-left:0;font-size:11px}.design-workspace{padding:24px 16px 50px}.design-heading h1{font-size:24px}.design-card{padding:18px 14px}.design-specs{grid-template-columns:1fr}.design-steps{gap:6px}.design-steps li{flex-direction:column;font-size:11px;align-items:flex-start;gap:7px}.design-views{grid-template-columns:1fr;padding:16px 0;gap:30px}.design-card th,.design-card td{padding:10px 4px;font-size:12px}.design-state-tabs button{font-size:13px;padding:8px 10px}}
|