Protokoll #12385

ID12385
Zeitstempel2025-12-24 01:11:15.997502
Clientroot
IP
Warning: Undefined array key "request_ip" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens6,121 (Input: 0, Output: 0)
Dauer86 ms
Request-Zeit
Warning: Undefined array key "request_timestamp" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 18
Response-Zeit-

Warning: Undefined array key "error_message" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 22

Request

{
    "event": "PreToolUse",
    "tool_name": "Edit",
    "tool_input": {
        "file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/content\/show.php",
        "old_string": "<style>\n.info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-md); margin-bottom: var(--space-lg); }\n.info-card { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: 8px; padding: var(--space-md); }\n.info-card h3 { margin: 0 0 var(--space-sm) 0; font-size: 0.9rem; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.5px; }\n.info-list { display: grid; grid-template-columns: auto 1fr; gap: var(--space-xs) var(--space-sm); margin: 0; }\n.info-list dt { color: var(--color-text-muted); font-size: 0.85rem; }\n.info-list dd { margin: 0; font-weight: 500; }\n.briefing-box { background: var(--color-bg-muted); border-radius: 8px; padding: var(--space-md); margin-bottom: var(--space-lg); line-height: 1.6; }\n.action-bar { display: flex; flex-wrap: wrap; gap: var(--space-sm); align-items: center; margin-bottom: var(--space-lg); }\n.inline-form { display: flex; gap: var(--space-xs); align-items: center; }\n.form-select--inline { padding: 0.4rem 0.6rem; font-size: 0.85rem; border-radius: 4px; }\n\n\/* Generate Button Animation *\/\n.generate-btn .btn-text { display: inline; }\n.generate-btn .btn-loading { display: none; gap: 3px; justify-content: center; align-items: center; }\n.generate-btn.is-loading .btn-text { display: none; }\n.generate-btn.is-loading .btn-loading { display: inline-flex; }\n.generate-btn .btn-loading span {\n    width: 6px; height: 6px;\n    background: currentColor;\n    border-radius: 50%;\n    animation: btn-bounce 1.4s infinite ease-in-out both;\n}\n.generate-btn .btn-loading span:nth-child(1) { animation-delay: -0.32s; }\n.generate-btn .btn-loading span:nth-child(2) { animation-delay: -0.16s; }\n.generate-btn .btn-loading span:nth-child(3) { animation-delay: 0s; }\n@keyframes btn-bounce {\n    0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; }\n    40% { transform: scale(1); opacity: 1; }\n}\n<\/style>",
        "new_string": "<style>\n.info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-md); margin-bottom: var(--space-lg); }\n.info-card { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: 8px; padding: var(--space-md); }\n.info-card h3 { margin: 0 0 var(--space-sm) 0; font-size: 0.9rem; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.5px; }\n.info-list { display: grid; grid-template-columns: auto 1fr; gap: var(--space-xs) var(--space-sm); margin: 0; }\n.info-list dt { color: var(--color-text-muted); font-size: 0.85rem; }\n.info-list dd { margin: 0; font-weight: 500; }\n.briefing-box { background: var(--color-bg-muted); border-radius: 8px; padding: var(--space-md); margin-bottom: var(--space-lg); line-height: 1.6; }\n\n\/* Action Cards Grid *\/\n.action-cards {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n    gap: var(--space-md);\n    margin-bottom: var(--space-lg);\n}\n.action-card {\n    background: var(--color-bg);\n    border: 1px solid var(--color-border);\n    border-radius: 8px;\n    padding: var(--space-md);\n    display: flex;\n    flex-direction: column;\n}\n.action-card--primary {\n    border-color: var(--color-primary);\n    box-shadow: 0 0 0 1px var(--color-primary);\n}\n.action-card__header {\n    font-weight: 600;\n    font-size: 0.95rem;\n    margin-bottom: var(--space-xs);\n    color: var(--color-text);\n}\n.action-card__desc {\n    font-size: 0.8rem;\n    color: var(--color-text-muted);\n    margin-bottom: var(--space-sm);\n    line-height: 1.4;\n}\n.action-card__body {\n    display: flex;\n    flex-direction: column;\n    gap: var(--space-sm);\n    margin-top: auto;\n}\n.action-card__buttons {\n    display: flex;\n    gap: var(--space-xs);\n}\n.action-card__buttons .btn {\n    flex: 1;\n}\n.action-link {\n    color: var(--color-primary);\n    text-decoration: none;\n}\n.action-link:hover {\n    text-decoration: underline;\n}\n\n\/* Form Elements in Cards *\/\n.form-row {\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n}\n.form-label {\n    font-size: 0.75rem;\n    font-weight: 500;\n    color: var(--color-text-muted);\n    text-transform: uppercase;\n    letter-spacing: 0.3px;\n}\n.form-select {\n    padding: 0.5rem 0.75rem;\n    font-size: 0.85rem;\n    border: 1px solid var(--color-border);\n    border-radius: 4px;\n    background: var(--color-bg);\n    color: var(--color-text);\n    width: 100%;\n}\n.btn--full {\n    width: 100%;\n    justify-content: center;\n}\n\n\/* Generate Button Animation *\/\n.generate-btn .btn-text { display: inline; }\n.generate-btn .btn-loading { display: none; gap: 3px; justify-content: center; align-items: center; }\n.generate-btn.is-loading .btn-text { display: none; }\n.generate-btn.is-loading .btn-loading { display: inline-flex; }\n.generate-btn .btn-loading span {\n    width: 6px; height: 6px;\n    background: currentColor;\n    border-radius: 50%;\n    animation: btn-bounce 1.4s infinite ease-in-out both;\n}\n.generate-btn .btn-loading span:nth-child(1) { animation-delay: -0.32s; }\n.generate-btn .btn-loading span:nth-child(2) { animation-delay: -0.16s; }\n.generate-btn .btn-loading span:nth-child(3) { animation-delay: 0s; }\n@keyframes btn-bounce {\n    0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; }\n    40% { transform: scale(1); opacity: 1; }\n}\n<\/style>"
    }
}

Response

{
    "tool_response": {
        "filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/content\/show.php",
        "oldString": "<style>\n.info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-md); margin-bottom: var(--space-lg); }\n.info-card { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: 8px; padding: var(--space-md); }\n.info-card h3 { margin: 0 0 var(--space-sm) 0; font-size: 0.9rem; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.5px; }\n.info-list { display: grid; grid-template-columns: auto 1fr; gap: var(--space-xs) var(--space-sm); margin: 0; }\n.info-list dt { color: var(--color-text-muted); font-size: 0.85rem; }\n.info-list dd { margin: 0; font-weight: 500; }\n.briefing-box { background: var(--color-bg-muted); border-radius: 8px; padding: var(--space-md); margin-bottom: var(--space-lg); line-height: 1.6; }\n.action-bar { display: flex; flex-wrap: wrap; gap: var(--space-sm); align-items: center; margin-bottom: var(--space-lg); }\n.inline-form { display: flex; gap: var(--space-xs); align-items: center; }\n.form-select--inline { padding: 0.4rem 0.6rem; font-size: 0.85rem; border-radius: 4px; }\n\n\/* Generate Button Animation *\/\n.generate-btn .btn-text { display: inline; }\n.generate-btn .btn-loading { display: none; gap: 3px; justify-content: center; align-items: center; }\n.generate-btn.is-loading .btn-text { display: none; }\n.generate-btn.is-loading .btn-loading { display: inline-flex; }\n.generate-btn .btn-loading span {\n    width: 6px; height: 6px;\n    background: currentColor;\n    border-radius: 50%;\n    animation: btn-bounce 1.4s infinite ease-in-out both;\n}\n.generate-btn .btn-loading span:nth-child(1) { animation-delay: -0.32s; }\n.generate-btn .btn-loading span:nth-child(2) { animation-delay: -0.16s; }\n.generate-btn .btn-loading span:nth-child(3) { animation-delay: 0s; }\n@keyframes btn-bounce {\n    0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; }\n    40% { transform: scale(1); opacity: 1; }\n}\n<\/style>",
        "newString": "<style>\n.info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-md); margin-bottom: var(--space-lg); }\n.info-card { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: 8px; padding: var(--space-md); }\n.info-card h3 { margin: 0 0 var(--space-sm) 0; font-size: 0.9rem; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.5px; }\n.info-list { display: grid; grid-template-columns: auto 1fr; gap: var(--space-xs) var(--space-sm); margin: 0; }\n.info-list dt { color: var(--color-text-muted); font-size: 0.85rem; }\n.info-list dd { margin: 0; font-weight: 500; }\n.briefing-box { background: var(--color-bg-muted); border-radius: 8px; padding: var(--space-md); margin-bottom: var(--space-lg); line-height: 1.6; }\n\n\/* Action Cards Grid *\/\n.action-cards {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n    gap: var(--space-md);\n    margin-bottom: var(--space-lg);\n}\n.action-card {\n    background: var(--color-bg);\n    border: 1px solid var(--color-border);\n    border-radius: 8px;\n    padding: var(--space-md);\n    display: flex;\n    flex-direction: column;\n}\n.action-card--primary {\n    border-color: var(--color-primary);\n    box-shadow: 0 0 0 1px var(--color-primary);\n}\n.action-card__header {\n    font-weight: 600;\n    font-size: 0.95rem;\n    margin-bottom: var(--space-xs);\n    color: var(--color-text);\n}\n.action-card__desc {\n    font-size: 0.8rem;\n    color: var(--color-text-muted);\n    margin-bottom: var(--space-sm);\n    line-height: 1.4;\n}\n.action-card__body {\n    display: flex;\n    flex-direction: column;\n    gap: var(--space-sm);\n    margin-top: auto;\n}\n.action-card__buttons {\n    display: flex;\n    gap: var(--space-xs);\n}\n.action-card__buttons .btn {\n    flex: 1;\n}\n.action-link {\n    color: var(--color-primary);\n    text-decoration: none;\n}\n.action-link:hover {\n    text-decoration: underline;\n}\n\n\/* Form Elements in Cards *\/\n.form-row {\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n}\n.form-label {\n    font-size: 0.75rem;\n    font-weight: 500;\n    color: var(--color-text-muted);\n    text-transform: uppercase;\n    letter-spacing: 0.3px;\n}\n.form-select {\n    padding: 0.5rem 0.75rem;\n    font-size: 0.85rem;\n    border: 1px solid var(--color-border);\n    border-radius: 4px;\n    background: var(--color-bg);\n    color: var(--color-text);\n    width: 100%;\n}\n.btn--full {\n    width: 100%;\n    justify-content: center;\n}\n\n\/* Generate Button Animation *\/\n.generate-btn .btn-text { display: inline; }\n.generate-btn .btn-loading { display: none; gap: 3px; justify-content: center; align-items: center; }\n.generate-btn.is-loading .btn-text { display: none; }\n.generate-btn.is-loading .btn-loading { display: inline-flex; }\n.generate-btn .btn-loading span {\n    width: 6px; height: 6px;\n    background: currentColor;\n    border-radius: 50%;\n    animation: btn-bounce 1.4s infinite ease-in-out both;\n}\n.generate-btn .btn-loading span:nth-child(1) { animation-delay: -0.32s; }\n.generate-btn .btn-loading span:nth-child(2) { animation-delay: -0.16s; }\n.generate-btn .btn-loading span:nth-child(3) { animation-delay: 0s; }\n@keyframes btn-bounce {\n    0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; }\n    40% { transform: scale(1); opacity: 1; }\n}\n<\/style>",
        "originalFile": "<?php\nob_start();\n$orderModel = $order['model'] ?? 'claude-sonnet-4-20250514';\n$orderCollections = json_decode($order['collections'] ?? '[\"documents\"]', true) ?: ['documents'];\n$orderContextLimit = (int) ($order['context_limit'] ?? 5);\n$isGenerating = ($order['generation_status'] ?? 'idle') === 'generating';\n$orderId = $order['id'];\n?>\n\n<nav class=\"breadcrumb\">\n    <a href=\"\/content\">Content Studio<\/a> &raquo; Auftrag #<?= $order['id'] ?>\n<\/nav>\n\n<h1><?= htmlspecialchars($order['title']) ?><\/h1>\n\n<div class=\"info-grid\">\n    <div class=\"info-card\">\n        <h3>Auftrag<\/h3>\n        <dl class=\"info-list\">\n            <dt>ID<\/dt><dd><?= $order['id'] ?><\/dd>\n            <dt>Status<\/dt><dd><span class=\"badge badge--<?= $order['status'] ?>\"><?= $order['status'] ?><\/span><\/dd>\n            <dt>Erstellt<\/dt><dd><?= $order['created_at'] ?><\/dd>\n        <\/dl>\n    <\/div>\n    <div class=\"info-card\">\n        <h3>KI-Einstellungen<\/h3>\n        <dl class=\"info-list\">\n            <dt>Modell<\/dt><dd><?= htmlspecialchars($models[$orderModel] ?? $orderModel) ?><\/dd>\n            <dt>Collections<\/dt><dd><?= htmlspecialchars(implode(', ', $orderCollections)) ?><\/dd>\n            <dt>Quellen<\/dt><dd><?= $orderContextLimit ?><\/dd>\n        <\/dl>\n    <\/div>\n    <div class=\"info-card\">\n        <h3>Content-Config<\/h3>\n        <dl class=\"info-list\">\n            <dt>Profil<\/dt><dd><?= htmlspecialchars($order['profile_name'] ?? '-') ?><\/dd>\n            <dt>Contract<\/dt><dd><?= htmlspecialchars($order['contract_name'] ?? '-') ?><\/dd>\n            <dt>Struktur<\/dt><dd><?= htmlspecialchars($order['structure_name'] ?? '-') ?><\/dd>\n        <\/dl>\n    <\/div>\n<\/div>\n\n<h2>Briefing<\/h2>\n<div class=\"briefing-box\"><?= nl2br(htmlspecialchars($order['briefing'])) ?><\/div>\n\n<h2>Aktionen<\/h2>\n<div class=\"action-cards\">\n    <!-- Basis-Aktionen -->\n    <div class=\"action-card\">\n        <div class=\"action-card__header\">Auftrag<\/div>\n        <div class=\"action-card__body\">\n            <a href=\"\/content\/<?= $order['id'] ?>\/edit\" class=\"btn btn--full\">Bearbeiten<\/a>\n        <\/div>\n    <\/div>\n\n    <?php if (!$latestVersion): ?>\n    <!-- Content Generieren -->\n    <div class=\"action-card action-card--primary\">\n        <div class=\"action-card__header\">Content generieren<\/div>\n        <div class=\"action-card__desc\">Erstellt Content basierend auf Briefing und RAG-Quellen<\/div>\n        <form method=\"POST\" action=\"\/content\/<?= $order['id'] ?>\/generate\" class=\"action-card__body generate-form\" id=\"generate-form\"\n              hx-post=\"\/content\/<?= $order['id'] ?>\/generate\"\n              hx-target=\"#content-result\"\n              hx-swap=\"innerHTML\"\n              hx-disabled-elt=\"find button\">\n            <?= $csrfField ?>\n            <div class=\"form-row\">\n                <label class=\"form-label\">KI-Modell<\/label>\n                <select name=\"model\" class=\"form-select\" <?= $isGenerating ? 'disabled' : '' ?>>\n                    <?php foreach ($models ?? [] as $modelId => $modelName): ?>\n                    <option value=\"<?= $modelId ?>\" <?= $modelId === $orderModel ? 'selected' : '' ?>><?= htmlspecialchars($modelName) ?><\/option>\n                    <?php endforeach; ?>\n                <\/select>\n            <\/div>\n            <div class=\"form-row\">\n                <label class=\"form-label\">Wissens-Quelle<\/label>\n                <?php\n                $collections = $availableCollections ?? [];\n                $selected = $orderCollections;\n                $name = 'collection';\n                $variant = 'block';\n                $multiple = false;\n                include __DIR__ . '\/..\/partials\/form\/collections-select.php';\n                ?>\n            <\/div>\n            <div class=\"form-row\">\n                <label class=\"form-label\">Kontext-Limit<\/label>\n                <select name=\"context_limit\" class=\"form-select\" <?= $isGenerating ? 'disabled' : '' ?>>\n                    <option value=\"3\" <?= $orderContextLimit === 3 ? 'selected' : '' ?>>3 Quellen<\/option>\n                    <option value=\"5\" <?= $orderContextLimit === 5 ? 'selected' : '' ?>>5 Quellen<\/option>\n                    <option value=\"10\" <?= $orderContextLimit === 10 ? 'selected' : '' ?>>10 Quellen<\/option>\n                    <option value=\"15\" <?= $orderContextLimit === 15 ? 'selected' : '' ?>>15 Quellen<\/option>\n                <\/select>\n            <\/div>\n            <button type=\"submit\" class=\"btn btn--primary btn--full generate-btn <?= $isGenerating ? 'is-loading' : '' ?>\" <?= $isGenerating ? 'disabled' : '' ?>>\n                <span class=\"btn-text\">Generieren<\/span>\n                <span class=\"btn-loading\"><span><\/span><span><\/span><span><\/span><\/span>\n            <\/button>\n        <\/form>\n    <\/div>\n    <?php endif; ?>\n\n    <?php if ($latestVersion): ?>\n    <!-- Kritik-Runde -->\n    <div class=\"action-card\">\n        <div class=\"action-card__header\">Kritik-Runde<\/div>\n        <div class=\"action-card__desc\">\n            Alle aktiven Kritiker pruefen den Content:\n            <a href=\"\/critics\" class=\"action-link\">Faktenpruefer, Stilist, Strukturanalyst<\/a>\n        <\/div>\n        <form method=\"POST\" action=\"\/content\/<?= $order['id'] ?>\/critique\" class=\"action-card__body\"\n              hx-post=\"\/content\/<?= $order['id'] ?>\/critique\"\n              hx-target=\"#critique-result\"\n              hx-swap=\"innerHTML\">\n            <?= $csrfField ?>\n            <div class=\"form-row\">\n                <label class=\"form-label\">KI-Modell fuer Kritik<\/label>\n                <select name=\"model\" class=\"form-select\">\n                    <?php foreach ($models ?? [] as $modelId => $modelName): ?>\n                    <option value=\"<?= $modelId ?>\" <?= $modelId === $orderModel ? 'selected' : '' ?>><?= htmlspecialchars($modelName) ?><\/option>\n                    <?php endforeach; ?>\n                <\/select>\n            <\/div>\n            <button type=\"submit\" class=\"btn btn--light btn--full\">Kritik starten<\/button>\n        <\/form>\n    <\/div>\n\n    <!-- Revision -->\n    <div class=\"action-card\">\n        <div class=\"action-card__header\">Revision erstellen<\/div>\n        <div class=\"action-card__desc\">Ueberarbeitet Content basierend auf dem Kritik-Feedback<\/div>\n        <form method=\"POST\" action=\"\/content\/<?= $order['id'] ?>\/revise\" class=\"action-card__body\"\n              hx-post=\"\/content\/<?= $order['id'] ?>\/revise\"\n              hx-target=\"#content-result\"\n              hx-swap=\"innerHTML\">\n            <?= $csrfField ?>\n            <div class=\"form-row\">\n                <label class=\"form-label\">KI-Modell fuer Revision<\/label>\n                <select name=\"model\" class=\"form-select\">\n                    <?php foreach ($models ?? [] as $modelId => $modelName): ?>\n                    <option value=\"<?= $modelId ?>\" <?= $modelId === $orderModel ? 'selected' : '' ?>><?= htmlspecialchars($modelName) ?><\/option>\n                    <?php endforeach; ?>\n                <\/select>\n            <\/div>\n            <button type=\"submit\" class=\"btn btn--light btn--full\">Revision erstellen<\/button>\n        <\/form>\n    <\/div>\n\n    <!-- Freigabe -->\n    <?php if (in_array($order['status'], ['validate', 'critique', 'revision'])): ?>\n    <div class=\"action-card\">\n        <div class=\"action-card__header\">Freigabe<\/div>\n        <div class=\"action-card__desc\">Content genehmigen oder zurueck zu Entwurf<\/div>\n        <div class=\"action-card__body action-card__buttons\">\n            <button class=\"btn btn--success btn--full\" hx-post=\"\/content\/<?= $order['id'] ?>\/approve\" hx-swap=\"none\" hx-on::after-request=\"location.reload()\" hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'>Genehmigen<\/button>\n            <button class=\"btn btn--danger btn--full\" hx-post=\"\/content\/<?= $order['id'] ?>\/decline\" hx-swap=\"none\" hx-on::after-request=\"location.reload()\" hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'>Ablehnen<\/button>\n        <\/div>\n    <\/div>\n    <?php endif; ?>\n    <?php endif; ?>\n<\/div>\n\n<div id=\"content-result\">\n<?php if ($isGenerating): ?>\n    <?php include __DIR__ . '\/partials\/generating.php'; ?>\n<?php endif; ?>\n<\/div>\n<div id=\"critique-result\"><\/div>\n\n<?php if ($latestVersion):\n    $contentData = json_decode($latestVersion['content'], true);\n    $contentText = is_array($contentData) ? ($contentData['text'] ?? '') : $latestVersion['content'];\n    ?>\n<h2>Content (Version <?= $latestVersion['version_number'] ?>)<\/h2>\n<div class=\"result-box\">\n    <div class=\"result-box__header\">\n        <strong>Version <?= $latestVersion['version_number'] ?><\/strong>\n        <span><?= date('d.m.Y H:i', strtotime($latestVersion['created_at'])) ?><\/span>\n    <\/div>\n    <div class=\"result-box__content\">\n        <pre><?= htmlspecialchars($contentText) ?><\/pre>\n    <\/div>\n<\/div>\n<?php endif; ?>\n\n<?php if (!empty($critiques)): ?>\n<h2>Kritiken<\/h2>\n<table data-sortable>\n    <thead>\n        <tr>\n            <th data-sort=\"round\">Runde<\/th>\n            <th data-sort=\"critic\">Kritiker<\/th>\n            <th data-sort=\"rating\">Bewertung<\/th>\n            <th data-sort=\"status\">Status<\/th>\n            <th data-sort=\"summary\">Zusammenfassung<\/th>\n        <\/tr>\n    <\/thead>\n    <tbody>\n        <?php foreach ($critiques as $c): ?>\n        <tr>\n            <td><?= $c['round'] ?? '-' ?><\/td>\n            <td><?= htmlspecialchars($c['critic_name'] ?? '-') ?><\/td>\n            <td><?= $c['rating'] ?? '-' ?>\/10<\/td>\n            <td><span class=\"badge badge--<?= ($c['passed'] ?? false) ? 'completed' : 'failed' ?>\"><?= ($c['passed'] ?? false) ? 'Bestanden' : 'Offen' ?><\/span><\/td>\n            <td><?= htmlspecialchars($c['summary'] ?? '-') ?><\/td>\n        <\/tr>\n        <?php endforeach; ?>\n    <\/tbody>\n<\/table>\n<?php endif; ?>\n\n<?php if (!empty($sources)): ?>\n<h2>Quellen (RAG)<\/h2>\n<table data-sortable>\n    <thead>\n        <tr>\n            <th data-sort=\"document\">Dokument<\/th>\n            <th data-sort=\"score\">Relevanz<\/th>\n        <\/tr>\n    <\/thead>\n    <tbody>\n        <?php foreach ($sources as $s): ?>\n        <tr>\n            <td><?= htmlspecialchars($s['document_name'] ?? 'Unbekan... [TRUNCATED-759e565dd5b83f6e]",
        "structuredPatch": [
            {
                "oldStart": 259,
                "oldLines": 10,
                "newStart": 259,
                "newLines": 86,
                "lines": [
                    " .info-list dt { color: var(--color-text-muted); font-size: 0.85rem; }",
                    " .info-list dd { margin: 0; font-weight: 500; }",
                    " .briefing-box { background: var(--color-bg-muted); border-radius: 8px; padding: var(--space-md); margin-bottom: var(--space-lg); line-height: 1.6; }",
                    "-.action-bar { display: flex; flex-wrap: wrap; gap: var(--space-sm); align-items: center; margin-bottom: var(--space-lg); }",
                    "-.inline-form { display: flex; gap: var(--space-xs); align-items: center; }",
                    "-.form-select--inline { padding: 0.4rem 0.6rem; font-size: 0.85rem; border-radius: 4px; }",
                    " ",
                    "+\/* Action Cards Grid *\/",
                    "+.action-cards {",
                    "+    display: grid;",
                    "+    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));",
                    "+    gap: var(--space-md);",
                    "+    margin-bottom: var(--space-lg);",
                    "+}",
                    "+.action-card {",
                    "+    background: var(--color-bg);",
                    "+    border: 1px solid var(--color-border);",
                    "+    border-radius: 8px;",
                    "+    padding: var(--space-md);",
                    "+    display: flex;",
                    "+    flex-direction: column;",
                    "+}",
                    "+.action-card--primary {",
                    "+    border-color: var(--color-primary);",
                    "+    box-shadow: 0 0 0 1px var(--color-primary);",
                    "+}",
                    "+.action-card__header {",
                    "+    font-weight: 600;",
                    "+    font-size: 0.95rem;",
                    "+    margin-bottom: var(--space-xs);",
                    "+    color: var(--color-text);",
                    "+}",
                    "+.action-card__desc {",
                    "+    font-size: 0.8rem;",
                    "+    color: var(--color-text-muted);",
                    "+    margin-bottom: var(--space-sm);",
                    "+    line-height: 1.4;",
                    "+}",
                    "+.action-card__body {",
                    "+    display: flex;",
                    "+    flex-direction: column;",
                    "+    gap: var(--space-sm);",
                    "+    margin-top: auto;",
                    "+}",
                    "+.action-card__buttons {",
                    "+    display: flex;",
                    "+    gap: var(--space-xs);",
                    "+}",
                    "+.action-card__buttons .btn {",
                    "+    flex: 1;",
                    "+}",
                    "+.action-link {",
                    "+    color: var(--color-primary);",
                    "+    text-decoration: none;",
                    "+}",
                    "+.action-link:hover {",
                    "+    text-decoration: underline;",
                    "+}",
                    "+",
                    "+\/* Form Elements in Cards *\/",
                    "+.form-row {",
                    "+    display: flex;",
                    "+    flex-direction: column;",
                    "+    gap: 4px;",
                    "+}",
                    "+.form-label {",
                    "+    font-size: 0.75rem;",
                    "+    font-weight: 500;",
                    "+    color: var(--color-text-muted);",
                    "+    text-transform: uppercase;",
                    "+    letter-spacing: 0.3px;",
                    "+}",
                    "+.form-select {",
                    "+    padding: 0.5rem 0.75rem;",
                    "+    font-size: 0.85rem;",
                    "+    border: 1px solid var(--color-border);",
                    "+    border-radius: 4px;",
                    "+    background: var(--color-bg);",
                    "+    color: var(--color-text);",
                    "+    width: 100%;",
                    "+}",
                    "+.btn--full {",
                    "+    width: 100%;",
                    "+    justify-content: center;",
                    "+}",
                    "+",
                    " \/* Generate Button Animation *\/",
                    " .generate-btn .btn-text { display: inline; }",
                    " .generate-btn .btn-loading { display: none; gap: 3px; justify-content: center; align-items: center; }"
                ]
            }
        ],
        "userModified": false,
        "replaceAll": false
    }
}
← Vorheriger Zur Liste Nächster →