diff --git a/EF-COACH/landing/app.js b/EF-COACH/landing/app.js
index 8cbc46e..4fff494 100644
--- a/EF-COACH/landing/app.js
+++ b/EF-COACH/landing/app.js
@@ -1,82 +1,9 @@
-const demos = [
- {
- label: "Life freeze",
- prompt: "I need to pay the bill, eat something, and answer the text, but I am frozen.",
- generic:
- "Make a list, decide what is most important, set a timer, and reward yourself when you finish.",
- unstuck:
- "I am holding the three loops. Biology comes first because planning on empty is false data. Eat the smallest available food, then reply with one word: fed.",
- },
- {
- label: "Get started",
- prompt: "I need a coach to get started on this.",
- generic:
- "You can do it. Try setting a timer, making a to-do list, and reminding yourself why this matters.",
- unstuck:
- "You do not need to make this clear before I can help. Send the messy task pile as-is, or any three items if the pile is too much. I will sort it outside your head and give back one next move.",
- },
- {
- label: "Message spiral",
- prompt: "That message makes me feel like I did something wrong.",
- generic:
- "Try not to take it personally. People are usually not as upset as you think.",
- unstuck:
- "We are not processing your worth through a notification. First pass: quote the sentence that carries the threat, then write what it literally asks for.",
- },
- {
- label: "Inbox/calendar",
- prompt: "My inbox and calendar are a mess and I do not know what is real.",
- generic:
- "Clean your inbox, update your calendar, prioritize every commitment, and make a better schedule.",
- unstuck:
- "That is system overload, not a character problem. We are rescuing live obligations: open the calendar, name the next hard anchor, then pick one inbox item tied to time, money, safety, or another person.",
- },
- {
- label: "Too many loops",
- prompt: "I need to shower, answer the text, find the form, and clean the kitchen.",
- generic:
- "Prioritize your tasks by urgency and importance. You can use a matrix to decide what to do first.",
- unstuck:
- "I am holding the list. You only need the first relief move. Choose the loop that gets easier if it moves 10 percent, then touch only that surface.",
- },
- {
- label: "Failed plan",
- prompt: "I tried to start the insurance form Monday, yesterday, and this morning. I keep failing.",
- generic:
- "Stay positive and try again. Consistency is built by showing up, even when motivation is low.",
- unstuck:
- "That is three attempts. We are not trying harder at the same plan. The plan failed; you did not. Pick the closest blocker: energy, missing document, unclear first field, or dread.",
- },
-];
-
globalThis.document?.documentElement?.classList?.add("js");
-function optionalSelector(selector) {
- try {
- return document.querySelector(selector);
- } catch {
- return null;
- }
-}
-
-function optionalSelectorAll(selector) {
- try {
- return Array.from(document.querySelectorAll(selector));
- } catch {
- return [];
- }
-}
-
-function trackUnstuck(eventName, properties = {}) {
- window.UnstuckAnalytics?.track?.(eventName, properties);
-}
-
-const navToggle = optionalSelector(".nav-toggle");
-const navLinks = optionalSelectorAll(".nav-links a");
-
-navLinks.forEach((link, index) => {
- link.style.setProperty("--link-index", index);
-});
+const navToggle = document.querySelector(".nav-toggle");
+const navLinks = Array.from(document.querySelectorAll("#nav-links a"));
+const sampleButtons = Array.from(document.querySelectorAll("[data-sample]"));
+const stuckSentence = document.querySelector("#stuck-sentence");
if (navToggle) {
navToggle.addEventListener("click", () => {
@@ -84,382 +11,19 @@ if (navToggle) {
document.body.classList.toggle("nav-open", nextState);
navToggle.setAttribute("aria-expanded", String(nextState));
});
-
- navLinks.forEach((link) => {
- link.addEventListener("click", () => {
- document.body.classList.remove("nav-open");
- navToggle.setAttribute("aria-expanded", "false");
- });
- });
}
-const reviewPanels = optionalSelectorAll(".review-panel");
-const reviewPanelIds = new Set(reviewPanels.map((panel) => panel.id).filter(Boolean));
-const reviewPanelAliases = new Map([
- ["reviewer", "demo"],
- ["submission", "demo"],
-]);
-const reviewPanelLinks = optionalSelectorAll('a[href^="#"]').filter((link) =>
- reviewPanelIds.has(link.getAttribute("href").replace(/^#/, "")),
-);
-const defaultReviewPanel = reviewPanelIds.has("demo") ? "demo" : reviewPanels[0]?.id;
-
-function setActiveReviewPanel(panelId = defaultReviewPanel, options = {}) {
- panelId = reviewPanelAliases.get(panelId) || panelId;
- if (!panelId || !reviewPanelIds.has(panelId)) return false;
-
- const { updateHash = false, scroll = false } = options;
- reviewPanels.forEach((panel) => {
- const active = panel.id === panelId;
- panel.classList.toggle("is-active", active);
- panel.hidden = !active;
- panel.setAttribute("aria-hidden", String(!active));
- });
-
- reviewPanelLinks.forEach((link) => {
- const active = link.getAttribute("href") === `#${panelId}`;
- link.classList.toggle("is-active", active);
- if (active) {
- link.setAttribute("aria-current", "true");
- } else {
- link.removeAttribute("aria-current");
- }
- });
-
- document.body.classList.add("review-deck-ready");
-
- trackUnstuck("landing panel viewed", {
- panel: panelId,
- source: updateHash ? "navigation" : "load",
- });
-
- if (updateHash && window.location.hash !== `#${panelId}`) {
- window.history.pushState(null, "", `#${panelId}`);
- }
-
- if (scroll) {
- optionalSelector(".review-deck")?.scrollIntoView({ block: "start", behavior: "auto" });
- }
-
- return true;
-}
-
-if (reviewPanels.length) {
- reviewPanelLinks.forEach((link) => {
- link.addEventListener("click", (event) => {
- const panelId = link.getAttribute("href").replace(/^#/, "");
- event.preventDefault();
- setActiveReviewPanel(panelId, { updateHash: true, scroll: true });
- document.body.classList.remove("nav-open");
- navToggle?.setAttribute("aria-expanded", "false");
- });
- });
-
- window.addEventListener("hashchange", () => {
- const panelId = window.location.hash.replace(/^#/, "");
- if (reviewPanelIds.has(panelId) || reviewPanelAliases.has(panelId)) {
- setActiveReviewPanel(panelId, { scroll: true, updateHash: reviewPanelAliases.has(panelId) });
- }
- });
-
- const initialPanel = window.location.hash.replace(/^#/, "");
- const didSelectHash = setActiveReviewPanel(initialPanel, {
- scroll: Boolean(initialPanel),
- updateHash: reviewPanelAliases.has(initialPanel),
- });
- if (!didSelectHash) {
- setActiveReviewPanel(defaultReviewPanel);
- }
-
- window.UnstuckLanding = {
- showPanel(panelId, options = {}) {
- return setActiveReviewPanel(panelId, options);
- },
- };
-}
-
-const promptEl = optionalSelector("#demo-prompt");
-const genericEl = optionalSelector("#demo-generic");
-const unstuckEl = optionalSelector("#demo-unstuck");
-const tabs = optionalSelectorAll(".prompt-tab");
-let activeDemo = 0;
-let cycleTimer = null;
-
-function setDemo(index, userInitiated = false) {
- if (!promptEl || !genericEl || !unstuckEl || !tabs.length) return;
-
- activeDemo = index;
- const demo = demos[index];
- promptEl.textContent = demo.prompt;
- genericEl.textContent = demo.generic;
- unstuckEl.textContent = demo.unstuck;
-
- tabs.forEach((tab, tabIndex) => {
- const active = tabIndex === index;
- tab.classList.toggle("active", active);
- tab.setAttribute("aria-selected", String(active));
- });
-
- if (userInitiated) {
- trackUnstuck("example selected", {
- example: demo.label,
- example_index: index,
- source: "prompt-tab",
- });
- restartCycle();
- }
-}
-
-function restartCycle() {
- window.clearInterval(cycleTimer);
- cycleTimer = null;
-}
-
-if (promptEl && genericEl && unstuckEl && tabs.length) {
- tabs.forEach((tab) => {
- tab.addEventListener("click", () => {
- const index = Number.parseInt(tab.dataset.demo, 10);
- setDemo(index, true);
- });
- });
-
- restartCycle();
-}
-
-const coachConsole = optionalSelector("#coach-console");
-const coachInput = optionalSelector("#coach-input");
-const sampleChips = optionalSelectorAll(".sample-chip");
-const consoleState = optionalSelector("#console-state");
-const consoleStateNote = optionalSelector("#console-state-note");
-const consoleFriction = optionalSelector("#console-friction");
-const consoleFrictionNote = optionalSelector("#console-friction-note");
-const consoleMove = optionalSelector("#console-move");
-const consoleMoveNote = optionalSelector("#console-move-note");
-const consoleCheck = optionalSelector("#console-check");
-const consoleCheckNote = optionalSelector("#console-check-note");
-
-const consolePatterns = [
- {
- match: /(brain dump|braindump|dump:|dumping|everything in my head|too much in my head|mental clutter|dentist.*bill|bill.*dishes.*email)/i,
- state: "Yellow",
- stateNote: "The user is carrying too many loops internally. The coach becomes the sorting surface.",
- friction: "Brain dump overload",
- frictionNote: "The raw dump is valid input. The user should not have to organize it before receiving help.",
- move: "Sort outside the head.",
- moveNote: "Bucket the dump into Body/State, Now, Next, Later, Waiting, and Trash, then return one next move.",
- check: "One next move.",
- checkNote: "Check is a single action signal, with the rest visibly held.",
- },
- {
- match: /(dopamine menu|dopamine|understimulated|stimulation|activation fuel|need a spark|nothing feels rewarding|boring|reward menu|fun menu)/i,
- state: "Yellow",
- stateNote: "The task may be clear, but the state system needs activation fuel.",
- friction: "Activation fuel gap",
- frictionNote: "This is a regulation bridge, not clinical dopamine advice and not a reward rabbit hole.",
- move: "Choose one tiny spark.",
- moveNote: "Pick or assign one 2-10 minute body, novelty, comfort, social, or quick-win cue, then name the return target.",
- check: "Spark plus target.",
- checkNote: "Check is that the target is visible when the spark ends.",
- },
- {
- match: /(idea|maybe|what if|could build|new feature|checklist|someday|another thing|remember|remind me|note to self)/i,
- state: "Green-yellow",
- stateNote: "The idea has energy, but it can steal the active lane.",
- friction: "Capture versus execution",
- frictionNote: "Novelty needs a parking lot, not a takeover.",
- move: "Park with a return time.",
- moveNote: "Write the idea in one sentence, add why it matters, and decide when it gets looked at again.",
- check: "One parked idea.",
- checkNote: "The active work continues unless the idea is explicitly promoted.",
- },
- {
- match: /(message|email|reply|review|comment|critique|feedback|approved|rejected|bad at this|spiral|did something wrong|mad at me|upset|conflict)/i,
- state: "Red-yellow",
- stateNote: "Worth is too close to the message. Sort before interpreting.",
- friction: "Communication threat",
- frictionNote: "The task is not to feel better on command. It is to separate what was said from what it means.",
- move: "Separate ask from meaning.",
- moveNote: "Quote the sentence that carries the threat, then write what it literally asks for.",
- check: "One quoted sentence.",
- checkNote: "Check is a quote and a literal ask, not a rebuttal or apology.",
- },
- {
- match: /(inbox|calendar|schedule|appointment|meeting|unread|reply debt|double-book|overdue|deadline)/i,
- state: "Yellow",
- stateNote: "The surfaces are noisy, so the first job is reality, not cleanup.",
- friction: "Calendar/inbox overload",
- frictionNote: "The user needs live obligations rescued before any full-system processing.",
- move: "Rescue live obligations.",
- moveNote: "Open one surface, name the next hard anchor, then choose one inbox item tied to time, money, safety, relationship, or another person.",
- check: "One hard anchor or live item.",
- checkNote: "Check is one real calendar anchor or inbox item, not a cleaned system.",
- },
- {
- match: /(too many|overwhelm|everything|tabs|switching|all of this|list|head|brain|bill|form|kitchen|laundry|dishes|shower|groceries|errand|admin)/i,
- state: "Yellow",
- stateNote: "Working memory is saturated. The coach holds the list so the user does not have to.",
- friction: "Working-memory overload",
- frictionNote: "Prioritizing inside the head is the failure mode.",
- move: "Externalize the loops.",
- moveNote: "Write each active loop as a rough line, then mark the one that creates the most relief at 10 percent done.",
- check: "One relief mark.",
- checkNote: "The output is a marked line, not a complete priority system.",
- },
- {
- match: /(failed|tried|again|same plan|three times|keeps failing|cannot make myself|avoid|dread|stuck all week)/i,
- state: "Yellow-red",
- stateNote: "Repeated failed starts mean the strategy failed. The person did not.",
- friction: "Plan mismatch",
- frictionNote: "Trying harder at the same plan is now noise.",
- move: "Name the closest blocker.",
- moveNote: "Choose one: energy, fear of response or conflict, unclear first action, or too many surfaces open.",
- check: "One blocker named.",
- checkNote: "The next plan changes only after the blocker is named.",
- },
- {
- match: /(tired|fried|crash|hungry|late|hyperfocus|forgot to eat|body|sleep|exhausted|ate|eat|food|water|shower|overstimulated)/i,
- state: "Red",
- stateNote: "Biology is in the loop. Planning quality is not the bottleneck.",
- friction: "Recovery before re-entry",
- frictionNote: "The coach protects the next session instead of extracting one more task.",
- move: "Close the loop.",
- moveNote: "Save state, write one re-entry breadcrumb, and take the smallest body reset available.",
- check: "A re-entry breadcrumb.",
- checkNote: "The work is not abandoned if the next start point is visible.",
- },
- {
- match: /(start|begin|blank|stuck|cannot|can't|open|frozen|freeze|first step|where do i start)/i,
- state: "Yellow",
- stateNote: "Enough capacity to externalize the pile, not enough for a plan essay.",
- friction: "Task pile overload",
- frictionNote: "The blocker is choosing from the whole pile while already overloaded.",
- move: "Send the messy task pile.",
- moveNote: "Fragments, repeats, and half-words are fine. If the pile is too much, send any three items.",
- check: "Any three items.",
- checkNote: "Check is the raw pile leaving the user's head, not a polished plan.",
- },
-];
-
-const fallbackConsole = {
- state: "Unknown-yellow",
- stateNote: "The coach does not guess capacity from a polished prompt.",
- friction: "Needs calibration",
- frictionNote: "Start with the smallest question that changes the next move.",
- move: "Ask one state question.",
- moveNote: "Choose: green, yellow, red, or body-first. Then pick the smallest visible action.",
- check: "One honest signal.",
- checkNote: "Check is the user's state answer, not a productivity plan.",
-};
-
-function renderConsole(result) {
- if (
- !consoleState ||
- !consoleStateNote ||
- !consoleFriction ||
- !consoleFrictionNote ||
- !consoleMove ||
- !consoleMoveNote ||
- !consoleCheck ||
- !consoleCheckNote
- ) {
- return;
- }
-
- consoleState.textContent = result.state;
- consoleStateNote.textContent = result.stateNote;
- consoleFriction.textContent = result.friction;
- consoleFrictionNote.textContent = result.frictionNote;
- consoleMove.textContent = result.move;
- consoleMoveNote.textContent = result.moveNote;
- consoleCheck.textContent = result.check;
- consoleCheckNote.textContent = result.checkNote;
-}
-
-function coachMoment(text) {
- const normalized = text.trim();
- if (!normalized) {
- return fallbackConsole;
- }
- return consolePatterns.find((pattern) => pattern.match.test(normalized)) || fallbackConsole;
-}
-
-if (coachConsole && coachInput) {
- coachConsole.addEventListener("submit", (event) => {
- event.preventDefault();
- const result = coachMoment(coachInput.value);
- renderConsole(result);
- trackUnstuck("coach preview submitted", {
- input_length_bucket: window.UnstuckAnalytics?.bucketLength?.(coachInput.value) || "unknown",
- state: result.state,
- friction: result.friction,
- move: result.move,
- source: "manual-input",
- });
- });
-
- sampleChips.forEach((chip) => {
- chip.addEventListener("click", () => {
- coachInput.value = chip.dataset.sample;
- const result = coachMoment(coachInput.value);
- renderConsole(result);
- trackUnstuck("sample chip selected", {
- input_length_bucket: window.UnstuckAnalytics?.bucketLength?.(coachInput.value) || "unknown",
- state: result.state,
- friction: result.friction,
- move: result.move,
- });
- });
- });
-}
-
-const copyControls = Array.from(document.querySelectorAll(".copy-control"));
-
-async function copyText(text) {
- if (navigator.clipboard && window.isSecureContext) {
- try {
- await navigator.clipboard.writeText(text);
- return;
- } catch {
- // Fall through to the textarea path for local file previews.
- }
- }
-
- const textarea = document.createElement("textarea");
- textarea.value = text;
- textarea.setAttribute("readonly", "");
- textarea.style.position = "fixed";
- textarea.style.left = "-9999px";
- document.body.append(textarea);
- textarea.select();
- document.execCommand("copy");
- textarea.remove();
-}
-
-copyControls.forEach((control) => {
- control.addEventListener("click", async () => {
- const target = document.querySelector(control.dataset.copyTarget);
- if (!target) return;
-
- const label = control.querySelector("span:last-child");
- const original = label.textContent;
- await copyText(target.textContent.trim());
- control.classList.add("copied");
- trackUnstuck("setup copied", {
- copy_target: control.dataset.copyTarget || "unknown",
- copied_length_bucket: window.UnstuckAnalytics?.bucketLength?.(target.textContent) || "unknown",
- });
- label.textContent = "Copied";
- window.setTimeout(() => {
- control.classList.remove("copied");
- label.textContent = original;
- }, 1400);
+navLinks.forEach((link) => {
+ link.addEventListener("click", () => {
+ document.body.classList.remove("nav-open");
+ navToggle?.setAttribute("aria-expanded", "false");
});
});
-const revealTargets = optionalSelectorAll(
- ".section-heading, .scope-core, .scope-lanes li, .admin-rhythm-visual, .admin-rhythm-card, .admin-boundary, .coldrun-steps li, .brief-board article, .quality-board article, .thesis-points article, .handoff-figure, .setup-board article, .response-pane, .coach-console, .console-output article, .file-node, .behavior-grid article",
-);
-
-revealTargets.forEach((target) => {
- target.classList.add("reveal-item", "is-visible");
+sampleButtons.forEach((button) => {
+ button.addEventListener("click", () => {
+ if (!stuckSentence) return;
+ stuckSentence.value = button.dataset.sample || "";
+ stuckSentence.focus();
+ });
});
diff --git a/EF-COACH/landing/assets/unstuck-handoff-card.svg b/EF-COACH/landing/assets/unstuck-handoff-card.svg
index 8b69561..2f7b2c6 100644
--- a/EF-COACH/landing/assets/unstuck-handoff-card.svg
+++ b/EF-COACH/landing/assets/unstuck-handoff-card.svg
@@ -1,53 +1,53 @@
Unstuck Coach handoff card
A visual summary of the Unstuck Coach loop: state, friction, move, hold, check, close.
-
-
-
- Unstuck Coach Handoff Card
- SUMMARY
- External executive function for the whole human.
- For people who need accessible support to start, switch, remember, recover, and close.
+
+
+
+ Unstuck Coach Handoff Card
+ SUMMARY
+ Paste the stuck sentence.
+ For people who need one humane next move when executive load gets sticky.
-
- 1
- State
- Green, yellow, red, or body-first signal.
+
+ 1
+ State
+ Green, yellow, red, or body-first signal.
-
- 2
- Friction
- Name the blocker without blame.
+
+ 2
+ Friction
+ Name the blocker without blame.
-
- 3
- Move
- Choose one visible first action.
+
+ 3
+ Move
+ Choose one visible first action.
-
- 4
- Hold
- Keep extra context out of working memory.
+
+ 4
+ Hold
+ Keep extra context out of working memory.
-
- 5
- Check
- Ask for tiny check, not a polished report.
+
+ 5
+ Check
+ Ask for tiny check, not a polished report.
-
- 6
- Close
- Finish, park, schedule, delegate, or pause.
+
+ 6
+ Close
+ Finish, park, schedule, delegate, or pause.
diff --git a/EF-COACH/landing/index.html b/EF-COACH/landing/index.html
index 73ad33f..5172697 100644
--- a/EF-COACH/landing/index.html
+++ b/EF-COACH/landing/index.html
@@ -3,731 +3,159 @@
- Unstuck Coach | Executive Function Accessibility Coach
+ Unstuck Coach | Paste the stuck sentence
-
-
-
+
+
-
-
+
+
-
+
-
-
-
-
-
-
Held context
-
Calendar hard anchor
-
Inbox live item
-
Food before planning
-
Reply without shame tax
-
Leave breadcrumb
-
-
-
Coach response
-
You do not need to make this clear first.
-
Send the messy task pile. I will sort it.
-
Waiting for tiny check
-
-
-
Life loop
-
body: hungry / yellow
-
- Body
- food first
- Admin
- one hard anchor
- Message
- literal ask
-
-
- Food before planning
- Text without meaning-making
- Bill gets one concrete next step
- Shutdown gets a breadcrumb
-
-
- Re-entry
- Leave one restart mark.
-
-
-
-
State
-
-
Yellow. Regulate, then choose one move.
-
-
-
-
Whole-person executive-function accessibility coach
-
External executive function for the whole human.
-
- Unstuck Coach helps people start, switch, remember, regulate,
- capture ideas, recover, and close loops when intention fails to become action.
- Food, messages, bills, transitions, and re-entry all count as access work.
- Calendar blocks and inbox triage are not an add-on; they are where a lot of life becomes real again.
-
-
- Food/body
- Calendar/inbox
- Messages
- Admin
- Shutdown
-
-
-
Coach preview
-
- Food first body before plan
- Hard anchor calendar before cleanup
- Literal ask message before meaning
- Restart mark re-entry before shame
-
-
You do not need to make this clear first.
-
- Move
- Send the messy task pile.
- Check
- Any three items.
-
-
-
-
Live demo flow
-
- Paste messy context or any three fragments.
- Pick capacity so the move is sized to the person.
- Get one next move while the rest stays parked.
-
-
Limited release: no account memory, no crisis support, occasional rate limits.
-
-
-
-
-
-
-
-
- Form
- Portable Claude Project setup
-
-
- Person
- Whole person under executive load
-
-
- Help
- Start, switch, remember, regulate, recover, close
-
-
-
-
-
-
-
Unstuck routes
-
Start with the loop that is real right now.
-
- Unstuck meets executive load where it shows up: the first stuck sentence,
- the overloaded inbox, the hungry body, the message spiral, the unfinished
- bill, or the re-entry point after a lost thread.
-
-
-
- Try it Same prompt, different intervention
- Coach quality What to expect
- Setup Copy and paste
- Scope Whole-person surface
- Admin Calendar and inbox
-
-
-
-
-
-
-
Whole-person operating surface
-
The first move can be food, a text, a calendar anchor, or a bill.
-
- Unstuck does not turn accessibility support into more output for work.
- It protects the person carrying the loops, then chooses the smallest humane
- move that makes the next minute more real. A brain dump counts, and so
- does a bounded spark when the state system needs activation fuel.
-
-
-
-
-
-
-
Unstuck loop
-
State -> friction -> one humane concrete move -> tiny check -> re-entry trail.
-
The coach holds the rest so the person does not have to hold it all at once.
-
-
-
-
-
-
-
Food and body
-
Hungry, fried, understimulated, overstimulated, late, or coming out of hyperfocus.
-
- Reset or spark
-
-
-
-
-
Calendar and inbox
-
Hard anchors, live obligations, reply debt, missed commitments, scheduling friction.
-
- Reality before cleanup
-
-
-
-
-
Messages and shame
-
Separate what was said from what it means before meaning-making takes over.
-
- Literal ask first
-
-
-
-
-
Home and admin loops
-
Dishes, forms, bills, bags, errands, and surfaces that become too loud to enter.
-
- One relief mark
-
-
-
-
-
Capture and re-entry
-
Park the idea, sort the brain dump, close the loop, and make restart visible.
-
- No lost thread
-
-
-
-
-
-
-
-
-
-
Calendar and inbox layer
-
Calendar and inbox are part of the life loop.
-
- The coach does not need account access to be useful. It helps the user
- turn calendar drift, inbox noise, reply debt, missed obligations, and
- scheduling friction into one concrete decision at a time, without
- pretending it can read accounts or run the user's life.
-
-
-
-
-
-
-
-
-
- Calendar reality
- Find the next hard anchor before rebuilding the week.
- Meetings, deadlines, travel, pickup, sleep, meals, medication, and recovery buffers become the map.
-
-
- Inbox live obligation
- Rescue consequence before cleanup.
- One sender, subject, date, or deadline cue. Reply, schedule, delegate, park, archive, or mark not live.
-
-
- Reply debt recovery
- Repair trust without shame theater.
- Literal ask, real consequence, smallest honest reply, and a close status the user can believe.
-
-
-
Boundary
-
No autonomous reading, sending, scheduling, or inbox-zero promises.
-
Unstuck coaches the management pass and asks for a tiny check: one hard anchor, one live item, one draft, or one parked re-entry time.
-
-
-
-
-
-
-
-
-
Quick start
-
Start before you read everything.
-
- The path is deliberately small: open the live demo or paste the setup
- instructions into Claude Project, then start with one stuck sentence.
- The coach should cross one real threshold, not ask the user to admire
- the whole system first.
-
-
-
-
-
-
- 01
- Open the live demo or GitHub source.
- The start path is visible without making someone decode the whole repo first.
-
-
- 02
- Paste `coach/PROJECT_INSTRUCTIONS.md`.
- The coach starts from state, friction, one concrete move, held context, check, and closure.
-
-
- 03
- Try the stuck-loop prompt.
- `I need a coach to get started on this.` The coach should help immediately, not explain productivity.
-
-
-
-
-
-
-
-
-
What makes it Unstuck
-
The coach has a clear operating loop.
-
- Unstuck works because the coach has a stable job: plain language,
- one humane next move, held context, safety boundaries, and life-surface
- protocols that keep help from turning into homework.
-
-
-
-
-
- Coach contract
- Identity, rules, examples, and reference files each carry one job.
- View source
-
-
- Operating loop
- State, friction, move, held context, check, close.
- Read rules
-
-
- Examples
- One stuck sentence should become one usable next move.
- See examples
-
-
- Whole-person scope
- Food, messages, bills, calendar reality, shutdown, and re-entry all count.
- Read the thesis
-
-
- Boundaries
- The coach helps with access; it does not pretend to be therapy or account automation.
- Read boundaries
-
-
-
-
-
-
-
-
-
Point of view
-
The design is simple: reduce the next threshold.
-
- Unstuck is built around a simple bet: the right next move is often
- smaller than the user can find alone. The coach keeps the context
- visible and turns the moment into something the person can actually do.
-
-
-
-
-
-
- Context
- The project files give the coach a stable job.
- Claude Project knowledge becomes the operating surface, so every file has one coaching purpose.
-
-
- Operating loop
- The coach covers start, switch, remember, regulate, capture, recover, and close.
- The stuck-loop prompt is only the fastest example; the product is broader accessibility scaffolding for a whole person.
-
-
- Boundary
- The coach stops before therapy or execution.
- It protects dignity, reduces the first move, and leaves re-entry visible.
-
-
-
-
-
-
-
-
-
Shareable setup
-
A new user can test the coach without a call.
-
- The setup keeps the promise legible: when to use it, what good coaching
- looks like, where the limits are, and where to start.
-
-
-
-
-
-
-
-
-
-
-
-
-
Set it up
-
Load the coach files.
-
- Unstuck runs through the project context. Add the coach files to
- Claude Project or another AI workspace, use the project instructions,
- and begin with the stuck point in front of you.
-
-
-
-
-
-
-
- Claude Project path
- Add the project files as knowledge.
- Use `coach/PROJECT_INSTRUCTIONS.md` as the project instruction, then start with whatever is stuck.
-
-
- Codex path
- Open this project as the workspace.
- Ask Codex to read `coach/PROJECT_INSTRUCTIONS.md`, `coach/START_HERE.md`, `coach/identity.md`, `coach/rules.md`, `coach/examples.md`, and `reference/` before coaching.
-
-
- Antigravity / AI IDE path
- Create a project from the Unstuck files.
- Keep file access scoped to this project, then load the same coach contract.
-
-
- Local model path
- Paste the operating files into context.
- Use `coach/PROJECT_INSTRUCTIONS.md`, `coach/identity.md`, `coach/rules.md`, `coach/examples.md`, `reference/coaching-protocols.md`, `reference/signal-map.md`, and `reference/safety-boundaries.md`.
-
-
-
-
- What good help does
- It should make the next move easier.
- Name the friction, give one concrete move, and ask for tiny check. No article, no menu, no moralizing.
- `coach/PROJECT_INSTRUCTIONS.md` routes concrete stuck signals directly. The coach should not ask the traffic-light question first.
- Read setup instructions
-
-
-
-
-
-
-
-
-
Coach quality
-
Know whether the coach is helping.
-
- The fastest signal is the response to a stuck prompt. It should
- change the next move, not explain executive dysfunction.
-
-
-
-
-
-
- Pass 01
- Names friction.
- Task-start friction, overload, communication threat, capture, recovery, or calibration need.
-
-
- Pass 02
- Gives one move.
- One concrete action the user can do now, not a list of competing tactics.
-
-
- Pass 03
- Holds context.
- The coach keeps the rest of the task list out of working memory.
-
-
- Pass 04
- Asks for a tiny check.
- The reply ends with one answer or one state signal.
-
-
- Not good enough
- Article, menu, moralizing, vague continuation, or unsafe clinical advice.
- If the response does that, the coach is not doing enough.
-
-
-
-
-
-
-
-
Boundaries
-
The coach helps with the next move, not someone else's life.
+
Paste the stuck sentence.
- Unstuck does not read accounts, send messages, schedule events, or
- promise inbox zero. It helps the user name what is real and choose one
- humane next action.
+ Unstuck Coach gives you one humane next move for task initiation,
+ reply debt, re-entry, admin loops, and working-memory overload.
-
-
-
-
-
-
The difference in the first minute
-
Same prompt. Different intervention.
-
- A knowledge base explains executive dysfunction. A coach changes the next humane move and preserves the loop.
-
-
-
-
-
- Life freeze
-
-
- Get started
-
-
- Message spiral
-
-
- Inbox/calendar
-
-
- Too many loops
-
-
- Failed plan
-
+
+
Open the coach
+
No polished prompt needed. Fragments count.
+
-
-
-
Interpretable context methodology
-
Each file owns one coaching job.
-
-
-
-
- 01
- coach/identity.md
- Defines the athlete, coaching promise, voice, and boundaries.
-
-
- 02
- coach/rules.md
- Turns executive-function signals into state, friction, move, hold, check, close.
-
-
- 03
- coach/examples.md
- Shows calibrated coaching under shame, overload, communication threat, and task-start friction.
+
+ It does not give you another productivity article.
+
+
+ 01
+ Name the friction without blame.
+ The coach treats stuckness as an access problem, not a character problem.
-
- 04
- reference/
- Holds protocols, admin operations playbooks, safety boundaries, source notes, and the signal map.
+
+ 02
+ Choose one concrete next move.
+ One visible action, small enough to do without decoding a plan.
-
- 05
- README.md
- Gives a stranger the setup path and starter messages.
+
+ 03
+ Hold the rest outside your head.
+ The pile stays parked while the next minute becomes possible.
-
-
-
Research made behavioral
-
The coach does not describe friction. It handles it.
+
+
+
Built for the moment before action.
+
+ Use it when you are frozen at a bill, a message, a calendar check, a
+ work task, a shutdown, or the awkward return after avoiding something.
+
+
+ Task initiation
+ Reply debt
+ Calendar and inbox reality
+ Admin loops
+ Re-entry after avoidance
+ Body-first planning
+
+
-
-
- Working memory overload
- Holds the list, returns one next move, and parks the rest visibly.
-
-
- Time blindness
- Budgets setup, resistance, testing, transitions, and re-entry before the hard stop.
-
-
- Shame after avoidance
- Reconstructs from artifacts, not memory, and removes the shame tax.
-
+
+ Non-clinical support, privacy-safe analytics.
+
+ Unstuck Coach is not therapy, diagnosis, or medical treatment. It is
+ executive-function accessibility support for the next useful move.
+
+
- Novelty pull
- Uses a tangent firewall: chase, bookmark, or discard.
+ We measure the funnel.
+ Coarse events like chat opened, first prompt submitted, reply received, and errors.
- Hyperfocus crash
- Closes the loop with biological recovery and one re-entry breadcrumb.
+ We do not use analytics for prompt storage.
+ No prompt histories, request bodies, API keys, or provider payloads in analytics.
- Communication threat
- Sorts comments into correctness, style, scope, or confusion before meaning-making.
+ We keep claims plain.
+ The product helps with access and activation. It does not replace qualified care.
-
-
-
-
+
+
diff --git a/EF-COACH/landing/styles.css b/EF-COACH/landing/styles.css
index abf048f..2f115ab 100644
--- a/EF-COACH/landing/styles.css
+++ b/EF-COACH/landing/styles.css
@@ -1,49 +1,38 @@
:root {
color-scheme: light;
- --ink: #060910;
- --ink-soft: #24211f;
- --muted: #6f625b;
- --muted-strong: #403832;
- --paper: #fff8ec;
- --paper-soft: #f8f3eb;
- --surface: #fffaf2;
- --surface-deep: #eadcc6;
- --cream-line: #fff5dc;
- --line: #d9d0c4;
- --line-strong: #766755;
- --start: #ff4b1f;
- --start-deep: #8f2a1b;
- --sage: #008d99;
- --steel: #06434a;
- --gold: #ffc018;
- --cyan: #00d7e8;
- --lime: #b7f10b;
- --orange: #ff8b00;
- --magenta: #ff147f;
- --magenta-muted: #c8004d;
- --sky-muted: #00f0d4;
- --taste-teal: #2f8e86;
- --taste-cyan: #6fc7c5;
- --taste-lichen: #a7af48;
- --taste-saffron: #d9a72f;
- --taste-coral: #ef724b;
- --taste-clay: #d65f35;
- --taste-berry: #9f365f;
- --taste-ink: #07101c;
- --taste-veil: rgba(255, 248, 236, 0.68);
- --shadow-ambient: 0 30px 84px rgba(36, 33, 31, 0.14);
- --shadow-soft: 0 18px 52px rgba(36, 33, 31, 0.11);
- --shadow-tight: 0 8px 24px rgba(36, 33, 31, 0.09);
- --shadow-ink: 0 28px 70px rgba(6, 9, 16, 0.28);
+ --font-sans: "Atkinson Hyperlegible", "Aptos", "Avenir Next", "Plus Jakarta Sans", system-ui, sans-serif;
+ --font-mono: "Geist Mono", "SF Mono", ui-monospace, monospace;
+ --ink: #101317;
+ --ink-soft: #252b31;
+ --muted: #5f655f;
+ --paper: #f7f3ea;
+ --paper-deep: #efe5d4;
+ --surface: #fffdf8;
+ --surface-soft: #fbf8f1;
+ --line: #d8d0c2;
+ --line-strong: #a69b89;
+ --apatite-950: #052733;
+ --apatite-900: #064b5f;
+ --apatite-800: #075e73;
+ --apatite-700: #08758d;
+ --apatite-500: #11a5ce;
+ --apatite-100: #d7f0f2;
+ --apatite-50: #eaf8f7;
+ --attention: #b86b2b;
+ --shadow-paper: 0 18px 52px rgba(37, 43, 49, 0.08);
+ --shadow-lift: 0 10px 28px rgba(8, 117, 141, 0.13);
--radius: 8px;
- --ease-out: cubic-bezier(0.2, 0, 0.2, 1);
- --ease-spring: var(--ease-out);
- --motion-fast: 120ms;
- --motion-soft: 180ms;
- --wrap: min(1180px, calc(100% - 3rem));
- --editorial: "PP Editorial New", "Canela", "Fraunces", "New York", serif;
- font-family: "Avenir Next", "Plus Jakarta Sans", "Geist", "Satoshi", system-ui, sans-serif;
- letter-spacing: 0;
+ --wrap: min(1120px, calc(100% - 2rem));
+ --measure: 66ch;
+ --step--1: 0.92rem;
+ --step-0: 1rem;
+ --step-1: 1.18rem;
+ --step-2: 1.45rem;
+ --step-3: 1.85rem;
+ --step-4: 2.45rem;
+ --step-5: 3.35rem;
+ --ease: cubic-bezier(0.2, 0, 0.2, 1);
+ font-family: var(--font-sans);
}
* {
@@ -52,24 +41,21 @@
html {
scroll-behavior: auto;
-}
-
-html.source-reader-shell {
- scroll-behavior: auto;
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
}
body {
min-width: 320px;
margin: 0;
background:
- linear-gradient(90deg, rgba(6, 9, 16, 0.018) 0 1px, transparent 1px 142px),
- linear-gradient(180deg, rgba(6, 9, 16, 0.016) 0 1px, transparent 1px 142px),
- linear-gradient(90deg, rgba(47, 142, 134, 0.08) 0 10%, transparent 10% 28%, rgba(217, 167, 47, 0.075) 28% 36%, transparent 36% 68%, rgba(214, 95, 53, 0.055) 68% 76%, transparent 76%),
- linear-gradient(132deg, rgba(255, 253, 246, 0.54), rgba(217, 167, 47, 0.08) 28%, rgba(47, 142, 134, 0.055) 64%, transparent 100%),
- linear-gradient(180deg, var(--surface) 0%, var(--paper) 52%, #f0dfc4 100%);
+ linear-gradient(90deg, rgba(8, 117, 141, 0.06) 0 10%, transparent 10% 34%, rgba(184, 107, 43, 0.05) 34% 43%, transparent 43%),
+ linear-gradient(180deg, var(--surface) 0%, var(--paper) 52%, var(--paper-deep) 100%);
color: var(--ink);
- font-size: 16px;
+ font-family: var(--font-sans);
+ font-size: var(--step-0);
line-height: 1.5;
+ font-synthesis: none;
text-rendering: optimizeLegibility;
}
@@ -77,3628 +63,445 @@ body::before {
content: "";
position: fixed;
inset: 0;
- z-index: 4;
+ z-index: 1;
pointer-events: none;
- opacity: 0.038;
- background-image:
- repeating-radial-gradient(circle at 30% 20%, rgba(8, 7, 5, 0.9) 0 0.6px, transparent 0.7px 3px);
+ opacity: 0.035;
+ background-image: radial-gradient(rgba(16, 19, 23, 0.88) 0.55px, transparent 0.65px);
+ background-size: 3px 3px;
mix-blend-mode: multiply;
}
-body::after {
- content: "";
- position: fixed;
- inset: 0 auto 0 0;
- z-index: 3;
- width: 0.46rem;
- pointer-events: none;
- background:
- linear-gradient(180deg, var(--taste-ink), var(--taste-teal) 24%, var(--taste-lichen) 42%, var(--taste-saffron) 61%, var(--taste-clay) 78%, var(--taste-berry)),
- repeating-linear-gradient(180deg, transparent 0 34px, rgba(255, 245, 220, 0.72) 34px 37px, transparent 37px 72px);
- box-shadow:
- 1px 0 0 rgba(6, 9, 16, 0.58),
- 10px 0 34px rgba(6, 9, 16, 0.06);
-}
-
a {
color: inherit;
text-decoration: none;
}
button,
-input,
textarea {
font: inherit;
}
-button {
- color: inherit;
-}
-
-:where(a, button, textarea):focus-visible {
- outline: 3px solid var(--cyan);
+:focus-visible {
+ outline: 3px solid rgba(8, 117, 141, 0.46);
outline-offset: 4px;
- box-shadow: 0 0 0 7px rgba(0, 215, 232, 0.16);
-}
-
-::selection {
- background: rgba(214, 163, 56, 0.28);
}
.site-nav {
position: sticky;
top: 0;
- z-index: 7;
- width: 100%;
+ z-index: 20;
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
- min-height: 4.2rem;
- padding: 0.62rem max(1rem, calc((100vw - 1180px) / 2));
- border-bottom: 1px solid rgba(6, 9, 16, 0.16);
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.98), rgba(255, 248, 236, 0.94));
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.84),
- inset 0 -1px 0 rgba(6, 9, 16, 0.05);
+ width: 100%;
+ padding: 0.9rem max(1rem, calc((100vw - 1120px) / 2));
+ border-bottom: 1px solid rgba(16, 19, 23, 0.08);
+ background: rgba(255, 253, 248, 0.9);
+ backdrop-filter: blur(16px);
}
-.wordmark,
+.brand,
.nav-links {
display: flex;
align-items: center;
}
-.wordmark {
- gap: 0.72rem;
- padding: 0.38rem 0.68rem 0.38rem 0.2rem;
- border-radius: 999px;
- color: var(--ink);
- font-size: 0.88rem;
- font-weight: 840;
- letter-spacing: 0;
- white-space: nowrap;
+.brand {
+ gap: 0.65rem;
+ color: var(--ink-soft);
+ font-weight: 820;
}
-.wordmark-mark {
- width: 2.38rem;
- height: 2.38rem;
- display: block;
- flex: 0 0 auto;
- border: 1px solid rgba(6, 9, 16, 0.24);
+.brand img {
+ width: 2.15rem;
+ height: 2.15rem;
+ border: 1px solid rgba(8, 117, 141, 0.28);
border-radius: 50%;
background: var(--surface);
- box-shadow:
- 0 0 0 3px rgba(255, 253, 246, 0.78),
- 0 9px 20px rgba(47, 142, 134, 0.12),
- 0 12px 28px rgba(71, 51, 30, 0.12);
- object-fit: cover;
- object-position: center;
-}
-
-.nav-toggle {
- display: none;
- width: 2.7rem;
- height: 2.7rem;
- align-items: center;
- justify-content: center;
- border: 1px solid rgba(168, 148, 120, 0.34);
- border-radius: 50%;
- background: rgba(255, 253, 246, 0.82);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.78);
- cursor: pointer;
-}
-
-.nav-toggle-line {
- position: absolute;
- width: 1rem;
- height: 1px;
- background: var(--ink);
- transform-origin: center;
- transition: opacity var(--motion-fast) var(--ease-out);
-}
-
-.nav-toggle-line:first-child {
- transform: translateY(-0.22rem);
-}
-
-.nav-toggle-line:last-child {
- transform: translateY(0.22rem);
-}
-
-.nav-open .nav-toggle-line:first-child {
- transform: rotate(45deg);
-}
-
-.nav-open .nav-toggle-line:last-child {
- transform: rotate(-45deg);
}
.nav-links {
- gap: 0.42rem;
+ gap: 0.35rem;
}
.nav-links a {
- position: relative;
- padding: 0.58rem 0.84rem;
- border: 1px solid transparent;
+ padding: 0.68rem 0.9rem;
border-radius: 999px;
- color: var(--muted-strong);
- font-size: 0.78rem;
+ color: var(--muted);
+ font-size: var(--step--1);
font-weight: 720;
- line-height: 1;
- transition:
- border-color var(--motion-fast) var(--ease-out),
- color var(--motion-fast) var(--ease-out),
- background var(--motion-fast) var(--ease-out);
-}
-
-.nav-links a span {
- display: block;
- white-space: nowrap;
}
.nav-links a:hover {
- border-color: rgba(47, 142, 134, 0.18);
- background: rgba(44, 123, 115, 0.09);
color: var(--ink);
+ background: rgba(8, 117, 141, 0.08);
}
-.nav-links a:active,
-.action:active,
-.prompt-tab:active,
-.copy-control:active,
-.sample-chip:active {
- border-color: rgba(6, 9, 16, 0.34);
+.nav-links .nav-cta {
+ color: #ffffff;
+ background: var(--apatite-900);
}
-.hero {
- position: relative;
- min-height: 84dvh;
- display: grid;
- grid-template-columns: minmax(0, 0.9fr) minmax(31rem, 1.1fr);
- align-items: center;
- gap: 4.35rem;
- width: var(--wrap);
- margin: 0 auto;
- padding: 8.4rem 0 4.3rem;
- isolation: isolate;
+.nav-toggle {
+ display: none;
+ width: 2.6rem;
+ height: 2.6rem;
+ border: 1px solid var(--line);
+ border-radius: 999px;
+ background: var(--surface);
}
-.hero::before {
- content: "";
- position: absolute;
- inset: 6.7rem -1.85rem 2.05rem;
- z-index: -2;
- background:
- linear-gradient(90deg, rgba(255, 250, 242, 0.985), rgba(255, 248, 236, 0.76) 58%, rgba(255, 248, 236, 0.32)),
- linear-gradient(120deg, rgba(47, 142, 134, 0.065), transparent 31%, rgba(217, 167, 47, 0.07)),
- repeating-linear-gradient(135deg, rgba(6, 9, 16, 0.02) 0 1px, transparent 1px 56px),
- repeating-linear-gradient(90deg, rgba(217, 208, 196, 0.24) 0 1px, transparent 1px 142px),
- repeating-linear-gradient(0deg, rgba(217, 208, 196, 0.2) 0 1px, transparent 1px 142px);
- border: 1px solid rgba(6, 9, 16, 0.1);
- border-radius: var(--radius);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.84),
- inset 0 0 0 0.42rem rgba(255, 245, 220, 0.34),
- 0 24px 78px rgba(71, 51, 30, 0.08);
+.nav-toggle span {
+ display: block;
+ width: 1rem;
+ height: 2px;
+ margin: 0.22rem auto;
+ background: var(--ink);
}
-.hero-copy {
- order: 1;
- position: relative;
- min-width: 0;
- max-width: 45rem;
- padding-left: 1.05rem;
+.hero {
+ width: var(--wrap);
+ min-height: min(720px, calc(100svh - 8rem));
+ margin: 0 auto;
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) minmax(320px, 420px);
+ gap: 4rem;
+ align-items: center;
+ padding: 4.2rem 0 3.2rem;
}
-.hero-copy::before {
- content: "";
- position: absolute;
- top: 0.2rem;
- bottom: 0.35rem;
- left: 0;
- width: 0.22rem;
- border-radius: 999px;
- background:
- linear-gradient(180deg, var(--taste-ink), var(--taste-teal), var(--taste-cyan), var(--taste-saffron), var(--taste-clay), var(--taste-berry)),
- repeating-linear-gradient(180deg, transparent 0 20px, rgba(255, 248, 236, 0.74) 20px 22px, transparent 22px 42px);
- box-shadow:
- 0 0 0 1px rgba(6, 9, 16, 0.72),
- 0 18px 34px rgba(255, 75, 31, 0.12);
+.hero h1,
+.section h2 {
+ max-width: 11ch;
+ margin: 0;
+ color: var(--ink);
+ font-size: var(--step-5);
+ font-weight: 860;
+ letter-spacing: 0;
+ line-height: 0.96;
+ text-wrap: balance;
}
-.workbench-scene {
- order: 2;
- position: relative;
- min-width: 0;
- min-height: 36.8rem;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, rgba(255, 245, 220, 0.055) 0 1px, transparent 1px 5.4rem),
- linear-gradient(180deg, rgba(255, 245, 220, 0.04) 0 1px, transparent 1px 5.4rem),
- linear-gradient(145deg, rgba(6, 9, 16, 0.98), rgba(6, 67, 74, 0.96)),
- linear-gradient(126deg, transparent 0%, rgba(217, 167, 47, 0.1) 42%, transparent 72%);
- outline: 1px solid rgba(255, 245, 220, 0.56);
- outline-offset: -0.78rem;
- box-shadow:
- inset 0 1px 0 rgba(255, 245, 220, 0.18),
- inset 0 0 0 0.5rem rgba(255, 245, 220, 0.08),
- inset 0 0 0 0.9rem rgba(6, 9, 16, 0.32),
- 0 2px 0 rgba(255, 245, 220, 0.48),
- 0 36px 92px rgba(6, 9, 16, 0.3);
- overflow: hidden;
+.hero-copy p {
+ max-width: 42rem;
+ margin: 1.25rem 0 0;
+ color: var(--muted);
+ font-size: var(--step-1);
+ line-height: 1.42;
+ text-wrap: pretty;
}
-.workbench-scene::before {
- content: "";
- position: absolute;
- inset: 0.82rem;
- border: 1px solid rgba(255, 245, 220, 0.5);
- border-radius: 5px;
- pointer-events: none;
- z-index: 5;
+.hero-actions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.8rem;
+ margin-top: 1.8rem;
}
-.workbench-scene::after {
- content: "";
- position: absolute;
- inset: 0;
- background:
- radial-gradient(circle at 50% 44%, rgba(255, 245, 220, 0.11), transparent 17rem),
- repeating-linear-gradient(135deg, transparent 0 38px, rgba(255, 245, 220, 0.05) 38px 39px, transparent 39px 82px),
- repeating-linear-gradient(45deg, transparent 0 68px, rgba(111, 199, 197, 0.04) 68px 69px, transparent 69px 136px),
- linear-gradient(90deg, rgba(6, 9, 16, 0.52), transparent 42%, rgba(159, 54, 95, 0.055));
- opacity: 0.9;
- pointer-events: none;
+.button {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 3rem;
+ padding: 0.88rem 1.22rem;
+ border: 1px solid var(--line-strong);
+ border-radius: 999px;
+ font-weight: 820;
+ cursor: pointer;
+ transition:
+ transform 160ms var(--ease),
+ background 160ms var(--ease),
+ border-color 160ms var(--ease),
+ box-shadow 160ms var(--ease);
}
-.mola-bridge {
- position: absolute;
- z-index: 1;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- box-shadow:
- inset 0 0 0 2px rgba(255, 245, 220, 0.86),
- inset 0 0 0 7px rgba(6, 9, 16, 0.32),
- 0 18px 48px rgba(6, 9, 16, 0.22);
- opacity: 0.78;
+.button:active,
+button:active {
+ transform: translateY(1px);
}
-.mola-bridge::before,
-.mola-bridge::after {
- content: "";
- position: absolute;
- inset: 0.45rem;
- border: 1px solid rgba(255, 253, 246, 0.82);
- border-radius: 5px;
+.button.primary {
+ color: #ffffff;
+ border-color: var(--apatite-900);
+ background: var(--apatite-700);
+ box-shadow: var(--shadow-lift);
}
-.bridge-one {
- right: -12%;
- top: 23.5%;
- width: 40rem;
- height: 6.35rem;
- background:
- linear-gradient(90deg, var(--taste-ink) 0 22%, var(--taste-teal) 22% 38%, var(--taste-cyan) 38% 51%, var(--taste-lichen) 51% 61%, var(--taste-saffron) 61% 72%, var(--taste-clay) 72% 86%, var(--taste-berry) 86% 100%);
- transform: rotate(-13deg);
- clip-path: polygon(0 22%, 8% 0, 16% 22%, 24% 0, 32% 22%, 40% 0, 48% 22%, 56% 0, 64% 22%, 72% 0, 80% 22%, 88% 0, 100% 22%, 100% 100%, 0 100%);
+.button.primary:hover {
+ background: var(--apatite-800);
}
-.bridge-two {
- left: -10%;
- bottom: 19.5%;
- width: 29rem;
- height: 4.45rem;
- background:
- linear-gradient(90deg, var(--taste-berry) 0 18%, var(--taste-clay) 18% 38%, var(--taste-saffron) 38% 58%, var(--taste-cyan) 58% 78%, var(--taste-teal) 78% 100%);
- transform: rotate(-13deg);
- clip-path: polygon(0 0, 100% 0, 94% 100%, 0 100%);
+.button.secondary {
+ color: var(--ink);
+ background: rgba(255, 253, 248, 0.62);
}
-.runway-line {
- position: absolute;
- z-index: 2;
- left: 12%;
- right: 9%;
- bottom: 32%;
- height: 2px;
- background: linear-gradient(90deg, transparent, var(--taste-cyan), var(--taste-lichen), var(--taste-saffron), var(--taste-clay), transparent);
- transform-origin: left center;
- transform: rotate(-13deg);
+.button.full {
+ width: 100%;
}
-.scene-panel {
- position: absolute;
- z-index: 3;
- border: 1px solid rgba(6, 9, 16, 0.72);
+.stuck-card {
+ display: grid;
+ gap: 1rem;
+ padding: 1.4rem;
+ border: 1px solid rgba(16, 19, 23, 0.14);
border-radius: var(--radius);
- background:
- repeating-linear-gradient(90deg, rgba(6, 9, 16, 0.014) 0 1px, transparent 1px 32px),
- linear-gradient(180deg, rgba(255, 250, 242, 0.985), rgba(248, 243, 235, 0.93));
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.82),
- 0 18px 40px rgba(6, 9, 16, 0.21);
- padding: 0.95rem;
- overflow: hidden;
+ background: rgba(255, 253, 248, 0.86);
+ box-shadow: var(--shadow-paper);
}
-.scene-panel::before {
- content: "";
- position: absolute;
- inset: 0.34rem;
- border: 1px solid rgba(255, 245, 220, 0.86);
- border-radius: 5px;
- pointer-events: none;
+.stuck-card label {
+ font-size: var(--step--1);
+ font-weight: 840;
}
-.panel-kicker,
-.eyebrow,
-.check-label,
-.pane-label,
-.file-index {
- display: block;
- color: var(--muted);
- font-size: 0.68rem;
- font-weight: 780;
- letter-spacing: 0.18em;
- text-transform: uppercase;
+.stuck-card textarea {
+ width: 100%;
+ min-height: 10.5rem;
+ resize: vertical;
+ padding: 1rem;
+ border: 1px solid var(--line);
+ border-radius: var(--radius);
+ background: var(--surface);
+ color: var(--ink);
+ line-height: 1.5;
}
-.task-stack {
- right: 4.7%;
- top: 7.6%;
- width: 12.9rem;
- transform: rotate(0.45deg);
- border-top: 3px solid var(--taste-cyan);
+.stuck-card textarea::placeholder {
+ color: #73786f;
}
-.task-row {
- position: relative;
+.sample-row {
display: grid;
- grid-template-columns: 0.65rem 1fr;
- gap: 0.72rem;
- align-items: center;
- padding: 0.78rem 0;
- border-top: 1px solid rgba(168, 148, 120, 0.28);
- color: var(--ink-soft);
-}
-
-.task-row:first-of-type {
- margin-top: 0.5rem;
-}
-
-.task-row span {
- width: 0.58rem;
- height: 0.58rem;
- border-radius: 50%;
- background: var(--line-strong);
-}
-
-.task-row.active span {
- background: var(--taste-clay);
- box-shadow: 0 0 0 7px rgba(214, 95, 53, 0.13);
+ grid-template-columns: repeat(3, 1fr);
+ gap: 0.55rem;
}
-.task-row:nth-of-type(3) span {
- background: var(--taste-saffron);
+.sample-row button {
+ min-height: 2.5rem;
+ border: 1px solid rgba(8, 117, 141, 0.24);
+ border-radius: 999px;
+ background: var(--apatite-50);
+ color: var(--apatite-900);
+ font-weight: 780;
+ cursor: pointer;
}
-.task-row:nth-of-type(4) span {
- background: var(--taste-teal);
+.fine-print {
+ margin: -0.25rem 0 0;
+ color: var(--muted);
+ font-size: var(--step--1);
}
-.coach-dialogue {
- z-index: 4;
- right: 5.4%;
- bottom: 7.2%;
- width: 18.8rem;
- transform: rotate(-0.45deg);
- border-top: 3px solid var(--taste-lichen);
+.section {
+ width: var(--wrap);
+ margin: 0 auto;
+ padding: 4.8rem 0;
}
-.coach-dialogue p {
- margin: 0.74rem 0;
- max-width: 24ch;
- color: var(--ink);
- font-weight: 760;
+.section.narrow {
+ max-width: 980px;
}
-.check-line {
- display: flex;
- align-items: center;
- gap: 0.6rem;
- color: var(--steel);
- font-size: 0.82rem;
- font-weight: 820;
+.section h2 {
+ max-width: 15ch;
+ font-size: var(--step-4);
}
-.check-line span {
- width: 0.55rem;
- height: 0.55rem;
- border-radius: 50%;
- background: var(--taste-lichen);
+.section > p,
+.split p,
+.trust > p {
+ max-width: var(--measure);
+ color: var(--muted);
+ font-size: var(--step-0);
+ text-wrap: pretty;
}
-.life-ledger {
- left: 5.1%;
- top: 15.2%;
- width: 21.15rem;
- color: var(--ink);
- background:
- linear-gradient(180deg, rgba(255, 250, 242, 0.98), rgba(255, 245, 220, 0.94)),
- linear-gradient(120deg, rgba(159, 54, 95, 0.11), transparent 48%, rgba(111, 199, 197, 0.1));
- border-color: var(--ink);
- border-top: 4px solid var(--taste-berry);
- transform: rotate(-1.05deg);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.88),
- 0 26px 58px rgba(6, 9, 16, 0.28);
+.steps,
+.trust-grid {
+ display: grid;
+ grid-template-columns: 1.15fr 0.95fr 0.95fr;
+ gap: 1rem;
+ margin-top: 2rem;
}
-.life-ledger .panel-kicker {
- color: var(--taste-berry);
+.steps article,
+.trust-grid article {
+ padding: 1.15rem;
+ border: 1px solid rgba(16, 19, 23, 0.1);
+ border-radius: var(--radius);
+ background: rgba(255, 253, 248, 0.68);
}
-.ledger-note {
- margin: 0.58rem 0 0.62rem;
- color: var(--steel);
- font-size: 1.13rem;
- font-weight: 880;
+.steps span {
+ display: block;
+ color: var(--apatite-700);
+ font-family: var(--font-mono);
+ font-size: 0.82rem;
+ font-weight: 820;
}
-.ledger-status-grid {
- position: relative;
- z-index: 1;
- display: grid;
- grid-template-columns: 4.9rem 1fr;
- gap: 0.24rem 0.64rem;
- margin-bottom: 0.72rem;
- padding: 0.62rem 0.72rem;
- border: 1px solid rgba(168, 148, 120, 0.34);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, rgba(47, 142, 134, 0.08), transparent 44%, rgba(217, 167, 47, 0.09)),
- rgba(255, 253, 246, 0.62);
+.steps h3,
+.trust-grid h3 {
+ margin: 0.55rem 0 0.4rem;
+ font-size: var(--step-0);
+ line-height: 1.2;
}
-.ledger-status-grid span,
-.ledger-close span {
+.steps p,
+.trust-grid p {
+ margin: 0;
color: var(--muted);
- font-size: 0.64rem;
- font-weight: 840;
- letter-spacing: 0.14em;
- text-transform: uppercase;
+ text-wrap: pretty;
}
-.ledger-status-grid strong {
- color: var(--ink);
- font-size: 0.82rem;
- line-height: 1.25;
+.split {
+ display: grid;
+ grid-template-columns: minmax(0, 0.92fr) minmax(280px, 0.68fr);
+ gap: 3.5rem;
+ align-items: start;
+ border-top: 1px solid rgba(16, 19, 23, 0.1);
+ border-bottom: 1px solid rgba(16, 19, 23, 0.1);
}
-.ledger-list {
- position: relative;
- z-index: 1;
+.fit-list {
display: grid;
- gap: 0.36rem;
+ gap: 0.65rem;
margin: 0;
padding: 0;
list-style: none;
}
-.ledger-list li {
- display: flex;
- align-items: center;
- gap: 0.52rem;
- color: var(--ink-soft);
- font-size: 0.88rem;
- font-weight: 820;
+.fit-list li {
+ padding: 0.85rem 1rem;
+ border: 1px solid var(--line);
+ border-radius: var(--radius);
+ background: rgba(255, 253, 248, 0.7);
+ font-weight: 760;
}
-.ledger-close {
- position: relative;
- z-index: 1;
- display: grid;
- gap: 0.18rem;
- margin-top: 0.68rem;
- padding-top: 0.66rem;
- border-top: 1px solid rgba(168, 148, 120, 0.36);
+.trust {
+ padding-bottom: 5.5rem;
}
-.ledger-close strong {
- color: var(--ink);
- font-family: var(--editorial);
- font-size: 1.15rem;
- font-weight: 560;
- line-height: 1.08;
+.site-footer {
+ display: flex;
+ justify-content: space-between;
+ gap: 1rem;
+ padding: 1.3rem max(1rem, calc((100vw - 1120px) / 2));
+ border-top: 1px solid rgba(16, 19, 23, 0.1);
+ color: var(--muted);
}
-.ledger-list li::before {
- content: "";
- width: 0.42rem;
- height: 0.42rem;
- flex: 0 0 auto;
- border-radius: 50%;
- background: var(--taste-berry);
- box-shadow: 0 0 0 5px rgba(159, 54, 95, 0.1);
+.site-footer a {
+ color: var(--apatite-900);
+ font-weight: 780;
}
-.state-meter {
- left: 6.1%;
- bottom: 5.5%;
- width: 8.8rem;
- transform: rotate(0.65deg);
- border-top: 3px solid var(--taste-saffron);
-}
+@media (max-width: 820px) {
+ :root {
+ --step-4: 2.15rem;
+ --step-5: 2.75rem;
+ }
-.meter-track {
- height: 0.5rem;
- margin: 0.9rem 0;
- border-radius: 999px;
- background: rgba(168, 148, 120, 0.24);
- overflow: hidden;
-}
+ .nav-toggle {
+ display: block;
+ }
-.meter-track span {
- display: block;
- width: 58%;
- height: 100%;
- background: linear-gradient(90deg, var(--taste-teal), var(--taste-lichen), var(--taste-saffron), var(--taste-clay));
-}
+ .nav-links {
+ position: absolute;
+ top: calc(100% + 0.4rem);
+ right: 1rem;
+ display: none;
+ width: min(18rem, calc(100vw - 2rem));
+ padding: 0.5rem;
+ border: 1px solid var(--line);
+ border-radius: var(--radius);
+ background: var(--surface);
+ box-shadow: var(--shadow-paper);
+ }
-.state-meter p {
- margin: 0;
- color: var(--ink-soft);
- font-weight: 720;
-}
+ .nav-open .nav-links {
+ display: grid;
+ }
-.eyebrow {
- width: fit-content;
- max-width: 100%;
- margin: 0 0 1rem;
- padding: 0.34rem 0.52rem;
- border: 1px solid rgba(6, 9, 16, 0.18);
- border-radius: 999px;
- background: rgba(255, 250, 242, 0.78);
- color: var(--start-deep);
- overflow-wrap: anywhere;
-}
+ .nav-links a {
+ border-radius: var(--radius);
+ }
-h1,
-h2,
-h3,
-p {
- letter-spacing: 0;
-}
+ .hero,
+ .split,
+ .steps,
+ .trust-grid {
+ grid-template-columns: 1fr;
+ }
-h1 {
- margin: 0;
- max-width: 12.2ch;
- font-family: var(--editorial);
- font-size: 4.82rem;
- font-weight: 560;
- line-height: 0.985;
- padding-bottom: 0.12em;
- text-wrap: balance;
+ .hero {
+ min-height: auto;
+ gap: 2rem;
+ padding: 3.5rem 0 2.8rem;
+ }
}
-.hero-deck {
- max-width: 38.5rem;
- margin: 1.32rem 0 0;
- color: var(--ink-soft);
- font-size: 1.08rem;
- line-height: 1.66;
-}
+@media (max-width: 520px) {
+ :root {
+ --step-4: 1.9rem;
+ --step-5: 2.05rem;
+ }
-.hero-life-rail {
- display: flex;
- flex-wrap: wrap;
- gap: 0.48rem;
- margin-top: 1.15rem;
-}
+ .hero {
+ gap: 1.1rem;
+ padding: 2rem 0 0.75rem;
+ }
-.hero-life-rail span {
- padding: 0.46rem 0.64rem;
- border: 1px solid rgba(6, 9, 16, 0.2);
- border-radius: 999px;
- background: rgba(255, 250, 242, 0.72);
- color: var(--muted-strong);
- font-size: 0.76rem;
- font-weight: 820;
- box-shadow:
- inset 0 -2px 0 rgba(217, 167, 47, 0.16),
- 0 6px 16px rgba(36, 33, 31, 0.05);
-}
+ .hero-copy p {
+ margin-top: 1rem;
+ line-height: 1.38;
+ }
-.mobile-check-panel {
- display: none;
-}
+ .hero-actions {
+ gap: 0.65rem;
+ margin-top: 1.1rem;
+ }
-.hero-actions,
-.inline-actions {
- display: flex;
- flex-wrap: wrap;
- gap: 0.72rem;
-}
+ .button {
+ min-height: 2.55rem;
+ padding: 0.75rem 1rem;
+ }
-.demo-preview {
- display: grid;
- gap: 0.55rem;
- margin-top: 1.35rem;
- border: 1px solid rgba(6, 9, 16, 0.16);
- border-left: 5px solid var(--taste-cyan);
- border-radius: var(--radius);
- background: rgba(255, 253, 246, 0.74);
- padding: 0.9rem 1rem;
- box-shadow: 0 12px 28px rgba(36, 33, 31, 0.07);
-}
-
-.demo-preview span {
- color: var(--taste-teal);
- font-size: 0.76rem;
- font-weight: 860;
- letter-spacing: 0.08em;
- text-transform: uppercase;
-}
-
-.demo-preview ol {
- display: grid;
- gap: 0.32rem;
- margin: 0;
- padding-left: 1.2rem;
- color: var(--ink);
- font-weight: 720;
-}
-
-.demo-preview p {
- margin: 0;
- color: var(--muted-strong);
- font-size: 0.9rem;
-}
-
-.hero-actions {
- margin-top: 2rem;
-}
-
-.inline-actions {
- margin-top: 1.4rem;
-}
-
-.action {
- --button-bg: rgba(255, 253, 246, 0.76);
- --button-fg: var(--ink);
- position: relative;
- display: inline-flex;
- align-items: center;
- gap: 0.7rem;
- min-height: 3.05rem;
- padding: 0.58rem 0.68rem 0.58rem 1.08rem;
- border: 1px solid rgba(6, 9, 16, 0.24);
- border-radius: 999px;
- background: var(--button-bg);
- color: var(--button-fg);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- 0 12px 28px rgba(36, 33, 31, 0.08);
- font-weight: 820;
- transition:
- border-color var(--motion-soft) var(--ease-out),
- background var(--motion-soft) var(--ease-out),
- color var(--motion-soft) var(--ease-out),
- box-shadow var(--motion-soft) var(--ease-out);
-}
-
-.action.primary {
- --button-bg: var(--ink);
- --button-fg: var(--surface);
- border-color: rgba(6, 9, 16, 0.9);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.16),
- 0 18px 42px rgba(36, 33, 31, 0.2);
-}
-
-.action.secondary {
- --button-bg: rgba(255, 253, 246, 0.78);
-}
-
-.action:hover {
- border-color: rgba(6, 9, 16, 0.42);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- 0 18px 40px rgba(36, 33, 31, 0.12);
-}
-
-.action .icon,
-.copy-control .icon {
- width: 1.85rem;
- height: 1.85rem;
- display: inline-flex;
- position: relative;
- align-items: center;
- justify-content: center;
- flex: 0 0 auto;
- order: 2;
- border-radius: 50%;
- background: rgba(8, 7, 5, 0.07);
- transition: background var(--motion-fast) var(--ease-out);
-}
-
-.action.primary .icon {
- background: rgba(255, 253, 246, 0.15);
-}
-
-.action:hover .icon,
-.copy-control:hover .icon {
- background: rgba(8, 7, 5, 0.1);
-}
-
-.icon-path::before,
-.icon-path::after,
-.icon-source::before,
-.icon-source::after,
-.icon-copy::before,
-.icon-copy::after {
- content: "";
- position: absolute;
- border: 1.4px solid currentColor;
-}
-
-.icon-path::before {
- width: 0.56rem;
- height: 0.56rem;
- border-radius: 50%;
-}
-
-.icon-path::after {
- width: 0.38rem;
- height: 0.38rem;
- right: 0.42rem;
- top: 0.42rem;
- border-left: 0;
- border-bottom: 0;
-}
-
-.icon-source::before {
- left: 0.46rem;
- right: 0.46rem;
- bottom: 0.5rem;
- height: 0.56rem;
- border-radius: 3px;
-}
-
-.icon-source::after {
- left: 0.52rem;
- top: 0.48rem;
- width: 0.44rem;
- height: 0.24rem;
- border-bottom: 0;
- border-radius: 3px 3px 0 0;
-}
-
-.icon-copy::before {
- inset: 0.64rem 0.52rem 0.46rem 0.66rem;
- border-radius: 3px;
-}
-
-.icon-copy::after {
- inset: 0.48rem 0.66rem 0.62rem 0.5rem;
- border-radius: 3px;
-}
-
-.check-strip {
- position: relative;
- z-index: 2;
- width: var(--wrap);
- display: grid;
- grid-template-columns: 0.92fr 1.35fr 1fr;
- gap: 0.55rem;
- margin: -2.65rem auto 0;
- padding: 0.48rem;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, var(--steel), var(--ink) 46%, #07101c),
- repeating-linear-gradient(90deg, transparent 0 46px, rgba(255, 245, 220, 0.09) 46px 47px, transparent 47px 92px);
- box-shadow: 0 20px 50px rgba(36, 33, 31, 0.18);
-}
-
-.check-strip div {
- min-height: 6rem;
- padding: 1rem;
- border: 1px solid rgba(255, 245, 220, 0.42);
- border-radius: 5px;
- background:
- linear-gradient(180deg, rgba(255, 250, 242, 0.97), rgba(255, 245, 220, 0.86));
-}
-
-.check-strip div:nth-child(1) {
- box-shadow: inset 0 5px 0 var(--taste-cyan);
-}
-
-.check-strip div:nth-child(2) {
- box-shadow: inset 0 5px 0 var(--taste-saffron);
-}
-
-.check-strip div:nth-child(3) {
- box-shadow: inset 0 5px 0 var(--taste-berry);
-}
-
-.check-strip strong {
- display: block;
- margin-top: 0.45rem;
- color: var(--ink);
- font-size: 1rem;
- line-height: 1.28;
-}
-
-.review-deck {
- width: var(--wrap);
- margin: 1rem auto 0;
- scroll-margin-top: 5.7rem;
-}
-
-.review-deck-shell {
- --deck-height: clamp(680px, 90dvh, 820px);
- display: grid;
- grid-template-columns: minmax(15rem, 0.36fr) minmax(0, 1fr);
- grid-template-rows: auto minmax(0, 1fr);
- grid-template-areas:
- "intro panels"
- "nav panels";
- gap: 0.9rem;
- align-items: stretch;
- height: var(--deck-height);
- min-height: 0;
-}
-
-.review-deck-intro {
- grid-area: intro;
- padding: 1rem;
- border: 1px solid rgba(6, 9, 16, 0.16);
- border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.86), rgba(255, 248, 236, 0.7));
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- 0 12px 28px rgba(71, 51, 30, 0.08);
-}
-
-.review-deck-intro h2 {
- margin: 0;
- max-width: 11ch;
- font-family: var(--editorial);
- font-size: 3.05rem;
- font-weight: 560;
- line-height: 1.02;
- text-wrap: balance;
-}
-
-.review-deck-intro p:not(.eyebrow) {
- margin: 1rem 0 0;
- color: var(--ink-soft);
- line-height: 1.58;
-}
-
-.review-deck-nav {
- grid-area: nav;
- display: grid;
- align-self: stretch;
- min-height: 0;
- gap: 0.38rem;
- max-height: none;
- overflow: auto;
- padding: 0.35rem;
- border: 1px solid rgba(6, 9, 16, 0.14);
- border-radius: var(--radius);
- background: rgba(255, 250, 242, 0.66);
-}
-
-.review-deck-nav a {
- display: grid;
- gap: 0.16rem;
- min-height: 4rem;
- padding: 0.72rem 0.82rem;
- border: 1px solid rgba(168, 148, 120, 0.32);
- border-radius: 6px;
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.72), rgba(255, 248, 236, 0.58));
- transition:
- background var(--motion-fast) var(--ease-out),
- border-color var(--motion-fast) var(--ease-out),
- box-shadow var(--motion-fast) var(--ease-out);
-}
-
-.review-deck-nav a:hover {
- border-color: rgba(47, 142, 134, 0.38);
- background: rgba(255, 253, 246, 0.92);
-}
-
-.review-deck-nav a.is-active {
- border-color: rgba(6, 9, 16, 0.54);
- background:
- linear-gradient(135deg, rgba(6, 67, 74, 0.96), rgba(6, 9, 16, 0.94));
- box-shadow:
- inset 4px 0 0 var(--taste-saffron),
- 0 14px 28px rgba(6, 9, 16, 0.12);
-}
-
-.review-deck-nav span {
- color: var(--start-deep);
- font-size: 0.66rem;
- font-weight: 860;
- letter-spacing: 0.13em;
- text-transform: uppercase;
-}
-
-.review-deck-nav strong {
- color: var(--ink);
- font-size: 0.92rem;
- line-height: 1.18;
-}
-
-.review-deck-nav a.is-active span,
-.review-deck-nav a.is-active strong {
- color: var(--cream-line);
-}
-
-.review-deck-panels {
- grid-area: panels;
- align-self: stretch;
- min-height: 0;
- max-height: none;
- height: 100%;
- overflow: auto;
- border: 1px solid rgba(6, 9, 16, 0.18);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, rgba(255, 245, 220, 0.04) 0 1px, transparent 1px 6.5rem),
- linear-gradient(180deg, rgba(255, 253, 246, 0.9), rgba(255, 248, 236, 0.76));
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.8),
- 0 24px 58px rgba(71, 51, 30, 0.12);
- overscroll-behavior: contain;
-}
-
-.js .review-panel {
- display: none;
-}
-
-.js .review-panel.is-active {
- display: block;
-}
-
-.review-deck .review-panel {
- box-sizing: border-box;
- min-height: 100%;
- padding: 1.35rem;
- border: 0;
- background: transparent;
- scroll-margin-top: 5.7rem;
-}
-
-.review-deck .review-panel::before,
-.review-deck .review-panel::after {
- display: none;
-}
-
-.review-deck .section-heading,
-.review-deck .submission-copy {
- width: min(640px, 100%);
- margin: 0 0 1.45rem;
-}
-
-.review-deck .section-heading h2 {
- font-size: 2.72rem;
-}
-
-.review-deck .demo-shell,
-.review-deck .console-layout,
-.review-deck .console-output,
-.review-deck .file-map,
-.review-deck .behavior-grid,
-.review-deck .reviewer-layout,
-.review-deck .checkgate-layout,
-.review-deck .coldrun-layout,
-.review-deck .admin-rhythm-layout,
-.review-deck .brief-layout,
-.review-deck .quality-layout,
-.review-deck .thesis-layout,
-.review-deck .handoff-layout,
-.review-deck .setup-layout,
-.review-deck .notes-grid {
- width: 100%;
-}
-
-.review-deck .setup-layout,
-.review-deck .checkgate-layout {
- grid-template-columns: 1fr;
- gap: 1.1rem;
-}
-
-.review-deck .scope-layout {
- width: 100%;
- margin: 0;
-}
-
-.review-deck .note-list,
-.review-deck .cold-prompt-strip,
-.review-deck .release-check-links {
- grid-template-columns: 1fr;
-}
-
-.review-deck .setup-path-list article,
-.review-deck .release-command-list article {
- grid-template-columns: 1fr;
-}
-
-.review-deck .setup-path-list .pane-label,
-.review-deck .release-command-list .pane-label {
- grid-row: auto;
-}
-
-.nav-links a.is-active {
- background: rgba(47, 142, 134, 0.12);
- color: var(--ink);
-}
-
-.section,
-.submission-section {
- position: relative;
- padding: 7.5rem 1.5rem;
- scroll-margin-top: 6.5rem;
-}
-
-.section:nth-of-type(even) {
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.58), rgba(251, 241, 223, 0.42));
-}
-
-.scope-section {
- padding-top: 6.2rem;
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.64), rgba(255, 248, 236, 0.36)),
- repeating-linear-gradient(90deg, rgba(6, 9, 16, 0.018) 0 1px, transparent 1px 110px);
-}
-
-.section-heading,
-.submission-copy {
- width: min(760px, 100%);
- margin: 0 auto 2.5rem;
-}
-
-.section-heading.compact {
- width: min(620px, 100%);
- margin-left: 0;
-}
-
-.section-heading h2,
-.submission-copy h2 {
- margin: 0;
- max-width: 15ch;
- font-family: var(--editorial);
- font-size: 3.05rem;
- font-weight: 560;
- line-height: 1.02;
- padding-bottom: 0.1em;
-}
-
-.submission-copy h2 {
- font-family: var(--editorial);
- font-weight: 560;
- line-height: 1.04;
-}
-
-.section-heading p:not(.eyebrow),
-.submission-copy p {
- color: var(--ink-soft);
- font-size: 1.08rem;
- line-height: 1.7;
-}
-
-.demo-shell,
-.console-layout,
-.console-output,
-.file-map,
-.behavior-grid,
-.reviewer-layout,
-.checkgate-layout,
-.coldrun-layout,
-.admin-rhythm-layout,
-.brief-layout,
-.quality-layout,
-.thesis-layout,
-.handoff-layout,
-.setup-layout,
-.submission-copy {
- width: var(--wrap);
- margin: 0 auto;
-}
-
-.coldrun-section,
-.admin-rhythm-section,
-.quality-section,
-.checkgate-section {
- border-top: 1px solid rgba(168, 148, 120, 0.26);
- border-bottom: 1px solid rgba(168, 148, 120, 0.26);
-}
-
-.coldrun-layout,
-.admin-rhythm-layout,
-.brief-layout,
-.quality-layout,
-.thesis-layout,
-.handoff-layout,
-.setup-layout,
-.console-layout,
-.checkgate-layout,
-.reviewer-layout {
- display: grid;
- grid-template-columns: 0.76fr 1.24fr;
- gap: 3.5rem;
- align-items: start;
-}
-
-.scope-layout {
- width: var(--wrap);
- display: grid;
- grid-template-columns: minmax(0, 0.72fr) minmax(34rem, 1.28fr);
- gap: 3.2rem;
- align-items: center;
- margin: 0 auto;
-}
-
-.scope-board {
- position: relative;
- min-height: 34rem;
- padding: 1rem;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, rgba(255, 245, 220, 0.048) 0 1px, transparent 1px 5.2rem),
- linear-gradient(135deg, rgba(6, 9, 16, 0.98), rgba(6, 67, 74, 0.96) 58%, rgba(7, 16, 28, 0.98)),
- repeating-linear-gradient(90deg, transparent 0 48px, rgba(255, 245, 220, 0.08) 48px 49px, transparent 49px 96px);
- box-shadow:
- inset 0 1px 0 rgba(255, 245, 220, 0.18),
- inset 0 0 0 0.52rem rgba(255, 245, 220, 0.075),
- 0 32px 84px rgba(6, 9, 16, 0.24);
- overflow: hidden;
-}
-
-.scope-board::before {
- content: "";
- position: absolute;
- inset: 0.72rem;
- border: 1px solid rgba(255, 245, 220, 0.44);
- border-radius: 5px;
- pointer-events: none;
- z-index: 3;
-}
-
-.scope-board::after {
- content: "";
- position: absolute;
- left: -7%;
- right: -5%;
- top: 48%;
- height: 4.2rem;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, var(--taste-berry) 0 13%, var(--taste-clay) 13% 27%, var(--taste-saffron) 27% 44%, var(--taste-lichen) 44% 58%, var(--taste-cyan) 58% 77%, var(--taste-teal) 77% 100%);
- box-shadow:
- inset 0 0 0 2px rgba(255, 245, 220, 0.66),
- 0 20px 46px rgba(6, 9, 16, 0.24);
- transform: rotate(-7deg);
- opacity: 0.38;
-}
-
-.scope-core {
- position: relative;
- z-index: 2;
- width: min(28rem, 100%);
- margin: 0 0 1rem auto;
- padding: 1.3rem;
- border: 1px solid rgba(6, 9, 16, 0.78);
- border-top: 5px solid var(--taste-saffron);
- border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(255, 250, 242, 0.985), rgba(255, 245, 220, 0.9));
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.82),
- 0 24px 52px rgba(6, 9, 16, 0.22);
-}
-
-.scope-core strong {
- display: block;
- margin-top: 0.72rem;
- color: var(--ink);
- font-size: 1.34rem;
- line-height: 1.16;
-}
-
-.scope-core p {
- margin: 0.72rem 0 0;
- color: var(--ink-soft);
-}
-
-.scope-lanes {
- position: relative;
- z-index: 2;
- display: grid;
- gap: 0.62rem;
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-.scope-lanes li {
- display: grid;
- grid-template-columns: 0.72rem minmax(0, 1fr) auto;
- gap: 0.9rem;
- align-items: center;
- min-height: 4.85rem;
- padding: 0.88rem 1rem;
- border: 1px solid rgba(255, 245, 220, 0.3);
- border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(6, 67, 74, 0.76), rgba(7, 16, 28, 0.68));
- color: var(--cream-line);
- box-shadow: inset 0 1px 0 rgba(255, 245, 220, 0.12);
-}
-
-.scope-signal {
- width: 0.72rem;
- height: 0.72rem;
- border-radius: 50%;
- box-shadow: 0 0 0 0.36rem rgba(255, 245, 220, 0.08);
-}
-
-.signal-body {
- background: var(--taste-lichen);
-}
-
-.signal-admin {
- background: var(--taste-cyan);
-}
-
-.signal-message {
- background: var(--taste-berry);
-}
-
-.signal-home {
- background: var(--taste-clay);
-}
-
-.signal-capture {
- background: var(--taste-saffron);
-}
-
-.scope-lanes strong {
- display: block;
- color: var(--cream-line);
- font-size: 1rem;
- line-height: 1.15;
-}
-
-.scope-lanes p {
- margin: 0.24rem 0 0;
- color: rgba(255, 245, 220, 0.76);
- line-height: 1.36;
-}
-
-.scope-lanes small {
- justify-self: end;
- width: max-content;
- max-width: 10.8rem;
- padding: 0.38rem 0.5rem;
- border: 1px solid rgba(255, 245, 220, 0.26);
- border-radius: 999px;
- color: rgba(255, 245, 220, 0.84);
- font-size: 0.7rem;
- font-weight: 780;
- letter-spacing: 0.08em;
- text-transform: uppercase;
-}
-
-.admin-rhythm-section {
- background:
- linear-gradient(180deg, rgba(255, 248, 236, 0.32), rgba(255, 253, 246, 0.7)),
- repeating-linear-gradient(135deg, rgba(6, 9, 16, 0.018) 0 1px, transparent 1px 66px);
-}
-
-.admin-rhythm-board {
- position: relative;
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 0.78rem;
- min-height: 38rem;
- padding: 1rem;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- background:
- linear-gradient(145deg, rgba(255, 250, 242, 0.98), rgba(234, 220, 198, 0.82)),
- repeating-linear-gradient(90deg, rgba(6, 9, 16, 0.024) 0 1px, transparent 1px 84px);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.86),
- inset 0 0 0 0.52rem rgba(255, 245, 220, 0.56),
- 0 30px 84px rgba(36, 33, 31, 0.14);
- overflow: hidden;
-}
-
-.admin-rhythm-board::after {
- content: "";
- position: absolute;
- inset: 0.72rem;
- border: 1px solid rgba(6, 9, 16, 0.1);
- border-radius: 5px;
- pointer-events: none;
-}
-
-.admin-rhythm-board::before {
- content: "";
- position: absolute;
- inset: 1.2rem 0.8rem auto;
- height: 5.2rem;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, var(--taste-teal) 0 18%, var(--taste-cyan) 18% 35%, var(--taste-lichen) 35% 51%, var(--taste-saffron) 51% 68%, var(--taste-clay) 68% 84%, var(--taste-berry) 84% 100%);
- box-shadow:
- inset 0 0 0 2px rgba(255, 245, 220, 0.72),
- 0 18px 42px rgba(6, 9, 16, 0.12);
- transform: rotate(-2.5deg);
- opacity: 0.72;
-}
-
-.admin-rhythm-visual {
- position: relative;
- z-index: 1;
- grid-column: 1 / -1;
- min-height: 18rem;
- margin: 0;
- padding: 0.52rem;
- border: 1px solid rgba(6, 9, 16, 0.82);
- border-radius: var(--radius);
- background:
- linear-gradient(145deg, rgba(6, 9, 16, 0.96), rgba(6, 67, 74, 0.93)),
- repeating-linear-gradient(90deg, transparent 0 44px, rgba(255, 245, 220, 0.055) 44px 45px, transparent 45px 88px);
- box-shadow:
- inset 0 1px 0 rgba(255, 245, 220, 0.15),
- inset 0 0 0 0.34rem rgba(255, 245, 220, 0.08),
- 0 24px 58px rgba(6, 9, 16, 0.18);
- overflow: hidden;
-}
-
-.admin-rhythm-visual::before {
- content: "";
- position: absolute;
- inset: 0.88rem;
- z-index: 2;
- border: 1px solid rgba(255, 245, 220, 0.58);
- border-radius: 5px;
- pointer-events: none;
-}
-
-.admin-rhythm-visual::after {
- content: "";
- position: absolute;
- left: 0.52rem;
- right: 0.52rem;
- bottom: 0.52rem;
- z-index: 2;
- height: 0.54rem;
- border-top: 1px solid rgba(6, 9, 16, 0.7);
- background:
- linear-gradient(90deg, var(--taste-teal) 0 18%, var(--taste-cyan) 18% 34%, var(--taste-lichen) 34% 50%, var(--taste-saffron) 50% 66%, var(--taste-clay) 66% 82%, var(--taste-berry) 82% 100%);
- pointer-events: none;
-}
-
-.admin-rhythm-visual img {
- display: block;
- width: 100%;
- height: min(32vw, 24rem);
- min-height: 17rem;
- object-fit: cover;
- object-position: center;
- border: 1px solid rgba(255, 245, 220, 0.52);
- border-radius: 5px;
- filter: saturate(1.08) contrast(1.03);
-}
-
-.admin-rhythm-card,
-.admin-boundary {
- position: relative;
- z-index: 1;
- min-height: 14.8rem;
- display: grid;
- align-content: space-between;
- gap: 1rem;
- padding: 1.25rem;
- border: 1px solid rgba(6, 9, 16, 0.18);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, rgba(47, 142, 134, 0.04), transparent 32%, rgba(217, 167, 47, 0.05)),
- linear-gradient(180deg, rgba(255, 253, 246, 0.96), rgba(248, 243, 235, 0.86));
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.82),
- 0 16px 42px rgba(36, 33, 31, 0.08);
- overflow: hidden;
-}
-
-.admin-rhythm-card::before,
-.admin-boundary::before {
- content: "";
- position: absolute;
- inset: 0.36rem;
- border: 1px solid rgba(255, 245, 220, 0.78);
- border-radius: 5px;
- pointer-events: none;
-}
-
-.admin-rhythm-card:nth-child(2) {
- border-top: 5px solid var(--taste-cyan);
-}
-
-.admin-rhythm-card:nth-child(3) {
- border-top: 5px solid var(--taste-saffron);
- transform: translateY(1.4rem);
-}
-
-.admin-rhythm-card:nth-child(4) {
- border-top: 5px solid var(--taste-clay);
- transform: translateY(-0.4rem);
-}
-
-.admin-rhythm-card strong,
-.admin-boundary strong {
- display: block;
- max-width: 24rem;
- color: var(--ink);
- font-size: 1.34rem;
- line-height: 1.13;
-}
-
-.admin-rhythm-card p,
-.admin-boundary p {
- margin: 0;
- color: var(--ink-soft);
- line-height: 1.52;
-}
-
-.admin-boundary {
- grid-row: span 2;
- color: var(--cream-line);
- border-color: rgba(6, 9, 16, 0.82);
- background:
- linear-gradient(145deg, rgba(6, 67, 74, 0.98), rgba(6, 9, 16, 0.96)),
- repeating-linear-gradient(135deg, transparent 0 40px, rgba(255, 245, 220, 0.05) 40px 41px, transparent 41px 82px);
- box-shadow:
- inset 0 1px 0 rgba(255, 245, 220, 0.14),
- inset 0 0 0 0.44rem rgba(255, 245, 220, 0.08),
- 0 24px 60px rgba(6, 9, 16, 0.2);
-}
-
-.admin-boundary span {
- color: rgba(255, 245, 220, 0.74);
- font-size: 0.68rem;
- font-weight: 780;
- letter-spacing: 0.16em;
- text-transform: uppercase;
-}
-
-.admin-boundary strong {
- color: var(--cream-line);
- font-family: var(--editorial);
- font-size: 2.34rem;
- font-weight: 560;
- line-height: 1.02;
-}
-
-.admin-boundary p {
- color: rgba(255, 245, 220, 0.8);
-}
-
-.coldrun-steps,
-.brief-board,
-.quality-board,
-.thesis-points,
-.setup-board,
-.comparison-grid,
-.console-output,
-.file-map,
-.behavior-grid,
-.notes-grid,
-.checkgate-board {
- display: grid;
- gap: 0.75rem;
-}
-
-.coldrun-steps {
- grid-template-columns: 1.06fr 0.92fr 1fr;
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.brief-board,
-.quality-board,
-.thesis-points,
-.setup-board,
-.checkgate-board {
- grid-template-columns: repeat(2, minmax(0, 1fr));
-}
-
-.setup-board .start-prompt,
-.quality-board .fail-card {
- grid-column: 1 / -1;
-}
-
-.coldrun-steps li,
-.brief-board article,
-.quality-board article,
-.thesis-points article,
-.setup-board article,
-.response-pane,
-.console-output article,
-.file-node,
-.behavior-grid article,
-.notes-grid a,
-.checkgate-board article,
-.reviewer-steps li,
-.handoff-figure,
-.coach-console,
-.slide-art,
-.slide-grid article,
-.terminal-card {
- position: relative;
- min-width: 0;
- border: 1px solid rgba(6, 9, 16, 0.16);
- border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(255, 250, 242, 0.96), rgba(248, 243, 235, 0.84));
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- var(--shadow-tight);
- overflow: hidden;
-}
-
-.coldrun-steps li::before,
-.brief-board article::before,
-.quality-board article::before,
-.thesis-points article::before,
-.setup-board article::before,
-.response-pane::before,
-.console-output article::before,
-.file-node::before,
-.behavior-grid article::before,
-.notes-grid a::before,
-.checkgate-board article::before,
-.reviewer-steps li::before {
- content: "";
- position: absolute;
- inset: 0.36rem;
- border: 1px solid rgba(255, 245, 220, 0.74);
- border-radius: 5px;
- pointer-events: none;
-}
-
-.coldrun-steps li::after,
-.brief-board article::after,
-.quality-board article::after,
-.thesis-points article::after,
-.setup-board article::after,
-.response-pane::after,
-.console-output article::after,
-.file-node::after,
-.behavior-grid article::after,
-.notes-grid a::after,
-.checkgate-board article::after {
- content: "";
- position: absolute;
- right: 0.72rem;
- bottom: 0.72rem;
- width: 1.2rem;
- height: 1.2rem;
- background:
- linear-gradient(135deg, transparent 0 44%, rgba(6, 9, 16, 0.18) 44% 52%, transparent 52%),
- linear-gradient(45deg, var(--taste-cyan) 0 28%, var(--taste-lichen) 28% 48%, var(--taste-saffron) 48% 66%, var(--taste-clay) 66% 82%, var(--taste-berry) 82% 100%);
- clip-path: polygon(0 0, 100% 0, 100% 100%);
- opacity: 0.72;
- pointer-events: none;
-}
-
-.coldrun-steps li,
-.brief-board article,
-.quality-board article,
-.thesis-points article,
-.setup-board article,
-.console-output article,
-.file-node,
-.behavior-grid article,
-.notes-grid a,
-.checkgate-board article {
- min-height: 13rem;
- display: grid;
- align-content: space-between;
- gap: 1rem;
- padding: 1.25rem;
-}
-
-.coldrun-steps li:nth-child(1),
-.brief-board article:nth-child(1),
-.quality-board article:nth-child(1),
-.thesis-points article:nth-child(1),
-.setup-board article:nth-child(1),
-.console-output article:nth-child(1),
-.checkgate-board article:nth-child(1) {
- border-top: 5px solid var(--taste-cyan);
-}
-
-.coldrun-steps li:nth-child(2),
-.brief-board article:nth-child(2),
-.quality-board article:nth-child(2),
-.thesis-points article:nth-child(2),
-.setup-board article:nth-child(2),
-.console-output article:nth-child(2),
-.checkgate-board article:nth-child(2) {
- border-top: 5px solid var(--taste-lichen);
-}
-
-.coldrun-steps li:nth-child(3),
-.brief-board article:nth-child(3),
-.quality-board article:nth-child(3),
-.thesis-points article:nth-child(3),
-.setup-board article:nth-child(3),
-.console-output article:nth-child(3),
-.checkgate-board article:nth-child(3) {
- border-top: 5px solid var(--taste-saffron);
-}
-
-.brief-board article:nth-child(4),
-.quality-board article:nth-child(4),
-.setup-board article:nth-child(4),
-.console-output article:nth-child(4),
-.checkgate-board article:nth-child(4) {
- border-top: 5px solid var(--taste-clay);
-}
-
-.brief-board article:nth-child(5),
-.setup-board article:nth-child(5),
-.checkgate-board article:nth-child(5) {
- border-top: 5px solid var(--magenta);
- border-top: 5px solid var(--taste-berry);
-}
-
-.coldrun-steps span,
-.brief-board span,
-.notes-grid span,
-.notes-grid small {
- color: var(--muted);
- font-size: 0.68rem;
- font-weight: 780;
- letter-spacing: 0.16em;
- text-transform: uppercase;
-}
-
-.coldrun-steps strong,
-.brief-board strong,
-.quality-board strong,
-.thesis-points strong,
-.console-output strong,
-.checkgate-board strong,
-.notes-grid strong {
- max-width: 24rem;
- color: var(--ink);
- font-size: 1.26rem;
- line-height: 1.16;
- overflow-wrap: anywhere;
-}
-
-.coldrun-steps p,
-.brief-board p,
-.quality-board p,
-.thesis-points p,
-.setup-board p,
-.console-output p,
-.file-node p,
-.behavior-grid p,
-.checkgate-board p,
-.reviewer-steps li,
-.notes-grid small {
- margin: 0;
- color: var(--ink-soft);
-}
-
-.brief-board a,
-.setup-board a {
- width: fit-content;
- border-bottom: 1px solid rgba(125, 49, 37, 0.42);
- color: var(--start-deep);
- font-weight: 780;
-}
-
-.quality-board .fail-card {
- color: #fff8e8;
- background:
- linear-gradient(90deg, rgba(255, 245, 220, 0.07) 0 1px, transparent 1px 7rem),
- linear-gradient(180deg, rgba(255, 245, 220, 0.045) 0 1px, transparent 1px 4.5rem),
- radial-gradient(circle at 14% 0%, rgba(111, 199, 197, 0.18), transparent 34%),
- linear-gradient(145deg, rgba(6, 67, 74, 0.98), rgba(7, 16, 28, 0.97) 72%, rgba(6, 9, 16, 0.98));
- border-color: rgba(255, 245, 220, 0.24);
- border-top: 5px solid var(--magenta);
- box-shadow:
- inset 0 1px 0 rgba(255, 245, 220, 0.2),
- var(--shadow-ink);
-}
-
-.quality-board .fail-card strong {
- color: #fffdf6;
-}
-
-.quality-board .fail-card .pane-label,
-.quality-board .fail-card p {
- color: rgba(255, 248, 232, 0.84);
-}
-
-.checkgate-board code,
-.setup-board code {
- font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
- font-size: 0.9em;
-}
-
-.handoff-figure {
- min-height: 24rem;
- display: grid;
- place-items: center;
- padding: 1rem;
- background:
- linear-gradient(145deg, rgba(255, 250, 242, 0.94), rgba(234, 220, 198, 0.76));
-}
-
-.handoff-figure img {
- display: block;
- width: min(100%, 33rem);
- height: auto;
- filter: drop-shadow(0 20px 35px rgba(71, 51, 30, 0.12));
-}
-
-.setup-board pre,
-.terminal-card pre {
- margin: 0.9rem 0 0;
- padding: 1rem;
- border: 1px solid rgba(168, 148, 120, 0.28);
- border-radius: var(--radius);
- background: rgba(255, 253, 246, 0.58);
- overflow-wrap: anywhere;
- white-space: pre-wrap;
-}
-
-.setup-flow,
-.checkgate-summary {
- grid-template-columns: 1fr;
-}
-
-.setup-flow article,
-.checkgate-summary article {
- min-height: 0;
-}
-
-.setup-flow article::before,
-.setup-flow article::after,
-.checkgate-summary article::before,
-.checkgate-summary article::after {
- display: none;
-}
-
-.setup-primary,
-.release-status,
-.coverage-note {
- border-top: 5px solid var(--taste-cyan);
-}
-
-.setup-path-list,
-.cold-prompt-strip,
-.release-command-list,
-.release-check-links {
- display: grid;
- gap: 0.62rem;
-}
-
-.setup-path-list article,
-.cold-prompt-strip article,
-.release-command-list article {
- min-height: 0;
- padding: 0.95rem;
-}
-
-.setup-path-list article {
- grid-template-columns: minmax(8.5rem, 0.28fr) minmax(0, 1fr);
- align-items: start;
-}
-
-.setup-path-list .pane-label {
- grid-row: span 2;
-}
-
-.cold-prompt-strip {
- grid-template-columns: repeat(2, minmax(0, 1fr));
-}
-
-.setup-note {
- border-top: 5px solid var(--taste-saffron);
-}
-
-.release-command-list article {
- display: grid;
- grid-template-columns: minmax(8rem, 0.28fr) minmax(0, 1fr);
- gap: 0.3rem 0.85rem;
- align-content: start;
-}
-
-.release-command-list .pane-label {
- grid-row: span 2;
-}
-
-.release-command-list code,
-.release-check-links code {
- overflow-wrap: anywhere;
- word-break: break-word;
-}
-
-.release-check-links {
- grid-template-columns: repeat(2, minmax(0, 1fr));
-}
-
-.release-check-links a {
- padding: 0.78rem 0.85rem;
- border: 1px solid rgba(6, 9, 16, 0.12);
- border-radius: 7px;
- background: rgba(255, 253, 246, 0.66);
- color: var(--start-deep);
- font-size: 0.84rem;
- font-weight: 800;
- line-height: 1.34;
- text-decoration: none;
-}
-
-.prompt-card-head {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 1rem;
-}
-
-.copy-control {
- display: inline-flex;
- align-items: center;
- gap: 0.45rem;
- min-height: 2.6rem;
- padding: 0.36rem 0.5rem 0.36rem 0.8rem;
- border: 1px solid rgba(168, 148, 120, 0.36);
- border-radius: 999px;
- background: rgba(255, 253, 246, 0.76);
- cursor: pointer;
- font-weight: 760;
- transition:
- background var(--motion-fast) var(--ease-out),
- border-color var(--motion-fast) var(--ease-out);
-}
-
-.copy-control:hover,
-.copy-control.copied {
- border-color: rgba(44, 123, 115, 0.46);
- background: rgba(126, 203, 208, 0.15);
-}
-
-.demo-shell {
- display: grid;
- gap: 1rem;
-}
-
-.prompt-rail {
- display: flex;
- gap: 0.5rem;
- padding: 0.42rem;
- border: 1px solid rgba(6, 9, 16, 0.16);
- border-radius: var(--radius);
- background: rgba(255, 250, 242, 0.64);
- overflow-x: auto;
-}
-
-.prompt-tab,
-.sample-chip {
- border: 1px solid rgba(6, 9, 16, 0.18);
- border-radius: 999px;
- background: rgba(255, 253, 246, 0.72);
- color: var(--muted-strong);
- cursor: pointer;
- font-weight: 760;
- white-space: nowrap;
- transition:
- color var(--motion-fast) var(--ease-out),
- background var(--motion-fast) var(--ease-out),
- border-color var(--motion-fast) var(--ease-out);
-}
-
-.prompt-tab {
- padding: 0.72rem 0.95rem;
-}
-
-.sample-chip {
- padding: 0.62rem 0.82rem;
-}
-
-.prompt-tab:hover,
-.prompt-tab.active,
-.sample-chip:hover {
- border-color: rgba(6, 9, 16, 0.32);
- background: var(--ink);
- color: var(--surface);
-}
-
-.comparison-grid {
- grid-template-columns: 0.86fr 1fr 1.18fr;
- grid-template-areas: "user generic unstuck";
-}
-
-.response-pane {
- min-height: 18rem;
- display: grid;
- align-content: space-between;
- gap: 1.1rem;
- padding: 1.35rem;
-}
-
-.user-pane {
- grid-area: user;
-}
-
-.generic-pane {
- grid-area: generic;
-}
-
-.unstuck-pane {
- grid-area: unstuck;
- color: var(--cream-line);
- background:
- linear-gradient(145deg, rgba(6, 67, 74, 0.98), rgba(6, 9, 16, 0.96));
- border-color: rgba(23, 63, 62, 0.48);
-}
-
-.unstuck-pane .pane-label,
-.unstuck-pane p {
- color: rgba(255, 245, 220, 0.82);
-}
-
-.response-pane p {
- margin: 0;
- font-size: 1.16rem;
- line-height: 1.56;
-}
-
-.console-section {
- border-top: 1px solid rgba(168, 148, 120, 0.26);
-}
-
-.coach-console {
- display: grid;
- gap: 1rem;
- padding: 1.2rem;
-}
-
-.input-field {
- display: grid;
- gap: 0.55rem;
-}
-
-.input-field label {
- color: var(--muted);
- font-size: 0.74rem;
- font-weight: 780;
- letter-spacing: 0.16em;
- text-transform: uppercase;
-}
-
-.input-field textarea {
- width: 100%;
- min-height: 9rem;
- resize: vertical;
- border: 1px solid rgba(168, 148, 120, 0.4);
- border-radius: var(--radius);
- background: rgba(255, 253, 246, 0.8);
- color: var(--ink);
- padding: 1rem;
- outline: none;
- transition:
- border-color var(--motion-fast) var(--ease-out),
- box-shadow var(--motion-fast) var(--ease-out),
- background var(--motion-fast) var(--ease-out);
-}
-
-.input-field textarea:focus {
- border-color: rgba(44, 123, 115, 0.58);
- background: var(--surface);
- box-shadow: 0 0 0 5px rgba(126, 203, 208, 0.14);
-}
-
-.input-field p {
- margin: 0;
- color: var(--muted);
-}
-
-.sample-row {
- display: flex;
- flex-wrap: wrap;
- gap: 0.55rem;
-}
-
-.console-submit {
- width: fit-content;
-}
-
-.console-output {
- grid-template-columns: repeat(4, 1fr);
- margin-top: 1rem;
-}
-
-.file-map {
- grid-template-columns: repeat(5, 1fr);
-}
-
-.file-node h3,
-.behavior-grid h3 {
- margin: 0;
- color: var(--ink);
- font-size: 1.04rem;
-}
-
-.file-node:nth-child(2),
-.file-node:nth-child(4) {
- transform: translateY(1.8rem);
-}
-
-.behavior-grid {
- grid-template-columns: repeat(3, 1fr);
-}
-
-.notes-section {
- background:
- linear-gradient(180deg, rgba(23, 63, 62, 0.05), rgba(255, 248, 236, 0.72));
-}
-
-.notes-grid {
- width: var(--wrap);
- margin: 0 auto;
- grid-template-columns: repeat(4, minmax(0, 1fr));
-}
-
-.notes-grid a {
- min-height: 12.5rem;
- text-decoration: none;
- transition:
- border-color var(--motion-fast) var(--ease-out),
- box-shadow var(--motion-fast) var(--ease-out);
-}
-
-.notes-grid a:hover {
- border-color: rgba(8, 7, 5, 0.28);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- 0 18px 42px rgba(71, 51, 30, 0.12);
-}
-
-.note-reader {
- grid-template-columns: 1fr;
- gap: 0.82rem;
-}
-
-.note-reader .note-feature,
-.note-list a,
-.note-compact-links {
- min-height: 0;
-}
-
-.note-reader .note-feature {
- padding: 1.15rem;
- border-top: 5px solid var(--taste-cyan);
-}
-
-.note-reader .note-feature small {
- max-width: 60ch;
- font-size: 0.86rem;
- line-height: 1.42;
-}
-
-.note-list {
- display: grid;
- grid-template-columns: repeat(2, minmax(0, 1fr));
- gap: 0.72rem;
-}
-
-.note-list a {
- padding: 1rem;
-}
-
-.note-compact-links {
- display: flex;
- flex-wrap: wrap;
- gap: 0.48rem;
- padding: 0.68rem;
- border: 1px solid rgba(6, 9, 16, 0.12);
- border-radius: var(--radius);
- background: rgba(255, 253, 246, 0.62);
-}
-
-.note-compact-links a {
- min-height: 0;
- padding: 0.48rem 0.62rem;
- border-radius: 999px;
- background: rgba(255, 250, 242, 0.86);
- color: var(--start-deep);
- font-size: 0.82rem;
- font-weight: 820;
- text-decoration: none;
-}
-
-.note-more {
- padding: 0.72rem;
- border: 1px solid rgba(6, 9, 16, 0.12);
- border-radius: var(--radius);
- background: rgba(255, 253, 246, 0.54);
-}
-
-.note-more summary {
- cursor: pointer;
- color: var(--start-deep);
- font-size: 0.84rem;
- font-weight: 840;
-}
-
-.note-more .note-compact-links {
- margin-top: 0.6rem;
- padding: 0;
- border: 0;
- background: transparent;
-}
-
-.note-reader a::before,
-.note-reader a::after,
-.note-compact-links::before,
-.note-compact-links::after {
- display: none;
-}
-
-.reviewer-steps {
- display: grid;
- gap: 0.72rem;
- list-style: none;
- margin: 0;
- padding: 0;
- counter-reset: reviewer;
-}
-
-.reviewer-steps li {
- min-height: auto;
- padding: 1rem 1rem 1rem 3.2rem;
- counter-increment: reviewer;
-}
-
-.reviewer-steps li::after {
- content: counter(reviewer, decimal-leading-zero);
- position: absolute;
- left: 1rem;
- top: 1rem;
- color: var(--start-deep);
- font-size: 0.72rem;
- font-weight: 820;
- letter-spacing: 0.12em;
-}
-
-.submission-section {
- overflow: hidden;
- background:
- linear-gradient(90deg, rgba(255, 245, 220, 0.045) 0 1px, transparent 1px 7rem),
- linear-gradient(145deg, rgba(8, 7, 5, 0.96), rgba(23, 63, 62, 0.92));
- color: var(--cream-line);
-}
-
-.submission-section::before {
- content: "";
- position: absolute;
- left: -2rem;
- right: -2rem;
- top: 1.35rem;
- height: 0.72rem;
- border-block: 1px solid rgba(255, 245, 220, 0.18);
- background:
- linear-gradient(90deg, var(--taste-teal) 0 18%, var(--taste-cyan) 18% 32%, var(--taste-lichen) 32% 47%, var(--taste-saffron) 47% 62%, var(--taste-clay) 62% 78%, var(--taste-berry) 78% 100%);
- opacity: 0.78;
- transform: rotate(-1.6deg);
-}
-
-.submission-copy {
- position: relative;
- margin: 0 auto;
- padding-left: 1.15rem;
-}
-
-.submission-copy::before {
- content: "";
- position: absolute;
- inset: 0.25rem auto 0.35rem 0;
- width: 0.22rem;
- border-radius: 999px;
- background: linear-gradient(180deg, var(--taste-cyan), var(--taste-saffron), var(--taste-clay), var(--taste-berry));
- box-shadow: 0 0 0 1px rgba(255, 245, 220, 0.28);
-}
-
-.submission-copy .eyebrow,
-.submission-copy p {
- color: rgba(255, 245, 220, 0.78);
-}
-
-.source-page main {
- padding-top: 4.8rem;
-}
-
-.source-hero,
-.source-index,
-.source-reader-layout {
- width: var(--wrap);
- margin-inline: auto;
-}
-
-.source-hero {
- min-height: min(640px, 82dvh);
- display: grid;
- grid-template-columns: minmax(0, 0.98fr) minmax(20rem, 0.82fr);
- align-items: center;
- gap: clamp(1.5rem, 4vw, 4rem);
- padding-block: clamp(4.4rem, 7vw, 6.2rem) clamp(2.4rem, 5vw, 4rem);
-}
-
-.source-heading {
- max-width: 48rem;
- margin: 0;
-}
-
-.source-heading h1 {
- max-width: 12.5ch;
- margin: 0;
- font-family: var(--editorial);
- font-size: 4.85rem;
- line-height: 0.98;
-}
-
-.source-heading p {
- max-width: 35rem;
-}
-
-.source-hero-panel {
- position: relative;
- display: grid;
- gap: 1.05rem;
- min-height: 18.5rem;
- align-content: end;
- padding: clamp(1.2rem, 3vw, 1.8rem);
- border: 1px solid rgba(255, 245, 220, 0.24);
- border-top: 5px solid var(--taste-cyan);
- border-radius: var(--radius);
- background:
- linear-gradient(90deg, rgba(255, 245, 220, 0.07) 0 1px, transparent 1px 7rem),
- linear-gradient(180deg, rgba(255, 245, 220, 0.045) 0 1px, transparent 1px 4.5rem),
- radial-gradient(circle at 14% 0%, rgba(217, 167, 47, 0.18), transparent 34%),
- linear-gradient(145deg, rgba(6, 67, 74, 0.98), rgba(7, 16, 28, 0.97) 72%, rgba(6, 9, 16, 0.98));
- color: #fff8e8;
- box-shadow:
- inset 0 1px 0 rgba(255, 245, 220, 0.2),
- var(--shadow-ink);
- overflow: hidden;
-}
-
-.source-hero-panel::before {
- content: "";
- position: absolute;
- inset: 0.36rem;
- border: 1px solid rgba(255, 245, 220, 0.22);
- border-radius: 5px;
- pointer-events: none;
-}
-
-.source-hero-panel strong {
- max-width: 21rem;
- color: #fffdf6;
- font-size: 2.35rem;
- line-height: 1.02;
-}
-
-.source-hero-panel p {
- max-width: 24rem;
- margin: 0;
- color: rgba(255, 248, 232, 0.84);
-}
-
-.source-index {
- display: flex;
- flex-wrap: wrap;
- gap: 0.6rem;
- margin-bottom: clamp(2rem, 6vw, 4rem);
-}
-
-.source-index a {
- display: inline-flex;
- align-items: center;
- min-height: 2.6rem;
- padding: 0.58rem 0.9rem;
- border: 1px solid rgba(6, 9, 16, 0.14);
- border-radius: 999px;
- background: rgba(255, 250, 242, 0.72);
- color: var(--ink);
- font-weight: 760;
- box-shadow: var(--shadow-tight);
-}
-
-.source-mobile-index {
- display: none;
-}
-
-.source-reader-layout {
- display: grid;
- grid-template-columns: minmax(13.5rem, 16rem) minmax(0, 1fr);
- gap: clamp(1rem, 3vw, 2.2rem);
- align-items: start;
-}
-
-.source-reader-content {
- min-width: 0;
-}
-
-.source-reader-rail {
- position: sticky;
- top: 5.8rem;
- max-height: calc(100dvh - 6.6rem);
- overflow: auto;
- padding: 0.82rem;
- border: 1px solid rgba(6, 9, 16, 0.13);
- border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(255, 250, 242, 0.94), rgba(248, 243, 235, 0.82));
- box-shadow: var(--shadow-tight);
-}
-
-.reader-rail-inner {
- display: grid;
- gap: 0.82rem;
-}
-
-.reader-rail-top,
-.group-document-strip a,
-.source-actions a,
-.reader-rail-group a,
-.mobile-index-groups a {
- border: 1px solid rgba(6, 9, 16, 0.12);
- border-radius: 7px;
- background: rgba(255, 253, 246, 0.72);
-}
-
-.reader-rail-top {
- display: block;
- padding: 0.58rem 0.64rem;
- color: var(--ink);
- font-weight: 820;
-}
-
-.reader-rail-group {
- display: grid;
- gap: 0.4rem;
-}
-
-.reader-rail-group h2,
-.mobile-index-groups h2 {
- margin: 0;
- color: var(--muted-strong);
- font-size: 0.68rem;
- font-weight: 860;
- letter-spacing: 0.1em;
- text-transform: uppercase;
-}
-
-.reader-rail-group ol,
-.mobile-index-groups ol {
- display: grid;
- gap: 0.32rem;
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-.reader-rail-group a,
-.mobile-index-groups a {
- display: grid;
- gap: 0.12rem;
- padding: 0.46rem 0.54rem;
-}
-
-.reader-rail-group a.is-active,
-.mobile-index-groups a.is-active,
-.group-document-strip a.is-active,
-.source-actions a.is-active {
- border-color: rgba(47, 142, 134, 0.34);
- background: rgba(47, 142, 134, 0.11);
- box-shadow: inset 0 0 0 1px rgba(47, 142, 134, 0.16);
-}
-
-.reader-rail-group a span,
-.mobile-index-groups a span,
-.group-document-strip a span {
- color: var(--ink);
- font-size: 0.84rem;
- font-weight: 820;
- line-height: 1.12;
-}
-
-.reader-rail-group a small,
-.mobile-index-groups a small,
-.group-document-strip a small,
-.source-actions a small {
- color: var(--muted);
- font-size: 0.68rem;
- font-weight: 720;
- line-height: 1.18;
- overflow-wrap: anywhere;
-}
-
-.source-group {
- width: 100%;
- margin-inline: 0;
- padding-block: clamp(2.6rem, 7vw, 5.5rem);
- border-top: 1px solid rgba(6, 9, 16, 0.12);
- scroll-margin-top: 6.4rem;
-}
-
-.source-group-header {
- display: grid;
- grid-template-columns: minmax(0, 0.72fr) minmax(0, 1fr);
- gap: clamp(1rem, 4vw, 4rem);
- align-items: end;
- margin-bottom: clamp(1.4rem, 4vw, 2.8rem);
-}
-
-.source-group-header h2 {
- max-width: 11ch;
- margin: 0;
- font-family: var(--editorial);
- font-size: 5.8rem;
- line-height: 0.92;
-}
-
-.group-document-strip {
- display: flex;
- flex-wrap: wrap;
- gap: 0.42rem;
- margin: 0 0 1rem;
-}
-
-.group-document-strip a {
- display: grid;
- min-width: min(100%, 10.5rem);
- padding: 0.48rem 0.58rem;
-}
-
-.source-grid {
- display: grid;
- grid-template-columns: repeat(3, minmax(0, 1fr));
- gap: 0.8rem;
-}
-
-.source-document-stack {
- display: grid;
- gap: 1rem;
-}
-
-.source-page.reader-ready .source-group[data-source-group],
-.source-page.reader-ready .rendered-source[data-reader-document],
-.source-page.reader-ready .verification-group {
- display: none;
-}
-
-.source-page.reader-ready .source-group[data-source-group].has-active-doc,
-.source-page.reader-ready .rendered-source[data-reader-document].is-active,
-.source-page.reader-ready.show-verification .verification-group {
- display: block;
-}
-
-.source-page.reader-ready.show-verification .source-group[data-source-group] {
- display: none;
-}
-
-.source-card {
- position: relative;
- display: grid;
- min-height: 15.2rem;
- align-content: space-between;
- gap: 1rem;
- padding: 1rem;
- border: 1px solid rgba(6, 9, 16, 0.14);
- border-top: 4px solid var(--taste-saffron);
- border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(255, 250, 242, 0.97), rgba(248, 243, 235, 0.88));
- box-shadow: var(--shadow-tight);
- overflow: hidden;
-}
-
-.source-card:nth-child(3n + 1) {
- border-top-color: var(--taste-teal);
-}
-
-.source-card:nth-child(3n + 2) {
- border-top-color: var(--taste-clay);
-}
-
-.source-card > span {
- color: var(--muted-strong);
- font-size: 0.74rem;
- font-weight: 780;
- letter-spacing: 0.12em;
- text-transform: uppercase;
-}
-
-.source-card h3 {
- margin: 0;
- color: var(--ink);
- font-size: 1.18rem;
- line-height: 1.12;
- overflow-wrap: anywhere;
-}
-
-.source-card p {
- margin: 0;
- color: var(--ink-soft);
-}
-
-.source-card > code,
-.verifier-card code,
-.source-check code {
- display: block;
- width: fit-content;
- max-width: 100%;
- padding: 0.42rem 0.54rem;
- border: 1px solid rgba(6, 9, 16, 0.14);
- border-radius: 6px;
- background: rgba(255, 253, 246, 0.72);
- color: var(--muted-strong);
- font-size: 0.78rem;
- overflow-wrap: anywhere;
-}
-
-.source-grid.compact .source-card {
- min-height: 11.5rem;
-}
-
-.rendered-source {
- display: block;
- min-height: auto;
- padding: clamp(1rem, 2vw, 1.45rem);
- scroll-margin-top: 6.4rem;
-}
-
-.rendered-source:target {
- outline: 2px solid rgba(47, 142, 134, 0.44);
- outline-offset: 0.18rem;
-}
-
-.source-head {
- display: grid;
- grid-template-columns: minmax(0, 1fr) minmax(16rem, 0.42fr);
- gap: 1rem;
- align-items: start;
-}
-
-.source-head span {
- display: inline-block;
- margin-bottom: 0.5rem;
- color: var(--muted-strong);
- font-size: 0.74rem;
- font-weight: 780;
- letter-spacing: 0.12em;
- text-transform: uppercase;
-}
-
-.source-check {
- display: grid;
- gap: 0.45rem;
- margin: 0;
- padding: 0.75rem;
- border: 1px solid rgba(6, 9, 16, 0.12);
- border-radius: 8px;
- background: rgba(255, 253, 246, 0.7);
-}
-
-.source-check div {
- display: grid;
- grid-template-columns: 4rem minmax(0, 1fr);
- gap: 0.5rem;
-}
-
-.source-check dt,
-.verifier-card small {
- color: var(--muted-strong);
- font-size: 0.72rem;
- font-weight: 820;
- letter-spacing: 0.1em;
- text-transform: uppercase;
-}
-
-.source-check dd {
- min-width: 0;
- margin: 0;
- color: var(--ink);
- font-weight: 760;
- overflow-wrap: anywhere;
-}
-
-.section-controls {
- display: flex;
- flex-wrap: wrap;
- gap: 0.45rem;
- margin-top: 1rem;
-}
-
-.section-controls button {
- min-height: 2.45rem;
- padding: 0.46rem 0.68rem;
- border: 1px solid rgba(6, 9, 16, 0.14);
- border-radius: 999px;
- background: rgba(255, 253, 246, 0.72);
- color: var(--ink);
- font: inherit;
- font-size: 0.82rem;
- font-weight: 820;
- cursor: pointer;
-}
-
-.section-controls button:active {
- transform: translateY(1px);
-}
-
-.rendered-markdown {
- display: grid;
- gap: 0.62rem;
- margin-top: 1rem;
- padding-top: 1rem;
- border-top: 1px solid rgba(6, 9, 16, 0.12);
- color: var(--ink-soft);
-}
-
-.rendered-section-list {
- display: grid;
- gap: 0.58rem;
-}
-
-.rendered-section {
- border: 1px solid rgba(6, 9, 16, 0.13);
- border-radius: 8px;
- background: rgba(255, 253, 246, 0.58);
- overflow: hidden;
-}
-
-.rendered-section summary {
- display: grid;
- grid-template-columns: minmax(0, 1fr) auto;
- gap: 0.8rem;
- align-items: center;
- min-height: 3.1rem;
- padding: 0.72rem 0.82rem;
- color: var(--ink);
- cursor: pointer;
- list-style: none;
-}
-
-.rendered-section summary::-webkit-details-marker {
- display: none;
-}
-
-.rendered-section summary::before {
- content: "+";
- grid-row: 1;
- grid-column: 2;
- width: 1.35rem;
- height: 1.35rem;
- border: 1px solid rgba(6, 9, 16, 0.16);
- border-radius: 999px;
- color: var(--muted-strong);
- font-weight: 860;
- line-height: 1.2rem;
- text-align: center;
-}
-
-.rendered-section[open] summary::before {
- content: "-";
-}
-
-.rendered-section summary span {
- min-width: 0;
- font-weight: 860;
- line-height: 1.14;
- overflow-wrap: anywhere;
-}
-
-.rendered-section summary small {
- grid-column: 1 / -1;
- color: var(--muted-strong);
- font-size: 0.68rem;
- font-weight: 820;
- letter-spacing: 0.08em;
- text-transform: uppercase;
-}
-
-.rendered-section-body {
- padding: 0 0.82rem 0.82rem;
- border-top: 1px solid rgba(6, 9, 16, 0.09);
-}
-
-.rendered-markdown h2,
-.rendered-markdown h3,
-.rendered-markdown h4,
-.rendered-markdown h5,
-.rendered-markdown h6 {
- max-width: 20ch;
- margin: 1.2rem 0 0.65rem;
- color: var(--ink);
- font-family: inherit;
- font-size: 1.15rem;
- line-height: 1.18;
-}
-
-.rendered-markdown h2:first-child,
-.rendered-markdown h3:first-child {
- margin-top: 0;
-}
-
-.rendered-markdown p,
-.rendered-markdown li,
-.rendered-markdown blockquote,
-.rendered-markdown td,
-.rendered-markdown th {
- font-size: 0.96rem;
- line-height: 1.56;
-}
-
-.rendered-markdown p {
- max-width: 76ch;
- margin: 0.7rem 0;
-}
-
-.rendered-markdown ul,
-.rendered-markdown ol {
- display: grid;
- gap: 0.34rem;
- margin: 0.7rem 0;
- padding-left: 1.2rem;
- color: var(--ink-soft);
-}
-
-.rendered-markdown code {
- display: inline;
- padding: 0.12rem 0.28rem;
- border: 1px solid rgba(6, 9, 16, 0.12);
- border-radius: 5px;
- background: rgba(255, 253, 246, 0.86);
- color: var(--muted-strong);
- font-size: 0.86em;
- overflow-wrap: anywhere;
-}
-
-.rendered-code {
- margin: 0.8rem 0;
- padding: 0.85rem;
- border: 1px solid rgba(6, 9, 16, 0.14);
- border-radius: 8px;
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.94), rgba(248, 243, 235, 0.78));
- overflow-x: auto;
-}
-
-.rendered-code code {
- display: block;
- padding: 0;
- border: 0;
- background: transparent;
- color: var(--ink);
- white-space: pre-wrap;
-}
-
-.rendered-table-wrap {
- max-width: 100%;
- margin: 0.9rem 0;
- overflow-x: auto;
-}
-
-.rendered-markdown table {
- width: 100%;
- min-width: 42rem;
- border-collapse: collapse;
- background: rgba(255, 253, 246, 0.74);
-}
-
-.rendered-markdown th,
-.rendered-markdown td {
- padding: 0.55rem 0.65rem;
- border: 1px solid rgba(6, 9, 16, 0.12);
- text-align: left;
- vertical-align: top;
-}
-
-.rendered-markdown th {
- color: var(--ink);
- font-size: 0.78rem;
- font-weight: 820;
- letter-spacing: 0.08em;
- text-transform: uppercase;
-}
-
-.rendered-markdown blockquote {
- margin: 0.8rem 0;
- padding: 0.65rem 0.85rem;
- border-left: 4px solid var(--taste-teal);
- background: rgba(47, 142, 134, 0.08);
- color: var(--ink);
-}
-
-.rendered-link {
- display: inline-flex;
- flex-wrap: wrap;
- gap: 0.22rem;
- align-items: baseline;
-}
-
-.source-actions {
- display: grid;
- grid-template-columns: repeat(2, minmax(0, 1fr));
- gap: 0.65rem;
- margin-top: 1rem;
- padding-top: 1rem;
- border-top: 1px solid rgba(6, 9, 16, 0.12);
-}
-
-.source-actions a {
- display: grid;
- gap: 0.2rem;
- min-height: 4.8rem;
- align-content: center;
- padding: 0.66rem 0.72rem;
-}
-
-.source-actions a span {
- color: var(--muted-strong);
- font-size: 0.68rem;
- font-weight: 860;
- letter-spacing: 0.1em;
- text-transform: uppercase;
-}
-
-.source-actions a strong {
- color: var(--ink);
- font-size: 1rem;
- line-height: 1.1;
-}
-
-.source-actions .next-source {
- border-color: rgba(47, 142, 134, 0.28);
- background: rgba(47, 142, 134, 0.09);
-}
-
-.reveal-item {
- opacity: 1;
- transform: none;
- filter: none;
-}
-
-.reveal-item.is-visible {
- opacity: 1;
- transform: none;
- filter: blur(0);
-}
-
-@media (max-width: 1180px) {
- .nav-links a {
- padding-inline: 0.52rem;
- font-size: 0.74rem;
- }
-
- .hero {
- grid-template-columns: 1fr;
- gap: 2.5rem;
- min-height: auto;
- }
-
- .workbench-scene {
- width: min(100%, 48rem);
- min-height: 34rem;
- }
-
- .source-hero {
- grid-template-columns: 1fr;
- min-height: auto;
- }
-
- .source-reader-layout {
- grid-template-columns: minmax(11.5rem, 14rem) minmax(0, 1fr);
- }
-
- .source-heading h1 {
- font-size: 4.2rem;
- }
-
- .source-hero-panel {
- min-height: 18rem;
- }
-
- .source-group-header h2 {
- font-size: 4.4rem;
- }
-}
-
-@media (max-width: 980px) {
- :root {
- --wrap: min(100% - 2rem, 760px);
- }
-
- .review-deck-shell {
- grid-template-columns: 1fr;
- grid-template-rows: auto;
- grid-template-areas:
- "intro"
- "nav"
- "panels";
- align-items: start;
- height: auto;
- min-height: auto;
- }
-
- .review-deck-intro h2 {
- max-width: 15ch;
- font-size: 2.7rem;
- }
-
- .review-deck-nav {
- display: flex;
- gap: 0.45rem;
- max-height: none;
- overflow-x: auto;
- scroll-snap-type: x proximity;
- }
-
- .review-deck-nav a {
- min-width: min(12rem, 62vw);
- scroll-snap-align: start;
- }
-
- .review-deck-panels {
- height: auto;
- min-height: min(72dvh, 780px);
- max-height: min(72dvh, 780px);
- }
-
- .nav-toggle {
- display: inline-flex;
- }
-
- .nav-links {
- position: absolute;
- left: 1rem;
- right: 1rem;
- top: calc(100% + 0.4rem);
- display: grid;
- grid-template-columns: repeat(2, minmax(0, 1fr));
- gap: 0.45rem;
- padding: 0.8rem;
- border: 1px solid rgba(168, 148, 120, 0.34);
- border-radius: var(--radius);
- background: rgba(255, 253, 246, 0.88);
- box-shadow: var(--shadow-ambient);
- backdrop-filter: blur(20px) saturate(1.2);
- opacity: 0;
- pointer-events: none;
- transform: none;
- transition: opacity var(--motion-fast) var(--ease-out);
- }
-
- .nav-open .nav-links {
- opacity: 1;
- pointer-events: auto;
- transform: none;
- }
-
- .nav-links a {
- padding: 0.82rem;
- transition-delay: 0ms;
- }
-
- .source-group-header,
- .source-grid,
- .source-head {
- grid-template-columns: 1fr;
- }
-
- .source-reader-layout {
- display: block;
- }
-
- .source-reader-rail {
- display: none;
- }
-
- .source-mobile-index {
- display: block;
- width: var(--wrap);
- margin: 0 auto 1rem;
- border: 1px solid rgba(6, 9, 16, 0.13);
- border-radius: var(--radius);
- background: rgba(255, 250, 242, 0.86);
- box-shadow: var(--shadow-tight);
- }
-
- .source-mobile-index summary {
- min-height: 3rem;
- padding: 0.82rem 0.92rem;
- color: var(--ink);
- font-weight: 860;
- cursor: pointer;
- }
-
- .mobile-index-groups {
- display: grid;
- gap: 0.9rem;
- padding: 0 0.92rem 0.92rem;
- }
-
- .source-heading h1 {
- font-size: 3.35rem;
- }
-
- .source-hero-panel strong {
- font-size: 2.1rem;
- }
-
- .source-group-header h2 {
- font-size: 3.7rem;
- }
-
- .source-grid.compact {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
-
- .hero {
- padding-top: 3.5rem;
- padding-bottom: 3.6rem;
- gap: 2rem;
- }
-
- h1 {
- font-size: 4rem;
- }
-
- .section-heading h2,
- .submission-copy h2 {
- font-size: 2.85rem;
- }
-
- .check-strip,
- .scope-layout,
- .coldrun-layout,
- .admin-rhythm-layout,
- .brief-layout,
- .quality-layout,
- .thesis-layout,
- .handoff-layout,
- .setup-layout,
- .console-layout,
- .checkgate-layout,
- .reviewer-layout,
- .coldrun-steps,
- .brief-board,
- .quality-board,
- .thesis-points,
- .setup-board,
- .comparison-grid,
- .console-output,
- .file-map,
- .behavior-grid,
- .notes-grid,
- .checkgate-board {
- grid-template-columns: 1fr;
- }
-
- .admin-rhythm-board {
- grid-template-columns: 1fr;
- min-height: auto;
- }
-
- .admin-rhythm-board::before {
- height: 4.6rem;
- }
-
- .admin-rhythm-card:nth-child(3),
- .admin-rhythm-card:nth-child(4) {
- transform: none;
- }
-
- .admin-rhythm-visual img {
- height: 19rem;
- }
-
- .admin-boundary {
- grid-row: auto;
- }
-
- .check-strip {
- margin-top: -4.1rem;
- }
-
- .scope-board {
- min-height: auto;
- }
-
- .scope-core {
- margin-inline: 0;
- }
-
- .scope-lanes li {
- grid-template-columns: 0.72rem minmax(0, 1fr);
- }
-
- .scope-lanes small {
- justify-self: start;
- grid-column: 2;
- }
-
- .comparison-grid {
- grid-template-areas:
- "user"
- "generic"
- "unstuck";
- }
-
- .file-node:nth-child(2),
- .file-node:nth-child(4),
- .task-stack,
- .coach-dialogue,
- .life-ledger,
- .state-meter {
- transform: none;
- }
-
- .life-ledger {
- top: 11.5%;
- }
-
- .workbench-scene {
- min-height: 21.2rem;
- }
-
- .scene-panel {
- padding: 0.75rem;
- }
-
- .task-stack {
- width: 14.2rem;
- }
-
- .life-ledger {
- width: min(22rem, calc(100% - 2rem));
- }
-
- .coach-dialogue {
- width: 19.2rem;
- }
-
- .state-meter {
- display: none;
- }
-}
-
-@media (max-width: 620px) {
- :root {
- --wrap: calc(100% - 2rem);
- }
-
- .review-deck-intro h2 {
- font-size: 2.28rem;
- }
-
- .review-deck .section-heading h2 {
- font-size: 2.1rem;
- }
-
- .review-deck-panels {
- min-height: 70dvh;
- max-height: 70dvh;
- }
-
- .review-deck .review-panel {
+ .stuck-card {
+ gap: 0.65rem;
padding: 0.9rem;
}
- .review-deck-nav a {
- min-width: 10.5rem;
- }
-
- body {
- font-size: 15px;
- }
-
- body::after {
- width: 0.38rem;
- }
-
- .site-nav {
- width: 100%;
- min-height: 3.85rem;
- padding-inline: 0.75rem;
- }
-
- .wordmark {
- font-size: 0.82rem;
- }
-
- .wordmark-mark {
- width: 1.96rem;
- height: 1.96rem;
- }
-
- .nav-links {
- left: 0.5rem;
- right: 0.5rem;
- top: calc(100% + 0.35rem);
- grid-template-columns: 1fr;
- }
-
- .hero {
- width: calc(100% - 2rem);
- padding: 2.8rem 0 2.4rem;
- }
-
- .source-page main {
- padding-top: 4.4rem;
- }
-
- .source-hero {
- width: calc(100% - 2rem);
- padding-block: 4rem 2.5rem;
- }
-
- .source-heading h1 {
- max-width: 12ch;
- font-size: 2.65rem;
- }
-
- .source-index {
- width: calc(100% - 2rem);
- display: grid;
- grid-template-columns: 1fr;
- }
-
- .source-reader-layout,
- .source-mobile-index {
- width: calc(100% - 2rem);
- }
-
- .source-group {
- width: 100%;
- padding-block: 2.5rem;
- }
-
- .source-group-header h2 {
- font-size: 2.45rem;
- }
-
- .source-grid.compact {
- grid-template-columns: 1fr;
- }
-
- .source-check div {
- grid-template-columns: 1fr;
- }
-
- .source-actions {
- grid-template-columns: 1fr;
- }
-
- .hero-copy {
- width: min(100%, 21.6rem);
- max-width: 21.6rem;
- }
-
- .hero::before {
- inset: 5.4rem -1rem 1.5rem;
- }
-
- h1 {
- font-size: 2.54rem;
- max-width: 10.8ch;
- }
-
- .hero-deck {
- margin-top: 0.92rem;
- font-size: 0.94rem;
- line-height: 1.46;
- }
-
- .hero-life-rail {
- gap: 0.32rem;
- margin-top: 0.76rem;
- }
-
- .hero-life-rail span {
- padding: 0.32rem 0.48rem;
- font-size: 0.7rem;
+ .stuck-card textarea {
+ min-height: 5rem;
+ padding: 0.85rem;
}
- .hero .eyebrow {
- width: auto;
- line-height: 1.36;
- white-space: normal;
+ .hero + .section {
+ padding-top: 1rem;
}
.hero-actions,
- .inline-actions {
- display: grid;
- }
-
- .hero-actions {
- margin-top: 1.35rem;
- }
-
- .action {
- width: 100%;
- justify-content: space-between;
- }
-
- .workbench-scene {
- display: none;
- }
-
- .mola-bridge {
- opacity: 0.22;
- }
-
- .bridge-one {
- right: -8rem;
- top: 3rem;
- width: 18rem;
- height: 5.2rem;
- }
-
- .bridge-two {
- left: -7rem;
- bottom: 3rem;
- width: 14rem;
- height: 4.5rem;
- }
-
- .task-stack,
- .state-meter {
- display: none;
- }
-
- .coach-dialogue {
- right: 1rem;
- bottom: 1.2rem;
- width: min(20rem, calc(100% - 2rem));
- }
-
- .life-ledger {
- left: 1rem;
- top: 4.8rem;
- width: min(19rem, calc(100% - 2rem));
- }
-
- .ledger-status-grid,
- .ledger-close {
- display: none;
- }
-
- .mobile-check-panel {
- display: block;
- margin-top: 0.95rem;
- padding: 0.46rem;
- border: 1px solid rgba(6, 9, 16, 0.2);
- border-radius: 1.36rem;
- background:
- linear-gradient(135deg, rgba(6, 9, 16, 0.04), rgba(217, 167, 47, 0.1)),
- rgba(255, 253, 246, 0.88);
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.82),
- 0 14px 34px rgba(71, 51, 30, 0.12);
- }
-
- .mobile-check-panel > .panel-kicker,
- .mobile-check-panel > p,
- .mobile-check-grid {
- margin-inline: 0.38rem;
- }
-
- .mobile-life-signal {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 0.32rem;
- margin-top: 0.42rem;
- padding: 0.35rem;
- border: 1px solid rgba(255, 245, 220, 0.58);
- border-radius: 1.02rem;
- background:
- linear-gradient(160deg, rgba(6, 9, 16, 0.96), rgba(6, 67, 74, 0.92));
- box-shadow:
- inset 0 0 0 1px rgba(255, 245, 220, 0.14),
- inset 0 0 0 0.42rem rgba(255, 245, 220, 0.045);
- }
-
- .mobile-life-signal span {
- min-width: 0;
- padding: 0.42rem 0.44rem 0.4rem;
- border: 1px solid rgba(255, 245, 220, 0.2);
- border-radius: 0.78rem;
- background:
- linear-gradient(180deg, rgba(255, 245, 220, 0.11), rgba(255, 245, 220, 0.045));
+ .site-footer {
+ flex-direction: column;
}
- .mobile-life-signal i {
- display: block;
+ .hero-actions .button {
width: 100%;
- height: 0.28rem;
- margin-bottom: 0.34rem;
- border-radius: 999px;
- background: linear-gradient(90deg, var(--taste-teal), var(--taste-saffron), var(--taste-berry));
- }
-
- .mobile-life-signal span:nth-child(2) i {
- background: linear-gradient(90deg, var(--taste-saffron), var(--taste-clay));
- }
-
- .mobile-life-signal span:nth-child(3) i {
- background: linear-gradient(90deg, var(--taste-berry), var(--taste-coral));
- }
-
- .mobile-life-signal span:nth-child(4) i {
- background: linear-gradient(90deg, var(--taste-cyan), var(--taste-teal));
- }
-
- .mobile-life-signal strong,
- .mobile-life-signal small {
- display: block;
- letter-spacing: 0;
- }
-
- .mobile-life-signal strong {
- color: var(--paper);
- font-size: 0.72rem;
- line-height: 1.05;
- }
-
- .mobile-life-signal small {
- margin-top: 0.14rem;
- color: rgba(255, 245, 220, 0.66);
- font-size: 0.64rem;
- line-height: 1.15;
- }
-
- .mobile-check-panel p {
- margin-top: 0.46rem;
- margin-bottom: 0.46rem;
- font-size: 0.96rem;
- color: var(--ink);
- font-weight: 760;
- }
-
- .mobile-check-grid {
- display: grid;
- grid-template-columns: 3.8rem 1fr;
- gap: 0.34rem 0.58rem;
- align-items: baseline;
- }
-
- .mobile-check-grid span {
- color: var(--muted);
- font-size: 0.68rem;
- font-weight: 780;
- letter-spacing: 0.12em;
- text-transform: uppercase;
- }
-
- .mobile-check-grid strong {
- color: var(--ink-soft);
- font-size: 0.92rem;
- }
-
- .prompt-rail {
- flex-wrap: wrap;
- overflow-x: visible;
- }
-
- .prompt-tab {
- flex: 1 1 calc(50% - 0.5rem);
- justify-content: center;
- min-height: 2.8rem;
- text-align: center;
- white-space: normal;
- }
-
- .check-strip {
- margin-top: -5.15rem;
- }
-
- .scope-section {
- padding-top: 5.2rem;
- }
-
- .scope-layout {
- gap: 1.8rem;
- }
-
- .scope-board {
- padding: 0.72rem;
- }
-
- .scope-core {
- padding: 1rem;
- }
-
- .scope-core strong {
- font-size: 1.1rem;
- }
-
- .scope-lanes li {
- padding: 0.78rem;
- }
-
- .scope-lanes p {
- font-size: 0.92rem;
- }
-
- .admin-rhythm-board {
- padding: 0.72rem;
- }
-
- .admin-rhythm-card,
- .admin-boundary {
- min-height: 12.4rem;
- padding: 1rem;
- }
-
- .admin-boundary strong {
- font-size: 1.86rem;
- }
-
- .section,
- .submission-section {
- padding: 5.4rem 1rem;
- }
-
- .section-heading h2,
- .submission-copy h2 {
- font-size: 2.25rem;
}
- .coldrun-steps li,
- .brief-board article,
- .quality-board article article,
- .thesis-points article,
- .setup-board article,
- .console-output article,
- .file-node,
- .behavior-grid article,
- .notes-grid a,
- .checkgate-board article {
- min-height: 11rem;
+ .sample-row {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 0.45rem;
}
- .response-pane {
- min-height: 14rem;
+ .sample-row button {
+ min-height: 2.35rem;
+ padding: 0.45rem 0.35rem;
+ font-size: 0.9rem;
}
}
@@ -3706,14 +509,7 @@ h1 {
*,
*::before,
*::after {
- animation: none !important;
scroll-behavior: auto !important;
transition: none !important;
}
-
- .reveal-item {
- opacity: 1;
- transform: none;
- filter: none;
- }
}
diff --git a/EF-COACH/live-demo/public/styles.css b/EF-COACH/live-demo/public/styles.css
index 114d73c..3bf30c1 100644
--- a/EF-COACH/live-demo/public/styles.css
+++ b/EF-COACH/live-demo/public/styles.css
@@ -1,38 +1,39 @@
:root {
color-scheme: light;
- --ink: #060910;
- --ink-soft: #24211f;
- --muted: #6f625b;
- --muted-strong: #403832;
- --paper: #fff8ec;
- --paper-soft: #f8f3eb;
- --surface: #fffaf2;
- --surface-deep: #eadcc6;
- --cream-line: #fff5dc;
- --line: #d9d0c4;
- --line-strong: #766755;
- --steel: #06434a;
- --gold: #ffc018;
- --cyan: #00d7e8;
- --lime: #b7f10b;
- --orange: #ff8b00;
- --magenta: #ff147f;
- --taste-teal: #2f8e86;
- --taste-saffron: #d9a72f;
- --taste-coral: #ef724b;
- --taste-clay: #d65f35;
- --taste-berry: #9f365f;
- --taste-ink: #07101c;
- --shadow-soft: 0 18px 52px rgba(36, 33, 31, 0.11);
- --shadow-tight: 0 8px 24px rgba(36, 33, 31, 0.09);
- --shadow-ink: 0 28px 70px rgba(6, 9, 16, 0.24);
+ --font-sans: "Atkinson Hyperlegible", "Aptos", "Avenir Next", "Plus Jakarta Sans", system-ui, sans-serif;
+ --font-mono: "Geist Mono", "SF Mono", ui-monospace, monospace;
+ --ink: #101317;
+ --ink-soft: #252b31;
+ --muted: #5f655f;
+ --muted-strong: #424941;
+ --paper: #f7f3ea;
+ --paper-deep: #efe5d4;
+ --surface: #fffdf8;
+ --surface-soft: #fbf8f1;
+ --line: #d8d0c2;
+ --line-strong: #a69b89;
+ --apatite-950: #052733;
+ --apatite-900: #064b5f;
+ --apatite-800: #075e73;
+ --apatite-700: #08758d;
+ --apatite-500: #11a5ce;
+ --apatite-100: #d7f0f2;
+ --apatite-50: #eaf8f7;
+ --attention: #b86b2b;
+ --shadow-paper: 0 18px 52px rgba(37, 43, 49, 0.08);
+ --shadow-tight: 0 8px 22px rgba(37, 43, 49, 0.07);
--radius: 8px;
+ --measure: 66ch;
--ease-out: cubic-bezier(0.2, 0, 0.2, 1);
--motion-fast: 120ms;
--motion-soft: 180ms;
- --editorial: "PP Editorial New", "Canela", "Fraunces", "New York", serif;
- --route-speed: 12s;
- font-family: "Avenir Next", "Plus Jakarta Sans", "Geist", "Satoshi", system-ui, sans-serif;
+ --step--1: 0.92rem;
+ --step-0: 1rem;
+ --step-1: 1.18rem;
+ --step-2: 1.45rem;
+ --step-3: 1.85rem;
+ --energy-progress: 0%;
+ font-family: var(--font-sans);
letter-spacing: 0;
}
@@ -43,6 +44,8 @@
html {
min-width: 320px;
background: var(--paper);
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
}
body {
@@ -50,14 +53,13 @@ body {
min-height: 100dvh;
margin: 0;
background:
- linear-gradient(90deg, rgba(6, 9, 16, 0.018) 0 1px, transparent 1px 142px),
- linear-gradient(180deg, rgba(6, 9, 16, 0.016) 0 1px, transparent 1px 142px),
- linear-gradient(90deg, rgba(47, 142, 134, 0.08) 0 10%, transparent 10% 28%, rgba(217, 167, 47, 0.075) 28% 36%, transparent 36% 68%, rgba(214, 95, 53, 0.055) 68% 76%, transparent 76%),
- linear-gradient(132deg, rgba(255, 253, 246, 0.54), rgba(217, 167, 47, 0.08) 28%, rgba(47, 142, 134, 0.055) 64%, transparent 100%),
- linear-gradient(180deg, var(--surface) 0%, var(--paper) 52%, #f0dfc4 100%);
+ linear-gradient(90deg, rgba(8, 117, 141, 0.06) 0 10%, transparent 10% 34%, rgba(184, 107, 43, 0.05) 34% 43%, transparent 43%),
+ linear-gradient(180deg, var(--surface) 0%, var(--paper) 58%, var(--paper-deep) 100%);
color: var(--ink);
- font-size: 16px;
+ font-family: var(--font-sans);
+ font-size: var(--step-0);
line-height: 1.5;
+ font-synthesis: none;
text-rendering: optimizeLegibility;
}
@@ -65,45 +67,14 @@ body::before {
content: "";
position: fixed;
inset: 0;
- z-index: 4;
+ z-index: 1;
pointer-events: none;
- opacity: 0.038;
- background-image: repeating-radial-gradient(
- circle at 30% 20%,
- rgba(8, 7, 5, 0.9) 0 0.6px,
- transparent 0.7px 3px
- );
+ opacity: 0.035;
+ background-image: radial-gradient(rgba(16, 19, 23, 0.88) 0.55px, transparent 0.65px);
+ background-size: 3px 3px;
mix-blend-mode: multiply;
}
-body::after {
- content: "";
- position: fixed;
- inset: 0 auto 0 0;
- z-index: 3;
- width: 0.46rem;
- pointer-events: none;
- background:
- linear-gradient(
- 180deg,
- var(--taste-ink),
- var(--taste-teal) 24%,
- #a7af48 42%,
- var(--taste-saffron) 61%,
- var(--taste-clay) 78%,
- var(--taste-berry)
- ),
- repeating-linear-gradient(
- 180deg,
- transparent 0 34px,
- rgba(255, 245, 220, 0.72) 34px 37px,
- transparent 37px 72px
- );
- box-shadow:
- 1px 0 0 rgba(6, 9, 16, 0.58),
- 10px 0 34px rgba(6, 9, 16, 0.06);
-}
-
button,
textarea {
font: inherit;
@@ -114,99 +85,27 @@ button {
}
:where(button, textarea):focus-visible {
- outline: 3px solid var(--cyan);
+ outline: 3px solid rgba(8, 117, 141, 0.46);
outline-offset: 4px;
- box-shadow: 0 0 0 7px rgba(0, 215, 232, 0.16);
}
::selection {
- background: rgba(214, 163, 56, 0.28);
+ background: rgba(8, 117, 141, 0.18);
}
.app-shell {
position: relative;
+ z-index: 2;
display: grid;
grid-template-rows: auto auto minmax(0, 1fr);
- gap: 0.72rem;
+ gap: 0.95rem;
width: min(1240px, calc(100vw - 2.25rem));
min-height: 100dvh;
margin: 0 auto;
- padding: 1.15rem 0;
-}
-
-.app-shell::before {
- content: "";
- position: absolute;
- inset: 5.9rem auto auto -0.2rem;
- z-index: -1;
- width: min(37rem, 58vw);
- height: min(37rem, 58vw);
- border: 2px solid rgba(6, 9, 16, 0.2);
- border-radius: 50%;
- background:
- radial-gradient(circle at 44% 42%, rgba(255, 192, 24, 0.24) 0 12%, transparent 13% 100%),
- conic-gradient(
- from 212deg,
- rgba(0, 215, 232, 0.22),
- rgba(255, 20, 127, 0.18),
- rgba(255, 139, 0, 0.2),
- rgba(183, 241, 11, 0.16),
- rgba(0, 215, 232, 0.22)
- );
- opacity: 0.38;
- transform: rotate(-8deg);
-}
-
-.chat-header {
- position: relative;
- display: grid;
- grid-template-columns: minmax(0, 1fr) auto;
- gap: 1rem;
- align-items: end;
- min-height: 5.5rem;
- overflow: hidden;
- border: 2px solid var(--ink);
- border-radius: var(--radius);
- background:
- linear-gradient(145deg, rgba(6, 9, 16, 0.98), rgba(6, 67, 74, 0.96)),
- var(--taste-ink);
- color: var(--surface);
- padding: 1rem 1.08rem;
- box-shadow: var(--shadow-ink);
-}
-
-.chat-header::before {
- content: "";
- position: absolute;
- inset: auto 1rem 0.62rem auto;
- width: min(28rem, 43vw);
- height: 0.74rem;
- border: 1px solid rgba(255, 250, 242, 0.18);
- background:
- linear-gradient(90deg, var(--magenta), var(--orange) 28%, var(--gold) 50%, var(--lime) 72%, var(--cyan));
- box-shadow: 0 12px 28px rgba(0, 215, 232, 0.16);
- transform: rotate(-1.4deg);
-}
-
-.chat-header::after {
- content: "";
- position: absolute;
- inset: 0;
- pointer-events: none;
- background:
- linear-gradient(90deg, rgba(255, 248, 236, 0.06) 0 1px, transparent 1px 64px),
- linear-gradient(180deg, rgba(255, 248, 236, 0.05) 0 1px, transparent 1px 64px);
- opacity: 0.72;
-}
-
-.chat-header > * {
- position: relative;
- z-index: 1;
+ padding: 1rem 0;
}
.demo-topbar {
- position: relative;
- z-index: 1;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
@@ -215,36 +114,15 @@ button {
min-height: 2.25rem;
}
-.eyebrow {
- margin: 0 0 0.32rem;
- color: var(--gold);
- font-size: 0.76rem;
- font-weight: 840;
- letter-spacing: 0.08em;
- text-transform: uppercase;
-}
-
-h1 {
- margin: 0;
- font-family: var(--editorial);
- font-size: clamp(2.65rem, 8vw, 5.2rem);
- font-weight: 500;
- line-height: 0.88;
- letter-spacing: 0;
-}
-
.landing-link,
#provider {
- border: 1px solid rgba(6, 9, 16, 0.2);
+ border: 1px solid rgba(16, 19, 23, 0.12);
border-radius: 999px;
- background: rgba(255, 250, 242, 0.74);
+ background: rgba(255, 253, 248, 0.76);
color: var(--ink-soft);
padding: 0.44rem 0.68rem;
- font-size: 0.78rem;
+ font-size: var(--step--1);
font-weight: 760;
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.72),
- 0 7px 18px rgba(36, 33, 31, 0.06);
}
.landing-link {
@@ -252,40 +130,96 @@ h1 {
}
.landing-link:hover {
- border-color: rgba(6, 9, 16, 0.42);
- background: var(--surface);
+ border-color: rgba(8, 117, 141, 0.34);
+ background: var(--apatite-50);
}
#provider {
- max-width: 16ch;
+ max-width: 18ch;
border: 0;
background: transparent;
padding: 0.16rem 0.08rem;
color: var(--muted);
- box-shadow: none;
- font-size: 0.68rem;
+ font-size: 0.78rem;
font-weight: 680;
line-height: 1.2;
text-align: right;
}
+.chat-header {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto;
+ gap: 1rem;
+ align-items: end;
+ min-height: 4.8rem;
+ border: 1px solid rgba(16, 19, 23, 0.12);
+ border-radius: var(--radius);
+ background: rgba(255, 253, 248, 0.78);
+ padding: 0.95rem 1rem;
+ box-shadow: var(--shadow-tight);
+}
+
+.eyebrow {
+ margin: 0 0 0.28rem;
+ color: var(--apatite-900);
+ font-family: var(--font-mono);
+ font-size: 0.76rem;
+ font-weight: 820;
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+}
+
+h1 {
+ margin: 0;
+ font-size: var(--step-3);
+ font-weight: 860;
+ line-height: 1;
+ letter-spacing: 0;
+ text-wrap: balance;
+}
+
.work-surface {
display: grid;
- grid-template-columns: minmax(0, 1fr) minmax(320px, 390px);
+ grid-template-columns: minmax(0, 1fr) minmax(320px, 388px);
gap: 1rem;
min-height: 0;
}
.chat-shell {
display: grid;
- grid-template-rows: minmax(0, 1fr) auto auto;
+ grid-template-rows: auto minmax(0, 1fr) auto auto;
min-height: 0;
- border: 2px solid var(--ink);
+ border: 1px solid rgba(16, 19, 23, 0.13);
border-radius: var(--radius);
+ background: rgba(255, 253, 248, 0.82);
+ box-shadow: var(--shadow-paper);
+}
+
+.chat-orientation {
+ border-bottom: 1px solid rgba(16, 19, 23, 0.1);
background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.8), rgba(255, 248, 236, 0.88)),
- var(--surface);
- box-shadow: var(--shadow-soft);
+ linear-gradient(90deg, rgba(215, 240, 242, 0.65), transparent 74%),
+ rgba(255, 253, 248, 0.72);
+ padding: 0.95rem 1rem;
+}
+
+.chat-orientation h2 {
+ max-width: 18ch;
+ margin: 0 0 0.55rem;
+ font-size: var(--step-2);
+ font-weight: 840;
+ line-height: 1.1;
+ text-wrap: balance;
+}
+
+.chat-orientation ul {
+ display: grid;
+ gap: 0.28rem;
+ max-width: var(--measure);
+ margin: 0;
+ padding-left: 1.15rem;
+ color: var(--muted-strong);
+ text-wrap: pretty;
}
.chat-log {
@@ -300,83 +234,59 @@ h1 {
.turn {
position: relative;
width: fit-content;
- max-width: min(76ch, 86%);
- border: 1px solid rgba(6, 9, 16, 0.2);
+ max-width: min(72ch, 86%);
+ border: 1px solid rgba(16, 19, 23, 0.12);
border-radius: var(--radius);
+ background: var(--surface);
padding: 0.82rem 0.92rem;
line-height: 1.55;
white-space: pre-wrap;
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- var(--shadow-tight);
+ box-shadow: var(--shadow-tight);
+ text-wrap: pretty;
}
.turn::before {
content: "";
position: absolute;
inset: 0 auto 0 0;
- width: 0.32rem;
- background: var(--taste-teal);
+ width: 0.28rem;
+ border-radius: var(--radius) 0 0 var(--radius);
+ background: var(--apatite-700);
}
.turn.assistant {
align-self: flex-start;
- background: #f3fbf6;
+ background: var(--apatite-50);
}
.turn.user {
align-self: flex-end;
- background: #fff1d5;
+ background: var(--surface);
}
.turn.user::before {
inset: 0 0 0 auto;
- background: var(--orange);
+ border-radius: 0 var(--radius) var(--radius) 0;
+ background: var(--attention);
}
.turn.pending {
color: var(--muted);
}
-.chat-orientation {
- border: 1px solid rgba(6, 9, 16, 0.18);
- border-left: 5px solid var(--gold);
- border-radius: var(--radius);
- background:
- linear-gradient(135deg, rgba(255, 192, 24, 0.13), rgba(0, 215, 232, 0.08)),
- var(--surface);
- padding: 0.82rem 0.92rem;
- box-shadow: 0 12px 28px rgba(36, 33, 31, 0.07);
-}
-
-.chat-orientation h2 {
- margin: 0 0 0.48rem;
- font-family: var(--editorial);
- font-size: clamp(1.35rem, 3vw, 2rem);
- font-weight: 540;
- line-height: 1.02;
-}
-
-.chat-orientation ul {
- display: grid;
- gap: 0.28rem;
- margin: 0;
- padding-left: 1.15rem;
- color: var(--muted-strong);
-}
-
.turn.error {
- border-color: var(--taste-coral);
- color: var(--taste-clay);
+ border-color: rgba(184, 107, 43, 0.48);
+ color: #7d431b;
}
.speaker,
.dock-label {
display: block;
margin-bottom: 0.28rem;
- color: var(--steel);
+ color: var(--apatite-900);
+ font-family: var(--font-mono);
font-size: 0.76rem;
- font-weight: 840;
+ font-weight: 820;
text-transform: uppercase;
}
@@ -389,17 +299,15 @@ h1 {
}
.starter-row {
- border-top: 1px solid rgba(6, 9, 16, 0.14);
+ border-top: 1px solid rgba(16, 19, 23, 0.1);
padding: 0.78rem 0.92rem 0;
}
button {
min-height: 2.55rem;
- border: 1px solid rgba(6, 9, 16, 0.22);
- border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.94), rgba(255, 248, 236, 0.84)),
- var(--surface);
+ border: 1px solid rgba(16, 19, 23, 0.14);
+ border-radius: 999px;
+ background: var(--surface);
color: var(--ink);
padding: 0.54rem 0.78rem;
cursor: pointer;
@@ -411,8 +319,8 @@ button {
}
button:hover {
- border-color: rgba(6, 9, 16, 0.46);
- box-shadow: 0 8px 18px rgba(36, 33, 31, 0.08);
+ border-color: rgba(8, 117, 141, 0.38);
+ background: var(--apatite-50);
}
button:active {
@@ -428,19 +336,17 @@ button:active {
grid-template-columns: auto minmax(0, 1fr) auto;
gap: 0.58rem;
align-items: end;
- border: 2px solid var(--ink);
+ border: 1px solid rgba(16, 19, 23, 0.18);
border-radius: var(--radius);
background: var(--surface);
padding: 0.58rem;
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- 0 14px 34px rgba(36, 33, 31, 0.1);
+ box-shadow: var(--shadow-tight);
}
.icon-button {
min-width: 3.15rem;
- border-color: rgba(255, 139, 0, 0.72);
- background: #fff1d5;
+ color: var(--apatite-900);
+ background: var(--apatite-50);
font-weight: 780;
}
@@ -452,36 +358,44 @@ textarea {
background: transparent;
color: var(--ink);
padding: 0.62rem 0.5rem;
- line-height: 1.4;
+ line-height: 1.5;
outline: 0;
}
textarea::placeholder {
- color: rgba(64, 56, 50, 0.72);
+ color: #73786f;
}
button[type="submit"] {
- border-color: var(--ink);
- background: linear-gradient(180deg, var(--gold), #f0a41c);
- color: var(--ink);
+ border-color: var(--apatite-900);
+ background: var(--apatite-700);
+ color: #ffffff;
font-weight: 840;
}
+button[type="submit"]:hover {
+ background: var(--apatite-800);
+}
+
button[aria-busy="true"] {
cursor: wait;
opacity: 0.72;
}
button[data-clicked="true"] {
- border-color: var(--steel);
- box-shadow: 0 0 0 3px rgba(47, 142, 134, 0.12);
+ border-color: var(--apatite-700);
+ box-shadow: 0 0 0 3px rgba(8, 117, 141, 0.13);
+}
+
+.voice-status,
+.composer-meta {
+ color: var(--muted);
+ font-size: var(--step--1);
}
.voice-status {
min-height: 1.2em;
margin: 0.42rem 0.25rem 0;
- color: var(--muted);
- font-size: 0.82rem;
}
.composer-meta {
@@ -490,17 +404,15 @@ button[data-clicked="true"] {
justify-content: space-between;
gap: 0.5rem;
margin: 0.42rem 0.25rem 0;
- color: var(--muted);
- font-size: 0.82rem;
}
#draft-status[data-state="big"] {
- color: var(--taste-clay);
+ color: #7d431b;
font-weight: 760;
}
#send-status[data-state="loading"] {
- color: var(--steel);
+ color: var(--apatite-900);
font-weight: 760;
}
@@ -510,14 +422,11 @@ button[data-clicked="true"] {
gap: 0.62rem;
min-height: 0;
overflow-y: auto;
- border: 2px solid var(--ink);
+ border: 1px solid rgba(16, 19, 23, 0.13);
border-radius: var(--radius);
- background:
- linear-gradient(90deg, rgba(255, 20, 127, 0.08) 0 0.42rem, transparent 0.42rem),
- linear-gradient(180deg, rgba(255, 253, 246, 0.84), rgba(255, 248, 236, 0.86)),
- var(--surface);
+ background: rgba(255, 253, 248, 0.82);
padding: 0.86rem;
- box-shadow: var(--shadow-soft);
+ box-shadow: var(--shadow-paper);
}
.dock-header {
@@ -525,25 +434,21 @@ button[data-clicked="true"] {
grid-template-columns: 1fr auto;
gap: 0.72rem;
align-items: start;
- border-bottom: 1px solid rgba(6, 9, 16, 0.14);
+ border-bottom: 1px solid rgba(16, 19, 23, 0.1);
padding-bottom: 0.66rem;
}
.dock-header strong {
- color: var(--steel);
- font-size: 0.9rem;
+ color: var(--apatite-900);
+ font-size: var(--step--1);
}
.dock-card {
- border: 1px solid rgba(6, 9, 16, 0.2);
+ border: 1px solid rgba(16, 19, 23, 0.1);
border-radius: var(--radius);
- background:
- linear-gradient(180deg, rgba(255, 253, 246, 0.86), transparent 44%),
- var(--surface);
+ background: var(--surface);
padding: 0.78rem;
- box-shadow:
- inset 0 1px 0 rgba(255, 255, 255, 0.78),
- 0 12px 28px rgba(36, 33, 31, 0.08);
+ box-shadow: var(--shadow-tight);
}
.dock-card p,
@@ -551,31 +456,28 @@ button[data-clicked="true"] {
margin: 0;
color: var(--muted-strong);
line-height: 1.45;
+ text-wrap: pretty;
}
.next-card {
- border-top: 5px solid var(--magenta);
- background: #fff1d5;
+ border-left: 5px solid var(--apatite-700);
+ background: var(--apatite-50);
}
.demo-limits {
- border-left: 5px solid var(--cyan);
- background:
- linear-gradient(135deg, rgba(0, 215, 232, 0.12), rgba(255, 192, 24, 0.1)),
- var(--surface);
+ border-left: 5px solid var(--attention);
+ background: var(--surface-soft);
}
.demo-limits p {
- font-size: 0.92rem;
+ font-size: var(--step--1);
}
.relief-map {
--energy-progress: 0%;
overflow: hidden;
- border-color: rgba(6, 9, 16, 0.28);
background:
- linear-gradient(160deg, rgba(255, 192, 24, 0.22), transparent 36%),
- linear-gradient(24deg, rgba(0, 215, 232, 0.14), transparent 46%),
+ linear-gradient(90deg, rgba(8, 117, 141, 0.12), transparent var(--energy-progress)),
var(--surface);
}
@@ -596,18 +498,16 @@ button[data-clicked="true"] {
min-width: 0;
min-height: 2.12rem;
padding: 0;
- border-color: rgba(6, 9, 16, 0.2);
- background: var(--paper-soft);
color: var(--muted);
- font-weight: 840;
+ font-family: var(--font-mono);
+ font-weight: 820;
font-variant-numeric: tabular-nums;
}
.energy-check button[aria-pressed="true"] {
- border-color: var(--ink);
- background: linear-gradient(180deg, rgba(255, 192, 24, 0.42), rgba(0, 215, 232, 0.16));
- color: var(--ink);
- transform: translateY(-1px);
+ border-color: var(--apatite-800);
+ background: var(--apatite-100);
+ color: var(--apatite-950);
}
.energy-scale {
@@ -619,7 +519,6 @@ button[data-clicked="true"] {
padding-top: 1.1rem;
color: var(--muted);
font-size: 0.72rem;
- font-weight: 780;
text-align: center;
}
@@ -627,104 +526,91 @@ button[data-clicked="true"] {
.energy-scale::after {
content: "";
position: absolute;
- inset: 0.18rem 0 auto;
- height: 0.45rem;
+ top: 0.38rem;
+ left: 0;
+ height: 0.34rem;
border-radius: 999px;
}
.energy-scale::before {
- border: 1px solid rgba(6, 9, 16, 0.22);
- background: rgba(255, 248, 236, 0.72);
+ width: 100%;
+ background: rgba(8, 117, 141, 0.11);
}
.energy-scale::after {
width: var(--energy-progress);
- background: linear-gradient(90deg, var(--taste-teal), var(--gold), var(--magenta));
- box-shadow: 0 7px 18px rgba(217, 167, 47, 0.18);
- transition: width var(--motion-soft) var(--ease-out);
-}
-
-.energy-scale span {
- min-width: 0;
- overflow-wrap: anywhere;
-}
-
-.energy-scale span[data-selected] {
- color: var(--ink);
- font-weight: 880;
+ background: var(--apatite-700);
}
.energy-hint {
- margin-top: 0.62rem;
- font-size: 0.9rem;
+ margin-top: 0.6rem;
+ font-size: var(--step--1);
}
-.held-pile ul {
- margin: 0.38rem 0 0;
- padding-left: 1.12rem;
-}
-
-.held-pile li + li {
- margin-top: 0.25rem;
+.tiny-checks button,
+.dock-actions button,
+.starter-row button {
+ background: var(--apatite-50);
+ color: var(--apatite-900);
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
+ padding: 0;
+ margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border: 0;
}
-@media (max-width: 820px) {
- .app-shell {
- width: min(100vw - 1rem, 680px);
- min-height: 100dvh;
- padding: 0.62rem 0;
+@media (max-width: 900px) {
+ :root {
+ --step-3: 1.65rem;
}
- .app-shell::before {
- inset: 4.8rem auto auto -5rem;
- width: 18rem;
- height: 18rem;
+ .app-shell {
+ width: min(100% - 1rem, 760px);
}
- .chat-header {
+ .work-surface {
grid-template-columns: 1fr;
- min-height: auto;
- }
-
- .chat-header::before {
- width: 12rem;
- }
-
- #provider {
- max-width: 100%;
- text-align: left;
}
- .demo-topbar {
- align-items: flex-start;
+ .coach-dock {
+ max-height: none;
}
+}
- .work-surface {
- grid-template-columns: 1fr;
+@media (max-width: 560px) {
+ .app-shell {
+ width: min(100% - 0.75rem, 760px);
+ padding: 0.75rem 0;
}
+ .chat-header,
+ .chat-orientation,
+ .composer,
+ .starter-row,
+ .chat-log,
.coach-dock {
- overflow: visible;
+ padding-inline: 0.75rem;
}
- .turn {
- max-width: 94%;
+ .composer-row,
+ .relief-topline {
+ grid-template-columns: 1fr;
}
- .composer-row {
- grid-template-columns: auto minmax(0, 1fr) auto;
+ .icon-button,
+ button[type="submit"] {
+ width: 100%;
}
- .relief-topline {
- grid-template-columns: 1fr;
+ .energy-check {
+ grid-template-columns: repeat(5, minmax(0, 1fr));
}
}
@@ -732,9 +618,7 @@ button[data-clicked="true"] {
*,
*::before,
*::after {
- animation-duration: 1ms !important;
- animation-iteration-count: 1 !important;
scroll-behavior: auto !important;
- transition-duration: 1ms !important;
+ transition: none !important;
}
}
diff --git a/EF-COACH/live-demo/scripts/build-hostinger-compose.mjs b/EF-COACH/live-demo/scripts/build-hostinger-compose.mjs
index 0161958..c613e8d 100644
--- a/EF-COACH/live-demo/scripts/build-hostinger-compose.mjs
+++ b/EF-COACH/live-demo/scripts/build-hostinger-compose.mjs
@@ -18,7 +18,7 @@ const contextBase = process.env.UNSTUCK_CONTEXT_BASE || "https://unstuck.kyanite
const outputPath = process.argv[2];
const routeRule = `Host(\`${host}\`) || (Host(\`${fallbackHost}\`) && PathPrefix(\`${pathPrefix}\`))`;
-const liveHtml = String.raw`Unstuck Back to landing Live Start I'm frozen Inbox/calendar
Mic Send
Mic
`;
+const liveHtml = String.raw`Unstuck Back to landing Live Start I'm frozen Inbox/calendar
Mic Send
Mic
`;
const pageBr = brotliCompressSync(Buffer.from(liveHtml), {
params: { [constants.BROTLI_PARAM_QUALITY]: constants.BROTLI_MAX_QUALITY },
}).toString("base64");
diff --git a/EF-COACH/live-demo/test/chat-ui.test.mjs b/EF-COACH/live-demo/test/chat-ui.test.mjs
index b6980d8..3e57c1a 100644
--- a/EF-COACH/live-demo/test/chat-ui.test.mjs
+++ b/EF-COACH/live-demo/test/chat-ui.test.mjs
@@ -107,17 +107,20 @@ test("public demo includes a one-click energy check", () => {
test("public demo uses the landing design language", () => {
const css = readFileSync(new URL("../public/styles.css", import.meta.url), "utf8");
- assert.match(css, /--paper: #fff8ec/);
- assert.match(css, /--ink: #060910/);
- assert.match(css, /--gold: #ffc018/);
- assert.match(css, /--magenta: #ff147f/);
- assert.match(css, /body::after/);
- assert.match(css, /border: 2px solid var\(--ink\)/);
- assert.match(css, /linear-gradient\(145deg, rgba\(6, 9, 16, 0\.98\), rgba\(6, 67, 74, 0\.96\)\)/);
- assert.match(css, /font-family: var\(--editorial\)/);
+ assert.match(css, /--paper: #f7f3ea/);
+ assert.match(css, /--ink: #101317/);
+ assert.match(css, /--apatite-700: #08758d/);
+ assert.match(css, /--apatite-50: #eaf8f7/);
+ assert.match(css, /--font-sans: "Atkinson Hyperlegible"/);
+ assert.match(css, /--measure: 66ch/);
+ assert.match(css, /body::before/);
+ assert.match(css, /button\[type="submit"\]/);
+ assert.match(css, /background: var\(--apatite-700\)/);
assert.doesNotMatch(css, /\.coach-dock \{[\s\S]*?order: -1/);
assert.doesNotMatch(css, /color-scheme: dark/);
assert.doesNotMatch(css, /--bg: #0c0e0c/);
assert.doesNotMatch(css, /#000\b/i);
+ assert.doesNotMatch(css, /--magenta|--cyan|--lime|--orange|--gold/);
+ assert.doesNotMatch(css, /font-family: var\(--editorial\)/);
});
diff --git a/EF-COACH/live-demo/test/compose.test.mjs b/EF-COACH/live-demo/test/compose.test.mjs
index 4cc30aa..77839cd 100644
--- a/EF-COACH/live-demo/test/compose.test.mjs
+++ b/EF-COACH/live-demo/test/compose.test.mjs
@@ -333,6 +333,24 @@ test("generated Hostinger demo presents a normal chat interface", () => {
assert.doesNotMatch(page, /Optional context|Execution|Coach reply/);
});
+test("generated Hostinger demo uses the Unstuck product design tokens", () => {
+ const result = spawnSync("node", ["live-demo/scripts/build-hostinger-compose.mjs"], {
+ cwd: new URL("../..", import.meta.url),
+ encoding: "utf8",
+ env: {
+ ...process.env,
+ UNSTUCK_LIVE_PROVIDER: "zai-coding-plan",
+ },
+ });
+ assert.equal(result.status, 0, result.stderr);
+
+ const page = extractInlinePage(result.stdout);
+ assert.match(page, /#08758d/);
+ assert.match(page, /#064b5f/);
+ assert.match(page, /Atkinson Hyperlegible/);
+ assert.doesNotMatch(page, /#2f8e86|#d9a72f|Georgia|magenta|rainbow/i);
+});
+
test("generated Hostinger demo has parseable browser JavaScript", () => {
const result = spawnSync("node", ["live-demo/scripts/build-hostinger-compose.mjs"], {
cwd: new URL("../..", import.meta.url),
diff --git a/EF-COACH/live-demo/test/server.test.mjs b/EF-COACH/live-demo/test/server.test.mjs
index c0cf639..4967b11 100644
--- a/EF-COACH/live-demo/test/server.test.mjs
+++ b/EF-COACH/live-demo/test/server.test.mjs
@@ -22,7 +22,8 @@ test("GET routes serve the canonical landing site and chat demo", async (t) => {
const landing = await fetch(`${baseUrl}/`);
assert.equal(landing.status, 200);
const landingHtml = await landing.text();
- assert.match(landingHtml, /Unstuck Coach \| Executive Function Accessibility Coach/);
+ assert.match(landingHtml, /Unstuck Coach \| Paste the stuck sentence/);
+ assert.match(landingHtml, /Paste the stuck sentence\./);
assert.match(landingHtml, /href="https:\/\/unstuck\.kyanitelabs\.tech\/"/);
assert.match(landingHtml, /href="https:\/\/unstuck\.kyanitelabs\.tech\/chat\/"/);
assert.match(landing.headers.get("content-security-policy") || "", /connect-src 'self' https:\/\/puenteworks\.com/);