「評価が難しい」というのは製品上の欠陥である
Hamel Husain は、LLM の評価プロセスにおける「評価そのもの」の難しさを指摘し、単なるスコアリングではなく、検証可能性や証拠(proof)に基づく定性的なアプローチの重要性を説く。
キーポイント
評価の困難さの本質
LLM の出力が正しいかどうかを判断すること自体が、人間にとって容易ではなく、これが現在の評価手法における根本的な課題である。
Product Smell としての「It's Hard to Eval」
「評価するのが難しい」という状態は、単なる技術的限界ではなく、製品設計や評価プロセスに欠陥があることを示す「臭い(smell)」として捉えるべきである。
検証可能性と証拠の重視
AI の回答に対して、なぜそれが正しいのかを示す根拠(proof)や検証可能なプロセスを提示することが、信頼性の高い評価には不可欠である。
評価の困難さは製品欠陥の兆候
「評価するのが難しい」という主張は、製品の設計や要件に根本的な問題があることを示す「製品臭(Product Smell)」である。
明確な指標と検証可能性の必要性
開発プロセスにおいて、成果物の品質を客観的に測定・評価できる基準が欠如している場合、それはシステム上の欠陥として扱うべきである。
評価の難しさが製品臭を示す
「評価するのが難しい」という感覚は、製品の設計や要件定義に欠陥があることを示唆する重要な兆候(製品臭)である。
変更履歴とレビュー機能の統合
記事では、コードの変更点を視覚的に区別し、承認・拒否を個別または一括で行えるレビュー UI の実装例が示されている。
影響分析・編集コメントを表示
影響分析
この記事は、LLM の性能評価が単なる数値スコアの比較から、論理的な検証プロセスや説明可能性へとパラダイムシフトする必要があることを示唆しています。開発者に対しては、評価指標の設計を見直し、AI がどのように結論に至ったかを可視化・検証可能な仕組みを構築することの重要性を強く伝えています。
編集コメント
評価基準の再定義が求められる中で、Hamel Husain の指摘は、AI システムの実用化において「正解」だけでなく「なぜ正解と言えるか」というプロセスの透明性を高めるための重要な指針となります。
.da-fig {
max-width: 600px; margin: 1.6rem auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
/* proof-surface tint: neutrals nudged toward one hue at low chroma.
Change --proof-hue (and --proof-chroma) to retint the whole panel. Hue 75 = warm stone. */
--proof-hue: 75;
--proof-chroma: 1;
--proof-surface: oklch(0.985 calc(0.006 * var(--proof-chroma)) var(--proof-hue));
/* the disclosure header is a control: step it darker + a touch warmer than the
surface so it reads as a distinct band, not part of the body */
--proof-header: oklch(0.945 calc(0.02 * var(--proof-chroma)) var(--proof-hue));
--proof-header-hover: oklch(0.93 calc(0.024 * var(--proof-chroma)) var(--proof-hue));
--proof-border: oklch(0.915 calc(0.014 * var(--proof-chroma)) var(--proof-hue));
--proof-line: oklch(0.93 calc(0.009 * var(--proof-chroma)) var(--proof-hue));
--proof-track: oklch(0.93 calc(0.012 * var(--proof-chroma)) var(--proof-hue));
}
.da-fig__win { border: 1px solid #d9dce1; border-radius: 12px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.06); }
.da-fig__bar { display: flex; align-items: center; gap: 8px; padding: 10px 14px; background: #f5f6f8; border-bottom: 1px solid #e6e8ec; font-size: 13px; font-weight: 600; color: #3b3f46; }
.da-fig__lights { display: flex; gap: 6px; align-items: center; }
.da-fig__light { width: 11px; height: 11px; border-radius: 50%; display: inline-block; }
.da-fig__light--r { background: #ff5f57; }
.da-fig__light--y { background: #febc2e; }
.da-fig__light--g { background: #28c840; }
.da-fig__title { margin-left: 4px; }
.da-fig__body { padding: 18px 16px; background: #ffffff; }
.da-fig__user { display: flex; justify-content: flex-end; margin-bottom: 16px; }
.da-fig__user span { background: #eef1f6; color: #1f2329; padding: 9px 13px; border-radius: 14px 14px 4px 14px; font-size: 14px; max-width: 80%; }
.da-fig__bot { color: #1f2329; font-size: 15px; line-height: 1.5; }
.da-fig__bot strong { font-weight: 700; }
.da-fig__input { display: flex; align-items: center; gap: 8px; margin-top: 18px; padding: 10px 13px; border: 1px solid #e2e4e9; border-radius: 10px; color: #9aa0a8; font-size: 13px; background: #fafbfc; }
.da-fig__send { margin-left: auto; color: #c2c6cc; }
.da-fig__cap { text-align: center; font-size: 13px; color: #6b7079; margin-top: 10px; font-style: italic; }
/* 「後」の図:答えが主であり、証明は静かな副節である */
.da-ans { font-size: 16px; color: #1f2329; line-height: 1.5; }
.da-ans strong { font-weight: 700; }
/* 答え自体への注意喚起:一部の入力は検証できないため、詳細を確認してください */
.da-ans__info { color: #d4493c; font-size: 14px; font-weight: 700; margin-left: 5px; cursor: help; vertical-align: 1px; }
/* 詳細カードは答えに従属する:インデントされ、点線でつながり、そこから垂れ下がってカーブして入ってくる */
.da-sub { position: relative; margin: 14px 0 0 26px; }
.da-thread { position: absolute; left: -20px; top: -14px; width: 22px; height: 46px; overflow: visible; }
.da-thread path { stroke: var(--proof-border); }
/* 検証サブセクション:着色された低めのカードで、クリック可能なヘッダーバー付き */
.da-verify { margin: 0; border: 1px solid var(--proof-border); border-radius: 12px; overflow: hidden; background: var(--proof-surface); box-shadow: 0 1px 2px rgba(40, 40, 50, 0.05); }
.da-verify > summary { cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; padding: 11px 14px; background: var(--proof-header); border-bottom: 1px solid var(--proof-line); font-size: 13px; }
.da-verify > summary:hover { background: var(--proof-header-hover); }
.da-verify > summary::-webkit-details-marker { display: none; }
.da-verify > summary::after { content: ""; width: 7px; height: 7px; border-right: 1.5px solid #6b7079; border-bottom: 1.5px solid #6b7079; transform: rotate(45deg); margin: -3px 4px 0 0; transition: transform 0.15s ease; }
.da-verify:not([open]) > summary::after { transform: rotate(-45deg); }
.da-verify__label { font-weight: 600; color: #1f2329; font-size: 13.5px; }
.da-verify__body { padding: 2px 14px 12px; }
.da-group { background: #ffffff; border: 1px solid var(--proof-border); border-radius: 9px; padding: 1px 12px 5px; margin-top: 9px; box-shadow: 0 1px 2px rgba(40, 40, 50, 0.04); }
.da-group:first-child { margin-top: 5px; }
.da-group__head { font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em; color: #8a909a; font-weight: 700; padding: 8px 0 7px; border-bottom: 1px solid var(--proof-line); }
.da-step { display: grid; grid-template-columns: 1fr auto; gap: 0 10px; align-items: start; padding: 9px 0 9px 16px; font-size: 13px; }
.da-step--flag { border-left: 2px solid #e08379; padding-left: 14px; }
.da-step + .da-step { border-top: 1px solid var(--proof-line); }
.da-squig { text-decoration: none; }
.da-info { color: #d4493c; font-size: 12.5px; font-weight: 700; margin-left: 4px; }
.da-step__label { color: #797f87; }
.da-step__val { color: #2a2d33; font-weight: 400; margin-left: 8px; }
.da-step__check { color: #9aa0a8; text-align: right; }
.da-step__src { color: #6b7079; text-decoration: underline; text-decoration-color: #c4c9d0; text-underline-offset: 2px; }
/* region breakdown: shown inline as part of the expanded view */
.da-dist { margin-top: 10px; padding-top: 12px; border-top: 1px solid var(--proof-line); }
.da-chart { margin: 4px 0 6px; }
.da-chart__cap { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #9aa0a8; margin: 6px 0 7px; }
.da-bar { display: grid; grid-template-columns: 92px 1fr 58px; align-items: center; gap: 10px; margin: 6px 0; font-size: 12.5px; }
.da-bar__label { color: #6b7079; }
.da-bar__track { background: var(--proof-track); border-radius: 4px; height: 14px; overflow: hidden; }
.da-bar__fill { display: block; background: #5b8def; height: 100%; border-radius: 4px; }
.da-bar__val { text-align: right; color: #3b3f46; font-weight: 600; }
/* ツール、静かに */
.da-actions { display: flex; gap: 8px; margin-top: 14px; flex-wrap: wrap; }
/* メインのアクション:ダークテキストを備えた浮き上がった白いボタン。白い塗りつぶしと浮き上がりが、暖色系のパネルから分離され、固いダークボタンのような派手さを抑えています */
.da-btn { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: #2a2d33; background: #fff; border: 1px solid #c7ccd3; border-radius: 7px; padding: 7px 13px; box-shadow: 0 1px 3px rgba(40, 40, 50, 0.10); }
/* 出典:この回答は、同僚が作成した検証済みの分析に基づいて構築されています。
温かみのある色調と開放的な機能性は、他で示された検証済みレッスンプランのアイデアを反映しています。*/
/* この白いカードは、データグループと同様に温かいパネルから浮かび上がらせ、所属感を演出します。
小さなノートブックのアイコンとアンバー色の「Open」リンクが、唯一の識別要素です。*/
.da-prov { display: flex; align-items: center; gap: 10px; margin: 2px 0 11px; padding: 11px 13px; background: #fff; border: 1px solid var(--proof-border); border-radius: 9px; box-shadow: 0 1px 2px rgba(40,40,50,0.05); text-decoration: none; }
.da-prov__ic { flex: none; width: 15px; height: 15px; color: #9aa0a8; }
.da-prov__ic svg { display: block; width: 15px; height: 15px; }
.da-prov__main { display: flex; flex-direction: column; line-height: 1.3; min-width: 0; }
.da-prov__title { font-size: 12.5px; color: #2a2d33; font-weight: 400; }
.da-prov__by { font-size: 11px; color: #8a909a; margin-top: 1px; }
.da-prov__open { margin-left: auto; font-size: 11.5px; font-weight: 600; color: #9a7a30; white-space: nowrap; }
/* ===========================================================================
PE レッスンプランナー:デスクトップアプリ。データエージェント(ウィンドウのクロームに交通信号、分割パネル、ティール色のアクセント、広いキャンバス)とは意図的に区別されています。
=========================================================================== */
.pe-figure { width: 100%; margin: 1.8rem auto; }
.pe-app {
--pe-accent: #1f7a6b;
/* 暖かい石の証明トーン、スコープ内限定。これにより、系譜カード、アバター、チップ、変更行ハイライトが異なる表面として認識されます(例 1 と同じ色相)。
--proof-hue: 75;
--proof-chroma: 1;
--proof-surface: oklch(0.985 calc(0.006 * var(--proof-chroma)) var(--proof-hue));
--proof-border: oklch(0.915 calc(0.014 * var(--proof-chroma)) var(--proof-hue));
--proof-line: oklch(0.93 calc(0.009 * var(--proof-chroma)) var(--proof-hue)); */
width: 100%;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
border: 1px solid #d4d7dd; border-radius: 10px; overflow: hidden;
background: #ffffff; box-shadow: 0 6px 22px rgba(30, 32, 40, 0.10);
}
.pe-app__bar { display: flex; align-items: center; gap: 11px; padding: 9px 14px; background: #eceef1; border-bottom: 1px solid #dfe2e7; }
.pe-app__lights { display: flex; gap: 6px; }
.pe-light { width: 11px; height: 11px; border-radius: 50%; display: inline-block; }
.pe-light--r { background: #ff5f57; }
.pe-light--y { background: #febc2e; }
.pe-light--g { background: #28c840; }
.pe-app__title { font-size: 12.5px; font-weight: 600; color: #5b6068; }
.pe-app__cap { text-align: center; font-size: 13px; color: #6b7079; margin-top: 11px; font-style: italic; }
/* shared plan document rendering */
.pe-doc__header { display: flex; align-items: baseline; gap: 9px; margin-bottom: 15px; }
.pe-doc__tag { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; }
.pe-doc__title { font-size: 17px; font-weight: 700; color: #1f2329; }
.pe-doc__sub { font-size: 12px; color: #5b6068; }
.pe-doc__header .pe-doc__tag { margin-left: auto; }
.pe-scroll { overflow-y: auto; padding-right: 10px; }
.pe-scroll::-webkit-scrollbar { width: 10px; }
.pe-scroll::-webkit-scrollbar-track { background: #f1f2f4; border-radius: 6px; }
.pe-scroll::-webkit-scrollbar-thumb { background: #c4c9d0; border-radius: 6px; border: 2px solid #f1f2f4; }
.pe-fill { position: relative; flex: 1; min-height: 0; }
.pe-fill .pe-scroll { position: absolute; inset: 0; }
.pe-sec + .pe-sec { margin-top: 14px; }
.pe-sec__head { font-size: 13px; font-weight: 700; color: #1f2329; margin-bottom: 4px; }
.pe-sec p { font-size: 13.5px; line-height: 1.55; color: #3b3f46; margin: 0; }
/* "before": 左側に入力パネル、右側に生成されたプラン */
.pe-app__split { display: grid; grid-template-columns: 268px 1fr; }
.pe-inputs { padding: 18px 18px 20px; background: #f7f8fa; border-right: 1px solid #e6e8ec; }
.pe-inputs__head { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; margin-bottom: 13px; }
.pe-field { display: flex; flex-direction: column; gap: 4px; }
.pe-field + .pe-field { margin-top: 11px; }
.pe-field__label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; }
.pe-field__input { display: flex; align-items: center; justify-content: space-between; font-size: 13.5px; color: #1f2329; background: #ffffff; border: 1px solid #e2e4e9; border-radius: 8px; padding: 8px 11px; }
.pe-field__caret { color: #b4b9c0; font-size: 11px; margin-left: 8px; }
.pe-generate { display: block; text-align: center; margin-top: 16px; font-size: 13.5px; font-weight: 600; color: #ffffff; background: var(--pe-accent); border-radius: 8px; padding: 10px 16px; }
.pe-doc { padding: 20px 22px; display: flex; flex-direction: column; min-height: 0; }
/* "after": リネージヘッダーの後に、完全なプランとその差分の分割 */
.pe-app__body { padding: 18px 20px 20px; }
.pe-src { position: relative; border: 1px solid var(--proof-border); border-radius: 12px; background: var(--proof-surface); padding: 15px; text-align: center; }
.pe-src__id { display: inline-flex; align-items: center; justify-content: center; gap: 9px; }
.pe-src__avatar { flex: none; width: 30px; height: 30px; border-radius: 50%; background: oklch(0.88 0.035 var(--proof-hue)); color: #4b5059; font-size: 11.5px; font-weight: 600; display: flex; align-items: center; justify-content: center; }
.pe-src__name { font-size: 14px; font-weight: 600; color: #1f2329; }
.pe-src__meta { font-size: 12px; color: #6b7079; margin-top: 3px; }
.pe-src__signals { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 12px; justify-content: center; }
.pe-sig { font-size: 11.5px; color: #4b5059; background: #ffffff; border: 1px solid #d3d7dd; border-radius: 999px; padding: 4px 11px; }
.pe-src__link { position: absolute; top: 14px; right: 15px; font-size: 12.5px; color: var(--pe-accent); text-decoration: none; font-weight: 500; }
.pe-split2 { display: grid; grid-template-columns: 1fr 1fr; margin-top: 16px; border: 1px solid #e6e8ec; border-radius: 10px; overflow: hidden; }
.pe-pane { padding: 14px 16px; }
.pe-pane--full { border-right: 1px solid #e6e8ec; display: flex; flex-direction: column; min-height: 0; }
.pe-pane__head { display: flex; align-items: center; justify-content: space-between; font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; margin-bottom: 11px; }
/* full plan, with changed lines marked to match the diff */
.pe-line__sec { font-size: 13px; font-weight: 700; color: #1f2329; margin: 13px 0 5px; }
.pe-line__sec:first-child { margin-top: 0; }
.pe-line { font-size: 13px; line-height: 1.5; color: #3b3f46; }
.pe-line + .pe-line { margin-top: 7px; }
.pe-line--changed { display: flex; gap: 9px; align-items: baseline; border-left: 2px solid #d7dbe1; padding: 3px 0 3px 11px; }
.pe-line--changed + .pe-line { margin-top: 9px; }
.pe-badge { flex: none; width: 16px; height: 16px; border-radius: 50%; background: #eaecef; color: #5b6068; font-size: 10px; font-weight: 600; display: inline-flex; align-items: center; justify-content: center; }
/* diff パネル、各グループは完全なプラン内のバッジに対応してキー付けされる */
.pe-dgroup + .pe-dgroup { margin-top: 13px; padding-top: 13px; border-top: 1px solid #eef0f3; }
.pe-dgroup__head { display: flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 700; color: #1f2329; margin-bottom: 7px; }
.pe-drow { display: grid; grid-template-columns: 14px 1fr; gap: 7px; align-items: baseline; font-size: 12.5px; padding: 4px 8px; border-radius: 5px; }
.pe-drow__mark { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; text-align: center; }
.pe-drow--del { background: #fbecea; }
.pe-drow--del .pe-drow__text { color: #9aa0a8; text-decoration: line-through; }
.pe-drow--del .pe-drow__mark { color: #c2705f; }
.pe-drow--add { background: #eaf6ee; margin-top: 3px; }
.pe-drow--add .pe-drow__text { color: #2f3338; }
.pe-drow--add .pe-drow__mark { color: #3fae6a; }
.pe-dwhy { font-size: 11.5px; color: #8a909a; margin-top: 5px; padding-left: 8px; }
/* Cursor スタイルのレビューコントロール:変更ごとに承認/拒否、および一括承認バー */
.pe-review { display: inline-flex; gap: 12px; text-transform: none; letter-spacing: normal; }
.pe-allbtn { font-size: 11.5px; font-weight: 600; cursor: pointer; color: #8a909a; }
.pe-allbtn--accept { color: var(--pe-accent); }
.pe-dactions { display: flex; gap: 8px; margin-top: 10px; padding-left: 8px; }
.pe-dbtn { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 600; padding: 4px 10px; border-radius: 6px; border: 1px solid #e2e4e9; background: #ffffff; color: #5b6068; cursor: pointer; }
.pe-dbtn--accept { color: #2f7a52; background: #eaf6ee; border-color: #cfe9d8; }
.pe-dbtn--reject { color: #b05c4f; background: #fbecea; border-color: #f0d7d2; }
.pe-dbtn__key { font-size: 10px; opacity: 0.55; font-weight: 400; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
/* ===========================================================================
ClaimDraft: a workers-comp report tool. A clinical/enterprise desktop app,
distinct again from the data agent and the PE planner: a slate title bar with
window controls on the right, a classic menu bar, a source-records sidebar,
and a serif report body paginated to show how long the output is.
=========================================================================== */
.wc-figure { width: 100%; margin: 1.8rem auto; --wc-accent: #3d4d6b; }
.wc-app { width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; border: 1px solid #c5c8ce; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 6px 22px rgba(30, 32, 40, 0.10); }
.wc-titlebar { display: flex; align-items: center; justify-content: space-between; padding: 8px 13px; background: var(--wc-accent); color: #ffffff; }
.wc-titlebar__name { font-size: 12.5px; font-weight: 600; }
.wc-win { display: flex; gap: 15px; font-size: 11px; color: #c3cad8; }
.wc-menubar { display: flex; gap: 18px; padding: 6px 14px; background: #f1f2f4; border-bottom: 1px solid #e2e4e9; font-size: 12px; color: #4b5059; }
.wc-body { display: grid; grid-template-columns: 150px 1fr; }
.wc-side { background: #f6f7f9; border-right: 1px solid #e6e8ec; padding: 13px 13px 16px; }
.wc-side__head { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; margin-bottom: 10px; }
.wc-doc { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #3b3f46; padding: 4px 0; }
.wc-doc__ic { position: relative; width: 12px; height: 15px; flex: none; background: #ffffff; border: 1px solid #aeb4bd; border-radius: 1px; }
.wc-doc__ic::before { content: ""; position: absolute; top: -1px; right: -1px; width: 5px; height: 5px; background: #f6f7f9; border-left: 1px solid #aeb4bd; border-bottom: 1px solid #aeb4bd; }
.wc-doc__ic::after { content: ""; position: absolute; left: 2px; right: 2px; top: 7px; height: 1px; background: #c2c7ce; box-shadow: 0 3px 0 #c2c7ce; }
.wc-side__more { font-size: 11.5px; color: #8a909a; margin-top: 7px; }
.wc-main { display: flex; flex-direction: column; min-height: 0; }
.wc-case { display: flex; flex-wrap: wrap; gap: 3px 16px; padding: 11px 18px; border-bottom: 1px solid #eceef1; font-size: 11.5px; color: #6b7079; }
.wc-case b { color: #2a2d33; font-weight: 600; }
.wc-report { padding: 18px 22px; overflow-y: auto; max-height: 300px; }
.wc-report::-webkit-scrollbar { width: 10px; }
.wc-report::-webkit-scrollbar-track { background: #f1f2f4; border-radius: 6px; }
.wc-report::-webkit-scrollbar-thumb { background: #c4c9d0; border-radius: 6px; border: 2px solid #f1f2f4; }
.wc-report__title { font-family: Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 700; color: #1f2329; text-align: center; }
.wc-report__sub { font-size: 10.5px; color: #8a909a; text-align: center; margin: 3px 0 18px; text-transform: uppercase; letter-spacing: 0.06em; }
.wc-sec { margin-bottom: 16px; }
.wc-sec__h { font-family: Georgia, "Times New Roman", serif; font-size: 13.5px; font-weight: 700; color: #1f2329; margin-bottom: 5px; }
.wc-sec p { font-family: Georgia, "Times New Roman", serif; font-size: 12.5px; line-height: 1.62; color: #33373d; margin: 0; }
.wc-foot { display: flex; align-items: center; justify-content: space-between; padding: 9px 18px; border-top: 1px solid #eceef1; background: #fafbfc; font-size: 11px; color: #8a909a; }
.wc-app__cap { text-align: center; font-size: 13px; color: #6b7079; margin-top: 11px; font-style: italic; }
/* "after": レビューコンソール。ドキュメントにはレビューステータスが割り当てられ、AI の発見事項は(矛盾、主要事実、未解決の質問)として分類され、それぞれ該当ページへの引用と、医師がこれらを解決するためのアクションが付与されます;レポートはこのレビュー完了後に公開されます。 */
.wc-doc__st { margin-left: auto; font-size: 11px; line-height: 1; }
.wc-doc__st--done { color: #2f7a52; }
.wc-doc__st--todo { color: #b9bec6; }
.wc-finds { padding: 14px 15px; overflow-y: auto; max-height: 380px; }
.wc-finds::-webkit-scrollbar { width: 10px; }
.wc-finds::-webkit-scrollbar-track { background: #f1f2f4; border-radius: 6px; }
.wc-finds::-webkit-scrollbar-thumb { background: #c4c9d0; border-radius: 6px; border: 2px solid #f1f2f4; }
.wc-find { border: 1px solid #e6e8ec; border-radius: 8px; padding: 11px 13px;
原文を表示
.da-fig {
max-width: 600px; margin: 1.6rem auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
/* proof-surface tint: neutrals nudged toward one hue at low chroma.
Change --proof-hue (and --proof-chroma) to retint the whole panel. Hue 75 = warm stone. */
--proof-hue: 75;
--proof-chroma: 1;
--proof-surface: oklch(0.985 calc(0.006 * var(--proof-chroma)) var(--proof-hue));
/* the disclosure header is a control: step it darker + a touch warmer than the
surface so it reads as a distinct band, not part of the body */
--proof-header: oklch(0.945 calc(0.02 * var(--proof-chroma)) var(--proof-hue));
--proof-header-hover: oklch(0.93 calc(0.024 * var(--proof-chroma)) var(--proof-hue));
--proof-border: oklch(0.915 calc(0.014 * var(--proof-chroma)) var(--proof-hue));
--proof-line: oklch(0.93 calc(0.009 * var(--proof-chroma)) var(--proof-hue));
--proof-track: oklch(0.93 calc(0.012 * var(--proof-chroma)) var(--proof-hue));
}
.da-fig__win { border: 1px solid #d9dce1; border-radius: 12px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.06); }
.da-fig__bar { display: flex; align-items: center; gap: 8px; padding: 10px 14px; background: #f5f6f8; border-bottom: 1px solid #e6e8ec; font-size: 13px; font-weight: 600; color: #3b3f46; }
.da-fig__lights { display: flex; gap: 6px; align-items: center; }
.da-fig__light { width: 11px; height: 11px; border-radius: 50%; display: inline-block; }
.da-fig__light--r { background: #ff5f57; }
.da-fig__light--y { background: #febc2e; }
.da-fig__light--g { background: #28c840; }
.da-fig__title { margin-left: 4px; }
.da-fig__body { padding: 18px 16px; background: #ffffff; }
.da-fig__user { display: flex; justify-content: flex-end; margin-bottom: 16px; }
.da-fig__user span { background: #eef1f6; color: #1f2329; padding: 9px 13px; border-radius: 14px 14px 4px 14px; font-size: 14px; max-width: 80%; }
.da-fig__bot { color: #1f2329; font-size: 15px; line-height: 1.5; }
.da-fig__bot strong { font-weight: 700; }
.da-fig__input { display: flex; align-items: center; gap: 8px; margin-top: 18px; padding: 10px 13px; border: 1px solid #e2e4e9; border-radius: 10px; color: #9aa0a8; font-size: 13px; background: #fafbfc; }
.da-fig__send { margin-left: auto; color: #c2c6cc; }
.da-fig__cap { text-align: center; font-size: 13px; color: #6b7079; margin-top: 10px; font-style: italic; }
/* "after" figure: the answer is primary, the proof is a quiet subsection */
.da-ans { font-size: 16px; color: #1f2329; line-height: 1.5; }
.da-ans strong { font-weight: 700; }
/* a heads-up on the answer itself: some inputs could not be verified, check details */
.da-ans__info { color: #d4493c; font-size: 14px; font-weight: 700; margin-left: 5px; cursor: help; vertical-align: 1px; }
/* the detail card is subordinate to the answer: indented, with a dotted thread that drops and curves into it */
.da-sub { position: relative; margin: 14px 0 0 26px; }
.da-thread { position: absolute; left: -20px; top: -14px; width: 22px; height: 46px; overflow: visible; }
.da-thread path { stroke: var(--proof-border); }
/* verification subsection: a tinted, low-elevation card with a clickable header bar */
.da-verify { margin: 0; border: 1px solid var(--proof-border); border-radius: 12px; overflow: hidden; background: var(--proof-surface); box-shadow: 0 1px 2px rgba(40, 40, 50, 0.05); }
.da-verify > summary { cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; padding: 11px 14px; background: var(--proof-header); border-bottom: 1px solid var(--proof-line); font-size: 13px; }
.da-verify > summary:hover { background: var(--proof-header-hover); }
.da-verify > summary::-webkit-details-marker { display: none; }
.da-verify > summary::after { content: ""; width: 7px; height: 7px; border-right: 1.5px solid #6b7079; border-bottom: 1.5px solid #6b7079; transform: rotate(45deg); margin: -3px 4px 0 0; transition: transform 0.15s ease; }
.da-verify:not([open]) > summary::after { transform: rotate(-45deg); }
.da-verify__label { font-weight: 600; color: #1f2329; font-size: 13.5px; }
.da-verify__body { padding: 2px 14px 12px; }
.da-group { background: #ffffff; border: 1px solid var(--proof-border); border-radius: 9px; padding: 1px 12px 5px; margin-top: 9px; box-shadow: 0 1px 2px rgba(40, 40, 50, 0.04); }
.da-group:first-child { margin-top: 5px; }
.da-group__head { font-size: 10px; text-transform: uppercase; letter-spacing: 0.05em; color: #8a909a; font-weight: 700; padding: 8px 0 7px; border-bottom: 1px solid var(--proof-line); }
.da-step { display: grid; grid-template-columns: 1fr auto; gap: 0 10px; align-items: start; padding: 9px 0 9px 16px; font-size: 13px; }
.da-step--flag { border-left: 2px solid #e08379; padding-left: 14px; }
.da-step + .da-step { border-top: 1px solid var(--proof-line); }
.da-squig { text-decoration: none; }
.da-info { color: #d4493c; font-size: 12.5px; font-weight: 700; margin-left: 4px; }
.da-step__label { color: #797f87; }
.da-step__val { color: #2a2d33; font-weight: 400; margin-left: 8px; }
.da-step__check { color: #9aa0a8; text-align: right; }
.da-step__src { color: #6b7079; text-decoration: underline; text-decoration-color: #c4c9d0; text-underline-offset: 2px; }
/* region breakdown: shown inline as part of the expanded view */
.da-dist { margin-top: 10px; padding-top: 12px; border-top: 1px solid var(--proof-line); }
.da-chart { margin: 4px 0 6px; }
.da-chart__cap { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #9aa0a8; margin: 6px 0 7px; }
.da-bar { display: grid; grid-template-columns: 92px 1fr 58px; align-items: center; gap: 10px; margin: 6px 0; font-size: 12.5px; }
.da-bar__label { color: #6b7079; }
.da-bar__track { background: var(--proof-track); border-radius: 4px; height: 14px; overflow: hidden; }
.da-bar__fill { display: block; background: #5b8def; height: 100%; border-radius: 4px; }
.da-bar__val { text-align: right; color: #3b3f46; font-weight: 600; }
/* tools, quiet */
.da-actions { display: flex; gap: 8px; margin-top: 14px; flex-wrap: wrap; }
/* the primary action: a raised white button with dark text. The white fill and
lift separate it from the warm panel without the shout of a solid dark button. */
.da-btn { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: #2a2d33; background: #fff; border: 1px solid #c7ccd3; border-radius: 7px; padding: 7px 13px; box-shadow: 0 1px 3px rgba(40, 40, 50, 0.10); }
/* provenance: the answer was built from a vetted analysis a colleague authored.
Warm tint and an open affordance, echoing the vetted-lesson-plan idea elsewhere. */
/* a white card lifts it off the warm panel like the data groups, so it belongs;
a small notebook glyph and the amber "Open" link are the only distinguishing cues. */
.da-prov { display: flex; align-items: center; gap: 10px; margin: 2px 0 11px; padding: 11px 13px; background: #fff; border: 1px solid var(--proof-border); border-radius: 9px; box-shadow: 0 1px 2px rgba(40,40,50,0.05); text-decoration: none; }
.da-prov__ic { flex: none; width: 15px; height: 15px; color: #9aa0a8; }
.da-prov__ic svg { display: block; width: 15px; height: 15px; }
.da-prov__main { display: flex; flex-direction: column; line-height: 1.3; min-width: 0; }
.da-prov__title { font-size: 12.5px; color: #2a2d33; font-weight: 400; }
.da-prov__by { font-size: 11px; color: #8a909a; margin-top: 1px; }
.da-prov__open { margin-left: auto; font-size: 11.5px; font-weight: 600; color: #9a7a30; white-space: nowrap; }
/* ===========================================================================
PE Lesson Planner: a desktop app. Deliberately distinct from the data agent
(window chrome with traffic lights, split panes, a teal accent, wider canvas).
=========================================================================== */
.pe-figure { width: 100%; margin: 1.8rem auto; }
.pe-app {
--pe-accent: #1f7a6b;
/* warm-stone proof tint, scoped here so the lineage card, avatar, chips and
changed-line highlight read as a differentiated surface (same hue as Example 1). */
--proof-hue: 75;
--proof-chroma: 1;
--proof-surface: oklch(0.985 calc(0.006 * var(--proof-chroma)) var(--proof-hue));
--proof-border: oklch(0.915 calc(0.014 * var(--proof-chroma)) var(--proof-hue));
--proof-line: oklch(0.93 calc(0.009 * var(--proof-chroma)) var(--proof-hue));
width: 100%;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
border: 1px solid #d4d7dd; border-radius: 10px; overflow: hidden;
background: #ffffff; box-shadow: 0 6px 22px rgba(30, 32, 40, 0.10);
}
.pe-app__bar { display: flex; align-items: center; gap: 11px; padding: 9px 14px; background: #eceef1; border-bottom: 1px solid #dfe2e7; }
.pe-app__lights { display: flex; gap: 6px; }
.pe-light { width: 11px; height: 11px; border-radius: 50%; display: inline-block; }
.pe-light--r { background: #ff5f57; }
.pe-light--y { background: #febc2e; }
.pe-light--g { background: #28c840; }
.pe-app__title { font-size: 12.5px; font-weight: 600; color: #5b6068; }
.pe-app__cap { text-align: center; font-size: 13px; color: #6b7079; margin-top: 11px; font-style: italic; }
/* shared plan document rendering */
.pe-doc__header { display: flex; align-items: baseline; gap: 9px; margin-bottom: 15px; }
.pe-doc__tag { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; }
.pe-doc__title { font-size: 17px; font-weight: 700; color: #1f2329; }
.pe-doc__sub { font-size: 12px; color: #5b6068; }
.pe-doc__header .pe-doc__tag { margin-left: auto; }
.pe-scroll { overflow-y: auto; padding-right: 10px; }
.pe-scroll::-webkit-scrollbar { width: 10px; }
.pe-scroll::-webkit-scrollbar-track { background: #f1f2f4; border-radius: 6px; }
.pe-scroll::-webkit-scrollbar-thumb { background: #c4c9d0; border-radius: 6px; border: 2px solid #f1f2f4; }
.pe-fill { position: relative; flex: 1; min-height: 0; }
.pe-fill .pe-scroll { position: absolute; inset: 0; }
.pe-sec + .pe-sec { margin-top: 14px; }
.pe-sec__head { font-size: 13px; font-weight: 700; color: #1f2329; margin-bottom: 4px; }
.pe-sec p { font-size: 13.5px; line-height: 1.55; color: #3b3f46; margin: 0; }
/* "before": inputs panel on the left, generated plan on the right */
.pe-app__split { display: grid; grid-template-columns: 268px 1fr; }
.pe-inputs { padding: 18px 18px 20px; background: #f7f8fa; border-right: 1px solid #e6e8ec; }
.pe-inputs__head { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; margin-bottom: 13px; }
.pe-field { display: flex; flex-direction: column; gap: 4px; }
.pe-field + .pe-field { margin-top: 11px; }
.pe-field__label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; }
.pe-field__input { display: flex; align-items: center; justify-content: space-between; font-size: 13.5px; color: #1f2329; background: #ffffff; border: 1px solid #e2e4e9; border-radius: 8px; padding: 8px 11px; }
.pe-field__caret { color: #b4b9c0; font-size: 11px; margin-left: 8px; }
.pe-generate { display: block; text-align: center; margin-top: 16px; font-size: 13.5px; font-weight: 600; color: #ffffff; background: var(--pe-accent); border-radius: 8px; padding: 10px 16px; }
.pe-doc { padding: 20px 22px; display: flex; flex-direction: column; min-height: 0; }
/* "after": lineage header, then a split of the full plan and its diff */
.pe-app__body { padding: 18px 20px 20px; }
.pe-src { position: relative; border: 1px solid var(--proof-border); border-radius: 12px; background: var(--proof-surface); padding: 15px; text-align: center; }
.pe-src__id { display: inline-flex; align-items: center; justify-content: center; gap: 9px; }
.pe-src__avatar { flex: none; width: 30px; height: 30px; border-radius: 50%; background: oklch(0.88 0.035 var(--proof-hue)); color: #4b5059; font-size: 11.5px; font-weight: 600; display: flex; align-items: center; justify-content: center; }
.pe-src__name { font-size: 14px; font-weight: 600; color: #1f2329; }
.pe-src__meta { font-size: 12px; color: #6b7079; margin-top: 3px; }
.pe-src__signals { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 12px; justify-content: center; }
.pe-sig { font-size: 11.5px; color: #4b5059; background: #ffffff; border: 1px solid #d3d7dd; border-radius: 999px; padding: 4px 11px; }
.pe-src__link { position: absolute; top: 14px; right: 15px; font-size: 12.5px; color: var(--pe-accent); text-decoration: none; font-weight: 500; }
.pe-split2 { display: grid; grid-template-columns: 1fr 1fr; margin-top: 16px; border: 1px solid #e6e8ec; border-radius: 10px; overflow: hidden; }
.pe-pane { padding: 14px 16px; }
.pe-pane--full { border-right: 1px solid #e6e8ec; display: flex; flex-direction: column; min-height: 0; }
.pe-pane__head { display: flex; align-items: center; justify-content: space-between; font-size: 11px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; margin-bottom: 11px; }
/* full plan, with changed lines marked to match the diff */
.pe-line__sec { font-size: 13px; font-weight: 700; color: #1f2329; margin: 13px 0 5px; }
.pe-line__sec:first-child { margin-top: 0; }
.pe-line { font-size: 13px; line-height: 1.5; color: #3b3f46; }
.pe-line + .pe-line { margin-top: 7px; }
.pe-line--changed { display: flex; gap: 9px; align-items: baseline; border-left: 2px solid #d7dbe1; padding: 3px 0 3px 11px; }
.pe-line--changed + .pe-line { margin-top: 9px; }
.pe-badge { flex: none; width: 16px; height: 16px; border-radius: 50%; background: #eaecef; color: #5b6068; font-size: 10px; font-weight: 600; display: inline-flex; align-items: center; justify-content: center; }
/* diff pane, each group keyed to a badge in the full plan */
.pe-dgroup + .pe-dgroup { margin-top: 13px; padding-top: 13px; border-top: 1px solid #eef0f3; }
.pe-dgroup__head { display: flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 700; color: #1f2329; margin-bottom: 7px; }
.pe-drow { display: grid; grid-template-columns: 14px 1fr; gap: 7px; align-items: baseline; font-size: 12.5px; padding: 4px 8px; border-radius: 5px; }
.pe-drow__mark { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; text-align: center; }
.pe-drow--del { background: #fbecea; }
.pe-drow--del .pe-drow__text { color: #9aa0a8; text-decoration: line-through; }
.pe-drow--del .pe-drow__mark { color: #c2705f; }
.pe-drow--add { background: #eaf6ee; margin-top: 3px; }
.pe-drow--add .pe-drow__text { color: #2f3338; }
.pe-drow--add .pe-drow__mark { color: #3fae6a; }
.pe-dwhy { font-size: 11.5px; color: #8a909a; margin-top: 5px; padding-left: 8px; }
/* Cursor-style review controls: accept / reject per change, plus an accept-all bar */
.pe-review { display: inline-flex; gap: 12px; text-transform: none; letter-spacing: normal; }
.pe-allbtn { font-size: 11.5px; font-weight: 600; cursor: pointer; color: #8a909a; }
.pe-allbtn--accept { color: var(--pe-accent); }
.pe-dactions { display: flex; gap: 8px; margin-top: 10px; padding-left: 8px; }
.pe-dbtn { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 600; padding: 4px 10px; border-radius: 6px; border: 1px solid #e2e4e9; background: #ffffff; color: #5b6068; cursor: pointer; }
.pe-dbtn--accept { color: #2f7a52; background: #eaf6ee; border-color: #cfe9d8; }
.pe-dbtn--reject { color: #b05c4f; background: #fbecea; border-color: #f0d7d2; }
.pe-dbtn__key { font-size: 10px; opacity: 0.55; font-weight: 400; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
/* ===========================================================================
ClaimDraft: a workers-comp report tool. A clinical/enterprise desktop app,
distinct again from the data agent and the PE planner: a slate title bar with
window controls on the right, a classic menu bar, a source-records sidebar,
and a serif report body paginated to show how long the output is.
=========================================================================== */
.wc-figure { width: 100%; margin: 1.8rem auto; --wc-accent: #3d4d6b; }
.wc-app { width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; border: 1px solid #c5c8ce; border-radius: 8px; overflow: hidden; background: #ffffff; box-shadow: 0 6px 22px rgba(30, 32, 40, 0.10); }
.wc-titlebar { display: flex; align-items: center; justify-content: space-between; padding: 8px 13px; background: var(--wc-accent); color: #ffffff; }
.wc-titlebar__name { font-size: 12.5px; font-weight: 600; }
.wc-win { display: flex; gap: 15px; font-size: 11px; color: #c3cad8; }
.wc-menubar { display: flex; gap: 18px; padding: 6px 14px; background: #f1f2f4; border-bottom: 1px solid #e2e4e9; font-size: 12px; color: #4b5059; }
.wc-body { display: grid; grid-template-columns: 150px 1fr; }
.wc-side { background: #f6f7f9; border-right: 1px solid #e6e8ec; padding: 13px 13px 16px; }
.wc-side__head { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.04em; color: #4b5059; margin-bottom: 10px; }
.wc-doc { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #3b3f46; padding: 4px 0; }
.wc-doc__ic { position: relative; width: 12px; height: 15px; flex: none; background: #ffffff; border: 1px solid #aeb4bd; border-radius: 1px; }
.wc-doc__ic::before { content: ""; position: absolute; top: -1px; right: -1px; width: 5px; height: 5px; background: #f6f7f9; border-left: 1px solid #aeb4bd; border-bottom: 1px solid #aeb4bd; }
.wc-doc__ic::after { content: ""; position: absolute; left: 2px; right: 2px; top: 7px; height: 1px; background: #c2c7ce; box-shadow: 0 3px 0 #c2c7ce; }
.wc-side__more { font-size: 11.5px; color: #8a909a; margin-top: 7px; }
.wc-main { display: flex; flex-direction: column; min-height: 0; }
.wc-case { display: flex; flex-wrap: wrap; gap: 3px 16px; padding: 11px 18px; border-bottom: 1px solid #eceef1; font-size: 11.5px; color: #6b7079; }
.wc-case b { color: #2a2d33; font-weight: 600; }
.wc-report { padding: 18px 22px; overflow-y: auto; max-height: 300px; }
.wc-report::-webkit-scrollbar { width: 10px; }
.wc-report::-webkit-scrollbar-track { background: #f1f2f4; border-radius: 6px; }
.wc-report::-webkit-scrollbar-thumb { background: #c4c9d0; border-radius: 6px; border: 2px solid #f1f2f4; }
.wc-report__title { font-family: Georgia, "Times New Roman", serif; font-size: 16px; font-weight: 700; color: #1f2329; text-align: center; }
.wc-report__sub { font-size: 10.5px; color: #8a909a; text-align: center; margin: 3px 0 18px; text-transform: uppercase; letter-spacing: 0.06em; }
.wc-sec { margin-bottom: 16px; }
.wc-sec__h { font-family: Georgia, "Times New Roman", serif; font-size: 13.5px; font-weight: 700; color: #1f2329; margin-bottom: 5px; }
.wc-sec p { font-family: Georgia, "Times New Roman", serif; font-size: 12.5px; line-height: 1.62; color: #33373d; margin: 0; }
.wc-foot { display: flex; align-items: center; justify-content: space-between; padding: 9px 18px; border-top: 1px solid #eceef1; background: #fafbfc; font-size: 11px; color: #8a909a; }
.wc-app__cap { text-align: center; font-size: 13px; color: #6b7079; margin-top: 11px; font-style: italic; }
/* "after": a review console. documents get a review status; the AI's findings are
typed (contradiction, key fact, open question), each cited back to a page, with
an action so the doctor resolves them; the report is gated on that review. */
.wc-doc__st { margin-left: auto; font-size: 11px; line-height: 1; }
.wc-doc__st--done { color: #2f7a52; }
.wc-doc__st--todo { color: #b9bec6; }
.wc-finds { padding: 14px 15px; overflow-y: auto; max-height: 380px; }
.wc-finds::-webkit-scrollbar { width: 10px; }
.wc-finds::-webkit-scrollbar-track { background: #f1f2f4; border-radius: 6px; }
.wc-finds::-webkit-scrollbar-thumb { background: #c4c9d0; border-radius: 6px; border: 2px solid #f1f2f4; }
.wc-find { border: 1px solid #e6e8ec; border-radius: 8px; padding: 11px 13px;
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み