diff --git a/public/app.js b/public/app.js index 4e639d7..fecbd04 100644 --- a/public/app.js +++ b/public/app.js @@ -262,6 +262,7 @@ function renderFirstScreen(firstScreen = {}) { ${escapeHtml(firstScreen.proofCadence || 'Run one tiny proof cycle, then rerank.')} ${held.length ? `
Hold back
` : ''} + ${firstScreen.proofScript ? `
Say this to test it${escapeHtml(firstScreen.proofScript)}
` : ''} ${firstScreen.sourceQuote ? `
${escapeHtml(firstScreen.sourceTitle || 'Source quote')}${escapeHtml(firstScreen.sourceQuote)}
` : ''} ${guardrails.length ? `Guardrails: ${guardrails.map(escapeHtml).join(' · ')}` : ''} ${firstScreen.sourceAnchor ? `Source anchor: ${escapeHtml(firstScreen.sourceAnchor)}` : ''} @@ -403,6 +404,7 @@ async function copyText(text, label) { function attachResultActions(data) { document.querySelector('#copyBrief')?.addEventListener('click', () => copyText(markdownBrief(data), 'Decision brief')); document.querySelector('#copyActions')?.addEventListener('click', () => copyText((data.brief?.next48Hours || []).map((step, index) => `${index + 1}. ${step}`).join('\n'), '48h actions')); + document.querySelector('#copyProofScript')?.addEventListener('click', () => copyText(data.brief?.firstScreen?.proofScript || data.handoff?.activeSlice?.proof?.proofScript || '', 'Proof script')); document.querySelector('#copyJson')?.addEventListener('click', () => copyText(JSON.stringify({ brief: data.brief, ranked: data.ranked, buildOrder: data.buildOrderDetails, handoff: data.handoff }, null, 2), 'JSON handoff')); document.querySelector('#copySource')?.addEventListener('click', () => copyText(sourceCitation(data), 'Source citation')); } @@ -435,6 +437,7 @@ function renderResults(data) {
+
diff --git a/public/index.html b/public/index.html index 020fe56..df272e2 100644 --- a/public/index.html +++ b/public/index.html @@ -4,9 +4,9 @@ - + Ranker — feedback front door for messy decisions - +
@@ -127,6 +127,6 @@ Or paste a Scattermind Concept Map JSON object here; Ranker will preserve source
- + diff --git a/public/styles.css b/public/styles.css index d216c9b..1911668 100644 --- a/public/styles.css +++ b/public/styles.css @@ -45,6 +45,6 @@ button,input,textarea{font:inherit} button{cursor:pointer} a{color:inherit;text- .active-slice-strip{display:grid;grid-template-columns:1.25fr 1fr 1fr 1fr 1fr;gap:10px;margin:-6px 0 22px;padding:12px;border:3px solid var(--ink);background:#15130f;color:#fff;box-shadow:8px 8px 0 var(--blue)} .handoff-strip{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin:22px 0 -6px;padding:12px;border:3px solid var(--ink);background:#fffaf1;box-shadow:7px 7px 0 rgba(21,19,15,.20)}.handoff-strip.status-ready{box-shadow:7px 7px 0 var(--green)}.handoff-strip.status-warn{box-shadow:7px 7px 0 var(--amber)}.handoff-strip.status-blocked{box-shadow:7px 7px 0 var(--red)}.handoff-strip>div{border:1.5px solid var(--hair);background:#fff6e5;padding:13px}.handoff-strip span{display:block;margin-bottom:7px;color:var(--blue2);text-transform:uppercase;letter-spacing:.12em;font-size:10px;font-weight:1000}.handoff-strip strong{display:block;margin-bottom:7px;font-size:clamp(18px,2vw,26px);line-height:1;letter-spacing:-.04em}.handoff-strip p{margin:0;color:var(--ink2);line-height:1.35}.handoff-strip small{grid-column:1/-1;color:var(--muted);font-weight:850} .active-slice-strip>div{border:1.5px solid rgba(255,255,255,.32);background:linear-gradient(145deg,rgba(255,255,255,.10),rgba(255,255,255,.03));padding:13px} -.active-slice-strip span{display:block;margin-bottom:7px;color:#bfcaff;text-transform:uppercase;letter-spacing:.12em;font-size:10px;font-weight:1000}.active-slice-strip h3{margin:0 0 8px;font-size:clamp(24px,3vw,42px);line-height:.9;letter-spacing:-.06em}.active-slice-strip p{margin:0;color:#f7efe1;line-height:1.38}.active-slice-strip ul{margin:0;padding-left:18px;color:#f7efe1}.active-slice-strip small{grid-column:1/-1;color:#d9ddff;font-weight:850}.active-source-quote{grid-column:1/-1;margin:0;padding:12px 14px;border:1.5px dashed rgba(255,255,255,.42);background:rgba(255,255,255,.06);color:#f7efe1;line-height:1.42}.active-source-quote span{color:#d9ddff}.active-slice-main{background:linear-gradient(145deg,rgba(36,92,255,.28),rgba(255,255,255,.04))!important} +.active-slice-strip span{display:block;margin-bottom:7px;color:#bfcaff;text-transform:uppercase;letter-spacing:.12em;font-size:10px;font-weight:1000}.active-slice-strip h3{margin:0 0 8px;font-size:clamp(24px,3vw,42px);line-height:.9;letter-spacing:-.06em}.active-slice-strip p{margin:0;color:#f7efe1;line-height:1.38}.active-slice-strip ul{margin:0;padding-left:18px;color:#f7efe1}.active-slice-strip small{grid-column:1/-1;color:#d9ddff;font-weight:850}.active-proof-script,.active-source-quote{grid-column:1/-1;margin:0;padding:12px 14px;border:1.5px dashed rgba(255,255,255,.42);background:rgba(255,255,255,.06);color:#f7efe1;line-height:1.42}.active-proof-script{border-style:solid;background:rgba(36,92,255,.18);font-size:clamp(15px,1.45vw,18px)}.active-proof-script span,.active-source-quote span{color:#d9ddff}.active-slice-main{background:linear-gradient(145deg,rgba(36,92,255,.28),rgba(255,255,255,.04))!important} @media (max-width:1100px){.active-slice-strip,.handoff-strip{grid-template-columns:repeat(2,minmax(0,1fr))}} @media (max-width:700px){.active-slice-strip,.handoff-strip{grid-template-columns:1fr;box-shadow:5px 5px 0 var(--blue)}}