{"id":"cs-1786326565016-bos5kgi7","status":"done","createdAt":1786326565016,"finishedAt":1786326625521,"meta":{"projectName":"cursor-mobile-bridge","projectPath":"C:\\xampp\\htdocs\\cursor-mobile-bridge","messagePreview":"[Petición actual]\nEl diseño ahora es peor y no se ve todo el contenido.\n\nContinúa el hilo enlazado (IDE/SDK). Analiza el","suiteThreadId":"019fe810-2e7f-78b2-8071-bdf48cf16abf","suiteWorkspaceId":"c-xampp-htdocs-cursor-mobile-bridge","phaseId":null,"missionId":null},"events":[{"event":"status","data":{"text":"Modo IDE / sesión — completo (80 herramientas, uso selectivo)"},"at":1786326565022},{"event":"status","data":{"text":"Chat IDE enlazado por historial (contexto en el prompt)"},"at":1786326565022},{"event":"status","data":{"text":"Agente"},"at":1786326565425},{"event":"status","data":{"text":"Contexto del IDE cargado"},"at":1786326565426},{"event":"agent","data":{"agentId":"agent-df4a51e7-9e1d-4caa-b7db-6ad84f1d4206","projectPath":"C:\\xampp\\htdocs\\cursor-mobile-bridge"},"at":1786326565426},{"event":"changes","data":{"sessionId":"cs-1786326303007-xo93lh","pending":0},"at":1786326565426},{"event":"status","data":{"text":"Procesando…"},"at":1786326565516},{"event":"tool_activity","data":{"activity":{"id":"tool_a63de2ea-9d9a-47b1-bfdb-5bf59c533b3","name":"glob","status":"running","summary":"glob: ","detail":"","title":"glob: ","at":"2026-08-10T01:49:28.338Z"}},"at":1786326568338},{"event":"tool_activity","data":{"activity":{"id":"tool_e0b73114-84c4-47ee-90c8-c94a8eee571","name":"grep","status":"running","summary":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","detail":"","title":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","at":"2026-08-10T01:49:28.342Z"}},"at":1786326568342},{"event":"tool_activity","data":{"activity":{"id":"tool_a36f1c98-0f38-43d7-9c6c-924c20d85d8","name":"glob","status":"running","summary":"glob: ","detail":"","title":"glob: ","at":"2026-08-10T01:49:28.343Z"}},"at":1786326568343},{"event":"text","data":{"chunk":"Reviso el layout móvil actual y los cambios recientes del transcript para corregir qué tapa el contenido central.\n"},"at":1786326625521},{"event":"tool_activity","data":{"activity":{"id":"tool_a36f1c98-0f38-43d7-9c6c-924c20d85d8","name":"glob","status":"completed","summary":"glob: ","detail":"","title":"glob: ","at":"2026-08-10T01:49:28.553Z"}},"at":1786326568553},{"event":"tool_activity","data":{"activity":{"id":"tool_e0b73114-84c4-47ee-90c8-c94a8eee571","name":"grep","status":"completed","summary":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","detail":"","title":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","at":"2026-08-10T01:49:28.678Z"}},"at":1786326568678},{"event":"tool_activity","data":{"activity":{"id":"tool_a63de2ea-9d9a-47b1-bfdb-5bf59c533b3","name":"glob","status":"completed","summary":"glob: ","detail":"","title":"glob: ","at":"2026-08-10T01:49:28.699Z"}},"at":1786326568699},{"event":"tool_activity","data":{"activity":{"id":"tool_a90f33ba-ed48-46a6-b5c7-c93a193c27d","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:29.786Z"}},"at":1786326569786},{"event":"tool_activity","data":{"activity":{"id":"tool_bd651358-50d0-4b6f-8884-ae374c3b190","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:49:29.788Z"}},"at":1786326569788},{"event":"tool_activity","data":{"activity":{"id":"tool_41a90fe9-6f2a-4755-918a-9d03ce53cd1","name":"grep","status":"running","summary":"grep: mobile|data-mobile|mobilePanel|open-rail|close-rail|mobile-nav","detail":"","title":"grep: mobile|data-mobile|mobilePanel|open-rail|close-rail|mobile-nav","at":"2026-08-10T01:49:29.791Z"}},"at":1786326569791},{"event":"tool_activity","data":{"activity":{"id":"tool_a90f33ba-ed48-46a6-b5c7-c93a193c27d","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:29.975Z"}},"at":1786326569975},{"event":"tool_activity","data":{"activity":{"id":"tool_bd651358-50d0-4b6f-8884-ae374c3b190","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:49:29.977Z"}},"at":1786326569977},{"event":"tool_activity","data":{"activity":{"id":"tool_41a90fe9-6f2a-4755-918a-9d03ce53cd1","name":"grep","status":"completed","summary":"grep: mobile|data-mobile|mobilePanel|open-rail|close-rail|mobile-nav","detail":"","title":"grep: mobile|data-mobile|mobilePanel|open-rail|close-rail|mobile-nav","at":"2026-08-10T01:49:30.002Z"}},"at":1786326570002},{"event":"tool_activity","data":{"activity":{"id":"tool_1a0351e5-aba9-415a-8699-c020ea8dd75","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:32.270Z"}},"at":1786326572270},{"event":"tool_activity","data":{"activity":{"id":"tool_689eafd5-4891-4c6a-8d1d-47316916072","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\modules\\composition.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\modules\\composition.js","at":"2026-08-10T01:49:32.271Z"}},"at":1786326572271},{"event":"tool_activity","data":{"activity":{"id":"tool_a4995bb0-91a3-4323-adf2-620f2e4f005","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:49:32.274Z"}},"at":1786326572274},{"event":"tool_activity","data":{"activity":{"id":"tool_1a0351e5-aba9-415a-8699-c020ea8dd75","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:32.405Z"}},"at":1786326572405},{"event":"tool_activity","data":{"activity":{"id":"tool_689eafd5-4891-4c6a-8d1d-47316916072","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\modules\\composition.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\modules\\composition.js","at":"2026-08-10T01:49:32.409Z"}},"at":1786326572409},{"event":"tool_activity","data":{"activity":{"id":"tool_a4995bb0-91a3-4323-adf2-620f2e4f005","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:49:32.434Z"}},"at":1786326572434},{"event":"tool_activity","data":{"activity":{"id":"tool_e141f33a-dcf7-44d5-a43b-e1c1102f2dc","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:47.114Z"}},"at":1786326587114},{"event":"tool_activity","data":{"activity":{"id":"tool_f0d7cb2a-f836-4ccc-a75b-3a4d87c67c2","name":"grep","status":"running","summary":"grep: agent-toolbar|conversation-scroll","detail":"","title":"grep: agent-toolbar|conversation-scroll","at":"2026-08-10T01:49:47.116Z"}},"at":1786326587116},{"event":"tool_activity","data":{"activity":{"id":"tool_467a84a3-9a30-42a2-9c7b-a380811957c","name":"glob","status":"running","summary":"glob: ","detail":"","title":"glob: ","at":"2026-08-10T01:49:47.117Z"}},"at":1786326587117},{"event":"tool_activity","data":{"activity":{"id":"tool_e141f33a-dcf7-44d5-a43b-e1c1102f2dc","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:47.233Z"}},"at":1786326587233},{"event":"tool_activity","data":{"activity":{"id":"tool_f0d7cb2a-f836-4ccc-a75b-3a4d87c67c2","name":"grep","status":"completed","summary":"grep: agent-toolbar|conversation-scroll","detail":"","title":"grep: agent-toolbar|conversation-scroll","at":"2026-08-10T01:49:47.316Z"}},"at":1786326587316},{"event":"tool_activity","data":{"activity":{"id":"tool_467a84a3-9a30-42a2-9c7b-a380811957c","name":"glob","status":"completed","summary":"glob: ","detail":"","title":"glob: ","at":"2026-08-10T01:49:47.319Z"}},"at":1786326587319},{"event":"tool_activity","data":{"activity":{"id":"tool_7bd44815-e234-48fc-ae5b-b1694e380ef","name":"grep","status":"running","summary":"grep: mobile|responsive|móvil","detail":"","title":"grep: mobile|responsive|móvil","at":"2026-08-10T01:49:50.196Z"}},"at":1786326590196},{"event":"tool_activity","data":{"activity":{"id":"tool_22f4720c-bc5c-45bc-9098-54f35258034","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:50.198Z"}},"at":1786326590198},{"event":"tool_activity","data":{"activity":{"id":"tool_912017db-bf90-4651-8437-6a4a242019c","name":"grep","status":"running","summary":"grep: v=57|v50|CACHE","detail":"","title":"grep: v=57|v50|CACHE","at":"2026-08-10T01:49:50.199Z"}},"at":1786326590199},{"event":"tool_activity","data":{"activity":{"id":"tool_22f4720c-bc5c-45bc-9098-54f35258034","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:50.314Z"}},"at":1786326590314},{"event":"tool_activity","data":{"activity":{"id":"tool_912017db-bf90-4651-8437-6a4a242019c","name":"grep","status":"completed","summary":"grep: v=57|v50|CACHE","detail":"","title":"grep: v=57|v50|CACHE","at":"2026-08-10T01:49:50.375Z"}},"at":1786326590375},{"event":"tool_activity","data":{"activity":{"id":"tool_7bd44815-e234-48fc-ae5b-b1694e380ef","name":"grep","status":"completed","summary":"grep: mobile|responsive|móvil","detail":"","title":"grep: mobile|responsive|móvil","at":"2026-08-10T01:49:50.423Z"}},"at":1786326590423},{"event":"tool_activity","data":{"activity":{"id":"tool_326e92b8-423e-4227-848c-6426e1efdc1","name":"grep","status":"running","summary":"grep: mobile|760|responsive|390","detail":"","title":"grep: mobile|760|responsive|390","at":"2026-08-10T01:49:53.152Z"}},"at":1786326593152},{"event":"tool_activity","data":{"activity":{"id":"tool_4cd79f11-57e5-4152-91f9-bf42d4e8abe","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:53.155Z"}},"at":1786326593155},{"event":"tool_activity","data":{"activity":{"id":"tool_960eb2cc-707c-4e5c-868d-44069f46f36","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","at":"2026-08-10T01:49:53.156Z"}},"at":1786326593156},{"event":"tool_activity","data":{"activity":{"id":"tool_4cd79f11-57e5-4152-91f9-bf42d4e8abe","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:49:53.268Z"}},"at":1786326593268},{"event":"tool_activity","data":{"activity":{"id":"tool_960eb2cc-707c-4e5c-868d-44069f46f36","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","at":"2026-08-10T01:49:53.281Z"}},"at":1786326593281},{"event":"tool_activity","data":{"activity":{"id":"tool_326e92b8-423e-4227-848c-6426e1efdc1","name":"grep","status":"completed","summary":"grep: mobile|760|responsive|390","detail":"","title":"grep: mobile|760|responsive|390","at":"2026-08-10T01:49:53.348Z"}},"at":1786326593348},{"event":"tool_activity","data":{"activity":{"id":"tool_704f0f85-3a3a-4b31-b4e1-ac3f5bf889c","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-ui-contract.test.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-ui-contract.test.js","at":"2026-08-10T01:49:54.508Z"}},"at":1786326594508},{"event":"tool_activity","data":{"activity":{"id":"tool_c2f92e4c-7f4c-4799-85de-228b5a62073","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-frontend-composition.test.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-frontend-composition.test.js","at":"2026-08-10T01:49:54.508Z"}},"at":1786326594508},{"event":"tool_activity","data":{"activity":{"id":"tool_704f0f85-3a3a-4b31-b4e1-ac3f5bf889c","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-ui-contract.test.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-ui-contract.test.js","at":"2026-08-10T01:49:54.615Z"}},"at":1786326594615},{"event":"tool_activity","data":{"activity":{"id":"tool_c2f92e4c-7f4c-4799-85de-228b5a62073","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-frontend-composition.test.js","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\\codex-frontend-composition.test.js","at":"2026-08-10T01:49:54.638Z"}},"at":1786326594638},{"event":"tool_activity","data":{"activity":{"id":"tool_6d12e4de-c026-437c-8800-7ade4cb142c","name":"grep","status":"running","summary":"grep: panel-view|class=\\\"activity","detail":"","title":"grep: panel-view|class=\\\"activity","at":"2026-08-10T01:49:57.991Z"}},"at":1786326597991},{"event":"tool_activity","data":{"activity":{"id":"tool_d0deb2b2-fd4e-45f3-a526-13ba2d92388","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:49:58.120Z"}},"at":1786326598120},{"event":"tool_activity","data":{"activity":{"id":"tool_6d12e4de-c026-437c-8800-7ade4cb142c","name":"grep","status":"completed","summary":"grep: panel-view|class=\\\"activity","detail":"","title":"grep: panel-view|class=\\\"activity","at":"2026-08-10T01:49:58.182Z"}},"at":1786326598182},{"event":"tool_activity","data":{"activity":{"id":"tool_1638b470-e5e1-4395-9717-cd1cfc0052a","name":"grep","status":"completed","summary":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","detail":"","title":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","at":"2026-08-10T01:50:04.554Z"}},"at":1786326604554},{"event":"tool_activity","data":{"activity":{"id":"tool_169638ad-511e-4a17-bf4e-8b7aa6ad236","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:05.933Z"}},"at":1786326605933},{"event":"text","data":{"chunk":"Restaurando el scroll del timeline (como en escritorio) y compactando el compositor móvil para que deje de tapar el contenido.\n"},"at":1786326625521},{"event":"tool_activity","data":{"activity":{"id":"tool_169638ad-511e-4a17-bf4e-8b7aa6ad236","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:06.930Z"}},"at":1786326606930},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-3","path":"static\\codex-suite\\style.css","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n@@ -597,45 +597,36 @@\n     display: grid !important;\n     grid-template-rows: auto minmax(0, 1fr) auto;\n   }\n+  /* Scroll solo en timeline; bandejas visibles encima del compositor */\n   .conversation-scroll {\n     min-height: 0;\n-    overflow-x: hidden;\n-    overflow-y: auto;\n-    overscroll-behavior: contain;\n-    -webkit-overflow-scrolling: touch;\n-    scrollbar-gutter: stable;\n+    overflow: hidden;\n+    display: flex;\n+    flex-direction: column;\n   }\n   .conversation-scroll > .timeline {\n-    flex: none;\n-    min-height: min(38dvh, 340px);\n-    overflow: visible;\n+    flex: 1 1 0;\n+    min-height: 0;\n+    overflow: auto;\n+    overscroll-behavior: contain;\n+    -webkit-overflow-scrolling: touch;\n     padding: 14px 12px 18px;\n   }\n   .conversation-scroll > .turn-status-banner,\n-  .conversation-scroll > .turn-watchdog { margin-inline: 10px; }\n-  .conversation-scroll > .execution-status {\n-    position: sticky;\n-    top: 0;\n-    z-index: 2;\n-    background: var(--surface-subtle);\n-    border-bottom: 1px solid var(--line);\n-  }\n-  .conversation-scroll > .approval-tray:not(:empty) {\n-    position: sticky;\n-    bottom: 0;\n-    z-index: 3;\n-    padding: 0 10px 8px;\n-    background: linear-gradient(180deg, transparent, var(--surface) 28%);\n-  }\n+  .conversation-scroll > .turn-watchdog { margin-inline: 10px; flex: 0 0 auto; }\n+  .conversation-scroll > .execution-status { flex: 0 0 auto; }\n+  .conversation-scroll > .approval-tray:not(:empty) { flex: 0 0 auto; padding: 0 10px 6px; }\n   .conversation-scroll > .change-review-tray:not(:empty) {\n-    max-height: min(38dvh, 300px);\n+    flex: 0 1 auto;\n+    max-height: min(26dvh, 200px);\n     overflow: auto;\n-    margin: 0 8px 10px;\n+    margin: 0 8px 8px;\n     border: 1px solid var(--line);\n     border-radius: 12px;\n     background: var(--surface);\n     box-shadow: var(--shadow-sm);\n   }\n+  .empty-state { min-height: auto; padding-bottom: 4vh; }\n   .rail, .activity { position: static; }\n   .rail-tabs button { min-height: 48px; }\n   .conversation-header { padding-inline: 10px; }","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-hunk\">@@ -597,45 +597,36 @@</div><div class=\"diff-line diff-ctx\">     display: grid !important;</div><div class=\"diff-line diff-ctx\">     grid-template-rows: auto minmax(0, 1fr) auto;</div><div class=\"diff-line diff-ctx\">   }</div><div class=\"diff-line diff-add\">+  /* Scroll solo en timeline; bandejas visibles encima del compositor */</div><div class=\"diff-line diff-ctx\">   .conversation-scroll {</div><div class=\"diff-line diff-ctx\">     min-height: 0;</div><div class=\"diff-line diff-del\">-    overflow-x: hidden;</div><div class=\"diff-line diff-del\">-    overflow-y: auto;</div><div class=\"diff-line diff-del\">-    overscroll-behavior: contain;</div><div class=\"diff-line diff-del\">-    -webkit-overflow-scrolling: touch;</div><div class=\"diff-line diff-del\">-    scrollbar-gutter: stable;</div><div class=\"diff-line diff-add\">+    overflow: hidden;</div><div class=\"diff-line diff-add\">+    display: flex;</div><div class=\"diff-line diff-add\">+    flex-direction: column;</div><div class=\"diff-line diff-ctx\">   }</div><div class=\"diff-line diff-ctx\">   .conversation-scroll &gt; .timeline {</div><div class=\"diff-line diff-del\">-    flex: none;</div><div class=\"diff-line diff-del\">-    min-height: min(38dvh, 340px);</div><div class=\"diff-line diff-del\">-    overflow: visible;</div><div class=\"diff-line diff-add\">+    flex: 1 1 0;</div><div class=\"diff-line diff-add\">+    min-height: 0;</div><div class=\"diff-line diff-add\">+    overflow: auto;</div><div class=\"diff-line diff-add\">+    overscroll-behavior: contain;</div><div class=\"diff-line diff-add\">+    -webkit-overflow-scrolling: touch;</div><div class=\"diff-line diff-ctx\">     padding: 14px 12px 18px;</div><div class=\"diff-line diff-ctx\">   }</div><div class=\"diff-line diff-ctx\">   .conversation-scroll &gt; .turn-status-banner,</div><div class=\"diff-line diff-del\">-  .conversation-scroll &gt; .turn-watchdog { margin-inline: 10px; }</div><div class=\"diff-line diff-del\">-  .conversation-scroll &gt; .execution-status {</div><div class=\"diff-line diff-del\">-    position: sticky;</div><div class=\"diff-line diff-del\">-    top: 0;</div><div class=\"diff-line diff-del\">-    z-index: 2;</div><div class=\"diff-line diff-del\">-    background: var(--surface-subtle);</div><div class=\"diff-line diff-del\">-    border-bottom: 1px solid var(--line);</div><div class=\"diff-line diff-del\">-  }</div><div class=\"diff-line diff-del\">-  .conversation-scroll &gt; .approval-tray:not(:empty) {</div><div class=\"diff-line diff-del\">-    position: sticky;</div><div class=\"diff-line diff-del\">-    bottom: 0;</div><div class=\"diff-line diff-del\">-    z-index: 3;</div><div class=\"diff-line diff-del\">-    padding: 0 10px 8px;</div><div class=\"diff-line diff-del\">-    background: linear-gradient(180deg, transparent, var(--surface) 28%);</div><div class=\"diff-line diff-del\">-  }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .turn-watchdog { margin-inline: 10px; flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .execution-status { flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .approval-tray:not(:empty) { flex: 0 0 auto; padding: 0 10px 6px; }</div><div class=\"diff-line diff-ctx\">   .conversation-scroll &gt; .change-review-tray:not(:empty) {</div><div class=\"diff-line diff-del\">-    max-height: min(38dvh, 300px);</div><div class=\"diff-line diff-add\">+    flex: 0 1 auto;</div><div class=\"diff-line diff-add\">+    max-height: min(26dvh, 200px);</div><div class=\"diff-line diff-ctx\">     overflow: auto;</div><div class=\"diff-line diff-del\">-    margin: 0 8px 10px;</div><div class=\"diff-line diff-add\">+    margin: 0 8px 8px;</div><div class=\"diff-line diff-ctx\">     border: 1px solid var(--line);</div><div class=\"diff-line diff-ctx\">     border-radius: 12px;</div><div class=\"diff-line diff-ctx\">     background: var(--surface);</div><div class=\"diff-line diff-ctx\">     box-shadow: var(--shadow-sm);</div><div class=\"diff-line diff-ctx\">   }</div><div class=\"diff-line diff-add\">+  .empty-state { min-height: auto; padding-bottom: 4vh; }</div><div class=\"diff-line diff-ctx\">   .rail, .activity { position: static; }</div><div class=\"diff-line diff-ctx\">   .rail-tabs button { min-height: 48px; }</div><div class=\"diff-line diff-ctx\">   .conversation-header { padding-inline: 10px; }</div></div>","linesAdded":16,"linesRemoved":25,"status":"pending"},"pending":1},"at":1786326606931},{"event":"tool_activity","data":{"activity":{"id":"tool_fcb3fcc2-c8f4-454f-9068-f9f059d246b","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:07.435Z"}},"at":1786326607435},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-3","path":"static\\codex-suite\\style.css","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n@@ -643,9 +643,12 @@\n   .change-review-bulk { display: grid; grid-template-columns: 1fr 1fr; }\n   .change-review-bulk button, .change-file-actions button { min-height: 48px; }\n   .change-file-actions { display: grid; grid-template-columns: 1fr 1fr; }\n-  .composer-wrap { padding: 6px 8px max(7px, var(--safe-bottom)); }\n-  .agent-toolbar { padding-top: 5px; }\n-  .agent-toolbar > select, .smart-actions button { min-height: 44px; }\n+  .composer-wrap { padding: 6px 8px 4px; background: var(--surface); }\n+  .agent-toolbar { padding-top: 4px; gap: 4px; }\n+  .agent-toolbar > #participant-select,\n+  .agent-toolbar > #delegation-select,\n+  .agent-toolbar .smart-actions { display: none; }\n+  .agent-toolbar > select { min-height: 40px; max-width: none; flex: 1 1 auto; }\n   .composer textarea { max-height: 120px; padding-top: 9px; }\n   .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }\n   .attachment-command { width: 48px; height: 48px; }","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-hunk\">@@ -643,9 +643,12 @@</div><div class=\"diff-line diff-ctx\">   .change-review-bulk { display: grid; grid-template-columns: 1fr 1fr; }</div><div class=\"diff-line diff-ctx\">   .change-review-bulk button, .change-file-actions button { min-height: 48px; }</div><div class=\"diff-line diff-ctx\">   .change-file-actions { display: grid; grid-template-columns: 1fr 1fr; }</div><div class=\"diff-line diff-del\">-  .composer-wrap { padding: 6px 8px max(7px, var(--safe-bottom)); }</div><div class=\"diff-line diff-del\">-  .agent-toolbar { padding-top: 5px; }</div><div class=\"diff-line diff-del\">-  .agent-toolbar &gt; select, .smart-actions button { min-height: 44px; }</div><div class=\"diff-line diff-add\">+  .composer-wrap { padding: 6px 8px 4px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+  .agent-toolbar { padding-top: 4px; gap: 4px; }</div><div class=\"diff-line diff-add\">+  .agent-toolbar &gt; #participant-select,</div><div class=\"diff-line diff-add\">+  .agent-toolbar &gt; #delegation-select,</div><div class=\"diff-line diff-add\">+  .agent-toolbar .smart-actions { display: none; }</div><div class=\"diff-line diff-add\">+  .agent-toolbar &gt; select { min-height: 40px; max-width: none; flex: 1 1 auto; }</div><div class=\"diff-line diff-ctx\">   .composer textarea { max-height: 120px; padding-top: 9px; }</div><div class=\"diff-line diff-ctx\">   .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }</div><div class=\"diff-line diff-ctx\">   .attachment-command { width: 48px; height: 48px; }</div></div>","linesAdded":6,"linesRemoved":3,"status":"pending"},"pending":1},"at":1786326607437},{"event":"tool_activity","data":{"activity":{"id":"tool_e795dec3-863a-4e1f-a150-bc614787faa","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:08.021Z"}},"at":1786326608021},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-3","path":"static\\codex-suite\\style.css","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n@@ -627,7 +627,12 @@\n     box-shadow: var(--shadow-sm);\n   }\n   .empty-state { min-height: auto; padding-bottom: 4vh; }\n-  .rail, .activity { position: static; }\n+  .rail.panel-view.is-active,\n+  .activity.panel-view.is-active { display: flex !important; flex-direction: column; overflow: hidden; }\n+  .rail, .activity { position: static; min-height: 0; }\n+  .rail .rail-view.is-active,\n+  .activity .control-hub { flex: 0 0 auto; }\n+  .activity .control-view.is-active { flex: 1 1 0; min-height: 0; overflow-y: auto; }\n   .rail-tabs button { min-height: 48px; }\n   .conversation-header { padding-inline: 10px; }\n   .connection span:last-child { display: none; }","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-hunk\">@@ -627,7 +627,12 @@</div><div class=\"diff-line diff-ctx\">     box-shadow: var(--shadow-sm);</div><div class=\"diff-line diff-ctx\">   }</div><div class=\"diff-line diff-ctx\">   .empty-state { min-height: auto; padding-bottom: 4vh; }</div><div class=\"diff-line diff-del\">-  .rail, .activity { position: static; }</div><div class=\"diff-line diff-add\">+  .rail.panel-view.is-active,</div><div class=\"diff-line diff-add\">+  .activity.panel-view.is-active { display: flex !important; flex-direction: column; overflow: hidden; }</div><div class=\"diff-line diff-add\">+  .rail, .activity { position: static; min-height: 0; }</div><div class=\"diff-line diff-add\">+  .rail .rail-view.is-active,</div><div class=\"diff-line diff-add\">+  .activity .control-hub { flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+  .activity .control-view.is-active { flex: 1 1 0; min-height: 0; overflow-y: auto; }</div><div class=\"diff-line diff-ctx\">   .rail-tabs button { min-height: 48px; }</div><div class=\"diff-line diff-ctx\">   .conversation-header { padding-inline: 10px; }</div><div class=\"diff-line diff-ctx\">   .connection span:last-child { display: none; }</div></div>","linesAdded":6,"linesRemoved":1,"status":"pending"},"pending":1},"at":1786326608021},{"event":"tool_activity","data":{"activity":{"id":"tool_326bb586-dd63-4522-9397-c7cd14507c4","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"read: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:09.819Z"}},"at":1786326609819},{"event":"tool_activity","data":{"activity":{"id":"tool_92d245b8-0084-46cf-bc2b-219132f63c4","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:17.420Z"}},"at":1786326617420},{"event":"tool_activity","data":{"activity":{"id":"tool_c74ce1eb-90b1-4dd0-ad93-71b3fe01cec","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:50:17.422Z"}},"at":1786326617422},{"event":"tool_activity","data":{"activity":{"id":"tool_b4d9cf1a-8126-4612-ab55-6a65d779211","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","at":"2026-08-10T01:50:17.424Z"}},"at":1786326617424},{"event":"tool_activity","data":{"activity":{"id":"tool_92d245b8-0084-46cf-bc2b-219132f63c4","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:17.651Z"}},"at":1786326617651},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-3","path":"static\\codex-suite\\style.css","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n@@ -629,7 +629,8 @@\n   .empty-state { min-height: auto; padding-bottom: 4vh; }\n   .rail.panel-view.is-active,\n   .activity.panel-view.is-active { display: flex !important; flex-direction: column; overflow: hidden; }\n-  .rail, .activity { position: static; min-height: 0; }\n+  .rail.panel-view,\n+  .activity.panel-view { min-height: 0; }\n   .rail .rail-view.is-active,\n   .activity .control-hub { flex: 0 0 auto; }\n   .activity .control-view.is-active { flex: 1 1 0; min-height: 0; overflow-y: auto; }","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-hunk\">@@ -629,7 +629,8 @@</div><div class=\"diff-line diff-ctx\">   .empty-state { min-height: auto; padding-bottom: 4vh; }</div><div class=\"diff-line diff-ctx\">   .rail.panel-view.is-active,</div><div class=\"diff-line diff-ctx\">   .activity.panel-view.is-active { display: flex !important; flex-direction: column; overflow: hidden; }</div><div class=\"diff-line diff-del\">-  .rail, .activity { position: static; min-height: 0; }</div><div class=\"diff-line diff-add\">+  .rail.panel-view,</div><div class=\"diff-line diff-add\">+  .activity.panel-view { min-height: 0; }</div><div class=\"diff-line diff-ctx\">   .rail .rail-view.is-active,</div><div class=\"diff-line diff-ctx\">   .activity .control-hub { flex: 0 0 auto; }</div><div class=\"diff-line diff-ctx\">   .activity .control-view.is-active { flex: 1 1 0; min-height: 0; overflow-y: auto; }</div></div>","linesAdded":2,"linesRemoved":1,"status":"pending"},"pending":1},"at":1786326617651},{"event":"tool_activity","data":{"activity":{"id":"tool_c74ce1eb-90b1-4dd0-ad93-71b3fe01cec","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:50:17.746Z"}},"at":1786326617746},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-4","path":"static\\codex-suite\\index.html","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html\n@@ -12,7 +12,7 @@\n   <link rel=\"manifest\" href=\"/static/codex-suite/manifest.webmanifest\">\n   <link rel=\"icon\" href=\"/static/codex-suite/icon.svg\" type=\"image/svg+xml\">\n   <link rel=\"apple-touch-icon\" href=\"/static/codex-suite/icon.svg\">\n-  <link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=57\">\n+  <link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=58\">\n </head>\n <body>\n   <div class=\"app-shell\" id=\"app-shell\">","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html</div><div class=\"diff-line diff-hunk\">@@ -12,7 +12,7 @@</div><div class=\"diff-line diff-ctx\">   &lt;link rel=\"manifest\" href=\"/static/codex-suite/manifest.webmanifest\"&gt;</div><div class=\"diff-line diff-ctx\">   &lt;link rel=\"icon\" href=\"/static/codex-suite/icon.svg\" type=\"image/svg+xml\"&gt;</div><div class=\"diff-line diff-ctx\">   &lt;link rel=\"apple-touch-icon\" href=\"/static/codex-suite/icon.svg\"&gt;</div><div class=\"diff-line diff-del\">-  &lt;link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=57\"&gt;</div><div class=\"diff-line diff-add\">+  &lt;link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=58\"&gt;</div><div class=\"diff-line diff-ctx\"> &lt;/head&gt;</div><div class=\"diff-line diff-ctx\"> &lt;body&gt;</div><div class=\"diff-line diff-ctx\">   &lt;div class=\"app-shell\" id=\"app-shell\"&gt;</div></div>","linesAdded":1,"linesRemoved":1,"status":"pending"},"pending":2},"at":1786326617748},{"event":"tool_activity","data":{"activity":{"id":"tool_b4d9cf1a-8126-4612-ab55-6a65d779211","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js","at":"2026-08-10T01:50:17.751Z"}},"at":1786326617751},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-5","path":"static\\codex-suite\\service-worker.js","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js\n@@ -1,7 +1,7 @@\n-const CACHE = 'codex-suite-shell-v56';\n+const CACHE = 'codex-suite-shell-v58';\n const SHELL = [\n-  '/static/codex-suite/style.css?v=56',\n-  '/static/codex-suite/app.js?v=56',\n+  '/static/codex-suite/style.css?v=58',\n+  '/static/codex-suite/app.js?v=58',\n   '/static/codex-suite/modules/core.js',\n   '/static/codex-suite/modules/settings.js',\n   '/static/codex-suite/modules/workspace.js',","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\service-worker.js</div><div class=\"diff-line diff-hunk\">@@ -1,7 +1,7 @@</div><div class=\"diff-line diff-del\">-const CACHE = 'codex-suite-shell-v56';</div><div class=\"diff-line diff-add\">+const CACHE = 'codex-suite-shell-v58';</div><div class=\"diff-line diff-ctx\"> const SHELL = [</div><div class=\"diff-line diff-del\">-  '/static/codex-suite/style.css?v=56',</div><div class=\"diff-line diff-del\">-  '/static/codex-suite/app.js?v=56',</div><div class=\"diff-line diff-add\">+  '/static/codex-suite/style.css?v=58',</div><div class=\"diff-line diff-add\">+  '/static/codex-suite/app.js?v=58',</div><div class=\"diff-line diff-ctx\">   '/static/codex-suite/modules/core.js',</div><div class=\"diff-line diff-ctx\">   '/static/codex-suite/modules/settings.js',</div><div class=\"diff-line diff-ctx\">   '/static/codex-suite/modules/workspace.js',</div></div>","linesAdded":3,"linesRemoved":3,"status":"pending"},"pending":3},"at":1786326617751},{"event":"tool_activity","data":{"activity":{"id":"tool_1cf4d4a4-c5a2-462f-8f1b-7313e1411bc","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:17.752Z"}},"at":1786326617752},{"event":"tool_activity","data":{"activity":{"id":"tool_b51d0ac0-0814-4282-bdb0-870183a1d3e","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:50:17.753Z"}},"at":1786326617753},{"event":"tool_activity","data":{"activity":{"id":"tool_1cf4d4a4-c5a2-462f-8f1b-7313e1411bc","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css","at":"2026-08-10T01:50:17.976Z"}},"at":1786326617976},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-3","path":"static\\codex-suite\\style.css","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n@@ -637,10 +637,8 @@\n   .rail-tabs button { min-height: 48px; }\n   .conversation-header { padding-inline: 10px; }\n   .connection span:last-child { display: none; }\n-  .timeline { padding: 18px 12px; }\n   .timeline-item.user { margin-left: 24px; }\n   .approval-tray { padding: 0 14px; }\n-  .change-review-tray { max-height: 52dvh; padding: 0 10px; }\n   .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }\n   .turn-watchdog button { min-height: 48px; }\n   .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-hunk\">@@ -637,10 +637,8 @@</div><div class=\"diff-line diff-ctx\">   .rail-tabs button { min-height: 48px; }</div><div class=\"diff-line diff-ctx\">   .conversation-header { padding-inline: 10px; }</div><div class=\"diff-line diff-ctx\">   .connection span:last-child { display: none; }</div><div class=\"diff-line diff-del\">-  .timeline { padding: 18px 12px; }</div><div class=\"diff-line diff-ctx\">   .timeline-item.user { margin-left: 24px; }</div><div class=\"diff-line diff-ctx\">   .approval-tray { padding: 0 14px; }</div><div class=\"diff-line diff-del\">-  .change-review-tray { max-height: 52dvh; padding: 0 10px; }</div><div class=\"diff-line diff-ctx\">   .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }</div><div class=\"diff-line diff-ctx\">   .turn-watchdog button { min-height: 48px; }</div><div class=\"diff-line diff-ctx\">   .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }</div></div>","linesAdded":0,"linesRemoved":2,"status":"pending"},"pending":3},"at":1786326617979},{"event":"tool_activity","data":{"activity":{"id":"tool_b51d0ac0-0814-4282-bdb0-870183a1d3e","name":"edit","status":"completed","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html","at":"2026-08-10T01:50:18.070Z"}},"at":1786326618070},{"event":"file_change","data":{"sessionId":"cs-1786326303007-xo93lh","change":{"id":"ch-4","path":"static\\codex-suite\\index.html","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html\n@@ -699,6 +699,6 @@\n     <footer><button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\">Analizar para este proyecto</button><button type=\"button\" class=\"primary-command\" id=\"activate-integration\">Habilitar</button></footer>\n   </dialog>\n \n-  <script type=\"module\" src=\"/static/codex-suite/app.js?v=57\"></script>\n+  <script type=\"module\" src=\"/static/codex-suite/app.js?v=58\"></script>\n </body>\n </html>","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html</div><div class=\"diff-line diff-hunk\">@@ -699,6 +699,6 @@</div><div class=\"diff-line diff-ctx\">     &lt;footer&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\"&gt;Analizar para este proyecto&lt;/button&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"activate-integration\"&gt;Habilitar&lt;/button&gt;&lt;/footer&gt;</div><div class=\"diff-line diff-ctx\">   &lt;/dialog&gt;</div><div class=\"diff-line diff-ctx\"> </div><div class=\"diff-line diff-del\">-  &lt;script type=\"module\" src=\"/static/codex-suite/app.js?v=57\"&gt;&lt;/script&gt;</div><div class=\"diff-line diff-add\">+  &lt;script type=\"module\" src=\"/static/codex-suite/app.js?v=58\"&gt;&lt;/script&gt;</div><div class=\"diff-line diff-ctx\"> &lt;/body&gt;</div><div class=\"diff-line diff-ctx\"> &lt;/html&gt;</div></div>","linesAdded":1,"linesRemoved":1,"status":"pending"},"pending":3},"at":1786326618070},{"event":"tool_activity","data":{"activity":{"id":"tool_ed3affeb-2868-4160-9f31-e163750f4ab","name":"grep","status":"running","summary":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test","detail":"","title":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test","at":"2026-08-10T01:50:21.118Z"}},"at":1786326621118},{"event":"tool_activity","data":{"activity":{"id":"tool_24dac497-39fc-46ba-b6bf-4efeac91836","name":"grep","status":"running","summary":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","detail":"","title":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","at":"2026-08-10T01:50:21.119Z"}},"at":1786326621119},{"event":"tool_activity","data":{"activity":{"id":"tool_ed3affeb-2868-4160-9f31-e163750f4ab","name":"grep","status":"completed","summary":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test","detail":"","title":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge\\test","at":"2026-08-10T01:50:21.299Z"}},"at":1786326621299},{"event":"tool_activity","data":{"activity":{"id":"tool_24dac497-39fc-46ba-b6bf-4efeac91836","name":"grep","status":"completed","summary":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","detail":"","title":"grep: C:\\xampp\\htdocs\\cursor-mobile-bridge","at":"2026-08-10T01:50:21.345Z"}},"at":1786326621345},{"event":"tool_activity","data":{"activity":{"id":"tool_2951a062-7382-42b1-b63a-773815010c7","name":"shell","status":"running","summary":"shell","detail":"Get-ChildItem -Path \"C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\" -Filter \"*.js\" | ForEach-Object { (Get-Content $_.FullName -Raw) -replace 'v=56','v=58' -replace 'shell-v56','shell-v58' -replace 'PWA …","title":"shell","at":"2026-08-10T01:50:23.164Z"}},"at":1786326623164},{"event":"tool_activity","data":{"activity":{"id":"tool_0944f0da-2a20-4417-b025-3848ecbdb2f","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\docs\\CODEX-SUITE-MOBILE-RESPONSIVE.md","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\docs\\CODEX-SUITE-MOBILE-RESPONSIVE.md","at":"2026-08-10T01:50:23.177Z"}},"at":1786326623177},{"event":"tool_activity","data":{"activity":{"id":"tool_2951a062-7382-42b1-b63a-773815010c7","name":"shell","status":"completed","summary":"shell","detail":"Get-ChildItem -Path \"C:\\xampp\\htdocs\\cursor-mobile-bridge\\test\" -Filter \"*.js\" | ForEach-Object { (Get-Content $_.FullName -Raw) -replace 'v=56','v=58' -replace 'shell-v56','shell-v58' -replace 'PWA …","title":"shell","at":"2026-08-10T01:50:24.215Z"}},"at":1786326624215},{"event":"tool_activity","data":{"activity":{"id":"tool_0944f0da-2a20-4417-b025-3848ecbdb2f","name":"edit","status":"running","summary":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\docs\\CODEX-SUITE-MOBILE-RESPONSIVE.md","detail":"","title":"edit: C:\\xampp\\htdocs\\cursor-mobile-bridge\\docs\\CODEX-SUITE-MOBILE-RESPONSIVE.md","at":"2026-08-10T01:50:25.472Z"}},"at":1786326625472},{"event":"status","data":{"text":"Límite de 80 herramientas alcanzado — finalizando con lo obtenido."},"at":1786326625472},{"event":"status","data":{"text":"Turno añadido al transcript del IDE (reabrir chat / reload ventana)"},"at":1786326625486},{"event":"done","data":{"ok":true,"bridgeSessionId":"bs-1786326625484-7oj3uw","agentId":"agent-df4a51e7-9e1d-4caa-b7db-6ad84f1d4206","runId":"run-bba7b74a-2592-4ad6-a69a-b87db9a1440c","status":"cancelled","result":"","changeSessionId":"cs-1786326303007-xo93lh","pendingChanges":5,"changes":[{"id":"ch-1","status":"pending","callId":"reconcile-static\\codex-suite\\index.html","path":"static\\codex-suite\\index.html","type":"edit","diffString":"--- a/static\\codex-suite\\index.html\n+++ b/static\\codex-suite\\index.html\n@@ -12,692 +12,694 @@\n   <link rel=\"manifest\" href=\"/static/codex-suite/manifest.webmanifest\">\n   <link rel=\"icon\" href=\"/static/codex-suite/icon.svg\" type=\"image/svg+xml\">\n   <link rel=\"apple-touch-icon\" href=\"/static/codex-suite/icon.svg\">\n-  <link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=56\">\n-</head>\n-<body>\n-  <div class=\"app-shell\" id=\"app-shell\">\n-    <aside class=\"rail panel-view\" data-view=\"threads\" aria-label=\"Conversaciones\">\n-      <header class=\"brand-bar\">\n-        <div class=\"brand-mark\">C</div>\n-        <div><strong id=\"brand-name\">Codex Suite</strong><span>Cursor Mobile Bridge</span></div>\n-        <a class=\"icon-button\" href=\"/apps\" title=\"Abrir Apps\" aria-label=\"Abrir Apps\">⌘</a>\n-        <button class=\"icon-button\" id=\"open-manual\" type=\"button\" title=\"Manual\" aria-label=\"Abrir manual\">?</button>\n-        <button class=\"icon-button mobile-only\" id=\"close-rail\" type=\"button\" title=\"Cerrar conversaciones\" aria-label=\"Cerrar conversaciones\">×</button>\n-      </header>\n-\n-      <div class=\"workspace-block\">\n-        <label for=\"workspace-select\">Espacio de trabajo</label>\n-        <select id=\"workspace-select\"></select>\n-        <div class=\"workspace-actions\">\n-          <button class=\"secondary-command\" id=\"create-workspace\" type=\"button\">Nueva área</button>\n-          <button class=\"secondary-command\" id=\"attach-workspace\" type=\"button\">Vincular carpeta</button>\n-        </div>\n-        <div class=\"workspace-ide-chips\" id=\"workspace-ide-chips\" hidden></div>\n-        <label for=\"permission-select\">Permisos de herramientas</label>\n-        <select id=\"permission-select\">\n-          <option value=\"workspaceWrite\">Escritura en el proyecto · con aprobaciones</option>\n-          <option value=\"readOnly\">Solo lectura</option>\n-        </select>\n-        <button class=\"primary-command\" id=\"new-thread\" type=\"button\">+ Nueva conversación</button>\n-      </div>\n-\n-      <nav class=\"rail-tabs\" aria-label=\"Navegador del proyecto\">\n-        <button type=\"button\" class=\"is-active\" data-rail-tab=\"threads\">Conversaciones</button>\n-        <button type=\"button\" data-rail-tab=\"explorer\">Explorador</button>\n-      </nav>\n-      <section class=\"rail-view is-active\" data-rail-view=\"threads\">\n-        <div class=\"list-heading\"><span>Conversaciones</span><button class=\"icon-button\" id=\"refresh-threads\" type=\"button\" title=\"Actualizar\" aria-label=\"Actualizar\">↻</button></div>\n-        <div class=\"thread-list\" id=\"thread-list\" role=\"list\"></div>\n-      </section>\n-      <section class=\"rail-view\" data-rail-view=\"explorer\">\n-        <div class=\"explorer-toolbar\">\n-          <select id=\"workspace-area-select\" aria-label=\"Área de trabajo\"><option value=\"\">Proyecto completo</option></select>\n-          <button class=\"icon-button\" id=\"create-workspace-folder\" type=\"button\" title=\"Nueva carpeta\" aria-label=\"Nueva carpeta\">＋</button>\n-          <button class=\"icon-button\" id=\"refresh-explorer\" type=\"button\" title=\"Actualizar explorador\" aria-label=\"Actualizar explorador\">↻</button>\n-        </div>\n-        <p class=\"explorer-hint\">Arrastra archivos o carpetas al chat para añadir contexto.</p>\n-        <div class=\"explorer-tree\" id=\"explorer-tree\" role=\"tree\"></div>\n-      </section>\n-    </aside>\n-\n-    <main class=\"conversation panel-view is-active\" data-view=\"chat\">\n-      <header class=\"conversation-header\">\n-        <button class=\"icon-button mobile-only\" id=\"open-rail\" type=\"button\" title=\"Abrir conversaciones\" aria-label=\"Abrir conversaciones\">☰</button>\n-        <div class=\"thread-title\"><strong id=\"thread-title\">Nueva conversación</strong><span id=\"thread-meta\">Selecciona un proyecto</span></div>\n-        <div class=\"connection\"><span class=\"status-dot\" id=\"status-dot\"></span><span id=\"status-text\">Sin conectar</span></div>\n-        <button class=\"secondary-command desktop-only\" id=\"toggle-activity\" type=\"button\">Control</button>\n-      </header>\n-\n-      <section class=\"timeline\" id=\"timeline\" aria-live=\"polite\">\n-        <div class=\"empty-state\" id=\"empty-state\">\n-          <div class=\"empty-mark\">C</div>\n-          <h1 id=\"empty-title\">¿En qué trabajamos?</h1>\n-          <p id=\"empty-copy\">Elige un proyecto y abre una conversación.</p>\n-        </div>\n-      </section>\n-\n-      <section class=\"turn-status-banner is-hidden\" id=\"turn-status-banner\" aria-live=\"polite\">\n-        <div class=\"turn-status-main\">\n-          <strong id=\"turn-status-title\">Sin turno activo</strong>\n-          <span id=\"turn-status-detail\">Abre o envía un mensaje para ver el progreso del agente.</span>\n-        </div>\n-        <button class=\"secondary-command\" id=\"turn-status-open-activity\" type=\"button\">Ver actividad</button>\n-      </section>\n-      <section class=\"turn-watchdog is-hidden\" id=\"turn-watchdog\" aria-live=\"polite\">\n-        <div><strong id=\"turn-watchdog-title\">Turno en curso</strong><span id=\"turn-watchdog-detail\"></span></div>\n-        <button class=\"secondary-command is-hidden\" id=\"recover-turn\" type=\"button\">Recuperar turno</button>\n-      </section>\n-      <section class=\"execution-status\" id=\"execution-status\" aria-live=\"polite\">\n-        <span class=\"execution-status-label\">Ejecución</span><span id=\"execution-status-text\">Predeterminada · esperando conversación</span>\n-      </section>\n-      <section class=\"approval-tray\" id=\"approval-tray\" aria-live=\"assertive\"></section>\n-      <section class=\"change-review-tray\" id=\"change-review-tray\" aria-live=\"polite\"></section>\n-\n-      <footer class=\"composer-wrap\">\n-        <div class=\"context-chips is-hidden\" id=\"context-chips\" aria-live=\"polite\"></div>\n-        <form class=\"composer\" id=\"composer-form\">\n-          <div class=\"agent-toolbar\" aria-label=\"Modo de trabajo\">\n-            <select id=\"mode-select\" title=\"Modo de trabajo\" aria-label=\"Modo de trabajo\">\n-              <option value=\"agent\">Agente</option>\n-              <option value=\"ask\">Consultar</option>\n-              <option value=\"plan\">Planificar</option>\n-              <option value=\"autopilot\">Piloto automático</option>\n-            </select>\n-            <select id=\"participant-select\" title=\"Especialista\" aria-label=\"Especialista\">\n-              <option value=\"workspace\">@workspace</option>\n-              <option value=\"tester\">@tester</option>\n-              <option value=\"reviewer\">@reviewer</option>\n-              <option value=\"terminal\">@terminal</option>\n-              <option value=\"browser\">@browser</option>\n-            </select>\n-            <select id=\"delegation-select\" title=\"Subagentes\" aria-label=\"Subagentes\">\n-              <option value=\"single\">Un agente</option>\n-              <option value=\"explicit\">Subagentes si los pido</option>\n-              <option value=\"proactive\">Subagentes proactivos</option>\n-            </select>\n-            <div class=\"smart-actions\" aria-label=\"Acciones inteligentes\">\n-              <button type=\"button\" data-smart-action=\"explain\">Explicar</button>\n-              <button type=\"button\" data-smart-action=\"fix\">Corregir</button>\n-              <button type=\"button\" data-smart-action=\"tests\">Crear pruebas</button>\n-              <button type=\"button\" data-smart-action=\"review\">Revisar</button>\n-              <button type=\"button\" data-smart-action=\"commit\">Mensaje de commit</button>\n-            </div>\n-          </div>\n-          <textarea id=\"message-input\" rows=\"1\" maxlength=\"100000\" placeholder=\"Pide un cambio, una revisión o una explicación\" disabled></textarea>\n-          <div class=\"composer-tools\">\n-            <div class=\"attachment-controls\">\n-              <button class=\"attachment-command\" id=\"attach-file\" type=\"button\" title=\"Adjuntar archivo o imagen\" aria-label=\"Adjuntar archivo o imagen\">＋</button>\n-              <div class=\"attachment-menu is-hidden\" id=\"attachment-menu\">\n-                <button type=\"button\" id=\"upload-file\"><strong>Subir archivo o imagen</strong><span>Desde este dispositivo · máximo 5 MB</span></button>\n-                <button type=\"button\" id=\"attach-workspace\"><strong>Contexto del proyecto</strong><span>Archivo o carpeta que ya existe</span></button>\n-                <button type=\"button\" id=\"context-codebase\"><strong>#codebase</strong><span>Buscar referencias relevantes en todo el proyecto</span></button>\n-                <button type=\"button\" id=\"context-terminal\"><strong>#terminal</strong><span>Usar errores y salidas recientes de la conversación</span></button>\n-              </div>\n-              <input id=\"attachment-input\" type=\"file\" multiple hidden>\n-            </div>\n-            <div class=\"run-options\">\n-              <select id=\"engine-select\" title=\"Motor\" aria-label=\"Motor de agente\">\n-                <option value=\"cursor\" selected>Cursor SDK</option>\n-                <option value=\"codex\">Codex App Server</option>\n-                <option value=\"providers8082\">Providers8082</option>\n-              </select>\n-              <select id=\"model-select\" title=\"Modelo\" aria-label=\"Modelo\">\n-                <option value=\"\">Automático · predeterminado</option>\n-              </select>\n-              <button class=\"run-options-toggle\" id=\"toggle-run-options\" type=\"button\" aria-expanded=\"false\" aria-controls=\"advanced-run-options\">Opciones</button>\n-              <div class=\"advanced-run-options\" id=\"advanced-run-options\">\n-                <select id=\"effort-select\" title=\"Esfuerzo\" aria-label=\"Esfuerzo\">\n-                  <option value=\"\">Esfuerzo</option>\n-                </select>\n-                <select id=\"service-tier-select\" title=\"Velocidad\" aria-label=\"Velocidad\">\n-                  <option value=\"\">Tier</option>\n-                </select>\n-                <select id=\"personality-select\" title=\"Personalidad\" aria-label=\"Personalidad\">\n-                  <option value=\"\">Personalidad</option>\n-                  <option value=\"pragmatic\">Pragmática</option>\n-                  <option value=\"friendly\">Amable</option>\n-                  <option value=\"none\">Neutra</option>\n-                </select>\n-                <div id=\"cursor-run-options\" class=\"cursor-run-options is-hidden\">\n-                  <select id=\"cursor-source-select\" title=\"Chat Cursor a continuar\" aria-label=\"Chat Cursor a continuar\">\n-                    <option value=\"\">Cursor · chat nuevo Suite (crea JSONL IDE)</option>\n-                  </select>\n-                  <p class=\"cursor-history-note\" id=\"cursor-history-note\">Historial local del proyecto. Tras Suite: Recargar ventana / reabrir chat en el IDE.</p>\n-                  <label class=\"toggle-row cursor-serena-toggle\"><input id=\"cursor-use-serena\" type=\"checkbox\"><span>Serena MCP</span></label>\n-                </div>\n-                <div id=\"providers8082-run-options\" class=\"providers8082-run-options is-hidden\">\n-                  <p class=\"cursor-history-note\" id=\"providers8082-run-note\">Doble motor: FCC razona → Cursor ejecuta. Requiere FCC :8082 y CURSOR_API_KEY.</p>\n-                  <button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-panel\">Abrir Providers8082</button>\n-                </div>\n-              </div>\n-            </div>\n-            <button class=\"danger-command is-hidden\" id=\"cancel-turn\" type=\"button\">Detener</button>\n-            <button class=\"send-command\" id=\"send-message\" type=\"submit\" disabled aria-label=\"Enviar\">↑</button>\n-          </div>\n-        </form>\n-      </footer>\n-    </main>\n-\n-    <aside class=\"activity panel-view\" data-view=\"activity\" id=\"activity-panel\" aria-label=\"Actividad\">\n-      <header class=\"activity-header\"><div class=\"activity-title\"><strong>Control Codex</strong><span id=\"control-lead\">Elige un área para operar sin perder el hilo del chat.</span></div><button class=\"icon-button\" id=\"close-activity\" type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\">×</button></header>\n-      <nav class=\"control-hub\" aria-label=\"Panel de control\">\n-        <div class=\"control-groups\" role=\"tablist\" aria-label=\"Áreas de control\">\n-          <button type=\"button\" class=\"is-active\" data-control-group=\"operate\">Operar</button>\n-          <button type=\"button\" data-control-group=\"project\">Proyecto</button>\n-          <button type=\"button\" data-control-group=\"quality\">Calidad</button>\n-          <button type=\"button\" data-control-group=\"system\">Sistema</button>\n-        </div>\n-        <div class=\"control-tabs\" role=\"tablist\" aria-label=\"Secciones\">\n-          <button type=\"button\" class=\"is-active\" data-control-tab=\"actions\" data-control-group-tab=\"operate\">Acciones</button>\n-          <button type=\"button\" data-control-tab=\"commands\" data-control-group-tab=\"operate\">Comandos /</button>\n-          <button type=\"button\" data-control-tab=\"events\" data-control-group-tab=\"operate\">Eventos</button>\n-          <button type=\"button\" data-control-tab=\"resources\" data-control-group-tab=\"project\" hidden>Recursos</button>\n-          <button type=\"button\" data-control-tab=\"workspace\" data-control-group-tab=\"project\" hidden>Proyecto</button>\n-          <button type=\"button\" data-control-tab=\"marketplace\" data-control-group-tab=\"project\" hidden>Catálogo</button>\n-          <button type=\"button\" data-control-tab=\"complements\" data-control-group-tab=\"project\" hidden>Complementos</button>\n-          <button type=\"button\" data-control-tab=\"models\" data-control-group-tab=\"quality\" hidden>Modelos</button>\n-          <button type=\"button\" data-control-tab=\"missions\" data-control-group-tab=\"quality\" hidden>Misiones</button>\n-          <button type=\"button\" data-control-tab=\"contracts\" data-control-group-tab=\"quality\" hidden>Contratos</button>\n-          <button type=\"button\" data-control-tab=\"staging\" data-control-group-tab=\"quality\" hidden>Staging</button>\n-          <button type=\"button\" data-control-tab=\"twin\" data-control-group-tab=\"quality\" hidden>Gemelo</button>\n-          <button type=\"button\" data-control-tab=\"security\" data-control-group-tab=\"system\" hidden>Seguridad</button>\n-          <button type=\"button\" data-control-tab=\"lab\" data-control-group-tab=\"system\" hidden>Lab IA</button>\n-          <button type=\"button\" data-control-tab=\"freemodel\" data-control-group-tab=\"system\" hidden>Freemodel</button>\n-          <button type=\"button\" data-control-tab=\"providers8082\" data-control-group-tab=\"system\" hidden>Providers8082</button>\n-          <button type=\"button\" data-control-tab=\"excellence\" data-control-group-tab=\"quality\" hidden>Excelencia</button>\n-          <button type=\"button\" data-control-tab=\"composer-private\" data-control-group-tab=\"system\" hidden id=\"control-tab-composer-private\">Privado / Composer</button>\n-          <button type=\"button\" data-control-tab=\"neighbors\" data-control-group-tab=\"system\" hidden>Vecinas</button>\n-          <button type=\"button\" data-control-tab=\"settings\" data-control-group-tab=\"system\" hidden>Ajustes</button>\n-          <button type=\"button\" data-control-tab=\"diagnostics\" data-control-group-tab=\"system\" hidden>Pruebas</button>\n-        </div>\n-      </nav>\n-\n-      <section class=\"control-view is-active\" data-control-view=\"actions\">\n-        <div class=\"action-grid\" id=\"action-grid\">\n-          <button type=\"button\" data-action=\"fork\"><strong>Bifurcar</strong><span>Copia independiente de la conversación</span></button>\n-          <button type=\"button\" data-action=\"compact\"><strong>Compactar</strong><span>Reduce el contexto conservando lo importante</span></button>\n-          <button type=\"button\" data-action=\"rename\"><strong>Renombrar</strong><span>Cambia el nombre de la conversación</span></button>\n-          <button type=\"button\" data-action=\"goal\"><strong>Objetivo</strong><span>Define una meta persistente</span></button>\n-          <button type=\"button\" data-action=\"review\"><strong>Revisar</strong><span>Revisión nativa del servidor de Codex</span></button>\n-          <button type=\"button\" data-action=\"rollback\"><strong>Volver a un punto</strong><span>Restaura historial y archivos de un checkpoint</span></button>\n-          <button type=\"button\" data-action=\"mention\"><strong>Adjuntar ruta</strong><span>Archivo o carpeta del proyecto</span></button>\n-          <button type=\"button\" data-action=\"archive\"><strong>Archivar</strong><span>Oculta la conversación sin borrarla</span></button>\n-          <button type=\"button\" class=\"danger-action\" data-action=\"delete\"><strong>Eliminar</strong><span>Borrado permanente con confirmación</span></button>\n-        </div>\n-        <div class=\"session-actions\">\n-          <a href=\"/apps\" class=\"secondary-command\">Abrir las 47 apps</a>\n-          <a href=\"/codex-suite/manual\" class=\"secondary-command\">Manual completo</a>\n-          <button type=\"button\" class=\"secondary-command\" id=\"logout-session\">Cerrar sesión</button>\n-        </div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"resources\">\n-        <div class=\"settings-intro\"><strong>Capacidades del workspace</strong><span>Modelos, habilidades, MCP y plugins anunciados por App Server para el proyecto activo. Aquí se analizan e instalan sin salir del chat.</span></div>\n-        <div class=\"inline-actions\"><button type=\"button\" class=\"secondary-command\" id=\"refresh-resources\">Actualizar recursos</button></div>\n-        <div class=\"resource-summary\" id=\"resource-summary\">Selecciona un proyecto para cargar capacidades.</div>\n-        <div class=\"resource-groups\" id=\"resource-groups\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"models\">\n-        <div class=\"settings-intro\"><strong>Router de modelos</strong><span>Alternativas locales y externas de FCC, filtradas para ingeniería. Ninguna clave se envía al navegador.</span></div>\n-        <div class=\"inline-actions\"><button type=\"button\" class=\"secondary-command\" id=\"refresh-model-router\">Comprobar catálogos</button><button type=\"button\" class=\"secondary-command\" id=\"run-model-evals\">Probar proveedores</button><button type=\"button\" class=\"primary-command\" id=\"run-workspace-model-evals\">Evaluar selección en este proyecto</button></div>\n-        <div class=\"evidence-summary\" id=\"model-router-summary\">Comprobación pendiente.</div>\n-        <div class=\"model-auto-card\">\n-          <div><strong>Modo Automático por proyecto</strong><span id=\"model-auto-status\">Desactivado. Requiere evals de calidad aprobados.</span></div>\n-          <button type=\"button\" class=\"secondary-command\" id=\"toggle-auto-model\">Activar Automático</button>\n-        </div>\n-        <form class=\"model-budget-card\" id=\"model-budget-form\">\n-          <div><strong>Presupuesto de evaluaciones del proyecto</strong><span id=\"model-budget-status\">24 solicitudes diarias · 4 modelos por ejecución</span></div>\n-          <label>Solicitudes diarias<input id=\"model-budget-daily\" type=\"number\" min=\"4\" max=\"500\" value=\"24\"></label>\n-          <label>Modelos por ejecución<input id=\"model-budget-per-run\" type=\"number\" min=\"1\" max=\"8\" value=\"4\"></label>\n-          <label class=\"toggle-row\"><input id=\"model-budget-unknown\" type=\"checkbox\" checked><span><strong>Permitir coste desconocido</strong><small>Requiere confirmación igualmente.</small></span></label>\n-          <button type=\"submit\" class=\"secondary-command\">Guardar presupuesto</button>\n-        </form>\n-        <div class=\"model-tool-cert-card\">\n-          <div><strong>Certificación real de herramientas</strong><span>Prueba efímera, de solo lectura y con confirmación. No guarda prompts ni resultados.</span></div>\n-          <label>Modelo evaluado<select id=\"model-tool-cert-model\"><option value=\"\">Sin modelos evaluados</option></select></label>\n-          <label>Herramienta de consulta<select id=\"model-tool-cert-tool\"><option value=\"\">Sin herramientas seguras anunciadas</option></select></label>\n-          <button type=\"button\" class=\"secondary-command\" id=\"run-tool-certification\">Certificar llamada real</button>\n-          <p class=\"settings-note\" id=\"model-tool-cert-status\"></p>\n-        </div>\n-        <div class=\"model-ranking\" id=\"model-workspace-ranking\"></div>\n-        <div class=\"provider-status-list\" id=\"provider-status-list\"></div>\n-        <div class=\"model-router-filters\">\n-          <label>Vista<select id=\"model-cost-filter\"><option value=\"verified\">Inferencia verificada</option><option value=\"comparable\">Alternativas completas a GPT-Codex</option><option value=\"free\">Gratis y local</option><option value=\"all\">Todos los candidatos</option></select></label>\n-          <label>Buscar<input id=\"model-router-search\" type=\"search\" placeholder=\"Codex, Qwen, DeepSeek…\"></label>\n-        </div>\n-        <div class=\"model-router-list\" id=\"model-router-list\"></div>\n-        <p class=\"settings-note\">Marca hasta 8 modelos con inferencia verificada y evalúalos. El ranking combina calidad, coste declarado, latencia, herramientas declaradas y tasa de fallos; no almacena prompts ni respuestas. Cambiar el proveedor afecta a conversaciones nuevas.</p>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"workspace\">\n-        <div class=\"settings-intro\"><strong>Memoria y áreas del proyecto</strong><span>Persisten por espacio de trabajo y se incorporan al siguiente turno.</span></div>\n-        <div class=\"workspace-profile-form\">\n-          <label>Memoria general<textarea id=\"project-memory\" class=\"settings-editor profile-editor\" maxlength=\"100000\" placeholder=\"Decisiones, arquitectura y preferencias duraderas…\"></textarea></label>\n-          <div class=\"inline-actions\">\n-            <button type=\"button\" class=\"secondary-command\" id=\"new-workspace-area\">Nueva área</button>\n-            <button type=\"button\" class=\"danger-command\" id=\"delete-workspace-area\">Eliminar área</button>\n-          </div>\n-          <label>Área<select id=\"workspace-area-editor\"><option value=\"\">Proyecto completo</option></select></label>\n-          <label>Nombre<input id=\"workspace-area-name\" maxlength=\"80\" placeholder=\"Interfaz, API, Producción…\"></label>\n-          <label>Carpetas, una por línea<textarea id=\"workspace-area-folders\" rows=\"4\" placeholder=\"src&#10;public&#10;templates\"></textarea></label>\n-          <label>Instrucciones del área<textarea id=\"workspace-area-instructions\" rows=\"5\" maxlength=\"40000\"></textarea></label>\n-          <label>Memoria del área<textarea id=\"workspace-area-memory\" rows=\"6\" maxlength=\"80000\"></textarea></label>\n-          <button type=\"button\" class=\"primary-command\" id=\"save-workspace-profile\">Guardar memoria y áreas</button>\n-          <p class=\"settings-note\" id=\"workspace-profile-status\"></p>\n-        </div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"marketplace\">\n-        <div class=\"settings-intro\"><strong>Catálogo de MCP y plugins</strong><span>Primero revisa lo ya disponible en Codex. Después descubre MCP públicos, analiza el encaje con este proyecto e instala solo con confirmación.</span></div>\n-        <section class=\"marketplace-panel\">\n-          <header class=\"marketplace-panel-head\"><strong>Disponibles en Codex</strong><span>MCP y plugins anunciados por App Server · análisis aislado por proyecto</span></header>\n-          <div class=\"resource-list\" id=\"installed-integrations-list\"></div>\n-        </section>\n-        <section class=\"marketplace-panel\">\n-          <header class=\"marketplace-panel-head\"><strong>Descubrir MCP públicos</strong><span>Catálogo mcp.so · requiere endpoint HTTPS real antes de instalar</span></header>\n-          <div class=\"marketplace-search\">\n-            <input id=\"mcp-market-search\" type=\"search\" placeholder=\"Buscar navegador, GitHub, base de datos…\" enterkeyhint=\"search\">\n-            <button type=\"button\" class=\"secondary-command\" id=\"load-mcp-market\">Buscar MCP</button>\n-          </div>\n-          <div class=\"resource-list\" id=\"mcp-market-list\"></div>\n-        </section>\n-        <details class=\"marketplace-advanced\">\n-          <summary>Instalación avanzada</summary>\n-          <fieldset class=\"marketplace-install\">\n-            <legend>MCP remoto HTTPS</legend>\n-            <label>Nombre<input id=\"mcp-install-name\" maxlength=\"64\" placeholder=\"context7\"></label>\n-            <label>Endpoint HTTPS<input id=\"mcp-install-url\" type=\"url\" placeholder=\"https://servidor.example/mcp\"></label>\n-            <button type=\"button\" class=\"primary-command\" id=\"install-remote-mcp\">Instalar en Codex</button>\n-          </fieldset>\n-          <fieldset class=\"marketplace-install\">\n-            <legend>Añadir catálogo de plugins</legend>\n-            <label>Repositorio Git<input id=\"plugin-market-source\" placeholder=\"owner/repo o https://github.com/owner/repo.git\"></label>\n-            <button type=\"button\" class=\"secondary-command\" id=\"add-plugin-market\">Añadir catálogo</button>\n-          </fieldset>\n-        </details>\n-        <p class=\"settings-note\" id=\"marketplace-status\"></p>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"complements\">\n-        <div class=\"settings-intro\"><strong>Complementos inteligentes del proyecto</strong><span>Capacidades nativas de Codex Suite, analizadas y habilitadas únicamente para el espacio de trabajo activo. No instalan software en editores del PC.</span></div>\n-        <div class=\"resource-summary\" id=\"stack-summary\">Analizando proyecto…</div>\n-        <label class=\"command-search\"><span>Buscar en el catálogo</span><input id=\"complement-search\" type=\"search\" placeholder=\"PHP, SFTP, SQL, HTML…\"></label>\n-        <div class=\"resource-list\" id=\"complement-list\"></div>\n-        <form class=\"deployment-form\" id=\"deployment-form\">\n-          <h3>Despliegue de archivos aceptados</h3>\n-          <div class=\"settings-grid\">\n-            <label>Nombre<input id=\"deploy-name\" maxlength=\"100\" value=\"Producción\"></label>\n-            <label>Protocolo<select id=\"deploy-protocol\"><option value=\"sftp\">SFTP</option><option value=\"ftps\">FTPS</option><option value=\"ftp\">FTP sin cifrar</option></select></label>\n-            <label>Host<input id=\"deploy-host\" maxlength=\"253\"></label>\n-            <label>Puerto<input id=\"deploy-port\" type=\"number\" min=\"1\" max=\"65535\" value=\"22\"></label>\n-            <label>Usuario<input id=\"deploy-user\" autocomplete=\"username\" maxlength=\"160\"></label>\n-            <label>Contraseña<input id=\"deploy-password\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Vacío = conservar\"></label>\n-          </div>\n-          <label>Ruta remota<input id=\"deploy-remote-path\" value=\"/\"></label>\n-          <label>Ignorar, una regla por línea<textarea id=\"deploy-ignore\" rows=\"4\">**/.git/**&#10;**/.vscode/**&#10;**/.env</textarea></label>\n-          <label class=\"toggle-row\"><input id=\"deploy-on-accept\" type=\"checkbox\" checked><span><strong>Subir al aceptar</strong><small>Solo archivos aceptados en Revisar cambios.</small></span></label>\n-          <label class=\"toggle-row\"><input id=\"deploy-sync-deletes\" type=\"checkbox\"><span><strong>Sincronizar borrados</strong><small>Elimina en remoto archivos eliminados y aceptados.</small></span></label>\n-          <div class=\"inline-actions\"><button type=\"button\" class=\"secondary-command\" id=\"test-deployment\">Probar</button><button type=\"submit\" class=\"primary-command\">Guardar despliegue</button></div>\n-          <p class=\"settings-note\" id=\"deployment-status\"></p>\n-        </form>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"security\">\n-        <div class=\"settings-intro\"><strong>Centro de seguridad y salud</strong><span>Monitorización privada y de solo lectura del equipo anfitrión, el proyecto, las integraciones, el despliegue y el Docker remoto configurado. Nunca corrige el sistema sin una autorización separada.</span></div>\n-        <button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-security\">Actualizar diagnóstico</button>\n-        <div class=\"diagnostics-summary\" id=\"security-summary\">Cargando último estado seguro…</div>\n-        <div class=\"security-grid\" id=\"security-grid\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"commands\">\n-        <label class=\"command-search\"><span>Buscar comando</span><input id=\"command-search\" type=\"search\" placeholder=\"/review, permisos, skills\"></label>\n-        <div class=\"command-counts\" id=\"command-counts\"></div>\n-        <div class=\"command-list\" id=\"command-list\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"events\">\n-        <div class=\"activity-summary\" id=\"activity-summary\"></div>\n-        <div class=\"activity-list\" id=\"activity-list\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"missions\">\n-        <div class=\"settings-intro\"><strong>Misiones y evidencias</strong><span>Trazabilidad persistente y redactada por proyecto. No almacena prompts, respuestas, comandos, diffs ni secretos.</span></div>\n-        <div class=\"mission-toolbar\">\n-          <label><input id=\"mission-current-thread\" type=\"checkbox\"> Solo conversación actual</label>\n-          <button type=\"button\" class=\"secondary-command\" id=\"refresh-evidence\">Actualizar</button>\n-        </div>\n-        <div class=\"evidence-summary\" id=\"evidence-summary\">Selecciona un proyecto para consultar sus misiones.</div>\n-        <div class=\"mission-layout\">\n-          <div class=\"mission-list\" id=\"mission-list\"></div>\n-          <div class=\"mission-detail\" id=\"mission-detail\"><span>Selecciona una misión para ver sus evidencias.</span></div>\n-        </div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"twin\">\n-        <div class=\"settings-intro\"><strong>Gemelo temporal del proyecto</strong><span>Fotografía técnica y operativa de solo lectura. Compara arquitectura, archivos, dependencias, integraciones, misiones, despliegues y riesgos sin guardar código ni secretos.</span></div>\n-        <div class=\"twin-toolbar\">\n-          <label>Momento del proyecto<select id=\"twin-snapshot-select\"><option value=\"\">Sin snapshots</option></select></label>\n-          <button type=\"button\" class=\"primary-command\" id=\"create-twin-snapshot\">Crear snapshot</button>\n-        </div>\n-        <div class=\"evidence-summary\" id=\"twin-summary\" aria-live=\"polite\">Selecciona un proyecto para consultar su gemelo.</div>\n-        <div class=\"twin-metrics\" id=\"twin-metrics\"></div>\n-        <section class=\"twin-section\">\n-          <header><strong>Cambios desde el snapshot anterior</strong><span>Metadatos temporales; no contiene diffs ni contenido de archivos.</span></header>\n-          <div class=\"twin-change-grid\" id=\"twin-comparison\"></div>\n-        </section>\n-        <section class=\"twin-section\">\n-          <header><strong>Mapa de arquitectura</strong><span>Directorios principales, áreas gobernadas y ecosistemas de dependencias.</span></header>\n-          <div class=\"twin-topology\" id=\"twin-topology\"></div>\n-        </section>\n-        <section class=\"twin-section\">\n-          <header><strong>Dependencias declaradas</strong><span>Leídas únicamente de manifests reconocidos y limitados.</span></header>\n-          <div class=\"twin-list\" id=\"twin-dependencies\"></div>\n-        </section>\n-        <section class=\"twin-section\">\n-          <header><strong>Operación y confianza</strong><span>Misiones, integraciones, despliegue y señales redactadas de seguridad.</span></header>\n-          <div class=\"twin-operation-grid\" id=\"twin-operations\"></div>\n-          <div class=\"twin-list\" id=\"twin-security\"></div>\n-        </section>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"staging\">\n-        <div class=\"settings-intro\"><strong>Preflight Staging verificable</strong><span>Prepara un paquete local no ejecutable con los cambios pendientes y aplica verificadores fijos. Nunca acepta comandos desde el navegador.</span></div>\n-        <div class=\"staging-toolbar\">\n-          <div id=\"staging-current\"><strong>Sin checkpoint pendiente</strong><span>Finaliza un turno con cambios para preparar su staging.</span></div>\n-          <button type=\"button\" class=\"primary-command\" id=\"run-staging-preflight\" disabled>Preparar preflight</button>\n-        </div>\n-        <div class=\"evidence-summary\" id=\"staging-summary\" aria-live=\"polite\">Selecciona una conversación con cambios pendientes.</div>\n-        <section class=\"staging-section\">\n-          <header><strong>Gates globales</strong><span>Límites de archivos y tamaño del paquete.</span></header>\n-          <div class=\"staging-gates\" id=\"staging-gates\"></div>\n-        </section>\n-        <section class=\"staging-section\">\n-          <header><strong>Archivos propuestos</strong><span>Integridad, secretos, JSON y sintaxis JavaScript. Los valores sensibles nunca se muestran.</span></header>\n-          <div class=\"staging-files\" id=\"staging-files\"></div>\n-        </section>\n-        <section class=\"staging-section\">\n-          <header><strong>Historial del checkpoint</strong><span>Los paquetes superados se conservan localmente; no son ejecutables.</span></header>\n-          <div class=\"staging-history\" id=\"staging-history\"></div>\n-        </section>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"contracts\">\n-        <div class=\"settings-intro\"><strong>Contrato de misión</strong><span>Define el resultado, alcance y gates antes de que Codex modifique archivos. La aceptación se bloquea si el contrato no se cumple.</span></div>\n-        <form class=\"mission-contract-form\" id=\"mission-contract-form\">\n-          <label>Resultado esperado<textarea id=\"contract-objective\" rows=\"5\" maxlength=\"5000\" placeholder=\"Describe qué debe quedar funcionando y cómo reconocer el éxito.\"></textarea></label>\n-          <label>Archivos o carpetas permitidos, uno por línea<textarea id=\"contract-allowed-paths\" rows=\"5\" placeholder=\"lib/**&#10;static/codex-suite/**&#10;test/**\"></textarea></label>\n-          <label>Pruebas obligatorias, una por línea<textarea id=\"contract-required-tests\" rows=\"4\" placeholder=\"npm test&#10;node --check server.js\"></textarea></label>\n-          <label>Criterios de aceptación, uno por línea<textarea id=\"contract-acceptance-criteria\" rows=\"5\" placeholder=\"La UI no tiene overflow horizontal&#10;No se exponen credenciales\"></textarea></label>\n-          <div class=\"settings-grid\">\n-            <label>Riesgo autorizado<select id=\"contract-risk\"><option value=\"low\">Bajo</option><option value=\"medium\">Medio</option><option value=\"high\">Alto</option><option value=\"critical\">Crítico</option></select></label>\n-            <label class=\"toggle-row\"><input id=\"contract-active\" type=\"checkbox\" checked><span><strong>Contrato activo</strong><small>Se inyecta en cada turno.</small></span></label>\n-          </div>\n-          <button type=\"submit\" class=\"primary-command\">Guardar contrato</button>\n-          <p class=\"settings-note\" id=\"contract-status\">Selecciona una conversación para crear su contrato.</p>\n-        </form>\n-        <div class=\"contract-gates\" id=\"contract-gates\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"settings\">\n-        <form class=\"settings-form\" id=\"settings-form\">\n-          <div class=\"settings-intro\">\n-            <strong>Personaliza la experiencia</strong>\n-            <span>Los cambios visuales se previsualizan al instante. Las políticas se aplican al guardar.</span>\n-          </div>\n-\n-          <fieldset>\n-            <legend>Marca e interfaz</legend>\n-            <label>Nombre del producto<input id=\"setting-product-name\" maxlength=\"40\" required></label>\n-            <label>Mensaje de bienvenida<input id=\"setting-welcome-message\" maxlength=\"120\" required></label>\n-            <div class=\"settings-grid\">\n-              <label>Idioma<select id=\"setting-language\"><option value=\"es\">Español</option></select></label>\n-              <label>Tema<select id=\"setting-theme\"><option value=\"system\">Sistema</option><option value=\"light\">Luz limpia</option><option value=\"dark\">Grafito</option><option value=\"midnight\">Medianoche</option><option value=\"warm\">Papel cálido</option></select></label>\n-              <label>Acento<select id=\"setting-accent\"><option value=\"green\">Verde</option><option value=\"blue\">Azul</option><option value=\"amber\">Ámbar</option></select></label>\n-              <label>Densidad<select id=\"setting-density\"><option value=\"comfortable\">Cómoda</option><option value=\"compact\">Compacta</option></select></label>\n-              <label>Tamaño de texto<select id=\"setting-font-size\"><option value=\"small\">Pequeño</option><option value=\"standard\">Estándar</option><option value=\"large\">Grande</option></select></label>\n-            </div>\n-            <label class=\"toggle-row\"><input id=\"setting-reduce-motion\" type=\"checkbox\"><span><strong>Reducir movimiento</strong><small>Desactiva animaciones no esenciales.</small></span></label>\n-          </fieldset>\n-\n-          <fieldset>\n-            <legend>Comportamiento</legend>\n-            <label class=\"toggle-row\"><input id=\"setting-enter-send\" type=\"checkbox\"><span><strong>Enter para enviar</strong><small>Con Shift+Enter se inserta una línea.</small></span></label>\n-            <label class=\"toggle-row\"><input id=\"setting-keep-control\" type=\"checkbox\"><span><strong>Mantener Control abierto</strong><small>Conserva el panel al seleccionar una acción.</small></span></label>\n-            <label>Eventos visibles<input id=\"setting-event-limit\" type=\"number\" min=\"20\" max=\"500\" step=\"10\"></label>\n-          </fieldset>\n-\n-          <fieldset>\n-            <legend>Política del servidor</legend>\n-            <label>Permiso predeterminado<select id=\"setting-default-permission\"><option value=\"workspaceWrite\">Escritura con aprobaciones</option><option value=\"readOnly\">Solo lectura</option></select></label>\n-            <label>Conversaciones por proyecto<input id=\"setting-thread-limit\" type=\"number\" min=\"10\" max=\"100\" step=\"10\"></label>\n-            <div class=\"policy-list\" aria-label=\"Políticas de seguridad inmutables\">\n-              <span>Proyecto restringido</span><span>Red desactivada</span><span>Aprobación bajo demanda</span>\n-            </div>\n-          </fieldset>\n-\n-          <fieldset>\n-            <legend>Codex y modelo</legend>\n-            <div class=\"credential-status\" id=\"credential-status\">Comprobando credencial…</div>\n-            <p class=\"settings-note\">Freemodel (auth.json / App Server) y Providers8082 (FCC :8082) son sistemas distintos. Usa Control → Freemodel o Control → Providers8082.</p>\n-            <label>Nueva API key (única)<input id=\"codex-api-key\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Solo escritura; nunca se muestra\"></label>\n-            <button type=\"button\" class=\"danger-command\" id=\"clear-api-key\">Eliminar API key activa de auth.json</button>\n-            <button type=\"button\" class=\"secondary-command\" id=\"open-freemodel-keys\">Abrir gestión Freemodel</button>\n-            <button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-settings\">Abrir Providers8082</button>\n-            <div class=\"settings-grid\">\n-              <label>Proveedor activo<input id=\"codex-model-provider\" maxlength=\"48\" placeholder=\"openai\"></label>\n-              <label>Modelo<input id=\"codex-model\" maxlength=\"160\" placeholder=\"Modelo predeterminado\"></label>\n-              <label>Esfuerzo<select id=\"codex-reasoning-effort\"><option value=\"\">Predeterminado</option><option value=\"minimal\">Mínimo</option><option value=\"low\">Bajo</option><option value=\"medium\">Medio</option><option value=\"high\">Alto</option><option value=\"xhigh\">Muy alto</option></select></label>\n-              <label>Nivel de servicio<select id=\"codex-service-tier\"><option value=\"\">Predeterminado</option><option value=\"auto\">Automático</option><option value=\"fast\">Rápido</option><option value=\"flex\">Flexible</option></select></label>\n-              <label>Personalidad<select id=\"codex-personality\"><option value=\"\">Predeterminada</option><option value=\"none\">Neutra</option><option value=\"friendly\">Amable</option><option value=\"pragmatic\">Pragmática</option></select></label>\n-              <label>Credenciales<select id=\"codex-credential-store\"><option value=\"auto\">Automático</option><option value=\"keyring\">Almacén de Windows</option><option value=\"file\">auth.json</option></select></label>\n-              <label>Aprobación<select id=\"codex-approval-policy\"><option value=\"on-request\">Bajo demanda</option><option value=\"untrusted\">Solo comandos confiables</option><option value=\"never\">Nunca solicitar</option></select></label>\n-              <label>Revisor<select id=\"codex-approvals-reviewer\"><option value=\"user\">Administrador</option><option value=\"auto_review\">Subagente de revisión</option><option value=\"guardian_subagent\">Guardian heredado</option></select></label>\n-              <label>Entorno aislado<select id=\"codex-sandbox-mode\"><option value=\"workspace-write\">Escritura en el proyecto</option><option value=\"read-only\">Solo lectura</option></select></label>\n-            </div>\n-          </fieldset>\n-\n-          <fieldset>\n-            <legend>Instrucciones del proyecto · AGENTS.md</legend>\n-            <p class=\"settings-note\">Reglas persistentes de arquitectura, pruebas, estilo y seguridad que Codex carga automáticamente.</p>\n-            <textarea id=\"agents-content\" class=\"settings-editor\" rows=\"12\" maxlength=\"200000\" spellcheck=\"false\" placeholder=\"# AGENTS.md\"></textarea>\n-            <div class=\"inline-actions\">\n-              <button type=\"button\" class=\"secondary-command\" id=\"reload-instructions\">Recargar</button>\n-              <button type=\"button\" class=\"primary-command\" id=\"save-instructions\">Guardar AGENTS.md</button>\n-            </div>\n-            <p class=\"settings-note\" id=\"instructions-status\">Selecciona un proyecto para cargar sus instrucciones.</p>\n-          </fieldset>\n-\n-          <fieldset>\n-            <legend>Proveedor personalizado</legend>\n-            <div class=\"settings-grid\">\n-              <label>ID<input id=\"provider-id\" maxlength=\"48\" placeholder=\"freemodel\"></label>\n-              <label>Nombre<input id=\"provider-name\" maxlength=\"80\" placeholder=\"FreeModel\"></label>\n-            </div>\n-            <label>URL base<input id=\"provider-base-url\" type=\"url\" placeholder=\"https://api.example.com\"></label>\n-            <label>API de transporte<select id=\"provider-wire-api\"><option value=\"responses\">Responses</option><option value=\"chat\">Chat</option></select></label>\n-            <p class=\"settings-note\">Solo se gestionan campos públicos. Cabeceras y secretos no se devuelven al navegador.</p>\n-          </fieldset>\n-\n-          <p class=\"form-error\" id=\"settings-error\" role=\"alert\"></p>\n-          <div class=\"settings-actions\">\n-            <button type=\"button\" class=\"secondary-command\" id=\"settings-reset\">Restaurar</button>\n-            <button type=\"submit\" class=\"primary-command\" id=\"settings-save\">Guardar ajustes</button>\n-          </div>\n-        </form>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"freemodel\">\n-        <div class=\"settings-intro\">\n-          <strong>Freemodel · API keys</strong>\n-          <span>Almacena varias claves, consulta el estado de saldo y activa una en <code>~/.codex/auth.json</code>. Los valores completos nunca se muestran en el navegador.</span>\n-        </div>\n-        <div class=\"freemodel-toolbar\">\n-          <button type=\"button\" class=\"secondary-command\" id=\"freemodel-refresh\">Actualizar lista</button>\n-          <button type=\"button\" class=\"secondary-command\" id=\"freemodel-probe-all\">Comprobar saldos</button>\n-        </div>\n-        <div class=\"diagnostics-summary\" id=\"freemodel-summary\">Cargando claves Freemodel…</div>\n-        <div class=\"freemodel-key-list\" id=\"freemodel-key-list\" aria-live=\"polite\"></div>\n-        <form class=\"freemodel-add-form\" id=\"freemodel-add-form\">\n-          <fieldset>\n-            <legend>Añadir API key</legend>\n-            <label>Alias<input id=\"freemodel-key-label\" maxlength=\"80\" placeholder=\"Cuenta principal, reserva…\"></label>\n-            <label>API key<input id=\"freemodel-key-input\" type=\"password\" autocomplete=\"new-password\" required placeholder=\"fe_oa_… (solo escritura)\"></label>\n-            <label class=\"toggle-row\"><input id=\"freemodel-key-activate\" type=\"checkbox\" checked><span><strong>Activar al guardar</strong><small>Escribe en auth.json y reinicia App Server.</small></span></label>\n-            <p class=\"form-error\" id=\"freemodel-error\" role=\"alert\"></p>\n-            <button type=\"submit\" class=\"primary-command\" id=\"freemodel-key-save\">Guardar clave</button>\n-          </fieldset>\n-        </form>\n-        <p class=\"settings-note\">El saldo exacto en $ no está en la API pública; el estado se deduce con una sonda mínima a Freemodel (ok / saldo agotado / inválida).</p>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"providers8082\">\n-        <div class=\"settings-intro\">\n-          <strong>Providers8082 · FCC + Cursor</strong>\n-          <span>Catálogo de providers con API key OK en FCC (<code>/admin</code>). El motor Providers8082 razona con el mejor modelo FCC y ejecuta con Cursor SDK. Distinto de Freemodel/auth.json.</span>\n-        </div>\n-        <div class=\"freemodel-toolbar\">\n-          <button type=\"button\" class=\"secondary-command\" id=\"providers8082-refresh\">Actualizar estado</button>\n-          <button type=\"button\" class=\"secondary-command\" id=\"providers8082-open-models\">Abrir Modelos</button>\n-        </div>\n-        <div class=\"diagnostics-summary\" id=\"providers8082-summary\">Cargando Providers8082…</div>\n-        <div class=\"provider-status-list\" id=\"providers8082-provider-list\" aria-live=\"polite\"></div>\n-        <div class=\"freemodel-key-list\" id=\"providers8082-candidate-list\"></div>\n-        <p class=\"settings-note\" id=\"providers8082-note\">FCC por defecto en 127.0.0.1:8082. Para lab .16 define FCC_BASE_URL cuando el proxy se migre.</p>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"excellence\">\n-        <div class=\"settings-intro\">\n-          <strong>Excelencia · métricas + replay</strong>\n-          <span>Latencia, turnos sin resumen, accept/reject, Evidence Replay y estado Vault 2.3 / pipeline. Sin secretos.</span>\n-        </div>\n-        <div class=\"freemodel-toolbar\">\n-          <button type=\"button\" class=\"secondary-command\" id=\"excellence-refresh\">Actualizar</button>\n-        </div>\n-        <div class=\"diagnostics-summary\" id=\"excellence-summary\">Cargando métricas…</div>\n-        <div class=\"provider-status-list\" id=\"excellence-metrics-list\" aria-live=\"polite\"></div>\n-        <div class=\"freemodel-key-list\" id=\"excellence-replay-list\"></div>\n-        <p class=\"settings-note\" id=\"excellence-note\">Oleada A–D: Diff Guardian, métricas, replay, reviewer, router, vault, heatmap.</p>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"lab\">\n-        <div class=\"settings-intro\"><strong>Lab IA Fabric</strong><span>Estado de solo lectura del servidor IA (.16): Supervisor, Ollama, Qdrant, WhatsApp lab y FCC local. No ejecuta agentes ni mezcla misiones de negocio con Evidence Ledger.</span></div>\n-        <button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-lab\">Actualizar lab</button>\n-        <div class=\"diagnostics-summary\" id=\"lab-summary\">Todavía no se ha consultado el lab.</div>\n-        <div class=\"security-grid\" id=\"lab-grid\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"composer-private\">\n-        <div class=\"settings-intro\"><strong>Privado · Composer (operador)</strong><span>Índice read-only de metadatos Composer (`state.vscdb`). Requiere <code>CODEX_COMPOSER_PRIVATE=1</code>. Nunca escribe SQLite. Chats sin JSONL no son ejecutables.</span></div>\n-        <button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-composer-private\">Actualizar índice</button>\n-        <div class=\"diagnostics-summary\" id=\"composer-private-summary\">Pestaña visible solo con el flag de operador.</div>\n-        <div class=\"resource-list\" id=\"composer-private-list\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"neighbors\">\n-        <div class=\"settings-intro\"><strong>Guardrails de aplicaciones vecinas</strong><span>Inventario de puertos, health HTTP, preflight de variables (sin revelar valores) y registro con rollback para cambios de catálogo.</span></div>\n-        <div class=\"inline-actions\">\n-          <button type=\"button\" class=\"secondary-command\" id=\"refresh-neighbors\">Inventario</button>\n-          <button type=\"button\" class=\"secondary-command\" id=\"run-neighbor-preflight\">Preflight env</button>\n-          <button type=\"button\" class=\"primary-command\" id=\"run-neighbor-verify\">Verificar health ×3</button>\n-        </div>\n-        <div class=\"resource-summary\" id=\"neighbors-summary\">Todavía no se ha cargado el inventario de vecinas.</div>\n-        <div class=\"resource-list\" id=\"neighbors-list\"></div>\n-        <div class=\"settings-intro\" style=\"margin-top:14px\"><strong>Acciones registradas</strong><span>Solo mutaciones de catálogo autorizadas. El rollback restaura el snapshot anterior.</span></div>\n-        <div class=\"resource-list\" id=\"neighbors-actions\"></div>\n-      </section>\n-\n-      <section class=\"control-view\" data-control-view=\"diagnostics\">\n-        <div class=\"diagnostics-hero\">\n-          <div><strong>Centro de pruebas</strong><span>Comprueba todas las capas sin ejecutar herramientas ni modificar el proyecto.</span></div>\n-          <button type=\"button\" class=\"primary-command\" id=\"run-diagnostics\">Ejecutar todo</button>\n-        </div>\n-        <div class=\"diagnostics-summary\" id=\"diagnostics-summary\">Todavía no se ha ejecutado ninguna prueba.</div>\n-        <div class=\"diagnostics-list\" id=\"diagnostics-list\"></div>\n-      </section>\n-    </aside>\n-\n-    <nav class=\"mobile-nav\" aria-label=\"Vistas\">\n-      <button type=\"button\" data-target=\"threads\">Conversaciones</button>\n-      <button type=\"button\" data-target=\"chat\" class=\"is-active\">Chat</button>\n-      <button type=\"button\" data-target=\"activity\">Control</button>\n-    </nav>\n-  </div>\n-\n-  <section class=\"app-error-boundary is-hidden\" id=\"app-error-boundary\" role=\"alert\" aria-live=\"assertive\" data-fatal=\"false\">\n-    <div>\n-      <strong id=\"app-error-title\">La interfaz necesita atención</strong>\n-      <span id=\"app-error-detail\">No se pudo completar la operación solicitada.</span>\n-    </div>\n-    <div class=\"app-error-actions\">\n-      <button class=\"secondary-command\" id=\"dismiss-app-error\" type=\"button\">Cerrar aviso</button>\n-      <button class=\"primary-command\" id=\"retry-app\" type=\"button\">Recargar aplicación</button>\n-    </div>\n-  </section>\n-\n-  <dialog class=\"login-dialog\" id=\"login-dialog\">\n-    <form method=\"dialog\" id=\"login-form\">\n-      <div class=\"login-brand\"><div class=\"brand-mark\">C</div><div><strong id=\"login-product-name\">Codex Suite</strong><span>Acceso protegido por el bridge</span></div></div>\n-      <input type=\"text\" name=\"username\" value=\"cursor-mobile-bridge\" autocomplete=\"username\" hidden>\n-      <label for=\"token-input\">Token del bridge</label>\n-      <input id=\"token-input\" type=\"password\" autocomplete=\"current-password\" required>\n-      <p class=\"form-error\" id=\"login-error\" role=\"alert\"></p>\n-      <button class=\"primary-command\" type=\"submit\">Iniciar sesión</button>\n-    </form>\n-  </dialog>\n-\n-  <dialog class=\"action-dialog\" id=\"action-dialog\">\n-    <form method=\"dialog\" id=\"action-form\">\n-      <header><strong id=\"action-title\">Acción</strong><button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\">×</button></header>\n-      <div class=\"action-copy\" id=\"action-copy\"></div>\n-      <div class=\"action-fields\" id=\"action-fields\"></div>\n-      <p class=\"form-error\" id=\"action-error\" role=\"alert\"></p>\n-      <footer>\n-        <button class=\"secondary-command\" value=\"cancel\" type=\"submit\">Cancelar</button>\n-        <button class=\"primary-command\" id=\"action-confirm\" value=\"default\" type=\"submit\">Continuar</button>\n-      </footer>\n-    </form>\n-  </dialog>\n-\n-  <dialog class=\"providers8082-dialog\" id=\"providers8082-dialog\">\n-    <form method=\"dialog\" id=\"providers8082-form\">\n-      <header>\n-        <strong>Providers8082 · elegir modelo FCC</strong>\n-        <button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\">×</button>\n-      </header>\n-      <p class=\"action-copy\" id=\"providers8082-dialog-copy\">Evaluando proyecto y petición contra providers con API key OK…</p>\n-      <label>Modelo recomendado / alternativo\n-        <select id=\"providers8082-model-select\" aria-label=\"Modelo FCC\"></select>\n-      </label>\n-      <div class=\"providers8082-dialog-meta\" id=\"providers8082-dialog-meta\"></div>\n-      <p class=\"form-error\" id=\"providers8082-dialog-error\" role=\"alert\"></p>\n-      <footer>\n-        <button class=\"secondary-command\" value=\"cancel\" type=\"submit\">Cancelar</button>\n-        <button class=\"primary-command\" id=\"providers8082-confirm\" value=\"default\" type=\"submit\">Usar y razonar + ejecutar</button>\n-      </footer>\n-    </form>\n-  </dialog>\n-\n-  <dialog class=\"manual-dialog\" id=\"manual-dialog\">\n-    <header><strong>Manual de Codex Suite</strong><button class=\"icon-button\" id=\"close-manual\" type=\"button\" aria-label=\"Cerrar manual\">×</button></header>\n-    <iframe id=\"manual-frame\" title=\"Manual de uso\" loading=\"lazy\"></iframe>\n-  </dialog>\n-\n-  <dialog class=\"file-preview-dialog\" id=\"file-preview-dialog\">\n-    <header><strong id=\"file-preview-title\">Archivo</strong><button class=\"icon-button\" id=\"close-file-preview\" type=\"button\" aria-label=\"Cerrar archivo\">×</button></header>\n-    <pre id=\"file-preview-content\"></pre>\n-    <footer><span>Vista de solo lectura · máximo 256 KB</span><button type=\"button\" class=\"primary-command\" id=\"attach-preview-file\">Añadir al contexto</button></footer>\n-  </dialog>\n-\n-  <dialog class=\"integration-dialog\" id=\"integration-dialog\">\n-    <header><div><small id=\"integration-kind\">Integración</small><strong id=\"integration-title\">Detalle</strong></div><button class=\"icon-button\" id=\"close-integration\" type=\"button\" aria-label=\"Cerrar integración\">×</button></header>\n-    <div class=\"integration-content\" id=\"integration-content\"></div>\n-    <label class=\"integration-endpoint\" id=\"integration-endpoint-row\">Endpoint HTTPS<input id=\"integration-endpoint\" type=\"url\" placeholder=\"https://servidor.example/mcp\"></label>\n-    <p class=\"form-error\" id=\"integration-error\" role=\"alert\"></p>\n-    <footer><button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\">Analizar para este proyecto</button><button type=\"button\" class=\"primary-command\" id=\"activate-integration\">Habilitar</button></footer>\n-  </dialog>\n-\n-  <script type=\"module\" src=\"/static/codex-suite/app.js?v=56\"></script>\n+  <link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=58\">\n+</head>\n+<body>\n+  <div class=\"app-shell\" id=\"app-shell\">\n+    <aside class=\"rail panel-view\" data-view=\"threads\" aria-label=\"Conversaciones\">\n+      <header class=\"brand-bar\">\n+        <div class=\"brand-mark\">C</div>\n+        <div><strong id=\"brand-name\">Codex Suite</strong><span>Cursor Mobile Bridge</span></div>\n+        <a class=\"icon-button\" href=\"/apps\" title=\"Abrir Apps\" aria-label=\"Abrir Apps\">⌘</a>\n+        <button class=\"icon-button\" id=\"open-manual\" type=\"button\" title=\"Manual\" aria-label=\"Abrir manual\">?</button>\n+        <button class=\"icon-button mobile-only\" id=\"close-rail\" type=\"button\" title=\"Cerrar conversaciones\" aria-label=\"Cerrar conversaciones\">×</button>\n+      </header>\n+\n+      <div class=\"workspace-block\">\n+        <label for=\"workspace-select\">Espacio de trabajo</label>\n+        <select id=\"workspace-select\"></select>\n+        <div class=\"workspace-actions\">\n+          <button class=\"secondary-command\" id=\"create-workspace\" type=\"button\">Nueva área</button>\n+          <button class=\"secondary-command\" id=\"attach-workspace\" type=\"button\">Vincular carpeta</button>\n+        </div>\n+        <div class=\"workspace-ide-chips\" id=\"workspace-ide-chips\" hidden></div>\n+        <label for=\"permission-select\">Permisos de herramientas</label>\n+        <select id=\"permission-select\">\n+          <option value=\"workspaceWrite\">Escritura en el proyecto · con aprobaciones</option>\n+          <option value=\"readOnly\">Solo lectura</option>\n+        </select>\n+        <button class=\"primary-command\" id=\"new-thread\" type=\"button\">+ Nueva conversación</button>\n+      </div>\n+\n+      <nav class=\"rail-tabs\" aria-label=\"Navegador del proyecto\">\n+        <button type=\"button\" class=\"is-active\" data-rail-tab=\"threads\">Conversaciones</button>\n+        <button type=\"button\" data-rail-tab=\"explorer\">Explorador</button>\n+      </nav>\n+      <section class=\"rail-view is-active\" data-rail-view=\"threads\">\n+        <div class=\"list-heading\"><span>Conversaciones</span><button class=\"icon-button\" id=\"refresh-threads\" type=\"button\" title=\"Actualizar\" aria-label=\"Actualizar\">↻</button></div>\n+        <div class=\"thread-list\" id=\"thread-list\" role=\"list\"></div>\n+      </section>\n+      <section class=\"rail-view\" data-rail-view=\"explorer\">\n+        <div class=\"explorer-toolbar\">\n+          <select id=\"workspace-area-select\" aria-label=\"Área de trabajo\"><option value=\"\">Proyecto completo</option></select>\n+          <button class=\"icon-button\" id=\"create-workspace-folder\" type=\"button\" title=\"Nueva carpeta\" aria-label=\"Nueva carpeta\">＋</button>\n+          <button class=\"icon-button\" id=\"refresh-explorer\" type=\"button\" title=\"Actualizar explorador\" aria-label=\"Actualizar explorador\">↻</button>\n+        </div>\n+        <p class=\"explorer-hint\">Arrastra archivos o carpetas al chat para añadir contexto.</p>\n+        <div class=\"explorer-tree\" id=\"explorer-tree\" role=\"tree\"></div>\n+      </section>\n+    </aside>\n+\n+    <main class=\"conversation panel-view is-active\" data-view=\"chat\">\n+      <header class=\"conversation-header\">\n+        <button class=\"icon-button mobile-only\" id=\"open-rail\" type=\"button\" title=\"Abrir conversaciones\" aria-label=\"Abrir conversaciones\">☰</button>\n+        <div class=\"thread-title\"><strong id=\"thread-title\">Nueva conversación</strong><span id=\"thread-meta\">Selecciona un proyecto</span></div>\n+        <div class=\"connection\"><span class=\"status-dot\" id=\"status-dot\"></span><span id=\"status-text\">Sin conectar</span></div>\n+        <button class=\"secondary-command desktop-only\" id=\"toggle-activity\" type=\"button\">Control</button>\n+      </header>\n+\n+      <div class=\"conversation-scroll\">\n+      <section class=\"timeline\" id=\"timeline\" aria-live=\"polite\">\n+        <div class=\"empty-state\" id=\"empty-state\">\n+          <div class=\"empty-mark\">C</div>\n+          <h1 id=\"empty-title\">¿En qué trabajamos?</h1>\n+          <p id=\"empty-copy\">Elige un proyecto y abre una conversación.</p>\n+        </div>\n+      </section>\n+\n+      <section class=\"turn-status-banner is-hidden\" id=\"turn-status-banner\" aria-live=\"polite\">\n+        <div class=\"turn-status-main\">\n+          <strong id=\"turn-status-title\">Sin turno activo</strong>\n+          <span id=\"turn-status-detail\">Abre o envía un mensaje para ver el progreso del agente.</span>\n+        </div>\n+        <button class=\"secondary-command\" id=\"turn-status-open-activity\" type=\"button\">Ver actividad</button>\n+      </section>\n+      <section class=\"turn-watchdog is-hidden\" id=\"turn-watchdog\" aria-live=\"polite\">\n+        <div><strong id=\"turn-watchdog-title\">Turno en curso</strong><span id=\"turn-watchdog-detail\"></span></div>\n+        <button class=\"secondary-command is-hidden\" id=\"recover-turn\" type=\"button\">Recuperar turno</button>\n+      </section>\n+      <section class=\"execution-status\" id=\"execution-status\" aria-live=\"polite\">\n+        <span class=\"execution-status-label\">Ejecución</span><span id=\"execution-status-text\">Predeterminada · esperando conversación</span>\n+      </section>\n+      <section class=\"approval-tray\" id=\"approval-tray\" aria-live=\"assertive\"></section>\n+      <section class=\"change-review-tray\" id=\"change-review-tray\" aria-live=\"polite\"></section>\n+      </div>\n+\n+      <footer class=\"composer-wrap\">\n+        <div class=\"context-chips is-hidden\" id=\"context-chips\" aria-live=\"polite\"></div>\n+        <form class=\"composer\" id=\"composer-form\">\n+          <div class=\"agent-toolbar\" aria-label=\"Modo de trabajo\">\n+            <select id=\"mode-select\" title=\"Modo de trabajo\" aria-label=\"Modo de trabajo\">\n+              <option value=\"agent\">Agente</option>\n+              <option value=\"ask\">Consultar</option>\n+              <option value=\"plan\">Planificar</option>\n+              <option value=\"autopilot\">Piloto automático</option>\n+            </select>\n+            <select id=\"participant-select\" title=\"Especialista\" aria-label=\"Especialista\">\n+              <option value=\"workspace\">@workspace</option>\n+              <option value=\"tester\">@tester</option>\n+              <option value=\"reviewer\">@reviewer</option>\n+              <option value=\"terminal\">@terminal</option>\n+              <option value=\"browser\">@browser</option>\n+            </select>\n+            <select id=\"delegation-select\" title=\"Subagentes\" aria-label=\"Subagentes\">\n+              <option value=\"single\">Un agente</option>\n+              <option value=\"explicit\">Subagentes si los pido</option>\n+              <option value=\"proactive\">Subagentes proactivos</option>\n+            </select>\n+            <div class=\"smart-actions\" aria-label=\"Acciones inteligentes\">\n+              <button type=\"button\" data-smart-action=\"explain\">Explicar</button>\n+              <button type=\"button\" data-smart-action=\"fix\">Corregir</button>\n+              <button type=\"button\" data-smart-action=\"tests\">Crear pruebas</button>\n+              <button type=\"button\" data-smart-action=\"review\">Revisar</button>\n+              <button type=\"button\" data-smart-action=\"commit\">Mensaje de commit</button>\n+            </div>\n+          </div>\n+          <textarea id=\"message-input\" rows=\"1\" maxlength=\"100000\" placeholder=\"Pide un cambio, una revisión o una explicación\" disabled></textarea>\n+          <div class=\"composer-tools\">\n+            <div class=\"attachment-controls\">\n+              <button class=\"attachment-command\" id=\"attach-file\" type=\"button\" title=\"Adjuntar archivo o imagen\" aria-label=\"Adjuntar archivo o imagen\">＋</button>\n+              <div class=\"attachment-menu is-hidden\" id=\"attachment-menu\">\n+                <button type=\"button\" id=\"upload-file\"><strong>Subir archivo o imagen</strong><span>Desde este dispositivo · máximo 5 MB</span></button>\n+                <button type=\"button\" id=\"attach-workspace\"><strong>Contexto del proyecto</strong><span>Archivo o carpeta que ya existe</span></button>\n+                <button type=\"button\" id=\"context-codebase\"><strong>#codebase</strong><span>Buscar referencias relevantes en todo el proyecto</span></button>\n+                <button type=\"button\" id=\"context-terminal\"><strong>#terminal</strong><span>Usar errores y salidas recientes de la conversación</span></button>\n+              </div>\n+              <input id=\"attachment-input\" type=\"file\" multiple hidden>\n+            </div>\n+            <div class=\"run-options\">\n+              <select id=\"engine-select\" title=\"Motor\" aria-label=\"Motor de agente\">\n+                <option value=\"cursor\" selected>Cursor SDK</option>\n+                <option value=\"codex\">Codex App Server</option>\n+                <option value=\"providers8082\">Providers8082</option>\n+              </select>\n+              <select id=\"model-select\" title=\"Modelo\" aria-label=\"Modelo\">\n+                <option value=\"\">Automático · predeterminado</option>\n+              </select>\n+              <button class=\"run-options-toggle\" id=\"toggle-run-options\" type=\"button\" aria-expanded=\"false\" aria-controls=\"advanced-run-options\">Opciones</button>\n+              <div class=\"advanced-run-options\" id=\"advanced-run-options\">\n+                <select id=\"effort-select\" title=\"Esfuerzo\" aria-label=\"Esfuerzo\">\n+                  <option value=\"\">Esfuerzo</option>\n+                </select>\n+                <select id=\"service-tier-select\" title=\"Velocidad\" aria-label=\"Velocidad\">\n+                  <option value=\"\">Tier</option>\n+                </select>\n+                <select id=\"personality-select\" title=\"Personalidad\" aria-label=\"Personalidad\">\n+                  <option value=\"\">Personalidad</option>\n+                  <option value=\"pragmatic\">Pragmática</option>\n+                  <option value=\"friendly\">Amable</option>\n+                  <option value=\"none\">Neutra</option>\n+                </select>\n+                <div id=\"cursor-run-options\" class=\"cursor-run-options is-hidden\">\n+                  <select id=\"cursor-source-select\" title=\"Chat Cursor a continuar\" aria-label=\"Chat Cursor a continuar\">\n+                    <option value=\"\">Cursor · chat nuevo Suite (crea JSONL IDE)</option>\n+                  </select>\n+                  <p class=\"cursor-history-note\" id=\"cursor-history-note\">Historial local del proyecto. Tras Suite: Recargar ventana / reabrir chat en el IDE.</p>\n+                  <label class=\"toggle-row cursor-serena-toggle\"><input id=\"cursor-use-serena\" type=\"checkbox\"><span>Serena MCP</span></label>\n+                </div>\n+                <div id=\"providers8082-run-options\" class=\"providers8082-run-options is-hidden\">\n+                  <p class=\"cursor-history-note\" id=\"providers8082-run-note\">Doble motor: FCC razona → Cursor ejecuta. Requiere FCC :8082 y CURSOR_API_KEY.</p>\n+                  <button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-panel\">Abrir Providers8082</button>\n+                </div>\n+              </div>\n+            </div>\n+            <button class=\"danger-command is-hidden\" id=\"cancel-turn\" type=\"button\">Detener</button>\n+            <button class=\"send-command\" id=\"send-message\" type=\"submit\" disabled aria-label=\"Enviar\">↑</button>\n+          </div>\n+        </form>\n+      </footer>\n+    </main>\n+\n+    <aside class=\"activity panel-view\" data-view=\"activity\" id=\"activity-panel\" aria-label=\"Actividad\">\n+      <header class=\"activity-header\"><div class=\"activity-title\"><strong>Control Codex</strong><span id=\"control-lead\">Elige un área para operar sin perder el hilo del chat.</span></div><button class=\"icon-button\" id=\"close-activity\" type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\">×</button></header>\n+      <nav class=\"control-hub\" aria-label=\"Panel de control\">\n+        <div class=\"control-groups\" role=\"tablist\" aria-label=\"Áreas de control\">\n+          <button type=\"button\" class=\"is-active\" data-control-group=\"operate\">Operar</button>\n+          <button type=\"button\" data-control-group=\"project\">Proyecto</button>\n+          <button type=\"button\" data-control-group=\"quality\">Calidad</button>\n+          <button type=\"button\" data-control-group=\"system\">Sistema</button>\n+        </div>\n+        <div class=\"control-tabs\" role=\"tablist\" aria-label=\"Secciones\">\n+          <button type=\"button\" class=\"is-active\" data-control-tab=\"actions\" data-control-group-tab=\"operate\">Acciones</button>\n+          <button type=\"button\" data-control-tab=\"commands\" data-control-group-tab=\"operate\">Comandos /</button>\n+          <button type=\"button\" data-control-tab=\"events\" data-control-group-tab=\"operate\">Eventos</button>\n+          <button type=\"button\" data-control-tab=\"resources\" data-control-group-tab=\"project\" hidden>Recursos</button>\n+          <button type=\"button\" data-control-tab=\"workspace\" data-control-group-tab=\"project\" hidden>Proyecto</button>\n+          <button type=\"button\" data-control-tab=\"marketplace\" data-control-group-tab=\"project\" hidden>Catálogo</button>\n+          <button type=\"button\" data-control-tab=\"complements\" data-control-group-tab=\"project\" hidden>Complementos</button>\n+          <button type=\"button\" data-control-tab=\"models\" data-control-group-tab=\"quality\" hidden>Modelos</button>\n+          <button type=\"button\" data-control-tab=\"missions\" data-control-group-tab=\"quality\" hidden>Misiones</button>\n+          <button type=\"button\" data-control-tab=\"contracts\" data-control-group-tab=\"quality\" hidden>Contratos</button>\n+          <button type=\"button\" data-control-tab=\"staging\" data-control-group-tab=\"quality\" hidden>Staging</button>\n+          <button type=\"button\" data-control-tab=\"twin\" data-control-group-tab=\"quality\" hidden>Gemelo</button>\n+          <button type=\"button\" data-control-tab=\"security\" data-control-group-tab=\"system\" hidden>Seguridad</button>\n+          <button type=\"button\" data-control-tab=\"lab\" data-control-group-tab=\"system\" hidden>Lab IA</button>\n+          <button type=\"button\" data-control-tab=\"freemodel\" data-control-group-tab=\"system\" hidden>Freemodel</button>\n+          <button type=\"button\" data-control-tab=\"providers8082\" data-control-group-tab=\"system\" hidden>Providers8082</button>\n+          <button type=\"button\" data-control-tab=\"excellence\" data-control-group-tab=\"quality\" hidden>Excelencia</button>\n+          <button type=\"button\" data-control-tab=\"composer-private\" data-control-group-tab=\"system\" hidden id=\"control-tab-composer-private\">Privado / Composer</button>\n+          <button type=\"button\" data-control-tab=\"neighbors\" data-control-group-tab=\"system\" hidden>Vecinas</button>\n+          <button type=\"button\" data-control-tab=\"settings\" data-control-group-tab=\"system\" hidden>Ajustes</button>\n+          <button type=\"button\" data-control-tab=\"diagnostics\" data-control-group-tab=\"system\" hidden>Pruebas</button>\n+        </div>\n+      </nav>\n+\n+      <section class=\"control-view is-active\" data-control-view=\"actions\">\n+        <div class=\"action-grid\" id=\"action-grid\">\n+          <button type=\"button\" data-action=\"fork\"><strong>Bifurcar</strong><span>Copia independiente de la conversación</span></button>\n+          <button type=\"button\" data-action=\"compact\"><strong>Compactar</strong><span>Reduce el contexto conservando lo importante</span></button>\n+          <button type=\"button\" data-action=\"rename\"><strong>Renombrar</strong><span>Cambia el nombre de la conversación</span></button>\n+          <button type=\"button\" data-action=\"goal\"><strong>Objetivo</strong><span>Define una meta persistente</span></button>\n+          <button type=\"button\" data-action=\"review\"><strong>Revisar</strong><span>Revisión nativa del servidor de Codex</span></button>\n+          <button type=\"button\" data-action=\"rollback\"><strong>Volver a un punto</strong><span>Restaura historial y archivos de un checkpoint</span></button>\n+          <button type=\"button\" data-action=\"mention\"><strong>Adjuntar ruta</strong><span>Archivo o carpeta del proyecto</span></button>\n+          <button type=\"button\" data-action=\"archive\"><strong>Archivar</strong><span>Oculta la conversación sin borrarla</span></button>\n+          <button type=\"button\" class=\"danger-action\" data-action=\"delete\"><strong>Eliminar</strong><span>Borrado permanente con confirmación</span></button>\n+        </div>\n+        <div class=\"session-actions\">\n+          <a href=\"/apps\" class=\"secondary-command\">Abrir las 47 apps</a>\n+          <a href=\"/codex-suite/manual\" class=\"secondary-command\">Manual completo</a>\n+          <button type=\"button\" class=\"secondary-command\" id=\"logout-session\">Cerrar sesión</button>\n+        </div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"resources\">\n+        <div class=\"settings-intro\"><strong>Capacidades del workspace</strong><span>Modelos, habilidades, MCP y plugins anunciados por App Server para el proyecto activo. Aquí se analizan e instalan sin salir del chat.</span></div>\n+        <div class=\"inline-actions\"><button type=\"button\" class=\"secondary-command\" id=\"refresh-resources\">Actualizar recursos</button></div>\n+        <div class=\"resource-summary\" id=\"resource-summary\">Selecciona un proyecto para cargar capacidades.</div>\n+        <div class=\"resource-groups\" id=\"resource-groups\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"models\">\n+        <div class=\"settings-intro\"><strong>Router de modelos</strong><span>Alternativas locales y externas de FCC, filtradas para ingeniería. Ninguna clave se envía al navegador.</span></div>\n+        <div class=\"inline-actions\"><button type=\"button\" class=\"secondary-command\" id=\"refresh-model-router\">Comprobar catálogos</button><button type=\"button\" class=\"secondary-command\" id=\"run-model-evals\">Probar proveedores</button><button type=\"button\" class=\"primary-command\" id=\"run-workspace-model-evals\">Evaluar selección en este proyecto</button></div>\n+        <div class=\"evidence-summary\" id=\"model-router-summary\">Comprobación pendiente.</div>\n+        <div class=\"model-auto-card\">\n+          <div><strong>Modo Automático por proyecto</strong><span id=\"model-auto-status\">Desactivado. Requiere evals de calidad aprobados.</span></div>\n+          <button type=\"button\" class=\"secondary-command\" id=\"toggle-auto-model\">Activar Automático</button>\n+        </div>\n+        <form class=\"model-budget-card\" id=\"model-budget-form\">\n+          <div><strong>Presupuesto de evaluaciones del proyecto</strong><span id=\"model-budget-status\">24 solicitudes diarias · 4 modelos por ejecución</span></div>\n+          <label>Solicitudes diarias<input id=\"model-budget-daily\" type=\"number\" min=\"4\" max=\"500\" value=\"24\"></label>\n+          <label>Modelos por ejecución<input id=\"model-budget-per-run\" type=\"number\" min=\"1\" max=\"8\" value=\"4\"></label>\n+          <label class=\"toggle-row\"><input id=\"model-budget-unknown\" type=\"checkbox\" checked><span><strong>Permitir coste desconocido</strong><small>Requiere confirmación igualmente.</small></span></label>\n+          <button type=\"submit\" class=\"secondary-command\">Guardar presupuesto</button>\n+        </form>\n+        <div class=\"model-tool-cert-card\">\n+          <div><strong>Certificación real de herramientas</strong><span>Prueba efímera, de solo lectura y con confirmación. No guarda prompts ni resultados.</span></div>\n+          <label>Modelo evaluado<select id=\"model-tool-cert-model\"><option value=\"\">Sin modelos evaluados</option></select></label>\n+          <label>Herramienta de consulta<select id=\"model-tool-cert-tool\"><option value=\"\">Sin herramientas seguras anunciadas</option></select></label>\n+          <button type=\"button\" class=\"secondary-command\" id=\"run-tool-certification\">Certificar llamada real</button>\n+          <p class=\"settings-note\" id=\"model-tool-cert-status\"></p>\n+        </div>\n+        <div class=\"model-ranking\" id=\"model-workspace-ranking\"></div>\n+        <div class=\"provider-status-list\" id=\"provider-status-list\"></div>\n+        <div class=\"model-router-filters\">\n+          <label>Vista<select id=\"model-cost-filter\"><option value=\"verified\">Inferencia verificada</option><option value=\"comparable\">Alternativas completas a GPT-Codex</option><option value=\"free\">Gratis y local</option><option value=\"all\">Todos los candidatos</option></select></label>\n+          <label>Buscar<input id=\"model-router-search\" type=\"search\" placeholder=\"Codex, Qwen, DeepSeek…\"></label>\n+        </div>\n+        <div class=\"model-router-list\" id=\"model-router-list\"></div>\n+        <p class=\"settings-note\">Marca hasta 8 modelos con inferencia verificada y evalúalos. El ranking combina calidad, coste declarado, latencia, herramientas declaradas y tasa de fallos; no almacena prompts ni respuestas. Cambiar el proveedor afecta a conversaciones nuevas.</p>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"workspace\">\n+        <div class=\"settings-intro\"><strong>Memoria y áreas del proyecto</strong><span>Persisten por espacio de trabajo y se incorporan al siguiente turno.</span></div>\n+        <div class=\"workspace-profile-form\">\n+          <label>Memoria general<textarea id=\"project-memory\" class=\"settings-editor profile-editor\" maxlength=\"100000\" placeholder=\"Decisiones, arquitectura y preferencias duraderas…\"></textarea></label>\n+          <div class=\"inline-actions\">\n+            <button type=\"button\" class=\"secondary-command\" id=\"new-workspace-area\">Nueva área</button>\n+            <button type=\"button\" class=\"danger-command\" id=\"delete-workspace-area\">Eliminar área</button>\n+          </div>\n+          <label>Área<select id=\"workspace-area-editor\"><option value=\"\">Proyecto completo</option></select></label>\n+          <label>Nombre<input id=\"workspace-area-name\" maxlength=\"80\" placeholder=\"Interfaz, API, Producción…\"></label>\n+          <label>Carpetas, una por línea<textarea id=\"workspace-area-folders\" rows=\"4\" placeholder=\"src&#10;public&#10;templates\"></textarea></label>\n+          <label>Instrucciones del área<textarea id=\"workspace-area-instructions\" rows=\"5\" maxlength=\"40000\"></textarea></label>\n+          <label>Memoria del área<textarea id=\"workspace-area-memory\" rows=\"6\" maxlength=\"80000\"></textarea></label>\n+          <button type=\"button\" class=\"primary-command\" id=\"save-workspace-profile\">Guardar memoria y áreas</button>\n+          <p class=\"settings-note\" id=\"workspace-profile-status\"></p>\n+        </div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"marketplace\">\n+        <div class=\"settings-intro\"><strong>Catálogo de MCP y plugins</strong><span>Primero revisa lo ya disponible en Codex. Después descubre MCP públicos, analiza el encaje con este proyecto e instala solo con confirmación.</span></div>\n+        <section class=\"marketplace-panel\">\n+          <header class=\"marketplace-panel-head\"><strong>Disponibles en Codex</strong><span>MCP y plugins anunciados por App Server · análisis aislado por proyecto</span></header>\n+          <div class=\"resource-list\" id=\"installed-integrations-list\"></div>\n+        </section>\n+        <section class=\"marketplace-panel\">\n+          <header class=\"marketplace-panel-head\"><strong>Descubrir MCP públicos</strong><span>Catálogo mcp.so · requiere endpoint HTTPS real antes de instalar</span></header>\n+          <div class=\"marketplace-search\">\n+            <input id=\"mcp-market-search\" type=\"search\" placeholder=\"Buscar navegador, GitHub, base de datos…\" enterkeyhint=\"search\">\n+            <button type=\"button\" class=\"secondary-command\" id=\"load-mcp-market\">Buscar MCP</button>\n+          </div>\n+          <div class=\"resource-list\" id=\"mcp-market-list\"></div>\n+        </section>\n+        <details class=\"marketplace-advanced\">\n+          <summary>Instalación avanzada</summary>\n+          <fieldset class=\"marketplace-install\">\n+            <legend>MCP remoto HTTPS</legend>\n+            <label>Nombre<input id=\"mcp-install-name\" maxlength=\"64\" placeholder=\"context7\"></label>\n+            <label>Endpoint HTTPS<input id=\"mcp-install-url\" type=\"url\" placeholder=\"https://servidor.example/mcp\"></label>\n+            <button type=\"button\" class=\"primary-command\" id=\"install-remote-mcp\">Instalar en Codex</button>\n+          </fieldset>\n+          <fieldset class=\"marketplace-install\">\n+            <legend>Añadir catálogo de plugins</legend>\n+            <label>Repositorio Git<input id=\"plugin-market-source\" placeholder=\"owner/repo o https://github.com/owner/repo.git\"></label>\n+            <button type=\"button\" class=\"secondary-command\" id=\"add-plugin-market\">Añadir catálogo</button>\n+          </fieldset>\n+        </details>\n+        <p class=\"settings-note\" id=\"marketplace-status\"></p>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"complements\">\n+        <div class=\"settings-intro\"><strong>Complementos inteligentes del proyecto</strong><span>Capacidades nativas de Codex Suite, analizadas y habilitadas únicamente para el espacio de trabajo activo. No instalan software en editores del PC.</span></div>\n+        <div class=\"resource-summary\" id=\"stack-summary\">Analizando proyecto…</div>\n+        <label class=\"command-search\"><span>Buscar en el catálogo</span><input id=\"complement-search\" type=\"search\" placeholder=\"PHP, SFTP, SQL, HTML…\"></label>\n+        <div class=\"resource-list\" id=\"complement-list\"></div>\n+        <form class=\"deployment-form\" id=\"deployment-form\">\n+          <h3>Despliegue de archivos aceptados</h3>\n+          <div class=\"settings-grid\">\n+            <label>Nombre<input id=\"deploy-name\" maxlength=\"100\" value=\"Producción\"></label>\n+            <label>Protocolo<select id=\"deploy-protocol\"><option value=\"sftp\">SFTP</option><option value=\"ftps\">FTPS</option><option value=\"ftp\">FTP sin cifrar</option></select></label>\n+            <label>Host<input id=\"deploy-host\" maxlength=\"253\"></label>\n+            <label>Puerto<input id=\"deploy-port\" type=\"number\" min=\"1\" max=\"65535\" value=\"22\"></label>\n+            <label>Usuario<input id=\"deploy-user\" autocomplete=\"username\" maxlength=\"160\"></label>\n+            <label>Contraseña<input id=\"deploy-password\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Vacío = conservar\"></label>\n+          </div>\n+          <label>Ruta remota<input id=\"deploy-remote-path\" value=\"/\"></label>\n+          <label>Ignorar, una regla por línea<textarea id=\"deploy-ignore\" rows=\"4\">**/.git/**&#10;**/.vscode/**&#10;**/.env</textarea></label>\n+          <label class=\"toggle-row\"><input id=\"deploy-on-accept\" type=\"checkbox\" checked><span><strong>Subir al aceptar</strong><small>Solo archivos aceptados en Revisar cambios.</small></span></label>\n+          <label class=\"toggle-row\"><input id=\"deploy-sync-deletes\" type=\"checkbox\"><span><strong>Sincronizar borrados</strong><small>Elimina en remoto archivos eliminados y aceptados.</small></span></label>\n+          <div class=\"inline-actions\"><button type=\"button\" class=\"secondary-command\" id=\"test-deployment\">Probar</button><button type=\"submit\" class=\"primary-command\">Guardar despliegue</button></div>\n+          <p class=\"settings-note\" id=\"deployment-status\"></p>\n+        </form>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"security\">\n+        <div class=\"settings-intro\"><strong>Centro de seguridad y salud</strong><span>Monitorización privada y de solo lectura del equipo anfitrión, el proyecto, las integraciones, el despliegue y el Docker remoto configurado. Nunca corrige el sistema sin una autorización separada.</span></div>\n+        <button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-security\">Actualizar diagnóstico</button>\n+        <div class=\"diagnostics-summary\" id=\"security-summary\">Cargando último estado seguro…</div>\n+        <div class=\"security-grid\" id=\"security-grid\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"commands\">\n+        <label class=\"command-search\"><span>Buscar comando</span><input id=\"command-search\" type=\"search\" placeholder=\"/review, permisos, skills\"></label>\n+        <div class=\"command-counts\" id=\"command-counts\"></div>\n+        <div class=\"command-list\" id=\"command-list\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"events\">\n+        <div class=\"activity-summary\" id=\"activity-summary\"></div>\n+        <div class=\"activity-list\" id=\"activity-list\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"missions\">\n+        <div class=\"settings-intro\"><strong>Misiones y evidencias</strong><span>Trazabilidad persistente y redactada por proyecto. No almacena prompts, respuestas, comandos, diffs ni secretos.</span></div>\n+        <div class=\"mission-toolbar\">\n+          <label><input id=\"mission-current-thread\" type=\"checkbox\"> Solo conversación actual</label>\n+          <button type=\"button\" class=\"secondary-command\" id=\"refresh-evidence\">Actualizar</button>\n+        </div>\n+        <div class=\"evidence-summary\" id=\"evidence-summary\">Selecciona un proyecto para consultar sus misiones.</div>\n+        <div class=\"mission-layout\">\n+          <div class=\"mission-list\" id=\"mission-list\"></div>\n+          <div class=\"mission-detail\" id=\"mission-detail\"><span>Selecciona una misión para ver sus evidencias.</span></div>\n+        </div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"twin\">\n+        <div class=\"settings-intro\"><strong>Gemelo temporal del proyecto</strong><span>Fotografía técnica y operativa de solo lectura. Compara arquitectura, archivos, dependencias, integraciones, misiones, despliegues y riesgos sin guardar código ni secretos.</span></div>\n+        <div class=\"twin-toolbar\">\n+          <label>Momento del proyecto<select id=\"twin-snapshot-select\"><option value=\"\">Sin snapshots</option></select></label>\n+          <button type=\"button\" class=\"primary-command\" id=\"create-twin-snapshot\">Crear snapshot</button>\n+        </div>\n+        <div class=\"evidence-summary\" id=\"twin-summary\" aria-live=\"polite\">Selecciona un proyecto para consultar su gemelo.</div>\n+        <div class=\"twin-metrics\" id=\"twin-metrics\"></div>\n+        <section class=\"twin-section\">\n+          <header><strong>Cambios desde el snapshot anterior</strong><span>Metadatos temporales; no contiene diffs ni contenido de archivos.</span></header>\n+          <div class=\"twin-change-grid\" id=\"twin-comparison\"></div>\n+        </section>\n+        <section class=\"twin-section\">\n+          <header><strong>Mapa de arquitectura</strong><span>Directorios principales, áreas gobernadas y ecosistemas de dependencias.</span></header>\n+          <div class=\"twin-topology\" id=\"twin-topology\"></div>\n+        </section>\n+        <section class=\"twin-section\">\n+          <header><strong>Dependencias declaradas</strong><span>Leídas únicamente de manifests reconocidos y limitados.</span></header>\n+          <div class=\"twin-list\" id=\"twin-dependencies\"></div>\n+        </section>\n+        <section class=\"twin-section\">\n+          <header><strong>Operación y confianza</strong><span>Misiones, integraciones, despliegue y señales redactadas de seguridad.</span></header>\n+          <div class=\"twin-operation-grid\" id=\"twin-operations\"></div>\n+          <div class=\"twin-list\" id=\"twin-security\"></div>\n+        </section>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"staging\">\n+        <div class=\"settings-intro\"><strong>Preflight Staging verificable</strong><span>Prepara un paquete local no ejecutable con los cambios pendientes y aplica verificadores fijos. Nunca acepta comandos desde el navegador.</span></div>\n+        <div class=\"staging-toolbar\">\n+          <div id=\"staging-current\"><strong>Sin checkpoint pendiente</strong><span>Finaliza un turno con cambios para preparar su staging.</span></div>\n+          <button type=\"button\" class=\"primary-command\" id=\"run-staging-preflight\" disabled>Preparar preflight</button>\n+        </div>\n+        <div class=\"evidence-summary\" id=\"staging-summary\" aria-live=\"polite\">Selecciona una conversación con cambios pendientes.</div>\n+        <section class=\"staging-section\">\n+          <header><strong>Gates globales</strong><span>Límites de archivos y tamaño del paquete.</span></header>\n+          <div class=\"staging-gates\" id=\"staging-gates\"></div>\n+        </section>\n+        <section class=\"staging-section\">\n+          <header><strong>Archivos propuestos</strong><span>Integridad, secretos, JSON y sintaxis JavaScript. Los valores sensibles nunca se muestran.</span></header>\n+          <div class=\"staging-files\" id=\"staging-files\"></div>\n+        </section>\n+        <section class=\"staging-section\">\n+          <header><strong>Historial del checkpoint</strong><span>Los paquetes superados se conservan localmente; no son ejecutables.</span></header>\n+          <div class=\"staging-history\" id=\"staging-history\"></div>\n+        </section>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"contracts\">\n+        <div class=\"settings-intro\"><strong>Contrato de misión</strong><span>Define el resultado, alcance y gates antes de que Codex modifique archivos. La aceptación se bloquea si el contrato no se cumple.</span></div>\n+        <form class=\"mission-contract-form\" id=\"mission-contract-form\">\n+          <label>Resultado esperado<textarea id=\"contract-objective\" rows=\"5\" maxlength=\"5000\" placeholder=\"Describe qué debe quedar funcionando y cómo reconocer el éxito.\"></textarea></label>\n+          <label>Archivos o carpetas permitidos, uno por línea<textarea id=\"contract-allowed-paths\" rows=\"5\" placeholder=\"lib/**&#10;static/codex-suite/**&#10;test/**\"></textarea></label>\n+          <label>Pruebas obligatorias, una por línea<textarea id=\"contract-required-tests\" rows=\"4\" placeholder=\"npm test&#10;node --check server.js\"></textarea></label>\n+          <label>Criterios de aceptación, uno por línea<textarea id=\"contract-acceptance-criteria\" rows=\"5\" placeholder=\"La UI no tiene overflow horizontal&#10;No se exponen credenciales\"></textarea></label>\n+          <div class=\"settings-grid\">\n+            <label>Riesgo autorizado<select id=\"contract-risk\"><option value=\"low\">Bajo</option><option value=\"medium\">Medio</option><option value=\"high\">Alto</option><option value=\"critical\">Crítico</option></select></label>\n+            <label class=\"toggle-row\"><input id=\"contract-active\" type=\"checkbox\" checked><span><strong>Contrato activo</strong><small>Se inyecta en cada turno.</small></span></label>\n+          </div>\n+          <button type=\"submit\" class=\"primary-command\">Guardar contrato</button>\n+          <p class=\"settings-note\" id=\"contract-status\">Selecciona una conversación para crear su contrato.</p>\n+        </form>\n+        <div class=\"contract-gates\" id=\"contract-gates\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"settings\">\n+        <form class=\"settings-form\" id=\"settings-form\">\n+          <div class=\"settings-intro\">\n+            <strong>Personaliza la experiencia</strong>\n+            <span>Los cambios visuales se previsualizan al instante. Las políticas se aplican al guardar.</span>\n+          </div>\n+\n+          <fieldset>\n+            <legend>Marca e interfaz</legend>\n+            <label>Nombre del producto<input id=\"setting-product-name\" maxlength=\"40\" required></label>\n+            <label>Mensaje de bienvenida<input id=\"setting-welcome-message\" maxlength=\"120\" required></label>\n+            <div class=\"settings-grid\">\n+              <label>Idioma<select id=\"setting-language\"><option value=\"es\">Español</option></select></label>\n+              <label>Tema<select id=\"setting-theme\"><option value=\"system\">Sistema</option><option value=\"light\">Luz limpia</option><option value=\"dark\">Grafito</option><option value=\"midnight\">Medianoche</option><option value=\"warm\">Papel cálido</option></select></label>\n+              <label>Acento<select id=\"setting-accent\"><option value=\"green\">Verde</option><option value=\"blue\">Azul</option><option value=\"amber\">Ámbar</option></select></label>\n+              <label>Densidad<select id=\"setting-density\"><option value=\"comfortable\">Cómoda</option><option value=\"compact\">Compacta</option></select></label>\n+              <label>Tamaño de texto<select id=\"setting-font-size\"><option value=\"small\">Pequeño</option><option value=\"standard\">Estándar</option><option value=\"large\">Grande</option></select></label>\n+            </div>\n+            <label class=\"toggle-row\"><input id=\"setting-reduce-motion\" type=\"checkbox\"><span><strong>Reducir movimiento</strong><small>Desactiva animaciones no esenciales.</small></span></label>\n+          </fieldset>\n+\n+          <fieldset>\n+            <legend>Comportamiento</legend>\n+            <label class=\"toggle-row\"><input id=\"setting-enter-send\" type=\"checkbox\"><span><strong>Enter para enviar</strong><small>Con Shift+Enter se inserta una línea.</small></span></label>\n+            <label class=\"toggle-row\"><input id=\"setting-keep-control\" type=\"checkbox\"><span><strong>Mantener Control abierto</strong><small>Conserva el panel al seleccionar una acción.</small></span></label>\n+            <label>Eventos visibles<input id=\"setting-event-limit\" type=\"number\" min=\"20\" max=\"500\" step=\"10\"></label>\n+          </fieldset>\n+\n+          <fieldset>\n+            <legend>Política del servidor</legend>\n+            <label>Permiso predeterminado<select id=\"setting-default-permission\"><option value=\"workspaceWrite\">Escritura con aprobaciones</option><option value=\"readOnly\">Solo lectura</option></select></label>\n+            <label>Conversaciones por proyecto<input id=\"setting-thread-limit\" type=\"number\" min=\"10\" max=\"100\" step=\"10\"></label>\n+            <div class=\"policy-list\" aria-label=\"Políticas de seguridad inmutables\">\n+              <span>Proyecto restringido</span><span>Red desactivada</span><span>Aprobación bajo demanda</span>\n+            </div>\n+          </fieldset>\n+\n+          <fieldset>\n+            <legend>Codex y modelo</legend>\n+            <div class=\"credential-status\" id=\"credential-status\">Comprobando credencial…</div>\n+            <p class=\"settings-note\">Freemodel (auth.json / App Server) y Providers8082 (FCC :8082) son sistemas distintos. Usa Control → Freemodel o Control → Providers8082.</p>\n+            <label>Nueva API key (única)<input id=\"codex-api-key\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Solo escritura; nunca se muestra\"></label>\n+            <button type=\"button\" class=\"danger-command\" id=\"clear-api-key\">Eliminar API key activa de auth.json</button>\n+            <button type=\"button\" class=\"secondary-command\" id=\"open-freemodel-keys\">Abrir gestión Freemodel</button>\n+            <button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-settings\">Abrir Providers8082</button>\n+            <div class=\"settings-grid\">\n+              <label>Proveedor activo<input id=\"codex-model-provider\" maxlength=\"48\" placeholder=\"openai\"></label>\n+              <label>Modelo<input id=\"codex-model\" maxlength=\"160\" placeholder=\"Modelo predeterminado\"></label>\n+              <label>Esfuerzo<select id=\"codex-reasoning-effort\"><option value=\"\">Predeterminado</option><option value=\"minimal\">Mínimo</option><option value=\"low\">Bajo</option><option value=\"medium\">Medio</option><option value=\"high\">Alto</option><option value=\"xhigh\">Muy alto</option></select></label>\n+              <label>Nivel de servicio<select id=\"codex-service-tier\"><option value=\"\">Predeterminado</option><option value=\"auto\">Automático</option><option value=\"fast\">Rápido</option><option value=\"flex\">Flexible</option></select></label>\n+              <label>Personalidad<select id=\"codex-personality\"><option value=\"\">Predeterminada</option><option value=\"none\">Neutra</option><option value=\"friendly\">Amable</option><option value=\"pragmatic\">Pragmática</option></select></label>\n+              <label>Credenciales<select id=\"codex-credential-store\"><option value=\"auto\">Automático</option><option value=\"keyring\">Almacén de Windows</option><option value=\"file\">auth.json</option></select></label>\n+              <label>Aprobación<select id=\"codex-approval-policy\"><option value=\"on-request\">Bajo demanda</option><option value=\"untrusted\">Solo comandos confiables</option><option value=\"never\">Nunca solicitar</option></select></label>\n+              <label>Revisor<select id=\"codex-approvals-reviewer\"><option value=\"user\">Administrador</option><option value=\"auto_review\">Subagente de revisión</option><option value=\"guardian_subagent\">Guardian heredado</option></select></label>\n+              <label>Entorno aislado<select id=\"codex-sandbox-mode\"><option value=\"workspace-write\">Escritura en el proyecto</option><option value=\"read-only\">Solo lectura</option></select></label>\n+            </div>\n+          </fieldset>\n+\n+          <fieldset>\n+            <legend>Instrucciones del proyecto · AGENTS.md</legend>\n+            <p class=\"settings-note\">Reglas persistentes de arquitectura, pruebas, estilo y seguridad que Codex carga automáticamente.</p>\n+            <textarea id=\"agents-content\" class=\"settings-editor\" rows=\"12\" maxlength=\"200000\" spellcheck=\"false\" placeholder=\"# AGENTS.md\"></textarea>\n+            <div class=\"inline-actions\">\n+              <button type=\"button\" class=\"secondary-command\" id=\"reload-instructions\">Recargar</button>\n+              <button type=\"button\" class=\"primary-command\" id=\"save-instructions\">Guardar AGENTS.md</button>\n+            </div>\n+            <p class=\"settings-note\" id=\"instructions-status\">Selecciona un proyecto para cargar sus instrucciones.</p>\n+          </fieldset>\n+\n+          <fieldset>\n+            <legend>Proveedor personalizado</legend>\n+            <div class=\"settings-grid\">\n+              <label>ID<input id=\"provider-id\" maxlength=\"48\" placeholder=\"freemodel\"></label>\n+              <label>Nombre<input id=\"provider-name\" maxlength=\"80\" placeholder=\"FreeModel\"></label>\n+            </div>\n+            <label>URL base<input id=\"provider-base-url\" type=\"url\" placeholder=\"https://api.example.com\"></label>\n+            <label>API de transporte<select id=\"provider-wire-api\"><option value=\"responses\">Responses</option><option value=\"chat\">Chat</option></select></label>\n+            <p class=\"settings-note\">Solo se gestionan campos públicos. Cabeceras y secretos no se devuelven al navegador.</p>\n+          </fieldset>\n+\n+          <p class=\"form-error\" id=\"settings-error\" role=\"alert\"></p>\n+          <div class=\"settings-actions\">\n+            <button type=\"button\" class=\"secondary-command\" id=\"settings-reset\">Restaurar</button>\n+            <button type=\"submit\" class=\"primary-command\" id=\"settings-save\">Guardar ajustes</button>\n+          </div>\n+        </form>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"freemodel\">\n+        <div class=\"settings-intro\">\n+          <strong>Freemodel · API keys</strong>\n+          <span>Almacena varias claves, consulta el estado de saldo y activa una en <code>~/.codex/auth.json</code>. Los valores completos nunca se muestran en el navegador.</span>\n+        </div>\n+        <div class=\"freemodel-toolbar\">\n+          <button type=\"button\" class=\"secondary-command\" id=\"freemodel-refresh\">Actualizar lista</button>\n+          <button type=\"button\" class=\"secondary-command\" id=\"freemodel-probe-all\">Comprobar saldos</button>\n+        </div>\n+        <div class=\"diagnostics-summary\" id=\"freemodel-summary\">Cargando claves Freemodel…</div>\n+        <div class=\"freemodel-key-list\" id=\"freemodel-key-list\" aria-live=\"polite\"></div>\n+        <form class=\"freemodel-add-form\" id=\"freemodel-add-form\">\n+          <fieldset>\n+            <legend>Añadir API key</legend>\n+            <label>Alias<input id=\"freemodel-key-label\" maxlength=\"80\" placeholder=\"Cuenta principal, reserva…\"></label>\n+            <label>API key<input id=\"freemodel-key-input\" type=\"password\" autocomplete=\"new-password\" required placeholder=\"fe_oa_… (solo escritura)\"></label>\n+            <label class=\"toggle-row\"><input id=\"freemodel-key-activate\" type=\"checkbox\" checked><span><strong>Activar al guardar</strong><small>Escribe en auth.json y reinicia App Server.</small></span></label>\n+            <p class=\"form-error\" id=\"freemodel-error\" role=\"alert\"></p>\n+            <button type=\"submit\" class=\"primary-command\" id=\"freemodel-key-save\">Guardar clave</button>\n+          </fieldset>\n+        </form>\n+        <p class=\"settings-note\">El saldo exacto en $ no está en la API pública; el estado se deduce con una sonda mínima a Freemodel (ok / saldo agotado / inválida).</p>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"providers8082\">\n+        <div class=\"settings-intro\">\n+          <strong>Providers8082 · FCC + Cursor</strong>\n+          <span>Catálogo de providers con API key OK en FCC (<code>/admin</code>). El motor Providers8082 razona con el mejor modelo FCC y ejecuta con Cursor SDK. Distinto de Freemodel/auth.json.</span>\n+        </div>\n+        <div class=\"freemodel-toolbar\">\n+          <button type=\"button\" class=\"secondary-command\" id=\"providers8082-refresh\">Actualizar estado</button>\n+          <button type=\"button\" class=\"secondary-command\" id=\"providers8082-open-models\">Abrir Modelos</button>\n+        </div>\n+        <div class=\"diagnostics-summary\" id=\"providers8082-summary\">Cargando Providers8082…</div>\n+        <div class=\"provider-status-list\" id=\"providers8082-provider-list\" aria-live=\"polite\"></div>\n+        <div class=\"freemodel-key-list\" id=\"providers8082-candidate-list\"></div>\n+        <p class=\"settings-note\" id=\"providers8082-note\">FCC por defecto en 127.0.0.1:8082. Para lab .16 define FCC_BASE_URL cuando el proxy se migre.</p>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"excellence\">\n+        <div class=\"settings-intro\">\n+          <strong>Excelencia · métricas + replay</strong>\n+          <span>Latencia, turnos sin resumen, accept/reject, Evidence Replay y estado Vault 2.3 / pipeline. Sin secretos.</span>\n+        </div>\n+        <div class=\"freemodel-toolbar\">\n+          <button type=\"button\" class=\"secondary-command\" id=\"excellence-refresh\">Actualizar</button>\n+        </div>\n+        <div class=\"diagnostics-summary\" id=\"excellence-summary\">Cargando métricas…</div>\n+        <div class=\"provider-status-list\" id=\"excellence-metrics-list\" aria-live=\"polite\"></div>\n+        <div class=\"freemodel-key-list\" id=\"excellence-replay-list\"></div>\n+        <p class=\"settings-note\" id=\"excellence-note\">Oleada A–D: Diff Guardian, métricas, replay, reviewer, router, vault, heatmap.</p>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"lab\">\n+        <div class=\"settings-intro\"><strong>Lab IA Fabric</strong><span>Estado de solo lectura del servidor IA (.16): Supervisor, Ollama, Qdrant, WhatsApp lab y FCC local. No ejecuta agentes ni mezcla misiones de negocio con Evidence Ledger.</span></div>\n+        <button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-lab\">Actualizar lab</button>\n+        <div class=\"diagnostics-summary\" id=\"lab-summary\">Todavía no se ha consultado el lab.</div>\n+        <div class=\"security-grid\" id=\"lab-grid\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"composer-private\">\n+        <div class=\"settings-intro\"><strong>Privado · Composer (operador)</strong><span>Índice read-only de metadatos Composer (`state.vscdb`). Requiere <code>CODEX_COMPOSER_PRIVATE=1</code>. Nunca escribe SQLite. Chats sin JSONL no son ejecutables.</span></div>\n+        <button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-composer-private\">Actualizar índice</button>\n+        <div class=\"diagnostics-summary\" id=\"composer-private-summary\">Pestaña visible solo con el flag de operador.</div>\n+        <div class=\"resource-list\" id=\"composer-private-list\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"neighbors\">\n+        <div class=\"settings-intro\"><strong>Guardrails de aplicaciones vecinas</strong><span>Inventario de puertos, health HTTP, preflight de variables (sin revelar valores) y registro con rollback para cambios de catálogo.</span></div>\n+        <div class=\"inline-actions\">\n+          <button type=\"button\" class=\"secondary-command\" id=\"refresh-neighbors\">Inventario</button>\n+          <button type=\"button\" class=\"secondary-command\" id=\"run-neighbor-preflight\">Preflight env</button>\n+          <button type=\"button\" class=\"primary-command\" id=\"run-neighbor-verify\">Verificar health ×3</button>\n+        </div>\n+        <div class=\"resource-summary\" id=\"neighbors-summary\">Todavía no se ha cargado el inventario de vecinas.</div>\n+        <div class=\"resource-list\" id=\"neighbors-list\"></div>\n+        <div class=\"settings-intro\" style=\"margin-top:14px\"><strong>Acciones registradas</strong><span>Solo mutaciones de catálogo autorizadas. El rollback restaura el snapshot anterior.</span></div>\n+        <div class=\"resource-list\" id=\"neighbors-actions\"></div>\n+      </section>\n+\n+      <section class=\"control-view\" data-control-view=\"diagnostics\">\n+        <div class=\"diagnostics-hero\">\n+          <div><strong>Centro de pruebas</strong><span>Comprueba todas las capas sin ejecutar herramientas ni modificar el proyecto.</span></div>\n+          <button type=\"button\" class=\"primary-command\" id=\"run-diagnostics\">Ejecutar todo</button>\n+        </div>\n+        <div class=\"diagnostics-summary\" id=\"diagnostics-summary\">Todavía no se ha ejecutado ninguna prueba.</div>\n+        <div class=\"diagnostics-list\" id=\"diagnostics-list\"></div>\n+      </section>\n+    </aside>\n+\n+    <nav class=\"mobile-nav\" aria-label=\"Vistas\">\n+      <button type=\"button\" data-target=\"threads\">Conversaciones</button>\n+      <button type=\"button\" data-target=\"chat\" class=\"is-active\">Chat</button>\n+      <button type=\"button\" data-target=\"activity\">Control</button>\n+    </nav>\n+  </div>\n+\n+  <section class=\"app-error-boundary is-hidden\" id=\"app-error-boundary\" role=\"alert\" aria-live=\"assertive\" data-fatal=\"false\">\n+    <div>\n+      <strong id=\"app-error-title\">La interfaz necesita atención</strong>\n+      <span id=\"app-error-detail\">No se pudo completar la operación solicitada.</span>\n+    </div>\n+    <div class=\"app-error-actions\">\n+      <button class=\"secondary-command\" id=\"dismiss-app-error\" type=\"button\">Cerrar aviso</button>\n+      <button class=\"primary-command\" id=\"retry-app\" type=\"button\">Recargar aplicación</button>\n+    </div>\n+  </section>\n+\n+  <dialog class=\"login-dialog\" id=\"login-dialog\">\n+    <form method=\"dialog\" id=\"login-form\">\n+      <div class=\"login-brand\"><div class=\"brand-mark\">C</div><div><strong id=\"login-product-name\">Codex Suite</strong><span>Acceso protegido por el bridge</span></div></div>\n+      <input type=\"text\" name=\"username\" value=\"cursor-mobile-bridge\" autocomplete=\"username\" hidden>\n+      <label for=\"token-input\">Token del bridge</label>\n+      <input id=\"token-input\" type=\"password\" autocomplete=\"current-password\" required>\n+      <p class=\"form-error\" id=\"login-error\" role=\"alert\"></p>\n+      <button class=\"primary-command\" type=\"submit\">Iniciar sesión</button>\n+    </form>\n+  </dialog>\n+\n+  <dialog class=\"action-dialog\" id=\"action-dialog\">\n+    <form method=\"dialog\" id=\"action-form\">\n+      <header><strong id=\"action-title\">Acción</strong><button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\">×</button></header>\n+      <div class=\"action-copy\" id=\"action-copy\"></div>\n+      <div class=\"action-fields\" id=\"action-fields\"></div>\n+      <p class=\"form-error\" id=\"action-error\" role=\"alert\"></p>\n+      <footer>\n+        <button class=\"secondary-command\" value=\"cancel\" type=\"submit\">Cancelar</button>\n+        <button class=\"primary-command\" id=\"action-confirm\" value=\"default\" type=\"submit\">Continuar</button>\n+      </footer>\n+    </form>\n+  </dialog>\n+\n+  <dialog class=\"providers8082-dialog\" id=\"providers8082-dialog\">\n+    <form method=\"dialog\" id=\"providers8082-form\">\n+      <header>\n+        <strong>Providers8082 · elegir modelo FCC</strong>\n+        <button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\">×</button>\n+      </header>\n+      <p class=\"action-copy\" id=\"providers8082-dialog-copy\">Evaluando proyecto y petición contra providers con API key OK…</p>\n+      <label>Modelo recomendado / alternativo\n+        <select id=\"providers8082-model-select\" aria-label=\"Modelo FCC\"></select>\n+      </label>\n+      <div class=\"providers8082-dialog-meta\" id=\"providers8082-dialog-meta\"></div>\n+      <p class=\"form-error\" id=\"providers8082-dialog-error\" role=\"alert\"></p>\n+      <footer>\n+        <button class=\"secondary-command\" value=\"cancel\" type=\"submit\">Cancelar</button>\n+        <button class=\"primary-command\" id=\"providers8082-confirm\" value=\"default\" type=\"submit\">Usar y razonar + ejecutar</button>\n+      </footer>\n+    </form>\n+  </dialog>\n+\n+  <dialog class=\"manual-dialog\" id=\"manual-dialog\">\n+    <header><strong>Manual de Codex Suite</strong><button class=\"icon-button\" id=\"close-manual\" type=\"button\" aria-label=\"Cerrar manual\">×</button></header>\n+    <iframe id=\"manual-frame\" title=\"Manual de uso\" loading=\"lazy\"></iframe>\n+  </dialog>\n+\n+  <dialog class=\"file-preview-dialog\" id=\"file-preview-dialog\">\n+    <header><strong id=\"file-preview-title\">Archivo</strong><button class=\"icon-button\" id=\"close-file-preview\" type=\"button\" aria-label=\"Cerrar archivo\">×</button></header>\n+    <pre id=\"file-preview-content\"></pre>\n+    <footer><span>Vista de solo lectura · máximo 256 KB</span><button type=\"button\" class=\"primary-command\" id=\"attach-preview-file\">Añadir al contexto</button></footer>\n+  </dialog>\n+\n+  <dialog class=\"integration-dialog\" id=\"integration-dialog\">\n+    <header><div><small id=\"integration-kind\">Integración</small><strong id=\"integration-title\">Detalle</strong></div><button class=\"icon-button\" id=\"close-integration\" type=\"button\" aria-label=\"Cerrar integración\">×</button></header>\n+    <div class=\"integration-content\" id=\"integration-content\"></div>\n+    <label class=\"integration-endpoint\" id=\"integration-endpoint-row\">Endpoint HTTPS<input id=\"integration-endpoint\" type=\"url\" placeholder=\"https://servidor.example/mcp\"></label>\n+    <p class=\"form-error\" id=\"integration-error\" role=\"alert\"></p>\n+    <footer><button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\">Analizar para este proyecto</button><button type=\"button\" class=\"primary-command\" id=\"activate-integration\">Habilitar</button></footer>\n+  </dialog>\n+\n+  <script type=\"module\" src=\"/static/codex-suite/app.js?v=58\"></script>\n </body>\n </html>\n ","linesAdded":688,"linesRemoved":686,"reconciled":true,"acceptedAt":1786326403393,"acceptedVia":"codex-suite","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/static\\codex-suite\\index.html</div><div class=\"diff-line diff-meta\">+++ b/static\\codex-suite\\index.html</div><div class=\"diff-line diff-hunk\">@@ -12,692 +12,694 @@</div><div class=\"diff-line diff-ctx\">   &lt;link rel=\"manifest\" href=\"/static/codex-suite/manifest.webmanifest\"&gt;</div><div class=\"diff-line diff-ctx\">   &lt;link rel=\"icon\" href=\"/static/codex-suite/icon.svg\" type=\"image/svg+xml\"&gt;</div><div class=\"diff-line diff-ctx\">   &lt;link rel=\"apple-touch-icon\" href=\"/static/codex-suite/icon.svg\"&gt;</div><div class=\"diff-line diff-del\">-  &lt;link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=56\"&gt;</div><div class=\"diff-line diff-del\">-&lt;/head&gt;</div><div class=\"diff-line diff-del\">-&lt;body&gt;</div><div class=\"diff-line diff-del\">-  &lt;div class=\"app-shell\" id=\"app-shell\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;aside class=\"rail panel-view\" data-view=\"threads\" aria-label=\"Conversaciones\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;header class=\"brand-bar\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"brand-mark\"&gt;C&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div&gt;&lt;strong id=\"brand-name\"&gt;Codex Suite&lt;/strong&gt;&lt;span&gt;Cursor Mobile Bridge&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;a class=\"icon-button\" href=\"/apps\" title=\"Abrir Apps\" aria-label=\"Abrir Apps\"&gt;⌘&lt;/a&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"icon-button\" id=\"open-manual\" type=\"button\" title=\"Manual\" aria-label=\"Abrir manual\"&gt;?&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"icon-button mobile-only\" id=\"close-rail\" type=\"button\" title=\"Cerrar conversaciones\" aria-label=\"Cerrar conversaciones\"&gt;×&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/header&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;div class=\"workspace-block\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;label for=\"workspace-select\"&gt;Espacio de trabajo&lt;/label&gt;</div><div class=\"diff-line diff-del\">-        &lt;select id=\"workspace-select\"&gt;&lt;/select&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"workspace-actions\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button class=\"secondary-command\" id=\"create-workspace\" type=\"button\"&gt;Nueva área&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button class=\"secondary-command\" id=\"attach-workspace\" type=\"button\"&gt;Vincular carpeta&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"workspace-ide-chips\" id=\"workspace-ide-chips\" hidden&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;label for=\"permission-select\"&gt;Permisos de herramientas&lt;/label&gt;</div><div class=\"diff-line diff-del\">-        &lt;select id=\"permission-select\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;option value=\"workspaceWrite\"&gt;Escritura en el proyecto · con aprobaciones&lt;/option&gt;</div><div class=\"diff-line diff-del\">-          &lt;option value=\"readOnly\"&gt;Solo lectura&lt;/option&gt;</div><div class=\"diff-line diff-del\">-        &lt;/select&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"primary-command\" id=\"new-thread\" type=\"button\"&gt;+ Nueva conversación&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/div&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;nav class=\"rail-tabs\" aria-label=\"Navegador del proyecto\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;button type=\"button\" class=\"is-active\" data-rail-tab=\"threads\"&gt;Conversaciones&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;button type=\"button\" data-rail-tab=\"explorer\"&gt;Explorador&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/nav&gt;</div><div class=\"diff-line diff-del\">-      &lt;section class=\"rail-view is-active\" data-rail-view=\"threads\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"list-heading\"&gt;&lt;span&gt;Conversaciones&lt;/span&gt;&lt;button class=\"icon-button\" id=\"refresh-threads\" type=\"button\" title=\"Actualizar\" aria-label=\"Actualizar\"&gt;↻&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"thread-list\" id=\"thread-list\" role=\"list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-      &lt;section class=\"rail-view\" data-rail-view=\"explorer\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"explorer-toolbar\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;select id=\"workspace-area-select\" aria-label=\"Área de trabajo\"&gt;&lt;option value=\"\"&gt;Proyecto completo&lt;/option&gt;&lt;/select&gt;</div><div class=\"diff-line diff-del\">-          &lt;button class=\"icon-button\" id=\"create-workspace-folder\" type=\"button\" title=\"Nueva carpeta\" aria-label=\"Nueva carpeta\"&gt;＋&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button class=\"icon-button\" id=\"refresh-explorer\" type=\"button\" title=\"Actualizar explorador\" aria-label=\"Actualizar explorador\"&gt;↻&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;p class=\"explorer-hint\"&gt;Arrastra archivos o carpetas al chat para añadir contexto.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"explorer-tree\" id=\"explorer-tree\" role=\"tree\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-    &lt;/aside&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-    &lt;main class=\"conversation panel-view is-active\" data-view=\"chat\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;header class=\"conversation-header\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"icon-button mobile-only\" id=\"open-rail\" type=\"button\" title=\"Abrir conversaciones\" aria-label=\"Abrir conversaciones\"&gt;☰&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"thread-title\"&gt;&lt;strong id=\"thread-title\"&gt;Nueva conversación&lt;/strong&gt;&lt;span id=\"thread-meta\"&gt;Selecciona un proyecto&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"connection\"&gt;&lt;span class=\"status-dot\" id=\"status-dot\"&gt;&lt;/span&gt;&lt;span id=\"status-text\"&gt;Sin conectar&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"secondary-command desktop-only\" id=\"toggle-activity\" type=\"button\"&gt;Control&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/header&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"timeline\" id=\"timeline\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"empty-state\" id=\"empty-state\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"empty-mark\"&gt;C&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;h1 id=\"empty-title\"&gt;¿En qué trabajamos?&lt;/h1&gt;</div><div class=\"diff-line diff-del\">-          &lt;p id=\"empty-copy\"&gt;Elige un proyecto y abre una conversación.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"turn-status-banner is-hidden\" id=\"turn-status-banner\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"turn-status-main\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;strong id=\"turn-status-title\"&gt;Sin turno activo&lt;/strong&gt;</div><div class=\"diff-line diff-del\">-          &lt;span id=\"turn-status-detail\"&gt;Abre o envía un mensaje para ver el progreso del agente.&lt;/span&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"secondary-command\" id=\"turn-status-open-activity\" type=\"button\"&gt;Ver actividad&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-      &lt;section class=\"turn-watchdog is-hidden\" id=\"turn-watchdog\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div&gt;&lt;strong id=\"turn-watchdog-title\"&gt;Turno en curso&lt;/strong&gt;&lt;span id=\"turn-watchdog-detail\"&gt;&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"secondary-command is-hidden\" id=\"recover-turn\" type=\"button\"&gt;Recuperar turno&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-      &lt;section class=\"execution-status\" id=\"execution-status\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;span class=\"execution-status-label\"&gt;Ejecución&lt;/span&gt;&lt;span id=\"execution-status-text\"&gt;Predeterminada · esperando conversación&lt;/span&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-      &lt;section class=\"approval-tray\" id=\"approval-tray\" aria-live=\"assertive\"&gt;&lt;/section&gt;</div><div class=\"diff-line diff-del\">-      &lt;section class=\"change-review-tray\" id=\"change-review-tray\" aria-live=\"polite\"&gt;&lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;footer class=\"composer-wrap\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"context-chips is-hidden\" id=\"context-chips\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;form class=\"composer\" id=\"composer-form\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"agent-toolbar\" aria-label=\"Modo de trabajo\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;select id=\"mode-select\" title=\"Modo de trabajo\" aria-label=\"Modo de trabajo\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"agent\"&gt;Agente&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"ask\"&gt;Consultar&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"plan\"&gt;Planificar&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"autopilot\"&gt;Piloto automático&lt;/option&gt;</div><div class=\"diff-line diff-del\">-            &lt;/select&gt;</div><div class=\"diff-line diff-del\">-            &lt;select id=\"participant-select\" title=\"Especialista\" aria-label=\"Especialista\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"workspace\"&gt;@workspace&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"tester\"&gt;@tester&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"reviewer\"&gt;@reviewer&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"terminal\"&gt;@terminal&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"browser\"&gt;@browser&lt;/option&gt;</div><div class=\"diff-line diff-del\">-            &lt;/select&gt;</div><div class=\"diff-line diff-del\">-            &lt;select id=\"delegation-select\" title=\"Subagentes\" aria-label=\"Subagentes\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"single\"&gt;Un agente&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"explicit\"&gt;Subagentes si los pido&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;option value=\"proactive\"&gt;Subagentes proactivos&lt;/option&gt;</div><div class=\"diff-line diff-del\">-            &lt;/select&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"smart-actions\" aria-label=\"Acciones inteligentes\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;button type=\"button\" data-smart-action=\"explain\"&gt;Explicar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;button type=\"button\" data-smart-action=\"fix\"&gt;Corregir&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;button type=\"button\" data-smart-action=\"tests\"&gt;Crear pruebas&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;button type=\"button\" data-smart-action=\"review\"&gt;Revisar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;button type=\"button\" data-smart-action=\"commit\"&gt;Mensaje de commit&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;textarea id=\"message-input\" rows=\"1\" maxlength=\"100000\" placeholder=\"Pide un cambio, una revisión o una explicación\" disabled&gt;&lt;/textarea&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"composer-tools\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"attachment-controls\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;button class=\"attachment-command\" id=\"attach-file\" type=\"button\" title=\"Adjuntar archivo o imagen\" aria-label=\"Adjuntar archivo o imagen\"&gt;＋&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;div class=\"attachment-menu is-hidden\" id=\"attachment-menu\"&gt;</div><div class=\"diff-line diff-del\">-                &lt;button type=\"button\" id=\"upload-file\"&gt;&lt;strong&gt;Subir archivo o imagen&lt;/strong&gt;&lt;span&gt;Desde este dispositivo · máximo 5 MB&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-                &lt;button type=\"button\" id=\"attach-workspace\"&gt;&lt;strong&gt;Contexto del proyecto&lt;/strong&gt;&lt;span&gt;Archivo o carpeta que ya existe&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-                &lt;button type=\"button\" id=\"context-codebase\"&gt;&lt;strong&gt;#codebase&lt;/strong&gt;&lt;span&gt;Buscar referencias relevantes en todo el proyecto&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-                &lt;button type=\"button\" id=\"context-terminal\"&gt;&lt;strong&gt;#terminal&lt;/strong&gt;&lt;span&gt;Usar errores y salidas recientes de la conversación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;/div&gt;</div><div class=\"diff-line diff-del\">-              &lt;input id=\"attachment-input\" type=\"file\" multiple hidden&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"run-options\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;select id=\"engine-select\" title=\"Motor\" aria-label=\"Motor de agente\"&gt;</div><div class=\"diff-line diff-del\">-                &lt;option value=\"cursor\" selected&gt;Cursor SDK&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                &lt;option value=\"codex\"&gt;Codex App Server&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                &lt;option value=\"providers8082\"&gt;Providers8082&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;/select&gt;</div><div class=\"diff-line diff-del\">-              &lt;select id=\"model-select\" title=\"Modelo\" aria-label=\"Modelo\"&gt;</div><div class=\"diff-line diff-del\">-                &lt;option value=\"\"&gt;Automático · predeterminado&lt;/option&gt;</div><div class=\"diff-line diff-del\">-              &lt;/select&gt;</div><div class=\"diff-line diff-del\">-              &lt;button class=\"run-options-toggle\" id=\"toggle-run-options\" type=\"button\" aria-expanded=\"false\" aria-controls=\"advanced-run-options\"&gt;Opciones&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;div class=\"advanced-run-options\" id=\"advanced-run-options\"&gt;</div><div class=\"diff-line diff-del\">-                &lt;select id=\"effort-select\" title=\"Esfuerzo\" aria-label=\"Esfuerzo\"&gt;</div><div class=\"diff-line diff-del\">-                  &lt;option value=\"\"&gt;Esfuerzo&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                &lt;/select&gt;</div><div class=\"diff-line diff-del\">-                &lt;select id=\"service-tier-select\" title=\"Velocidad\" aria-label=\"Velocidad\"&gt;</div><div class=\"diff-line diff-del\">-                  &lt;option value=\"\"&gt;Tier&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                &lt;/select&gt;</div><div class=\"diff-line diff-del\">-                &lt;select id=\"personality-select\" title=\"Personalidad\" aria-label=\"Personalidad\"&gt;</div><div class=\"diff-line diff-del\">-                  &lt;option value=\"\"&gt;Personalidad&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                  &lt;option value=\"pragmatic\"&gt;Pragmática&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                  &lt;option value=\"friendly\"&gt;Amable&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                  &lt;option value=\"none\"&gt;Neutra&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                &lt;/select&gt;</div><div class=\"diff-line diff-del\">-                &lt;div id=\"cursor-run-options\" class=\"cursor-run-options is-hidden\"&gt;</div><div class=\"diff-line diff-del\">-                  &lt;select id=\"cursor-source-select\" title=\"Chat Cursor a continuar\" aria-label=\"Chat Cursor a continuar\"&gt;</div><div class=\"diff-line diff-del\">-                    &lt;option value=\"\"&gt;Cursor · chat nuevo Suite (crea JSONL IDE)&lt;/option&gt;</div><div class=\"diff-line diff-del\">-                  &lt;/select&gt;</div><div class=\"diff-line diff-del\">-                  &lt;p class=\"cursor-history-note\" id=\"cursor-history-note\"&gt;Historial local del proyecto. Tras Suite: Recargar ventana / reabrir chat en el IDE.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-                  &lt;label class=\"toggle-row cursor-serena-toggle\"&gt;&lt;input id=\"cursor-use-serena\" type=\"checkbox\"&gt;&lt;span&gt;Serena MCP&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-                &lt;/div&gt;</div><div class=\"diff-line diff-del\">-                &lt;div id=\"providers8082-run-options\" class=\"providers8082-run-options is-hidden\"&gt;</div><div class=\"diff-line diff-del\">-                  &lt;p class=\"cursor-history-note\" id=\"providers8082-run-note\"&gt;Doble motor: FCC razona → Cursor ejecuta. Requiere FCC :8082 y CURSOR_API_KEY.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-                  &lt;button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-panel\"&gt;Abrir Providers8082&lt;/button&gt;</div><div class=\"diff-line diff-del\">-                &lt;/div&gt;</div><div class=\"diff-line diff-del\">-              &lt;/div&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-            &lt;button class=\"danger-command is-hidden\" id=\"cancel-turn\" type=\"button\"&gt;Detener&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;button class=\"send-command\" id=\"send-message\" type=\"submit\" disabled aria-label=\"Enviar\"&gt;↑&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/form&gt;</div><div class=\"diff-line diff-del\">-      &lt;/footer&gt;</div><div class=\"diff-line diff-del\">-    &lt;/main&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-    &lt;aside class=\"activity panel-view\" data-view=\"activity\" id=\"activity-panel\" aria-label=\"Actividad\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;header class=\"activity-header\"&gt;&lt;div class=\"activity-title\"&gt;&lt;strong&gt;Control Codex&lt;/strong&gt;&lt;span id=\"control-lead\"&gt;Elige un área para operar sin perder el hilo del chat.&lt;/span&gt;&lt;/div&gt;&lt;button class=\"icon-button\" id=\"close-activity\" type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-      &lt;nav class=\"control-hub\" aria-label=\"Panel de control\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"control-groups\" role=\"tablist\" aria-label=\"Áreas de control\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"is-active\" data-control-group=\"operate\"&gt;Operar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-group=\"project\"&gt;Proyecto&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-group=\"quality\"&gt;Calidad&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-group=\"system\"&gt;Sistema&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"control-tabs\" role=\"tablist\" aria-label=\"Secciones\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"is-active\" data-control-tab=\"actions\" data-control-group-tab=\"operate\"&gt;Acciones&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"commands\" data-control-group-tab=\"operate\"&gt;Comandos /&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"events\" data-control-group-tab=\"operate\"&gt;Eventos&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"resources\" data-control-group-tab=\"project\" hidden&gt;Recursos&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"workspace\" data-control-group-tab=\"project\" hidden&gt;Proyecto&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"marketplace\" data-control-group-tab=\"project\" hidden&gt;Catálogo&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"complements\" data-control-group-tab=\"project\" hidden&gt;Complementos&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"models\" data-control-group-tab=\"quality\" hidden&gt;Modelos&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"missions\" data-control-group-tab=\"quality\" hidden&gt;Misiones&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"contracts\" data-control-group-tab=\"quality\" hidden&gt;Contratos&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"staging\" data-control-group-tab=\"quality\" hidden&gt;Staging&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"twin\" data-control-group-tab=\"quality\" hidden&gt;Gemelo&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"security\" data-control-group-tab=\"system\" hidden&gt;Seguridad&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"lab\" data-control-group-tab=\"system\" hidden&gt;Lab IA&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"freemodel\" data-control-group-tab=\"system\" hidden&gt;Freemodel&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"providers8082\" data-control-group-tab=\"system\" hidden&gt;Providers8082&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"excellence\" data-control-group-tab=\"quality\" hidden&gt;Excelencia&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"composer-private\" data-control-group-tab=\"system\" hidden id=\"control-tab-composer-private\"&gt;Privado / Composer&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"neighbors\" data-control-group-tab=\"system\" hidden&gt;Vecinas&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"settings\" data-control-group-tab=\"system\" hidden&gt;Ajustes&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-control-tab=\"diagnostics\" data-control-group-tab=\"system\" hidden&gt;Pruebas&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/nav&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view is-active\" data-control-view=\"actions\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"action-grid\" id=\"action-grid\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"fork\"&gt;&lt;strong&gt;Bifurcar&lt;/strong&gt;&lt;span&gt;Copia independiente de la conversación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"compact\"&gt;&lt;strong&gt;Compactar&lt;/strong&gt;&lt;span&gt;Reduce el contexto conservando lo importante&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"rename\"&gt;&lt;strong&gt;Renombrar&lt;/strong&gt;&lt;span&gt;Cambia el nombre de la conversación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"goal\"&gt;&lt;strong&gt;Objetivo&lt;/strong&gt;&lt;span&gt;Define una meta persistente&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"review\"&gt;&lt;strong&gt;Revisar&lt;/strong&gt;&lt;span&gt;Revisión nativa del servidor de Codex&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"rollback\"&gt;&lt;strong&gt;Volver a un punto&lt;/strong&gt;&lt;span&gt;Restaura historial y archivos de un checkpoint&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"mention\"&gt;&lt;strong&gt;Adjuntar ruta&lt;/strong&gt;&lt;span&gt;Archivo o carpeta del proyecto&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" data-action=\"archive\"&gt;&lt;strong&gt;Archivar&lt;/strong&gt;&lt;span&gt;Oculta la conversación sin borrarla&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"danger-action\" data-action=\"delete\"&gt;&lt;strong&gt;Eliminar&lt;/strong&gt;&lt;span&gt;Borrado permanente con confirmación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"session-actions\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;a href=\"/apps\" class=\"secondary-command\"&gt;Abrir las 47 apps&lt;/a&gt;</div><div class=\"diff-line diff-del\">-          &lt;a href=\"/codex-suite/manual\" class=\"secondary-command\"&gt;Manual completo&lt;/a&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"logout-session\"&gt;Cerrar sesión&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"resources\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Capacidades del workspace&lt;/strong&gt;&lt;span&gt;Modelos, habilidades, MCP y plugins anunciados por App Server para el proyecto activo. Aquí se analizan e instalan sin salir del chat.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"inline-actions\"&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-resources\"&gt;Actualizar recursos&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-summary\" id=\"resource-summary\"&gt;Selecciona un proyecto para cargar capacidades.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-groups\" id=\"resource-groups\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"models\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Router de modelos&lt;/strong&gt;&lt;span&gt;Alternativas locales y externas de FCC, filtradas para ingeniería. Ninguna clave se envía al navegador.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"inline-actions\"&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-model-router\"&gt;Comprobar catálogos&lt;/button&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"run-model-evals\"&gt;Probar proveedores&lt;/button&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"run-workspace-model-evals\"&gt;Evaluar selección en este proyecto&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"evidence-summary\" id=\"model-router-summary\"&gt;Comprobación pendiente.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"model-auto-card\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div&gt;&lt;strong&gt;Modo Automático por proyecto&lt;/strong&gt;&lt;span id=\"model-auto-status\"&gt;Desactivado. Requiere evals de calidad aprobados.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"toggle-auto-model\"&gt;Activar Automático&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;form class=\"model-budget-card\" id=\"model-budget-form\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div&gt;&lt;strong&gt;Presupuesto de evaluaciones del proyecto&lt;/strong&gt;&lt;span id=\"model-budget-status\"&gt;24 solicitudes diarias · 4 modelos por ejecución&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Solicitudes diarias&lt;input id=\"model-budget-daily\" type=\"number\" min=\"4\" max=\"500\" value=\"24\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Modelos por ejecución&lt;input id=\"model-budget-per-run\" type=\"number\" min=\"1\" max=\"8\" value=\"4\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label class=\"toggle-row\"&gt;&lt;input id=\"model-budget-unknown\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Permitir coste desconocido&lt;/strong&gt;&lt;small&gt;Requiere confirmación igualmente.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"submit\" class=\"secondary-command\"&gt;Guardar presupuesto&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/form&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"model-tool-cert-card\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div&gt;&lt;strong&gt;Certificación real de herramientas&lt;/strong&gt;&lt;span&gt;Prueba efímera, de solo lectura y con confirmación. No guarda prompts ni resultados.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Modelo evaluado&lt;select id=\"model-tool-cert-model\"&gt;&lt;option value=\"\"&gt;Sin modelos evaluados&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Herramienta de consulta&lt;select id=\"model-tool-cert-tool\"&gt;&lt;option value=\"\"&gt;Sin herramientas seguras anunciadas&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"run-tool-certification\"&gt;Certificar llamada real&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;p class=\"settings-note\" id=\"model-tool-cert-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"model-ranking\" id=\"model-workspace-ranking\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"provider-status-list\" id=\"provider-status-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"model-router-filters\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Vista&lt;select id=\"model-cost-filter\"&gt;&lt;option value=\"verified\"&gt;Inferencia verificada&lt;/option&gt;&lt;option value=\"comparable\"&gt;Alternativas completas a GPT-Codex&lt;/option&gt;&lt;option value=\"free\"&gt;Gratis y local&lt;/option&gt;&lt;option value=\"all\"&gt;Todos los candidatos&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Buscar&lt;input id=\"model-router-search\" type=\"search\" placeholder=\"Codex, Qwen, DeepSeek…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"model-router-list\" id=\"model-router-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;p class=\"settings-note\"&gt;Marca hasta 8 modelos con inferencia verificada y evalúalos. El ranking combina calidad, coste declarado, latencia, herramientas declaradas y tasa de fallos; no almacena prompts ni respuestas. Cambiar el proveedor afecta a conversaciones nuevas.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"workspace\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Memoria y áreas del proyecto&lt;/strong&gt;&lt;span&gt;Persisten por espacio de trabajo y se incorporan al siguiente turno.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"workspace-profile-form\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Memoria general&lt;textarea id=\"project-memory\" class=\"settings-editor profile-editor\" maxlength=\"100000\" placeholder=\"Decisiones, arquitectura y preferencias duraderas…\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"inline-actions\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"secondary-command\" id=\"new-workspace-area\"&gt;Nueva área&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"danger-command\" id=\"delete-workspace-area\"&gt;Eliminar área&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Área&lt;select id=\"workspace-area-editor\"&gt;&lt;option value=\"\"&gt;Proyecto completo&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Nombre&lt;input id=\"workspace-area-name\" maxlength=\"80\" placeholder=\"Interfaz, API, Producción…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Carpetas, una por línea&lt;textarea id=\"workspace-area-folders\" rows=\"4\" placeholder=\"src&amp;#10;public&amp;#10;templates\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Instrucciones del área&lt;textarea id=\"workspace-area-instructions\" rows=\"5\" maxlength=\"40000\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Memoria del área&lt;textarea id=\"workspace-area-memory\" rows=\"6\" maxlength=\"80000\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"primary-command\" id=\"save-workspace-profile\"&gt;Guardar memoria y áreas&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;p class=\"settings-note\" id=\"workspace-profile-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"marketplace\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Catálogo de MCP y plugins&lt;/strong&gt;&lt;span&gt;Primero revisa lo ya disponible en Codex. Después descubre MCP públicos, analiza el encaje con este proyecto e instala solo con confirmación.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"marketplace-panel\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header class=\"marketplace-panel-head\"&gt;&lt;strong&gt;Disponibles en Codex&lt;/strong&gt;&lt;span&gt;MCP y plugins anunciados por App Server · análisis aislado por proyecto&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"resource-list\" id=\"installed-integrations-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"marketplace-panel\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header class=\"marketplace-panel-head\"&gt;&lt;strong&gt;Descubrir MCP públicos&lt;/strong&gt;&lt;span&gt;Catálogo mcp.so · requiere endpoint HTTPS real antes de instalar&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"marketplace-search\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;input id=\"mcp-market-search\" type=\"search\" placeholder=\"Buscar navegador, GitHub, base de datos…\" enterkeyhint=\"search\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"secondary-command\" id=\"load-mcp-market\"&gt;Buscar MCP&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"resource-list\" id=\"mcp-market-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-        &lt;details class=\"marketplace-advanced\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;summary&gt;Instalación avanzada&lt;/summary&gt;</div><div class=\"diff-line diff-del\">-          &lt;fieldset class=\"marketplace-install\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;MCP remoto HTTPS&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Nombre&lt;input id=\"mcp-install-name\" maxlength=\"64\" placeholder=\"context7\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Endpoint HTTPS&lt;input id=\"mcp-install-url\" type=\"url\" placeholder=\"https://servidor.example/mcp\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"primary-command\" id=\"install-remote-mcp\"&gt;Instalar en Codex&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-          &lt;fieldset class=\"marketplace-install\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Añadir catálogo de plugins&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Repositorio Git&lt;input id=\"plugin-market-source\" placeholder=\"owner/repo o https://github.com/owner/repo.git\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"secondary-command\" id=\"add-plugin-market\"&gt;Añadir catálogo&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-        &lt;/details&gt;</div><div class=\"diff-line diff-del\">-        &lt;p class=\"settings-note\" id=\"marketplace-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"complements\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Complementos inteligentes del proyecto&lt;/strong&gt;&lt;span&gt;Capacidades nativas de Codex Suite, analizadas y habilitadas únicamente para el espacio de trabajo activo. No instalan software en editores del PC.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-summary\" id=\"stack-summary\"&gt;Analizando proyecto…&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;label class=\"command-search\"&gt;&lt;span&gt;Buscar en el catálogo&lt;/span&gt;&lt;input id=\"complement-search\" type=\"search\" placeholder=\"PHP, SFTP, SQL, HTML…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-list\" id=\"complement-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;form class=\"deployment-form\" id=\"deployment-form\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;h3&gt;Despliegue de archivos aceptados&lt;/h3&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Nombre&lt;input id=\"deploy-name\" maxlength=\"100\" value=\"Producción\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Protocolo&lt;select id=\"deploy-protocol\"&gt;&lt;option value=\"sftp\"&gt;SFTP&lt;/option&gt;&lt;option value=\"ftps\"&gt;FTPS&lt;/option&gt;&lt;option value=\"ftp\"&gt;FTP sin cifrar&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Host&lt;input id=\"deploy-host\" maxlength=\"253\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Puerto&lt;input id=\"deploy-port\" type=\"number\" min=\"1\" max=\"65535\" value=\"22\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Usuario&lt;input id=\"deploy-user\" autocomplete=\"username\" maxlength=\"160\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Contraseña&lt;input id=\"deploy-password\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Vacío = conservar\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Ruta remota&lt;input id=\"deploy-remote-path\" value=\"/\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Ignorar, una regla por línea&lt;textarea id=\"deploy-ignore\" rows=\"4\"&gt;**/.git/**&amp;#10;**/.vscode/**&amp;#10;**/.env&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label class=\"toggle-row\"&gt;&lt;input id=\"deploy-on-accept\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Subir al aceptar&lt;/strong&gt;&lt;small&gt;Solo archivos aceptados en Revisar cambios.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label class=\"toggle-row\"&gt;&lt;input id=\"deploy-sync-deletes\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Sincronizar borrados&lt;/strong&gt;&lt;small&gt;Elimina en remoto archivos eliminados y aceptados.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"inline-actions\"&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"test-deployment\"&gt;Probar&lt;/button&gt;&lt;button type=\"submit\" class=\"primary-command\"&gt;Guardar despliegue&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;p class=\"settings-note\" id=\"deployment-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-        &lt;/form&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"security\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Centro de seguridad y salud&lt;/strong&gt;&lt;span&gt;Monitorización privada y de solo lectura del equipo anfitrión, el proyecto, las integraciones, el despliegue y el Docker remoto configurado. Nunca corrige el sistema sin una autorización separada.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-security\"&gt;Actualizar diagnóstico&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-summary\" id=\"security-summary\"&gt;Cargando último estado seguro…&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"security-grid\" id=\"security-grid\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"commands\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;label class=\"command-search\"&gt;&lt;span&gt;Buscar comando&lt;/span&gt;&lt;input id=\"command-search\" type=\"search\" placeholder=\"/review, permisos, skills\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"command-counts\" id=\"command-counts\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"command-list\" id=\"command-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"events\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"activity-summary\" id=\"activity-summary\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"activity-list\" id=\"activity-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"missions\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Misiones y evidencias&lt;/strong&gt;&lt;span&gt;Trazabilidad persistente y redactada por proyecto. No almacena prompts, respuestas, comandos, diffs ni secretos.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"mission-toolbar\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;&lt;input id=\"mission-current-thread\" type=\"checkbox\"&gt; Solo conversación actual&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-evidence\"&gt;Actualizar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"evidence-summary\" id=\"evidence-summary\"&gt;Selecciona un proyecto para consultar sus misiones.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"mission-layout\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"mission-list\" id=\"mission-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"mission-detail\" id=\"mission-detail\"&gt;&lt;span&gt;Selecciona una misión para ver sus evidencias.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"twin\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Gemelo temporal del proyecto&lt;/strong&gt;&lt;span&gt;Fotografía técnica y operativa de solo lectura. Compara arquitectura, archivos, dependencias, integraciones, misiones, despliegues y riesgos sin guardar código ni secretos.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"twin-toolbar\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Momento del proyecto&lt;select id=\"twin-snapshot-select\"&gt;&lt;option value=\"\"&gt;Sin snapshots&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"primary-command\" id=\"create-twin-snapshot\"&gt;Crear snapshot&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"evidence-summary\" id=\"twin-summary\" aria-live=\"polite\"&gt;Selecciona un proyecto para consultar su gemelo.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"twin-metrics\" id=\"twin-metrics\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header&gt;&lt;strong&gt;Cambios desde el snapshot anterior&lt;/strong&gt;&lt;span&gt;Metadatos temporales; no contiene diffs ni contenido de archivos.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"twin-change-grid\" id=\"twin-comparison\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header&gt;&lt;strong&gt;Mapa de arquitectura&lt;/strong&gt;&lt;span&gt;Directorios principales, áreas gobernadas y ecosistemas de dependencias.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"twin-topology\" id=\"twin-topology\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header&gt;&lt;strong&gt;Dependencias declaradas&lt;/strong&gt;&lt;span&gt;Leídas únicamente de manifests reconocidos y limitados.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"twin-list\" id=\"twin-dependencies\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header&gt;&lt;strong&gt;Operación y confianza&lt;/strong&gt;&lt;span&gt;Misiones, integraciones, despliegue y señales redactadas de seguridad.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"twin-operation-grid\" id=\"twin-operations\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"twin-list\" id=\"twin-security\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"staging\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Preflight Staging verificable&lt;/strong&gt;&lt;span&gt;Prepara un paquete local no ejecutable con los cambios pendientes y aplica verificadores fijos. Nunca acepta comandos desde el navegador.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"staging-toolbar\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div id=\"staging-current\"&gt;&lt;strong&gt;Sin checkpoint pendiente&lt;/strong&gt;&lt;span&gt;Finaliza un turno con cambios para preparar su staging.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"primary-command\" id=\"run-staging-preflight\" disabled&gt;Preparar preflight&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"evidence-summary\" id=\"staging-summary\" aria-live=\"polite\"&gt;Selecciona una conversación con cambios pendientes.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"staging-section\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header&gt;&lt;strong&gt;Gates globales&lt;/strong&gt;&lt;span&gt;Límites de archivos y tamaño del paquete.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"staging-gates\" id=\"staging-gates\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"staging-section\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header&gt;&lt;strong&gt;Archivos propuestos&lt;/strong&gt;&lt;span&gt;Integridad, secretos, JSON y sintaxis JavaScript. Los valores sensibles nunca se muestran.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"staging-files\" id=\"staging-files\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-        &lt;section class=\"staging-section\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;header&gt;&lt;strong&gt;Historial del checkpoint&lt;/strong&gt;&lt;span&gt;Los paquetes superados se conservan localmente; no son ejecutables.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"staging-history\" id=\"staging-history\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/section&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"contracts\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Contrato de misión&lt;/strong&gt;&lt;span&gt;Define el resultado, alcance y gates antes de que Codex modifique archivos. La aceptación se bloquea si el contrato no se cumple.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;form class=\"mission-contract-form\" id=\"mission-contract-form\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Resultado esperado&lt;textarea id=\"contract-objective\" rows=\"5\" maxlength=\"5000\" placeholder=\"Describe qué debe quedar funcionando y cómo reconocer el éxito.\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Archivos o carpetas permitidos, uno por línea&lt;textarea id=\"contract-allowed-paths\" rows=\"5\" placeholder=\"lib/**&amp;#10;static/codex-suite/**&amp;#10;test/**\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Pruebas obligatorias, una por línea&lt;textarea id=\"contract-required-tests\" rows=\"4\" placeholder=\"npm test&amp;#10;node --check server.js\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;label&gt;Criterios de aceptación, uno por línea&lt;textarea id=\"contract-acceptance-criteria\" rows=\"5\" placeholder=\"La UI no tiene overflow horizontal&amp;#10;No se exponen credenciales\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Riesgo autorizado&lt;select id=\"contract-risk\"&gt;&lt;option value=\"low\"&gt;Bajo&lt;/option&gt;&lt;option value=\"medium\"&gt;Medio&lt;/option&gt;&lt;option value=\"high\"&gt;Alto&lt;/option&gt;&lt;option value=\"critical\"&gt;Crítico&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"contract-active\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Contrato activo&lt;/strong&gt;&lt;small&gt;Se inyecta en cada turno.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"submit\" class=\"primary-command\"&gt;Guardar contrato&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;p class=\"settings-note\" id=\"contract-status\"&gt;Selecciona una conversación para crear su contrato.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-        &lt;/form&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"contract-gates\" id=\"contract-gates\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"settings\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;form class=\"settings-form\" id=\"settings-form\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;strong&gt;Personaliza la experiencia&lt;/strong&gt;</div><div class=\"diff-line diff-del\">-            &lt;span&gt;Los cambios visuales se previsualizan al instante. Las políticas se aplican al guardar.&lt;/span&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-          &lt;fieldset&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Marca e interfaz&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Nombre del producto&lt;input id=\"setting-product-name\" maxlength=\"40\" required&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Mensaje de bienvenida&lt;input id=\"setting-welcome-message\" maxlength=\"120\" required&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Idioma&lt;select id=\"setting-language\"&gt;&lt;option value=\"es\"&gt;Español&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Tema&lt;select id=\"setting-theme\"&gt;&lt;option value=\"system\"&gt;Sistema&lt;/option&gt;&lt;option value=\"light\"&gt;Luz limpia&lt;/option&gt;&lt;option value=\"dark\"&gt;Grafito&lt;/option&gt;&lt;option value=\"midnight\"&gt;Medianoche&lt;/option&gt;&lt;option value=\"warm\"&gt;Papel cálido&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Acento&lt;select id=\"setting-accent\"&gt;&lt;option value=\"green\"&gt;Verde&lt;/option&gt;&lt;option value=\"blue\"&gt;Azul&lt;/option&gt;&lt;option value=\"amber\"&gt;Ámbar&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Densidad&lt;select id=\"setting-density\"&gt;&lt;option value=\"comfortable\"&gt;Cómoda&lt;/option&gt;&lt;option value=\"compact\"&gt;Compacta&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Tamaño de texto&lt;select id=\"setting-font-size\"&gt;&lt;option value=\"small\"&gt;Pequeño&lt;/option&gt;&lt;option value=\"standard\"&gt;Estándar&lt;/option&gt;&lt;option value=\"large\"&gt;Grande&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"setting-reduce-motion\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Reducir movimiento&lt;/strong&gt;&lt;small&gt;Desactiva animaciones no esenciales.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-          &lt;fieldset&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Comportamiento&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"setting-enter-send\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Enter para enviar&lt;/strong&gt;&lt;small&gt;Con Shift+Enter se inserta una línea.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"setting-keep-control\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Mantener Control abierto&lt;/strong&gt;&lt;small&gt;Conserva el panel al seleccionar una acción.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Eventos visibles&lt;input id=\"setting-event-limit\" type=\"number\" min=\"20\" max=\"500\" step=\"10\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-          &lt;fieldset&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Política del servidor&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Permiso predeterminado&lt;select id=\"setting-default-permission\"&gt;&lt;option value=\"workspaceWrite\"&gt;Escritura con aprobaciones&lt;/option&gt;&lt;option value=\"readOnly\"&gt;Solo lectura&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Conversaciones por proyecto&lt;input id=\"setting-thread-limit\" type=\"number\" min=\"10\" max=\"100\" step=\"10\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"policy-list\" aria-label=\"Políticas de seguridad inmutables\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;span&gt;Proyecto restringido&lt;/span&gt;&lt;span&gt;Red desactivada&lt;/span&gt;&lt;span&gt;Aprobación bajo demanda&lt;/span&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-          &lt;fieldset&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Codex y modelo&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"credential-status\" id=\"credential-status\"&gt;Comprobando credencial…&lt;/div&gt;</div><div class=\"diff-line diff-del\">-            &lt;p class=\"settings-note\"&gt;Freemodel (auth.json / App Server) y Providers8082 (FCC :8082) son sistemas distintos. Usa Control → Freemodel o Control → Providers8082.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Nueva API key (única)&lt;input id=\"codex-api-key\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Solo escritura; nunca se muestra\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"danger-command\" id=\"clear-api-key\"&gt;Eliminar API key activa de auth.json&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"secondary-command\" id=\"open-freemodel-keys\"&gt;Abrir gestión Freemodel&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-settings\"&gt;Abrir Providers8082&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Proveedor activo&lt;input id=\"codex-model-provider\" maxlength=\"48\" placeholder=\"openai\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Modelo&lt;input id=\"codex-model\" maxlength=\"160\" placeholder=\"Modelo predeterminado\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Esfuerzo&lt;select id=\"codex-reasoning-effort\"&gt;&lt;option value=\"\"&gt;Predeterminado&lt;/option&gt;&lt;option value=\"minimal\"&gt;Mínimo&lt;/option&gt;&lt;option value=\"low\"&gt;Bajo&lt;/option&gt;&lt;option value=\"medium\"&gt;Medio&lt;/option&gt;&lt;option value=\"high\"&gt;Alto&lt;/option&gt;&lt;option value=\"xhigh\"&gt;Muy alto&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Nivel de servicio&lt;select id=\"codex-service-tier\"&gt;&lt;option value=\"\"&gt;Predeterminado&lt;/option&gt;&lt;option value=\"auto\"&gt;Automático&lt;/option&gt;&lt;option value=\"fast\"&gt;Rápido&lt;/option&gt;&lt;option value=\"flex\"&gt;Flexible&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Personalidad&lt;select id=\"codex-personality\"&gt;&lt;option value=\"\"&gt;Predeterminada&lt;/option&gt;&lt;option value=\"none\"&gt;Neutra&lt;/option&gt;&lt;option value=\"friendly\"&gt;Amable&lt;/option&gt;&lt;option value=\"pragmatic\"&gt;Pragmática&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Credenciales&lt;select id=\"codex-credential-store\"&gt;&lt;option value=\"auto\"&gt;Automático&lt;/option&gt;&lt;option value=\"keyring\"&gt;Almacén de Windows&lt;/option&gt;&lt;option value=\"file\"&gt;auth.json&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Aprobación&lt;select id=\"codex-approval-policy\"&gt;&lt;option value=\"on-request\"&gt;Bajo demanda&lt;/option&gt;&lt;option value=\"untrusted\"&gt;Solo comandos confiables&lt;/option&gt;&lt;option value=\"never\"&gt;Nunca solicitar&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Revisor&lt;select id=\"codex-approvals-reviewer\"&gt;&lt;option value=\"user\"&gt;Administrador&lt;/option&gt;&lt;option value=\"auto_review\"&gt;Subagente de revisión&lt;/option&gt;&lt;option value=\"guardian_subagent\"&gt;Guardian heredado&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Entorno aislado&lt;select id=\"codex-sandbox-mode\"&gt;&lt;option value=\"workspace-write\"&gt;Escritura en el proyecto&lt;/option&gt;&lt;option value=\"read-only\"&gt;Solo lectura&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-          &lt;fieldset&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Instrucciones del proyecto · AGENTS.md&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;p class=\"settings-note\"&gt;Reglas persistentes de arquitectura, pruebas, estilo y seguridad que Codex carga automáticamente.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-            &lt;textarea id=\"agents-content\" class=\"settings-editor\" rows=\"12\" maxlength=\"200000\" spellcheck=\"false\" placeholder=\"# AGENTS.md\"&gt;&lt;/textarea&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"inline-actions\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;button type=\"button\" class=\"secondary-command\" id=\"reload-instructions\"&gt;Recargar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-              &lt;button type=\"button\" class=\"primary-command\" id=\"save-instructions\"&gt;Guardar AGENTS.md&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-            &lt;p class=\"settings-note\" id=\"instructions-status\"&gt;Selecciona un proyecto para cargar sus instrucciones.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-          &lt;fieldset&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Proveedor personalizado&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;ID&lt;input id=\"provider-id\" maxlength=\"48\" placeholder=\"freemodel\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-              &lt;label&gt;Nombre&lt;input id=\"provider-name\" maxlength=\"80\" placeholder=\"FreeModel\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;/div&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;URL base&lt;input id=\"provider-base-url\" type=\"url\" placeholder=\"https://api.example.com\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;API de transporte&lt;select id=\"provider-wire-api\"&gt;&lt;option value=\"responses\"&gt;Responses&lt;/option&gt;&lt;option value=\"chat\"&gt;Chat&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;p class=\"settings-note\"&gt;Solo se gestionan campos públicos. Cabeceras y secretos no se devuelven al navegador.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-          &lt;p class=\"form-error\" id=\"settings-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-          &lt;div class=\"settings-actions\"&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"button\" class=\"secondary-command\" id=\"settings-reset\"&gt;Restaurar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"submit\" class=\"primary-command\" id=\"settings-save\"&gt;Guardar ajustes&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;/form&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"freemodel\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;strong&gt;Freemodel · API keys&lt;/strong&gt;</div><div class=\"diff-line diff-del\">-          &lt;span&gt;Almacena varias claves, consulta el estado de saldo y activa una en &lt;code&gt;~/.codex/auth.json&lt;/code&gt;. Los valores completos nunca se muestran en el navegador.&lt;/span&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"freemodel-toolbar\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"freemodel-refresh\"&gt;Actualizar lista&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"freemodel-probe-all\"&gt;Comprobar saldos&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-summary\" id=\"freemodel-summary\"&gt;Cargando claves Freemodel…&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"freemodel-key-list\" id=\"freemodel-key-list\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;form class=\"freemodel-add-form\" id=\"freemodel-add-form\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;fieldset&gt;</div><div class=\"diff-line diff-del\">-            &lt;legend&gt;Añadir API key&lt;/legend&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;Alias&lt;input id=\"freemodel-key-label\" maxlength=\"80\" placeholder=\"Cuenta principal, reserva…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label&gt;API key&lt;input id=\"freemodel-key-input\" type=\"password\" autocomplete=\"new-password\" required placeholder=\"fe_oa_… (solo escritura)\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"freemodel-key-activate\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Activar al guardar&lt;/strong&gt;&lt;small&gt;Escribe en auth.json y reinicia App Server.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-            &lt;p class=\"form-error\" id=\"freemodel-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-            &lt;button type=\"submit\" class=\"primary-command\" id=\"freemodel-key-save\"&gt;Guardar clave&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;/fieldset&gt;</div><div class=\"diff-line diff-del\">-        &lt;/form&gt;</div><div class=\"diff-line diff-del\">-        &lt;p class=\"settings-note\"&gt;El saldo exacto en $ no está en la API pública; el estado se deduce con una sonda mínima a Freemodel (ok / saldo agotado / inválida).&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"providers8082\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;strong&gt;Providers8082 · FCC + Cursor&lt;/strong&gt;</div><div class=\"diff-line diff-del\">-          &lt;span&gt;Catálogo de providers con API key OK en FCC (&lt;code&gt;/admin&lt;/code&gt;). El motor Providers8082 razona con el mejor modelo FCC y ejecuta con Cursor SDK. Distinto de Freemodel/auth.json.&lt;/span&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"freemodel-toolbar\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"providers8082-refresh\"&gt;Actualizar estado&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"providers8082-open-models\"&gt;Abrir Modelos&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-summary\" id=\"providers8082-summary\"&gt;Cargando Providers8082…&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"provider-status-list\" id=\"providers8082-provider-list\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"freemodel-key-list\" id=\"providers8082-candidate-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;p class=\"settings-note\" id=\"providers8082-note\"&gt;FCC por defecto en 127.0.0.1:8082. Para lab .16 define FCC_BASE_URL cuando el proxy se migre.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"excellence\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;strong&gt;Excelencia · métricas + replay&lt;/strong&gt;</div><div class=\"diff-line diff-del\">-          &lt;span&gt;Latencia, turnos sin resumen, accept/reject, Evidence Replay y estado Vault 2.3 / pipeline. Sin secretos.&lt;/span&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"freemodel-toolbar\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"excellence-refresh\"&gt;Actualizar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-summary\" id=\"excellence-summary\"&gt;Cargando métricas…&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"provider-status-list\" id=\"excellence-metrics-list\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"freemodel-key-list\" id=\"excellence-replay-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;p class=\"settings-note\" id=\"excellence-note\"&gt;Oleada A–D: Diff Guardian, métricas, replay, reviewer, router, vault, heatmap.&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"lab\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Lab IA Fabric&lt;/strong&gt;&lt;span&gt;Estado de solo lectura del servidor IA (.16): Supervisor, Ollama, Qdrant, WhatsApp lab y FCC local. No ejecuta agentes ni mezcla misiones de negocio con Evidence Ledger.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-lab\"&gt;Actualizar lab&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-summary\" id=\"lab-summary\"&gt;Todavía no se ha consultado el lab.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"security-grid\" id=\"lab-grid\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"composer-private\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Privado · Composer (operador)&lt;/strong&gt;&lt;span&gt;Índice read-only de metadatos Composer (`state.vscdb`). Requiere &lt;code&gt;CODEX_COMPOSER_PRIVATE=1&lt;/code&gt;. Nunca escribe SQLite. Chats sin JSONL no son ejecutables.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-composer-private\"&gt;Actualizar índice&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-summary\" id=\"composer-private-summary\"&gt;Pestaña visible solo con el flag de operador.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-list\" id=\"composer-private-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"neighbors\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Guardrails de aplicaciones vecinas&lt;/strong&gt;&lt;span&gt;Inventario de puertos, health HTTP, preflight de variables (sin revelar valores) y registro con rollback para cambios de catálogo.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"inline-actions\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-neighbors\"&gt;Inventario&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"secondary-command\" id=\"run-neighbor-preflight\"&gt;Preflight env&lt;/button&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"primary-command\" id=\"run-neighbor-verify\"&gt;Verificar health ×3&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-summary\" id=\"neighbors-summary\"&gt;Todavía no se ha cargado el inventario de vecinas.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-list\" id=\"neighbors-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"settings-intro\" style=\"margin-top:14px\"&gt;&lt;strong&gt;Acciones registradas&lt;/strong&gt;&lt;span&gt;Solo mutaciones de catálogo autorizadas. El rollback restaura el snapshot anterior.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"resource-list\" id=\"neighbors-actions\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-      &lt;section class=\"control-view\" data-control-view=\"diagnostics\"&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-hero\"&gt;</div><div class=\"diff-line diff-del\">-          &lt;div&gt;&lt;strong&gt;Centro de pruebas&lt;/strong&gt;&lt;span&gt;Comprueba todas las capas sin ejecutar herramientas ni modificar el proyecto.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-          &lt;button type=\"button\" class=\"primary-command\" id=\"run-diagnostics\"&gt;Ejecutar todo&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-summary\" id=\"diagnostics-summary\"&gt;Todavía no se ha ejecutado ninguna prueba.&lt;/div&gt;</div><div class=\"diff-line diff-del\">-        &lt;div class=\"diagnostics-list\" id=\"diagnostics-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;/section&gt;</div><div class=\"diff-line diff-del\">-    &lt;/aside&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-    &lt;nav class=\"mobile-nav\" aria-label=\"Vistas\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;button type=\"button\" data-target=\"threads\"&gt;Conversaciones&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;button type=\"button\" data-target=\"chat\" class=\"is-active\"&gt;Chat&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;button type=\"button\" data-target=\"activity\"&gt;Control&lt;/button&gt;</div><div class=\"diff-line diff-del\">-    &lt;/nav&gt;</div><div class=\"diff-line diff-del\">-  &lt;/div&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;section class=\"app-error-boundary is-hidden\" id=\"app-error-boundary\" role=\"alert\" aria-live=\"assertive\" data-fatal=\"false\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;div&gt;</div><div class=\"diff-line diff-del\">-      &lt;strong id=\"app-error-title\"&gt;La interfaz necesita atención&lt;/strong&gt;</div><div class=\"diff-line diff-del\">-      &lt;span id=\"app-error-detail\"&gt;No se pudo completar la operación solicitada.&lt;/span&gt;</div><div class=\"diff-line diff-del\">-    &lt;/div&gt;</div><div class=\"diff-line diff-del\">-    &lt;div class=\"app-error-actions\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;button class=\"secondary-command\" id=\"dismiss-app-error\" type=\"button\"&gt;Cerrar aviso&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;button class=\"primary-command\" id=\"retry-app\" type=\"button\"&gt;Recargar aplicación&lt;/button&gt;</div><div class=\"diff-line diff-del\">-    &lt;/div&gt;</div><div class=\"diff-line diff-del\">-  &lt;/section&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;dialog class=\"login-dialog\" id=\"login-dialog\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;form method=\"dialog\" id=\"login-form\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;div class=\"login-brand\"&gt;&lt;div class=\"brand-mark\"&gt;C&lt;/div&gt;&lt;div&gt;&lt;strong id=\"login-product-name\"&gt;Codex Suite&lt;/strong&gt;&lt;span&gt;Acceso protegido por el bridge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;input type=\"text\" name=\"username\" value=\"cursor-mobile-bridge\" autocomplete=\"username\" hidden&gt;</div><div class=\"diff-line diff-del\">-      &lt;label for=\"token-input\"&gt;Token del bridge&lt;/label&gt;</div><div class=\"diff-line diff-del\">-      &lt;input id=\"token-input\" type=\"password\" autocomplete=\"current-password\" required&gt;</div><div class=\"diff-line diff-del\">-      &lt;p class=\"form-error\" id=\"login-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;button class=\"primary-command\" type=\"submit\"&gt;Iniciar sesión&lt;/button&gt;</div><div class=\"diff-line diff-del\">-    &lt;/form&gt;</div><div class=\"diff-line diff-del\">-  &lt;/dialog&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;dialog class=\"action-dialog\" id=\"action-dialog\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;form method=\"dialog\" id=\"action-form\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;header&gt;&lt;strong id=\"action-title\"&gt;Acción&lt;/strong&gt;&lt;button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-      &lt;div class=\"action-copy\" id=\"action-copy\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;div class=\"action-fields\" id=\"action-fields\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;p class=\"form-error\" id=\"action-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;footer&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"secondary-command\" value=\"cancel\" type=\"submit\"&gt;Cancelar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"primary-command\" id=\"action-confirm\" value=\"default\" type=\"submit\"&gt;Continuar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/footer&gt;</div><div class=\"diff-line diff-del\">-    &lt;/form&gt;</div><div class=\"diff-line diff-del\">-  &lt;/dialog&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;dialog class=\"providers8082-dialog\" id=\"providers8082-dialog\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;form method=\"dialog\" id=\"providers8082-form\"&gt;</div><div class=\"diff-line diff-del\">-      &lt;header&gt;</div><div class=\"diff-line diff-del\">-        &lt;strong&gt;Providers8082 · elegir modelo FCC&lt;/strong&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\"&gt;×&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/header&gt;</div><div class=\"diff-line diff-del\">-      &lt;p class=\"action-copy\" id=\"providers8082-dialog-copy\"&gt;Evaluando proyecto y petición contra providers con API key OK…&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;label&gt;Modelo recomendado / alternativo</div><div class=\"diff-line diff-del\">-        &lt;select id=\"providers8082-model-select\" aria-label=\"Modelo FCC\"&gt;&lt;/select&gt;</div><div class=\"diff-line diff-del\">-      &lt;/label&gt;</div><div class=\"diff-line diff-del\">-      &lt;div class=\"providers8082-dialog-meta\" id=\"providers8082-dialog-meta\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-      &lt;p class=\"form-error\" id=\"providers8082-dialog-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-      &lt;footer&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"secondary-command\" value=\"cancel\" type=\"submit\"&gt;Cancelar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-        &lt;button class=\"primary-command\" id=\"providers8082-confirm\" value=\"default\" type=\"submit\"&gt;Usar y razonar + ejecutar&lt;/button&gt;</div><div class=\"diff-line diff-del\">-      &lt;/footer&gt;</div><div class=\"diff-line diff-del\">-    &lt;/form&gt;</div><div class=\"diff-line diff-del\">-  &lt;/dialog&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;dialog class=\"manual-dialog\" id=\"manual-dialog\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;header&gt;&lt;strong&gt;Manual de Codex Suite&lt;/strong&gt;&lt;button class=\"icon-button\" id=\"close-manual\" type=\"button\" aria-label=\"Cerrar manual\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-    &lt;iframe id=\"manual-frame\" title=\"Manual de uso\" loading=\"lazy\"&gt;&lt;/iframe&gt;</div><div class=\"diff-line diff-del\">-  &lt;/dialog&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;dialog class=\"file-preview-dialog\" id=\"file-preview-dialog\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;header&gt;&lt;strong id=\"file-preview-title\"&gt;Archivo&lt;/strong&gt;&lt;button class=\"icon-button\" id=\"close-file-preview\" type=\"button\" aria-label=\"Cerrar archivo\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-    &lt;pre id=\"file-preview-content\"&gt;&lt;/pre&gt;</div><div class=\"diff-line diff-del\">-    &lt;footer&gt;&lt;span&gt;Vista de solo lectura · máximo 256 KB&lt;/span&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"attach-preview-file\"&gt;Añadir al contexto&lt;/button&gt;&lt;/footer&gt;</div><div class=\"diff-line diff-del\">-  &lt;/dialog&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;dialog class=\"integration-dialog\" id=\"integration-dialog\"&gt;</div><div class=\"diff-line diff-del\">-    &lt;header&gt;&lt;div&gt;&lt;small id=\"integration-kind\"&gt;Integración&lt;/small&gt;&lt;strong id=\"integration-title\"&gt;Detalle&lt;/strong&gt;&lt;/div&gt;&lt;button class=\"icon-button\" id=\"close-integration\" type=\"button\" aria-label=\"Cerrar integración\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-del\">-    &lt;div class=\"integration-content\" id=\"integration-content\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-del\">-    &lt;label class=\"integration-endpoint\" id=\"integration-endpoint-row\"&gt;Endpoint HTTPS&lt;input id=\"integration-endpoint\" type=\"url\" placeholder=\"https://servidor.example/mcp\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-del\">-    &lt;p class=\"form-error\" id=\"integration-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-del\">-    &lt;footer&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\"&gt;Analizar para este proyecto&lt;/button&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"activate-integration\"&gt;Habilitar&lt;/button&gt;&lt;/footer&gt;</div><div class=\"diff-line diff-del\">-  &lt;/dialog&gt;</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-  &lt;script type=\"module\" src=\"/static/codex-suite/app.js?v=56\"&gt;&lt;/script&gt;</div><div class=\"diff-line diff-add\">+  &lt;link rel=\"stylesheet\" href=\"/static/codex-suite/style.css?v=58\"&gt;</div><div class=\"diff-line diff-add\">+&lt;/head&gt;</div><div class=\"diff-line diff-add\">+&lt;body&gt;</div><div class=\"diff-line diff-add\">+  &lt;div class=\"app-shell\" id=\"app-shell\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;aside class=\"rail panel-view\" data-view=\"threads\" aria-label=\"Conversaciones\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;header class=\"brand-bar\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"brand-mark\"&gt;C&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div&gt;&lt;strong id=\"brand-name\"&gt;Codex Suite&lt;/strong&gt;&lt;span&gt;Cursor Mobile Bridge&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;a class=\"icon-button\" href=\"/apps\" title=\"Abrir Apps\" aria-label=\"Abrir Apps\"&gt;⌘&lt;/a&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"icon-button\" id=\"open-manual\" type=\"button\" title=\"Manual\" aria-label=\"Abrir manual\"&gt;?&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"icon-button mobile-only\" id=\"close-rail\" type=\"button\" title=\"Cerrar conversaciones\" aria-label=\"Cerrar conversaciones\"&gt;×&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/header&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;div class=\"workspace-block\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;label for=\"workspace-select\"&gt;Espacio de trabajo&lt;/label&gt;</div><div class=\"diff-line diff-add\">+        &lt;select id=\"workspace-select\"&gt;&lt;/select&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"workspace-actions\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button class=\"secondary-command\" id=\"create-workspace\" type=\"button\"&gt;Nueva área&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button class=\"secondary-command\" id=\"attach-workspace\" type=\"button\"&gt;Vincular carpeta&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"workspace-ide-chips\" id=\"workspace-ide-chips\" hidden&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;label for=\"permission-select\"&gt;Permisos de herramientas&lt;/label&gt;</div><div class=\"diff-line diff-add\">+        &lt;select id=\"permission-select\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;option value=\"workspaceWrite\"&gt;Escritura en el proyecto · con aprobaciones&lt;/option&gt;</div><div class=\"diff-line diff-add\">+          &lt;option value=\"readOnly\"&gt;Solo lectura&lt;/option&gt;</div><div class=\"diff-line diff-add\">+        &lt;/select&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"primary-command\" id=\"new-thread\" type=\"button\"&gt;+ Nueva conversación&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/div&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;nav class=\"rail-tabs\" aria-label=\"Navegador del proyecto\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;button type=\"button\" class=\"is-active\" data-rail-tab=\"threads\"&gt;Conversaciones&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;button type=\"button\" data-rail-tab=\"explorer\"&gt;Explorador&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/nav&gt;</div><div class=\"diff-line diff-add\">+      &lt;section class=\"rail-view is-active\" data-rail-view=\"threads\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"list-heading\"&gt;&lt;span&gt;Conversaciones&lt;/span&gt;&lt;button class=\"icon-button\" id=\"refresh-threads\" type=\"button\" title=\"Actualizar\" aria-label=\"Actualizar\"&gt;↻&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"thread-list\" id=\"thread-list\" role=\"list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;section class=\"rail-view\" data-rail-view=\"explorer\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"explorer-toolbar\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;select id=\"workspace-area-select\" aria-label=\"Área de trabajo\"&gt;&lt;option value=\"\"&gt;Proyecto completo&lt;/option&gt;&lt;/select&gt;</div><div class=\"diff-line diff-add\">+          &lt;button class=\"icon-button\" id=\"create-workspace-folder\" type=\"button\" title=\"Nueva carpeta\" aria-label=\"Nueva carpeta\"&gt;＋&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button class=\"icon-button\" id=\"refresh-explorer\" type=\"button\" title=\"Actualizar explorador\" aria-label=\"Actualizar explorador\"&gt;↻&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;p class=\"explorer-hint\"&gt;Arrastra archivos o carpetas al chat para añadir contexto.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"explorer-tree\" id=\"explorer-tree\" role=\"tree\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+    &lt;/aside&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+    &lt;main class=\"conversation panel-view is-active\" data-view=\"chat\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;header class=\"conversation-header\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"icon-button mobile-only\" id=\"open-rail\" type=\"button\" title=\"Abrir conversaciones\" aria-label=\"Abrir conversaciones\"&gt;☰&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"thread-title\"&gt;&lt;strong id=\"thread-title\"&gt;Nueva conversación&lt;/strong&gt;&lt;span id=\"thread-meta\"&gt;Selecciona un proyecto&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"connection\"&gt;&lt;span class=\"status-dot\" id=\"status-dot\"&gt;&lt;/span&gt;&lt;span id=\"status-text\"&gt;Sin conectar&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"secondary-command desktop-only\" id=\"toggle-activity\" type=\"button\"&gt;Control&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/header&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;div class=\"conversation-scroll\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;section class=\"timeline\" id=\"timeline\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"empty-state\" id=\"empty-state\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"empty-mark\"&gt;C&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;h1 id=\"empty-title\"&gt;¿En qué trabajamos?&lt;/h1&gt;</div><div class=\"diff-line diff-add\">+          &lt;p id=\"empty-copy\"&gt;Elige un proyecto y abre una conversación.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"turn-status-banner is-hidden\" id=\"turn-status-banner\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"turn-status-main\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;strong id=\"turn-status-title\"&gt;Sin turno activo&lt;/strong&gt;</div><div class=\"diff-line diff-add\">+          &lt;span id=\"turn-status-detail\"&gt;Abre o envía un mensaje para ver el progreso del agente.&lt;/span&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"secondary-command\" id=\"turn-status-open-activity\" type=\"button\"&gt;Ver actividad&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;section class=\"turn-watchdog is-hidden\" id=\"turn-watchdog\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div&gt;&lt;strong id=\"turn-watchdog-title\"&gt;Turno en curso&lt;/strong&gt;&lt;span id=\"turn-watchdog-detail\"&gt;&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"secondary-command is-hidden\" id=\"recover-turn\" type=\"button\"&gt;Recuperar turno&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;section class=\"execution-status\" id=\"execution-status\" aria-live=\"polite\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;span class=\"execution-status-label\"&gt;Ejecución&lt;/span&gt;&lt;span id=\"execution-status-text\"&gt;Predeterminada · esperando conversación&lt;/span&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;section class=\"approval-tray\" id=\"approval-tray\" aria-live=\"assertive\"&gt;&lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;section class=\"change-review-tray\" id=\"change-review-tray\" aria-live=\"polite\"&gt;&lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;/div&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;footer class=\"composer-wrap\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"context-chips is-hidden\" id=\"context-chips\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;form class=\"composer\" id=\"composer-form\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"agent-toolbar\" aria-label=\"Modo de trabajo\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;select id=\"mode-select\" title=\"Modo de trabajo\" aria-label=\"Modo de trabajo\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"agent\"&gt;Agente&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"ask\"&gt;Consultar&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"plan\"&gt;Planificar&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"autopilot\"&gt;Piloto automático&lt;/option&gt;</div><div class=\"diff-line diff-add\">+            &lt;/select&gt;</div><div class=\"diff-line diff-add\">+            &lt;select id=\"participant-select\" title=\"Especialista\" aria-label=\"Especialista\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"workspace\"&gt;@workspace&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"tester\"&gt;@tester&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"reviewer\"&gt;@reviewer&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"terminal\"&gt;@terminal&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"browser\"&gt;@browser&lt;/option&gt;</div><div class=\"diff-line diff-add\">+            &lt;/select&gt;</div><div class=\"diff-line diff-add\">+            &lt;select id=\"delegation-select\" title=\"Subagentes\" aria-label=\"Subagentes\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"single\"&gt;Un agente&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"explicit\"&gt;Subagentes si los pido&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;option value=\"proactive\"&gt;Subagentes proactivos&lt;/option&gt;</div><div class=\"diff-line diff-add\">+            &lt;/select&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"smart-actions\" aria-label=\"Acciones inteligentes\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;button type=\"button\" data-smart-action=\"explain\"&gt;Explicar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;button type=\"button\" data-smart-action=\"fix\"&gt;Corregir&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;button type=\"button\" data-smart-action=\"tests\"&gt;Crear pruebas&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;button type=\"button\" data-smart-action=\"review\"&gt;Revisar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;button type=\"button\" data-smart-action=\"commit\"&gt;Mensaje de commit&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;textarea id=\"message-input\" rows=\"1\" maxlength=\"100000\" placeholder=\"Pide un cambio, una revisión o una explicación\" disabled&gt;&lt;/textarea&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"composer-tools\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"attachment-controls\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;button class=\"attachment-command\" id=\"attach-file\" type=\"button\" title=\"Adjuntar archivo o imagen\" aria-label=\"Adjuntar archivo o imagen\"&gt;＋&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;div class=\"attachment-menu is-hidden\" id=\"attachment-menu\"&gt;</div><div class=\"diff-line diff-add\">+                &lt;button type=\"button\" id=\"upload-file\"&gt;&lt;strong&gt;Subir archivo o imagen&lt;/strong&gt;&lt;span&gt;Desde este dispositivo · máximo 5 MB&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+                &lt;button type=\"button\" id=\"attach-workspace\"&gt;&lt;strong&gt;Contexto del proyecto&lt;/strong&gt;&lt;span&gt;Archivo o carpeta que ya existe&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+                &lt;button type=\"button\" id=\"context-codebase\"&gt;&lt;strong&gt;#codebase&lt;/strong&gt;&lt;span&gt;Buscar referencias relevantes en todo el proyecto&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+                &lt;button type=\"button\" id=\"context-terminal\"&gt;&lt;strong&gt;#terminal&lt;/strong&gt;&lt;span&gt;Usar errores y salidas recientes de la conversación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;/div&gt;</div><div class=\"diff-line diff-add\">+              &lt;input id=\"attachment-input\" type=\"file\" multiple hidden&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"run-options\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;select id=\"engine-select\" title=\"Motor\" aria-label=\"Motor de agente\"&gt;</div><div class=\"diff-line diff-add\">+                &lt;option value=\"cursor\" selected&gt;Cursor SDK&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                &lt;option value=\"codex\"&gt;Codex App Server&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                &lt;option value=\"providers8082\"&gt;Providers8082&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;/select&gt;</div><div class=\"diff-line diff-add\">+              &lt;select id=\"model-select\" title=\"Modelo\" aria-label=\"Modelo\"&gt;</div><div class=\"diff-line diff-add\">+                &lt;option value=\"\"&gt;Automático · predeterminado&lt;/option&gt;</div><div class=\"diff-line diff-add\">+              &lt;/select&gt;</div><div class=\"diff-line diff-add\">+              &lt;button class=\"run-options-toggle\" id=\"toggle-run-options\" type=\"button\" aria-expanded=\"false\" aria-controls=\"advanced-run-options\"&gt;Opciones&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;div class=\"advanced-run-options\" id=\"advanced-run-options\"&gt;</div><div class=\"diff-line diff-add\">+                &lt;select id=\"effort-select\" title=\"Esfuerzo\" aria-label=\"Esfuerzo\"&gt;</div><div class=\"diff-line diff-add\">+                  &lt;option value=\"\"&gt;Esfuerzo&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                &lt;/select&gt;</div><div class=\"diff-line diff-add\">+                &lt;select id=\"service-tier-select\" title=\"Velocidad\" aria-label=\"Velocidad\"&gt;</div><div class=\"diff-line diff-add\">+                  &lt;option value=\"\"&gt;Tier&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                &lt;/select&gt;</div><div class=\"diff-line diff-add\">+                &lt;select id=\"personality-select\" title=\"Personalidad\" aria-label=\"Personalidad\"&gt;</div><div class=\"diff-line diff-add\">+                  &lt;option value=\"\"&gt;Personalidad&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                  &lt;option value=\"pragmatic\"&gt;Pragmática&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                  &lt;option value=\"friendly\"&gt;Amable&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                  &lt;option value=\"none\"&gt;Neutra&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                &lt;/select&gt;</div><div class=\"diff-line diff-add\">+                &lt;div id=\"cursor-run-options\" class=\"cursor-run-options is-hidden\"&gt;</div><div class=\"diff-line diff-add\">+                  &lt;select id=\"cursor-source-select\" title=\"Chat Cursor a continuar\" aria-label=\"Chat Cursor a continuar\"&gt;</div><div class=\"diff-line diff-add\">+                    &lt;option value=\"\"&gt;Cursor · chat nuevo Suite (crea JSONL IDE)&lt;/option&gt;</div><div class=\"diff-line diff-add\">+                  &lt;/select&gt;</div><div class=\"diff-line diff-add\">+                  &lt;p class=\"cursor-history-note\" id=\"cursor-history-note\"&gt;Historial local del proyecto. Tras Suite: Recargar ventana / reabrir chat en el IDE.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+                  &lt;label class=\"toggle-row cursor-serena-toggle\"&gt;&lt;input id=\"cursor-use-serena\" type=\"checkbox\"&gt;&lt;span&gt;Serena MCP&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+                &lt;/div&gt;</div><div class=\"diff-line diff-add\">+                &lt;div id=\"providers8082-run-options\" class=\"providers8082-run-options is-hidden\"&gt;</div><div class=\"diff-line diff-add\">+                  &lt;p class=\"cursor-history-note\" id=\"providers8082-run-note\"&gt;Doble motor: FCC razona → Cursor ejecuta. Requiere FCC :8082 y CURSOR_API_KEY.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+                  &lt;button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-panel\"&gt;Abrir Providers8082&lt;/button&gt;</div><div class=\"diff-line diff-add\">+                &lt;/div&gt;</div><div class=\"diff-line diff-add\">+              &lt;/div&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+            &lt;button class=\"danger-command is-hidden\" id=\"cancel-turn\" type=\"button\"&gt;Detener&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;button class=\"send-command\" id=\"send-message\" type=\"submit\" disabled aria-label=\"Enviar\"&gt;↑&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/form&gt;</div><div class=\"diff-line diff-add\">+      &lt;/footer&gt;</div><div class=\"diff-line diff-add\">+    &lt;/main&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+    &lt;aside class=\"activity panel-view\" data-view=\"activity\" id=\"activity-panel\" aria-label=\"Actividad\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;header class=\"activity-header\"&gt;&lt;div class=\"activity-title\"&gt;&lt;strong&gt;Control Codex&lt;/strong&gt;&lt;span id=\"control-lead\"&gt;Elige un área para operar sin perder el hilo del chat.&lt;/span&gt;&lt;/div&gt;&lt;button class=\"icon-button\" id=\"close-activity\" type=\"button\" title=\"Cerrar\" aria-label=\"Cerrar\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+      &lt;nav class=\"control-hub\" aria-label=\"Panel de control\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"control-groups\" role=\"tablist\" aria-label=\"Áreas de control\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"is-active\" data-control-group=\"operate\"&gt;Operar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-group=\"project\"&gt;Proyecto&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-group=\"quality\"&gt;Calidad&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-group=\"system\"&gt;Sistema&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"control-tabs\" role=\"tablist\" aria-label=\"Secciones\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"is-active\" data-control-tab=\"actions\" data-control-group-tab=\"operate\"&gt;Acciones&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"commands\" data-control-group-tab=\"operate\"&gt;Comandos /&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"events\" data-control-group-tab=\"operate\"&gt;Eventos&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"resources\" data-control-group-tab=\"project\" hidden&gt;Recursos&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"workspace\" data-control-group-tab=\"project\" hidden&gt;Proyecto&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"marketplace\" data-control-group-tab=\"project\" hidden&gt;Catálogo&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"complements\" data-control-group-tab=\"project\" hidden&gt;Complementos&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"models\" data-control-group-tab=\"quality\" hidden&gt;Modelos&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"missions\" data-control-group-tab=\"quality\" hidden&gt;Misiones&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"contracts\" data-control-group-tab=\"quality\" hidden&gt;Contratos&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"staging\" data-control-group-tab=\"quality\" hidden&gt;Staging&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"twin\" data-control-group-tab=\"quality\" hidden&gt;Gemelo&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"security\" data-control-group-tab=\"system\" hidden&gt;Seguridad&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"lab\" data-control-group-tab=\"system\" hidden&gt;Lab IA&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"freemodel\" data-control-group-tab=\"system\" hidden&gt;Freemodel&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"providers8082\" data-control-group-tab=\"system\" hidden&gt;Providers8082&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"excellence\" data-control-group-tab=\"quality\" hidden&gt;Excelencia&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"composer-private\" data-control-group-tab=\"system\" hidden id=\"control-tab-composer-private\"&gt;Privado / Composer&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"neighbors\" data-control-group-tab=\"system\" hidden&gt;Vecinas&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"settings\" data-control-group-tab=\"system\" hidden&gt;Ajustes&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-control-tab=\"diagnostics\" data-control-group-tab=\"system\" hidden&gt;Pruebas&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/nav&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view is-active\" data-control-view=\"actions\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"action-grid\" id=\"action-grid\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"fork\"&gt;&lt;strong&gt;Bifurcar&lt;/strong&gt;&lt;span&gt;Copia independiente de la conversación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"compact\"&gt;&lt;strong&gt;Compactar&lt;/strong&gt;&lt;span&gt;Reduce el contexto conservando lo importante&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"rename\"&gt;&lt;strong&gt;Renombrar&lt;/strong&gt;&lt;span&gt;Cambia el nombre de la conversación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"goal\"&gt;&lt;strong&gt;Objetivo&lt;/strong&gt;&lt;span&gt;Define una meta persistente&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"review\"&gt;&lt;strong&gt;Revisar&lt;/strong&gt;&lt;span&gt;Revisión nativa del servidor de Codex&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"rollback\"&gt;&lt;strong&gt;Volver a un punto&lt;/strong&gt;&lt;span&gt;Restaura historial y archivos de un checkpoint&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"mention\"&gt;&lt;strong&gt;Adjuntar ruta&lt;/strong&gt;&lt;span&gt;Archivo o carpeta del proyecto&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" data-action=\"archive\"&gt;&lt;strong&gt;Archivar&lt;/strong&gt;&lt;span&gt;Oculta la conversación sin borrarla&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"danger-action\" data-action=\"delete\"&gt;&lt;strong&gt;Eliminar&lt;/strong&gt;&lt;span&gt;Borrado permanente con confirmación&lt;/span&gt;&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"session-actions\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;a href=\"/apps\" class=\"secondary-command\"&gt;Abrir las 47 apps&lt;/a&gt;</div><div class=\"diff-line diff-add\">+          &lt;a href=\"/codex-suite/manual\" class=\"secondary-command\"&gt;Manual completo&lt;/a&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"logout-session\"&gt;Cerrar sesión&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"resources\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Capacidades del workspace&lt;/strong&gt;&lt;span&gt;Modelos, habilidades, MCP y plugins anunciados por App Server para el proyecto activo. Aquí se analizan e instalan sin salir del chat.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"inline-actions\"&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-resources\"&gt;Actualizar recursos&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-summary\" id=\"resource-summary\"&gt;Selecciona un proyecto para cargar capacidades.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-groups\" id=\"resource-groups\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"models\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Router de modelos&lt;/strong&gt;&lt;span&gt;Alternativas locales y externas de FCC, filtradas para ingeniería. Ninguna clave se envía al navegador.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"inline-actions\"&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-model-router\"&gt;Comprobar catálogos&lt;/button&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"run-model-evals\"&gt;Probar proveedores&lt;/button&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"run-workspace-model-evals\"&gt;Evaluar selección en este proyecto&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"evidence-summary\" id=\"model-router-summary\"&gt;Comprobación pendiente.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"model-auto-card\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div&gt;&lt;strong&gt;Modo Automático por proyecto&lt;/strong&gt;&lt;span id=\"model-auto-status\"&gt;Desactivado. Requiere evals de calidad aprobados.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"toggle-auto-model\"&gt;Activar Automático&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;form class=\"model-budget-card\" id=\"model-budget-form\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div&gt;&lt;strong&gt;Presupuesto de evaluaciones del proyecto&lt;/strong&gt;&lt;span id=\"model-budget-status\"&gt;24 solicitudes diarias · 4 modelos por ejecución&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Solicitudes diarias&lt;input id=\"model-budget-daily\" type=\"number\" min=\"4\" max=\"500\" value=\"24\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Modelos por ejecución&lt;input id=\"model-budget-per-run\" type=\"number\" min=\"1\" max=\"8\" value=\"4\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label class=\"toggle-row\"&gt;&lt;input id=\"model-budget-unknown\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Permitir coste desconocido&lt;/strong&gt;&lt;small&gt;Requiere confirmación igualmente.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"submit\" class=\"secondary-command\"&gt;Guardar presupuesto&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/form&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"model-tool-cert-card\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div&gt;&lt;strong&gt;Certificación real de herramientas&lt;/strong&gt;&lt;span&gt;Prueba efímera, de solo lectura y con confirmación. No guarda prompts ni resultados.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Modelo evaluado&lt;select id=\"model-tool-cert-model\"&gt;&lt;option value=\"\"&gt;Sin modelos evaluados&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Herramienta de consulta&lt;select id=\"model-tool-cert-tool\"&gt;&lt;option value=\"\"&gt;Sin herramientas seguras anunciadas&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"run-tool-certification\"&gt;Certificar llamada real&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;p class=\"settings-note\" id=\"model-tool-cert-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"model-ranking\" id=\"model-workspace-ranking\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"provider-status-list\" id=\"provider-status-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"model-router-filters\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Vista&lt;select id=\"model-cost-filter\"&gt;&lt;option value=\"verified\"&gt;Inferencia verificada&lt;/option&gt;&lt;option value=\"comparable\"&gt;Alternativas completas a GPT-Codex&lt;/option&gt;&lt;option value=\"free\"&gt;Gratis y local&lt;/option&gt;&lt;option value=\"all\"&gt;Todos los candidatos&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Buscar&lt;input id=\"model-router-search\" type=\"search\" placeholder=\"Codex, Qwen, DeepSeek…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"model-router-list\" id=\"model-router-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;p class=\"settings-note\"&gt;Marca hasta 8 modelos con inferencia verificada y evalúalos. El ranking combina calidad, coste declarado, latencia, herramientas declaradas y tasa de fallos; no almacena prompts ni respuestas. Cambiar el proveedor afecta a conversaciones nuevas.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"workspace\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Memoria y áreas del proyecto&lt;/strong&gt;&lt;span&gt;Persisten por espacio de trabajo y se incorporan al siguiente turno.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"workspace-profile-form\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Memoria general&lt;textarea id=\"project-memory\" class=\"settings-editor profile-editor\" maxlength=\"100000\" placeholder=\"Decisiones, arquitectura y preferencias duraderas…\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"inline-actions\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"secondary-command\" id=\"new-workspace-area\"&gt;Nueva área&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"danger-command\" id=\"delete-workspace-area\"&gt;Eliminar área&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Área&lt;select id=\"workspace-area-editor\"&gt;&lt;option value=\"\"&gt;Proyecto completo&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Nombre&lt;input id=\"workspace-area-name\" maxlength=\"80\" placeholder=\"Interfaz, API, Producción…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Carpetas, una por línea&lt;textarea id=\"workspace-area-folders\" rows=\"4\" placeholder=\"src&amp;#10;public&amp;#10;templates\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Instrucciones del área&lt;textarea id=\"workspace-area-instructions\" rows=\"5\" maxlength=\"40000\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Memoria del área&lt;textarea id=\"workspace-area-memory\" rows=\"6\" maxlength=\"80000\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"primary-command\" id=\"save-workspace-profile\"&gt;Guardar memoria y áreas&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;p class=\"settings-note\" id=\"workspace-profile-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"marketplace\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Catálogo de MCP y plugins&lt;/strong&gt;&lt;span&gt;Primero revisa lo ya disponible en Codex. Después descubre MCP públicos, analiza el encaje con este proyecto e instala solo con confirmación.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"marketplace-panel\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header class=\"marketplace-panel-head\"&gt;&lt;strong&gt;Disponibles en Codex&lt;/strong&gt;&lt;span&gt;MCP y plugins anunciados por App Server · análisis aislado por proyecto&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"resource-list\" id=\"installed-integrations-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"marketplace-panel\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header class=\"marketplace-panel-head\"&gt;&lt;strong&gt;Descubrir MCP públicos&lt;/strong&gt;&lt;span&gt;Catálogo mcp.so · requiere endpoint HTTPS real antes de instalar&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"marketplace-search\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;input id=\"mcp-market-search\" type=\"search\" placeholder=\"Buscar navegador, GitHub, base de datos…\" enterkeyhint=\"search\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"secondary-command\" id=\"load-mcp-market\"&gt;Buscar MCP&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"resource-list\" id=\"mcp-market-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+        &lt;details class=\"marketplace-advanced\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;summary&gt;Instalación avanzada&lt;/summary&gt;</div><div class=\"diff-line diff-add\">+          &lt;fieldset class=\"marketplace-install\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;MCP remoto HTTPS&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Nombre&lt;input id=\"mcp-install-name\" maxlength=\"64\" placeholder=\"context7\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Endpoint HTTPS&lt;input id=\"mcp-install-url\" type=\"url\" placeholder=\"https://servidor.example/mcp\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"primary-command\" id=\"install-remote-mcp\"&gt;Instalar en Codex&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+          &lt;fieldset class=\"marketplace-install\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Añadir catálogo de plugins&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Repositorio Git&lt;input id=\"plugin-market-source\" placeholder=\"owner/repo o https://github.com/owner/repo.git\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"secondary-command\" id=\"add-plugin-market\"&gt;Añadir catálogo&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+        &lt;/details&gt;</div><div class=\"diff-line diff-add\">+        &lt;p class=\"settings-note\" id=\"marketplace-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"complements\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Complementos inteligentes del proyecto&lt;/strong&gt;&lt;span&gt;Capacidades nativas de Codex Suite, analizadas y habilitadas únicamente para el espacio de trabajo activo. No instalan software en editores del PC.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-summary\" id=\"stack-summary\"&gt;Analizando proyecto…&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;label class=\"command-search\"&gt;&lt;span&gt;Buscar en el catálogo&lt;/span&gt;&lt;input id=\"complement-search\" type=\"search\" placeholder=\"PHP, SFTP, SQL, HTML…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-list\" id=\"complement-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;form class=\"deployment-form\" id=\"deployment-form\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;h3&gt;Despliegue de archivos aceptados&lt;/h3&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Nombre&lt;input id=\"deploy-name\" maxlength=\"100\" value=\"Producción\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Protocolo&lt;select id=\"deploy-protocol\"&gt;&lt;option value=\"sftp\"&gt;SFTP&lt;/option&gt;&lt;option value=\"ftps\"&gt;FTPS&lt;/option&gt;&lt;option value=\"ftp\"&gt;FTP sin cifrar&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Host&lt;input id=\"deploy-host\" maxlength=\"253\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Puerto&lt;input id=\"deploy-port\" type=\"number\" min=\"1\" max=\"65535\" value=\"22\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Usuario&lt;input id=\"deploy-user\" autocomplete=\"username\" maxlength=\"160\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Contraseña&lt;input id=\"deploy-password\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Vacío = conservar\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Ruta remota&lt;input id=\"deploy-remote-path\" value=\"/\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Ignorar, una regla por línea&lt;textarea id=\"deploy-ignore\" rows=\"4\"&gt;**/.git/**&amp;#10;**/.vscode/**&amp;#10;**/.env&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label class=\"toggle-row\"&gt;&lt;input id=\"deploy-on-accept\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Subir al aceptar&lt;/strong&gt;&lt;small&gt;Solo archivos aceptados en Revisar cambios.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label class=\"toggle-row\"&gt;&lt;input id=\"deploy-sync-deletes\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Sincronizar borrados&lt;/strong&gt;&lt;small&gt;Elimina en remoto archivos eliminados y aceptados.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"inline-actions\"&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"test-deployment\"&gt;Probar&lt;/button&gt;&lt;button type=\"submit\" class=\"primary-command\"&gt;Guardar despliegue&lt;/button&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;p class=\"settings-note\" id=\"deployment-status\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+        &lt;/form&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"security\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Centro de seguridad y salud&lt;/strong&gt;&lt;span&gt;Monitorización privada y de solo lectura del equipo anfitrión, el proyecto, las integraciones, el despliegue y el Docker remoto configurado. Nunca corrige el sistema sin una autorización separada.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-security\"&gt;Actualizar diagnóstico&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-summary\" id=\"security-summary\"&gt;Cargando último estado seguro…&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"security-grid\" id=\"security-grid\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"commands\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;label class=\"command-search\"&gt;&lt;span&gt;Buscar comando&lt;/span&gt;&lt;input id=\"command-search\" type=\"search\" placeholder=\"/review, permisos, skills\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"command-counts\" id=\"command-counts\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"command-list\" id=\"command-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"events\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"activity-summary\" id=\"activity-summary\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"activity-list\" id=\"activity-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"missions\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Misiones y evidencias&lt;/strong&gt;&lt;span&gt;Trazabilidad persistente y redactada por proyecto. No almacena prompts, respuestas, comandos, diffs ni secretos.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"mission-toolbar\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;&lt;input id=\"mission-current-thread\" type=\"checkbox\"&gt; Solo conversación actual&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-evidence\"&gt;Actualizar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"evidence-summary\" id=\"evidence-summary\"&gt;Selecciona un proyecto para consultar sus misiones.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"mission-layout\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"mission-list\" id=\"mission-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"mission-detail\" id=\"mission-detail\"&gt;&lt;span&gt;Selecciona una misión para ver sus evidencias.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"twin\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Gemelo temporal del proyecto&lt;/strong&gt;&lt;span&gt;Fotografía técnica y operativa de solo lectura. Compara arquitectura, archivos, dependencias, integraciones, misiones, despliegues y riesgos sin guardar código ni secretos.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"twin-toolbar\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Momento del proyecto&lt;select id=\"twin-snapshot-select\"&gt;&lt;option value=\"\"&gt;Sin snapshots&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"primary-command\" id=\"create-twin-snapshot\"&gt;Crear snapshot&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"evidence-summary\" id=\"twin-summary\" aria-live=\"polite\"&gt;Selecciona un proyecto para consultar su gemelo.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"twin-metrics\" id=\"twin-metrics\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header&gt;&lt;strong&gt;Cambios desde el snapshot anterior&lt;/strong&gt;&lt;span&gt;Metadatos temporales; no contiene diffs ni contenido de archivos.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"twin-change-grid\" id=\"twin-comparison\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header&gt;&lt;strong&gt;Mapa de arquitectura&lt;/strong&gt;&lt;span&gt;Directorios principales, áreas gobernadas y ecosistemas de dependencias.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"twin-topology\" id=\"twin-topology\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header&gt;&lt;strong&gt;Dependencias declaradas&lt;/strong&gt;&lt;span&gt;Leídas únicamente de manifests reconocidos y limitados.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"twin-list\" id=\"twin-dependencies\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"twin-section\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header&gt;&lt;strong&gt;Operación y confianza&lt;/strong&gt;&lt;span&gt;Misiones, integraciones, despliegue y señales redactadas de seguridad.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"twin-operation-grid\" id=\"twin-operations\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"twin-list\" id=\"twin-security\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"staging\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Preflight Staging verificable&lt;/strong&gt;&lt;span&gt;Prepara un paquete local no ejecutable con los cambios pendientes y aplica verificadores fijos. Nunca acepta comandos desde el navegador.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"staging-toolbar\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div id=\"staging-current\"&gt;&lt;strong&gt;Sin checkpoint pendiente&lt;/strong&gt;&lt;span&gt;Finaliza un turno con cambios para preparar su staging.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"primary-command\" id=\"run-staging-preflight\" disabled&gt;Preparar preflight&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"evidence-summary\" id=\"staging-summary\" aria-live=\"polite\"&gt;Selecciona una conversación con cambios pendientes.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"staging-section\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header&gt;&lt;strong&gt;Gates globales&lt;/strong&gt;&lt;span&gt;Límites de archivos y tamaño del paquete.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"staging-gates\" id=\"staging-gates\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"staging-section\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header&gt;&lt;strong&gt;Archivos propuestos&lt;/strong&gt;&lt;span&gt;Integridad, secretos, JSON y sintaxis JavaScript. Los valores sensibles nunca se muestran.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"staging-files\" id=\"staging-files\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+        &lt;section class=\"staging-section\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;header&gt;&lt;strong&gt;Historial del checkpoint&lt;/strong&gt;&lt;span&gt;Los paquetes superados se conservan localmente; no son ejecutables.&lt;/span&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"staging-history\" id=\"staging-history\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/section&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"contracts\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Contrato de misión&lt;/strong&gt;&lt;span&gt;Define el resultado, alcance y gates antes de que Codex modifique archivos. La aceptación se bloquea si el contrato no se cumple.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;form class=\"mission-contract-form\" id=\"mission-contract-form\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Resultado esperado&lt;textarea id=\"contract-objective\" rows=\"5\" maxlength=\"5000\" placeholder=\"Describe qué debe quedar funcionando y cómo reconocer el éxito.\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Archivos o carpetas permitidos, uno por línea&lt;textarea id=\"contract-allowed-paths\" rows=\"5\" placeholder=\"lib/**&amp;#10;static/codex-suite/**&amp;#10;test/**\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Pruebas obligatorias, una por línea&lt;textarea id=\"contract-required-tests\" rows=\"4\" placeholder=\"npm test&amp;#10;node --check server.js\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;label&gt;Criterios de aceptación, uno por línea&lt;textarea id=\"contract-acceptance-criteria\" rows=\"5\" placeholder=\"La UI no tiene overflow horizontal&amp;#10;No se exponen credenciales\"&gt;&lt;/textarea&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Riesgo autorizado&lt;select id=\"contract-risk\"&gt;&lt;option value=\"low\"&gt;Bajo&lt;/option&gt;&lt;option value=\"medium\"&gt;Medio&lt;/option&gt;&lt;option value=\"high\"&gt;Alto&lt;/option&gt;&lt;option value=\"critical\"&gt;Crítico&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"contract-active\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Contrato activo&lt;/strong&gt;&lt;small&gt;Se inyecta en cada turno.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"submit\" class=\"primary-command\"&gt;Guardar contrato&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;p class=\"settings-note\" id=\"contract-status\"&gt;Selecciona una conversación para crear su contrato.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+        &lt;/form&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"contract-gates\" id=\"contract-gates\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"settings\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;form class=\"settings-form\" id=\"settings-form\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;strong&gt;Personaliza la experiencia&lt;/strong&gt;</div><div class=\"diff-line diff-add\">+            &lt;span&gt;Los cambios visuales se previsualizan al instante. Las políticas se aplican al guardar.&lt;/span&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+          &lt;fieldset&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Marca e interfaz&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Nombre del producto&lt;input id=\"setting-product-name\" maxlength=\"40\" required&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Mensaje de bienvenida&lt;input id=\"setting-welcome-message\" maxlength=\"120\" required&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Idioma&lt;select id=\"setting-language\"&gt;&lt;option value=\"es\"&gt;Español&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Tema&lt;select id=\"setting-theme\"&gt;&lt;option value=\"system\"&gt;Sistema&lt;/option&gt;&lt;option value=\"light\"&gt;Luz limpia&lt;/option&gt;&lt;option value=\"dark\"&gt;Grafito&lt;/option&gt;&lt;option value=\"midnight\"&gt;Medianoche&lt;/option&gt;&lt;option value=\"warm\"&gt;Papel cálido&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Acento&lt;select id=\"setting-accent\"&gt;&lt;option value=\"green\"&gt;Verde&lt;/option&gt;&lt;option value=\"blue\"&gt;Azul&lt;/option&gt;&lt;option value=\"amber\"&gt;Ámbar&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Densidad&lt;select id=\"setting-density\"&gt;&lt;option value=\"comfortable\"&gt;Cómoda&lt;/option&gt;&lt;option value=\"compact\"&gt;Compacta&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Tamaño de texto&lt;select id=\"setting-font-size\"&gt;&lt;option value=\"small\"&gt;Pequeño&lt;/option&gt;&lt;option value=\"standard\"&gt;Estándar&lt;/option&gt;&lt;option value=\"large\"&gt;Grande&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"setting-reduce-motion\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Reducir movimiento&lt;/strong&gt;&lt;small&gt;Desactiva animaciones no esenciales.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+          &lt;fieldset&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Comportamiento&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"setting-enter-send\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Enter para enviar&lt;/strong&gt;&lt;small&gt;Con Shift+Enter se inserta una línea.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"setting-keep-control\" type=\"checkbox\"&gt;&lt;span&gt;&lt;strong&gt;Mantener Control abierto&lt;/strong&gt;&lt;small&gt;Conserva el panel al seleccionar una acción.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Eventos visibles&lt;input id=\"setting-event-limit\" type=\"number\" min=\"20\" max=\"500\" step=\"10\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+          &lt;fieldset&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Política del servidor&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Permiso predeterminado&lt;select id=\"setting-default-permission\"&gt;&lt;option value=\"workspaceWrite\"&gt;Escritura con aprobaciones&lt;/option&gt;&lt;option value=\"readOnly\"&gt;Solo lectura&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Conversaciones por proyecto&lt;input id=\"setting-thread-limit\" type=\"number\" min=\"10\" max=\"100\" step=\"10\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"policy-list\" aria-label=\"Políticas de seguridad inmutables\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;span&gt;Proyecto restringido&lt;/span&gt;&lt;span&gt;Red desactivada&lt;/span&gt;&lt;span&gt;Aprobación bajo demanda&lt;/span&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+          &lt;fieldset&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Codex y modelo&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"credential-status\" id=\"credential-status\"&gt;Comprobando credencial…&lt;/div&gt;</div><div class=\"diff-line diff-add\">+            &lt;p class=\"settings-note\"&gt;Freemodel (auth.json / App Server) y Providers8082 (FCC :8082) son sistemas distintos. Usa Control → Freemodel o Control → Providers8082.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Nueva API key (única)&lt;input id=\"codex-api-key\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Solo escritura; nunca se muestra\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"danger-command\" id=\"clear-api-key\"&gt;Eliminar API key activa de auth.json&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"secondary-command\" id=\"open-freemodel-keys\"&gt;Abrir gestión Freemodel&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"secondary-command\" id=\"open-providers8082-settings\"&gt;Abrir Providers8082&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Proveedor activo&lt;input id=\"codex-model-provider\" maxlength=\"48\" placeholder=\"openai\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Modelo&lt;input id=\"codex-model\" maxlength=\"160\" placeholder=\"Modelo predeterminado\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Esfuerzo&lt;select id=\"codex-reasoning-effort\"&gt;&lt;option value=\"\"&gt;Predeterminado&lt;/option&gt;&lt;option value=\"minimal\"&gt;Mínimo&lt;/option&gt;&lt;option value=\"low\"&gt;Bajo&lt;/option&gt;&lt;option value=\"medium\"&gt;Medio&lt;/option&gt;&lt;option value=\"high\"&gt;Alto&lt;/option&gt;&lt;option value=\"xhigh\"&gt;Muy alto&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Nivel de servicio&lt;select id=\"codex-service-tier\"&gt;&lt;option value=\"\"&gt;Predeterminado&lt;/option&gt;&lt;option value=\"auto\"&gt;Automático&lt;/option&gt;&lt;option value=\"fast\"&gt;Rápido&lt;/option&gt;&lt;option value=\"flex\"&gt;Flexible&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Personalidad&lt;select id=\"codex-personality\"&gt;&lt;option value=\"\"&gt;Predeterminada&lt;/option&gt;&lt;option value=\"none\"&gt;Neutra&lt;/option&gt;&lt;option value=\"friendly\"&gt;Amable&lt;/option&gt;&lt;option value=\"pragmatic\"&gt;Pragmática&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Credenciales&lt;select id=\"codex-credential-store\"&gt;&lt;option value=\"auto\"&gt;Automático&lt;/option&gt;&lt;option value=\"keyring\"&gt;Almacén de Windows&lt;/option&gt;&lt;option value=\"file\"&gt;auth.json&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Aprobación&lt;select id=\"codex-approval-policy\"&gt;&lt;option value=\"on-request\"&gt;Bajo demanda&lt;/option&gt;&lt;option value=\"untrusted\"&gt;Solo comandos confiables&lt;/option&gt;&lt;option value=\"never\"&gt;Nunca solicitar&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Revisor&lt;select id=\"codex-approvals-reviewer\"&gt;&lt;option value=\"user\"&gt;Administrador&lt;/option&gt;&lt;option value=\"auto_review\"&gt;Subagente de revisión&lt;/option&gt;&lt;option value=\"guardian_subagent\"&gt;Guardian heredado&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Entorno aislado&lt;select id=\"codex-sandbox-mode\"&gt;&lt;option value=\"workspace-write\"&gt;Escritura en el proyecto&lt;/option&gt;&lt;option value=\"read-only\"&gt;Solo lectura&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+          &lt;fieldset&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Instrucciones del proyecto · AGENTS.md&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;p class=\"settings-note\"&gt;Reglas persistentes de arquitectura, pruebas, estilo y seguridad que Codex carga automáticamente.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+            &lt;textarea id=\"agents-content\" class=\"settings-editor\" rows=\"12\" maxlength=\"200000\" spellcheck=\"false\" placeholder=\"# AGENTS.md\"&gt;&lt;/textarea&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"inline-actions\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;button type=\"button\" class=\"secondary-command\" id=\"reload-instructions\"&gt;Recargar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+              &lt;button type=\"button\" class=\"primary-command\" id=\"save-instructions\"&gt;Guardar AGENTS.md&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+            &lt;p class=\"settings-note\" id=\"instructions-status\"&gt;Selecciona un proyecto para cargar sus instrucciones.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+          &lt;fieldset&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Proveedor personalizado&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;div class=\"settings-grid\"&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;ID&lt;input id=\"provider-id\" maxlength=\"48\" placeholder=\"freemodel\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+              &lt;label&gt;Nombre&lt;input id=\"provider-name\" maxlength=\"80\" placeholder=\"FreeModel\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;/div&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;URL base&lt;input id=\"provider-base-url\" type=\"url\" placeholder=\"https://api.example.com\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;API de transporte&lt;select id=\"provider-wire-api\"&gt;&lt;option value=\"responses\"&gt;Responses&lt;/option&gt;&lt;option value=\"chat\"&gt;Chat&lt;/option&gt;&lt;/select&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;p class=\"settings-note\"&gt;Solo se gestionan campos públicos. Cabeceras y secretos no se devuelven al navegador.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+          &lt;p class=\"form-error\" id=\"settings-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+          &lt;div class=\"settings-actions\"&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"button\" class=\"secondary-command\" id=\"settings-reset\"&gt;Restaurar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"submit\" class=\"primary-command\" id=\"settings-save\"&gt;Guardar ajustes&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;/form&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"freemodel\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;strong&gt;Freemodel · API keys&lt;/strong&gt;</div><div class=\"diff-line diff-add\">+          &lt;span&gt;Almacena varias claves, consulta el estado de saldo y activa una en &lt;code&gt;~/.codex/auth.json&lt;/code&gt;. Los valores completos nunca se muestran en el navegador.&lt;/span&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"freemodel-toolbar\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"freemodel-refresh\"&gt;Actualizar lista&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"freemodel-probe-all\"&gt;Comprobar saldos&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-summary\" id=\"freemodel-summary\"&gt;Cargando claves Freemodel…&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"freemodel-key-list\" id=\"freemodel-key-list\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;form class=\"freemodel-add-form\" id=\"freemodel-add-form\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;fieldset&gt;</div><div class=\"diff-line diff-add\">+            &lt;legend&gt;Añadir API key&lt;/legend&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;Alias&lt;input id=\"freemodel-key-label\" maxlength=\"80\" placeholder=\"Cuenta principal, reserva…\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label&gt;API key&lt;input id=\"freemodel-key-input\" type=\"password\" autocomplete=\"new-password\" required placeholder=\"fe_oa_… (solo escritura)\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;label class=\"toggle-row\"&gt;&lt;input id=\"freemodel-key-activate\" type=\"checkbox\" checked&gt;&lt;span&gt;&lt;strong&gt;Activar al guardar&lt;/strong&gt;&lt;small&gt;Escribe en auth.json y reinicia App Server.&lt;/small&gt;&lt;/span&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+            &lt;p class=\"form-error\" id=\"freemodel-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+            &lt;button type=\"submit\" class=\"primary-command\" id=\"freemodel-key-save\"&gt;Guardar clave&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;/fieldset&gt;</div><div class=\"diff-line diff-add\">+        &lt;/form&gt;</div><div class=\"diff-line diff-add\">+        &lt;p class=\"settings-note\"&gt;El saldo exacto en $ no está en la API pública; el estado se deduce con una sonda mínima a Freemodel (ok / saldo agotado / inválida).&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"providers8082\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;strong&gt;Providers8082 · FCC + Cursor&lt;/strong&gt;</div><div class=\"diff-line diff-add\">+          &lt;span&gt;Catálogo de providers con API key OK en FCC (&lt;code&gt;/admin&lt;/code&gt;). El motor Providers8082 razona con el mejor modelo FCC y ejecuta con Cursor SDK. Distinto de Freemodel/auth.json.&lt;/span&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"freemodel-toolbar\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"providers8082-refresh\"&gt;Actualizar estado&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"providers8082-open-models\"&gt;Abrir Modelos&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-summary\" id=\"providers8082-summary\"&gt;Cargando Providers8082…&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"provider-status-list\" id=\"providers8082-provider-list\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"freemodel-key-list\" id=\"providers8082-candidate-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;p class=\"settings-note\" id=\"providers8082-note\"&gt;FCC por defecto en 127.0.0.1:8082. Para lab .16 define FCC_BASE_URL cuando el proxy se migre.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"excellence\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;strong&gt;Excelencia · métricas + replay&lt;/strong&gt;</div><div class=\"diff-line diff-add\">+          &lt;span&gt;Latencia, turnos sin resumen, accept/reject, Evidence Replay y estado Vault 2.3 / pipeline. Sin secretos.&lt;/span&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"freemodel-toolbar\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"excellence-refresh\"&gt;Actualizar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-summary\" id=\"excellence-summary\"&gt;Cargando métricas…&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"provider-status-list\" id=\"excellence-metrics-list\" aria-live=\"polite\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"freemodel-key-list\" id=\"excellence-replay-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;p class=\"settings-note\" id=\"excellence-note\"&gt;Oleada A–D: Diff Guardian, métricas, replay, reviewer, router, vault, heatmap.&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"lab\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Lab IA Fabric&lt;/strong&gt;&lt;span&gt;Estado de solo lectura del servidor IA (.16): Supervisor, Ollama, Qdrant, WhatsApp lab y FCC local. No ejecuta agentes ni mezcla misiones de negocio con Evidence Ledger.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-lab\"&gt;Actualizar lab&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-summary\" id=\"lab-summary\"&gt;Todavía no se ha consultado el lab.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"security-grid\" id=\"lab-grid\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"composer-private\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Privado · Composer (operador)&lt;/strong&gt;&lt;span&gt;Índice read-only de metadatos Composer (`state.vscdb`). Requiere &lt;code&gt;CODEX_COMPOSER_PRIVATE=1&lt;/code&gt;. Nunca escribe SQLite. Chats sin JSONL no son ejecutables.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;button type=\"button\" class=\"primary-command security-refresh\" id=\"refresh-composer-private\"&gt;Actualizar índice&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-summary\" id=\"composer-private-summary\"&gt;Pestaña visible solo con el flag de operador.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-list\" id=\"composer-private-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"neighbors\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\"&gt;&lt;strong&gt;Guardrails de aplicaciones vecinas&lt;/strong&gt;&lt;span&gt;Inventario de puertos, health HTTP, preflight de variables (sin revelar valores) y registro con rollback para cambios de catálogo.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"inline-actions\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"refresh-neighbors\"&gt;Inventario&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"secondary-command\" id=\"run-neighbor-preflight\"&gt;Preflight env&lt;/button&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"primary-command\" id=\"run-neighbor-verify\"&gt;Verificar health ×3&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-summary\" id=\"neighbors-summary\"&gt;Todavía no se ha cargado el inventario de vecinas.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-list\" id=\"neighbors-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"settings-intro\" style=\"margin-top:14px\"&gt;&lt;strong&gt;Acciones registradas&lt;/strong&gt;&lt;span&gt;Solo mutaciones de catálogo autorizadas. El rollback restaura el snapshot anterior.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"resource-list\" id=\"neighbors-actions\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+      &lt;section class=\"control-view\" data-control-view=\"diagnostics\"&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-hero\"&gt;</div><div class=\"diff-line diff-add\">+          &lt;div&gt;&lt;strong&gt;Centro de pruebas&lt;/strong&gt;&lt;span&gt;Comprueba todas las capas sin ejecutar herramientas ni modificar el proyecto.&lt;/span&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+          &lt;button type=\"button\" class=\"primary-command\" id=\"run-diagnostics\"&gt;Ejecutar todo&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-summary\" id=\"diagnostics-summary\"&gt;Todavía no se ha ejecutado ninguna prueba.&lt;/div&gt;</div><div class=\"diff-line diff-add\">+        &lt;div class=\"diagnostics-list\" id=\"diagnostics-list\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;/section&gt;</div><div class=\"diff-line diff-add\">+    &lt;/aside&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+    &lt;nav class=\"mobile-nav\" aria-label=\"Vistas\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;button type=\"button\" data-target=\"threads\"&gt;Conversaciones&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;button type=\"button\" data-target=\"chat\" class=\"is-active\"&gt;Chat&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;button type=\"button\" data-target=\"activity\"&gt;Control&lt;/button&gt;</div><div class=\"diff-line diff-add\">+    &lt;/nav&gt;</div><div class=\"diff-line diff-add\">+  &lt;/div&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;section class=\"app-error-boundary is-hidden\" id=\"app-error-boundary\" role=\"alert\" aria-live=\"assertive\" data-fatal=\"false\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;div&gt;</div><div class=\"diff-line diff-add\">+      &lt;strong id=\"app-error-title\"&gt;La interfaz necesita atención&lt;/strong&gt;</div><div class=\"diff-line diff-add\">+      &lt;span id=\"app-error-detail\"&gt;No se pudo completar la operación solicitada.&lt;/span&gt;</div><div class=\"diff-line diff-add\">+    &lt;/div&gt;</div><div class=\"diff-line diff-add\">+    &lt;div class=\"app-error-actions\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;button class=\"secondary-command\" id=\"dismiss-app-error\" type=\"button\"&gt;Cerrar aviso&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;button class=\"primary-command\" id=\"retry-app\" type=\"button\"&gt;Recargar aplicación&lt;/button&gt;</div><div class=\"diff-line diff-add\">+    &lt;/div&gt;</div><div class=\"diff-line diff-add\">+  &lt;/section&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;dialog class=\"login-dialog\" id=\"login-dialog\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;form method=\"dialog\" id=\"login-form\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;div class=\"login-brand\"&gt;&lt;div class=\"brand-mark\"&gt;C&lt;/div&gt;&lt;div&gt;&lt;strong id=\"login-product-name\"&gt;Codex Suite&lt;/strong&gt;&lt;span&gt;Acceso protegido por el bridge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;input type=\"text\" name=\"username\" value=\"cursor-mobile-bridge\" autocomplete=\"username\" hidden&gt;</div><div class=\"diff-line diff-add\">+      &lt;label for=\"token-input\"&gt;Token del bridge&lt;/label&gt;</div><div class=\"diff-line diff-add\">+      &lt;input id=\"token-input\" type=\"password\" autocomplete=\"current-password\" required&gt;</div><div class=\"diff-line diff-add\">+      &lt;p class=\"form-error\" id=\"login-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;button class=\"primary-command\" type=\"submit\"&gt;Iniciar sesión&lt;/button&gt;</div><div class=\"diff-line diff-add\">+    &lt;/form&gt;</div><div class=\"diff-line diff-add\">+  &lt;/dialog&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;dialog class=\"action-dialog\" id=\"action-dialog\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;form method=\"dialog\" id=\"action-form\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;header&gt;&lt;strong id=\"action-title\"&gt;Acción&lt;/strong&gt;&lt;button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+      &lt;div class=\"action-copy\" id=\"action-copy\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;div class=\"action-fields\" id=\"action-fields\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;p class=\"form-error\" id=\"action-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;footer&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"secondary-command\" value=\"cancel\" type=\"submit\"&gt;Cancelar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"primary-command\" id=\"action-confirm\" value=\"default\" type=\"submit\"&gt;Continuar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/footer&gt;</div><div class=\"diff-line diff-add\">+    &lt;/form&gt;</div><div class=\"diff-line diff-add\">+  &lt;/dialog&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;dialog class=\"providers8082-dialog\" id=\"providers8082-dialog\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;form method=\"dialog\" id=\"providers8082-form\"&gt;</div><div class=\"diff-line diff-add\">+      &lt;header&gt;</div><div class=\"diff-line diff-add\">+        &lt;strong&gt;Providers8082 · elegir modelo FCC&lt;/strong&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"icon-button\" value=\"cancel\" type=\"submit\" aria-label=\"Cerrar\"&gt;×&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/header&gt;</div><div class=\"diff-line diff-add\">+      &lt;p class=\"action-copy\" id=\"providers8082-dialog-copy\"&gt;Evaluando proyecto y petición contra providers con API key OK…&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;label&gt;Modelo recomendado / alternativo</div><div class=\"diff-line diff-add\">+        &lt;select id=\"providers8082-model-select\" aria-label=\"Modelo FCC\"&gt;&lt;/select&gt;</div><div class=\"diff-line diff-add\">+      &lt;/label&gt;</div><div class=\"diff-line diff-add\">+      &lt;div class=\"providers8082-dialog-meta\" id=\"providers8082-dialog-meta\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+      &lt;p class=\"form-error\" id=\"providers8082-dialog-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+      &lt;footer&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"secondary-command\" value=\"cancel\" type=\"submit\"&gt;Cancelar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+        &lt;button class=\"primary-command\" id=\"providers8082-confirm\" value=\"default\" type=\"submit\"&gt;Usar y razonar + ejecutar&lt;/button&gt;</div><div class=\"diff-line diff-add\">+      &lt;/footer&gt;</div><div class=\"diff-line diff-add\">+    &lt;/form&gt;</div><div class=\"diff-line diff-add\">+  &lt;/dialog&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;dialog class=\"manual-dialog\" id=\"manual-dialog\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;header&gt;&lt;strong&gt;Manual de Codex Suite&lt;/strong&gt;&lt;button class=\"icon-button\" id=\"close-manual\" type=\"button\" aria-label=\"Cerrar manual\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+    &lt;iframe id=\"manual-frame\" title=\"Manual de uso\" loading=\"lazy\"&gt;&lt;/iframe&gt;</div><div class=\"diff-line diff-add\">+  &lt;/dialog&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;dialog class=\"file-preview-dialog\" id=\"file-preview-dialog\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;header&gt;&lt;strong id=\"file-preview-title\"&gt;Archivo&lt;/strong&gt;&lt;button class=\"icon-button\" id=\"close-file-preview\" type=\"button\" aria-label=\"Cerrar archivo\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+    &lt;pre id=\"file-preview-content\"&gt;&lt;/pre&gt;</div><div class=\"diff-line diff-add\">+    &lt;footer&gt;&lt;span&gt;Vista de solo lectura · máximo 256 KB&lt;/span&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"attach-preview-file\"&gt;Añadir al contexto&lt;/button&gt;&lt;/footer&gt;</div><div class=\"diff-line diff-add\">+  &lt;/dialog&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;dialog class=\"integration-dialog\" id=\"integration-dialog\"&gt;</div><div class=\"diff-line diff-add\">+    &lt;header&gt;&lt;div&gt;&lt;small id=\"integration-kind\"&gt;Integración&lt;/small&gt;&lt;strong id=\"integration-title\"&gt;Detalle&lt;/strong&gt;&lt;/div&gt;&lt;button class=\"icon-button\" id=\"close-integration\" type=\"button\" aria-label=\"Cerrar integración\"&gt;×&lt;/button&gt;&lt;/header&gt;</div><div class=\"diff-line diff-add\">+    &lt;div class=\"integration-content\" id=\"integration-content\"&gt;&lt;/div&gt;</div><div class=\"diff-line diff-add\">+    &lt;label class=\"integration-endpoint\" id=\"integration-endpoint-row\"&gt;Endpoint HTTPS&lt;input id=\"integration-endpoint\" type=\"url\" placeholder=\"https://servidor.example/mcp\"&gt;&lt;/label&gt;</div><div class=\"diff-line diff-add\">+    &lt;p class=\"form-error\" id=\"integration-error\" role=\"alert\"&gt;&lt;/p&gt;</div><div class=\"diff-line diff-add\">+    &lt;footer&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\"&gt;Analizar para este proyecto&lt;/button&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"activate-integration\"&gt;Habilitar&lt;/button&gt;&lt;/footer&gt;</div><div class=\"diff-line diff-add\">+  &lt;/dialog&gt;</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+  &lt;script type=\"module\" src=\"/static/codex-suite/app.js?v=58\"&gt;&lt;/script&gt;</div><div class=\"diff-line diff-ctx\"> &lt;/body&gt;</div><div class=\"diff-line diff-ctx\"> &lt;/html&gt;</div><div class=\"diff-line diff-ctx\"> </div></div>"},{"id":"ch-2","status":"pending","callId":"reconcile-static\\codex-suite\\style.css","path":"static\\codex-suite\\style.css","type":"edit","diffString":"--- a/static\\codex-suite\\style.css\n+++ b/static\\codex-suite\\style.css\n@@ -91,504 +91,568 @@\n .list-empty { padding: 20px 10px; color: var(--muted); text-align: center; font-size: 12px; }\n \n .conversation { min-width: 0; height: 100%; display: flex; flex-direction: column; overflow: hidden; background: var(--surface); }\n-.conversation-header { padding-inline: 18px; }\n-.thread-title { min-width: 0; flex: 1; display: flex; flex-direction: column; }\n-.thread-title strong, .thread-title span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n-.thread-title span { color: var(--muted); font-size: 11px; margin-top: 3px; }\n-.connection { display: flex; align-items: center; gap: 7px; color: var(--muted); font-size: 12px; }\n-.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #999; }\n-.status-dot.is-online { background: #21845f; }\n-.status-dot.is-running { background: var(--warning); animation: status-pulse 1.4s ease-in-out infinite; }\n-\n-.timeline { flex: 1 1 0; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: 32px max(24px, calc((100% - 820px) / 2)); scroll-behavior: smooth; -webkit-overflow-scrolling: touch; }\n-.empty-state { min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding-bottom: 8vh; }\n-.empty-mark { display: grid; place-items: center; width: 45px; height: 45px; border: 1px solid var(--strong-line); border-radius: 8px; font-size: 20px; font-weight: 750; }\n-.empty-state h1 { margin: 18px 0 7px; font-size: 25px; font-weight: 680; }\n-.empty-state p { margin: 0; color: var(--muted); }\n-\n-.turn-status-banner {\n-  flex: 0 0 auto;\n-  display: flex;\n-  align-items: center;\n-  gap: 12px;\n-  margin: 0 max(24px, calc((100% - 820px) / 2)) 10px;\n-  padding: 10px 12px;\n-  border: 1px solid var(--line);\n-  border-radius: 10px;\n-  background: color-mix(in srgb, var(--surface-subtle) 88%, #dfe8e2);\n-}\n-.turn-status-banner.is-hidden { display: none; }\n-.turn-status-banner[data-state=\"running\"] {\n-  border-color: color-mix(in srgb, var(--warning) 45%, var(--line));\n-  background: color-mix(in srgb, #fff8e8 70%, var(--surface));\n-}\n-.turn-status-banner[data-state=\"error\"] {\n-  border-color: color-mix(in srgb, #c45c4a 40%, var(--line));\n-  background: color-mix(in srgb, #fff1ee 75%, var(--surface));\n-}\n-.turn-status-banner[data-state=\"done\"] {\n-  border-color: color-mix(in srgb, var(--accent) 35%, var(--line));\n-}\n-.turn-status-main { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }\n-.turn-status-main strong { font-size: 12px; font-weight: 700; }\n-.turn-status-main span { color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }\n-.turn-inline-summary {\n-  margin-top: 8px;\n-  padding: 7px 9px;\n-  border-radius: 8px;\n-  border: 1px solid var(--line);\n-  background: var(--surface-subtle);\n-  color: var(--muted);\n-  font-size: 11px;\n-}\n-.turn-summary-card .item-body { padding: 0; overflow: hidden; }\n-.turn-summary-body { padding: 12px 14px; }\n-.turn-summary-body strong { display: block; margin-bottom: 4px; }\n-.turn-summary-body p { margin: 0 0 8px; color: var(--muted); font-size: 12px; }\n-.turn-tool-list { margin: 0; padding-left: 18px; color: var(--ink); font-size: 12px; }\n-.turn-tool-list li { margin: 0 0 4px; }\n-.activity-row.activity-cursor.is-live strong { color: var(--accent); }\n-\n-.turn-block { margin: 0 0 26px; }\n-.timeline-item { position: relative; margin: 0 0 14px; }\n-.timeline-item.user { margin-left: clamp(30px, 15%, 120px); }\n-.timeline-item.user .item-body { background: #edf2ee; border-color: #d8e1da; }\n-.timeline-item.assistant .item-body { padding-inline: 0; border-color: transparent; background: transparent; }\n-.item-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; color: var(--muted); font-size: 11px; font-weight: 650; }\n-.item-time { display: block; margin-top: 5px; color: var(--muted); font-size: 10px; line-height: 1.3; text-align: right; font-variant-numeric: tabular-nums; }\n-.item-status { margin-left: auto; font-weight: 500; }\n-.item-body { border: 1px solid var(--line); border-radius: 12px; background: var(--surface-subtle); padding: 12px 14px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }\n-.timeline-item.tool .item-body, .timeline-item.diff .item-body, .timeline-item.plan .item-body, .timeline-item.subagent .item-body { padding: 0; overflow: hidden; }\n-.timeline-item.plan .item-body { border-color: color-mix(in srgb, var(--accent) 32%, var(--line)); }\n-.timeline-item.subagent .item-body { border-color: color-mix(in srgb, #6e63d9 35%, var(--line)); }\n-.tool-summary { padding: 10px 12px; background: #f1f2ef; border-bottom: 1px solid var(--line); font-weight: 650; }\n-.tool-output, .diff-output { margin: 0; max-height: 340px; overflow: auto; padding: 12px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; }\n-.tool-output.is-empty { display: none; }\n-.timeline-item.tool .tool-summary:only-child { border-bottom: 0; }\n-.diff-line { display: block; min-height: 19px; padding: 0 6px; }\n-.diff-line.add { background: #173c2c; color: #c9f3dc; }\n-.diff-line.del { background: #482522; color: #ffd5d1; }\n-\n-.approval-tray { flex: 0 0 auto; padding: 0 max(24px, calc((100% - 820px) / 2)); }\n-.approval-card { margin: 0 0 10px; border: 1px solid #d9b67f; border-radius: 7px; background: #fffaf1; padding: 12px; }\n-.approval-card strong { display: block; margin-bottom: 7px; color: #71400e; }\n-.approval-card pre { max-height: 130px; overflow: auto; margin: 0 0 10px; white-space: pre-wrap; font: 11px/1.45 ui-monospace, Consolas, monospace; }\n-.approval-diffs { display: grid; gap: 7px; margin-bottom: 10px; }\n-.approval-diffs details { overflow: hidden; border: 1px solid #d9b67f; border-radius: 7px; background: var(--surface); }\n-.approval-diffs summary { padding: 9px 10px; cursor: pointer; color: var(--ink); font: 650 11px/1.4 ui-monospace, Consolas, monospace; overflow-wrap: anywhere; }\n-.approval-diffs .diff-output { max-height: 260px; margin: 0; border-radius: 0; }\n-.approval-actions { display: flex; justify-content: flex-end; gap: 7px; }\n-\n-.change-review-tray { flex: 0 1 auto; max-height: min(48dvh, 520px); overflow: auto; padding: 0 max(18px, calc((100% - 850px) / 2)); background: var(--surface); scrollbar-gutter: stable; }\n-.turn-watchdog { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 max(18px, calc((100% - 850px) / 2)) 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }\n-.turn-watchdog.is-hidden { display: none; }\n-.turn-watchdog > div { display: grid; gap: 2px; min-width: 0; }\n-.turn-watchdog strong { font-size: 12px; }\n-.turn-watchdog span { color: var(--muted); font-size: 10px; }\n-.turn-watchdog[data-status=\"stale\"], .turn-watchdog[data-status=\"stuckCompaction\"] { border-color: color-mix(in srgb, var(--danger) 48%, var(--line)); }\n-.execution-status { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-height: 30px; padding: 4px max(18px, calc((100% - 850px) / 2)); border-bottom: 1px solid var(--line); background: var(--surface-subtle); color: var(--muted); font-size: 12px; }\n-.execution-status-label { color: var(--ink); font-weight: 750; text-transform: uppercase; letter-spacing: .04em; }\n-#execution-status-text { overflow-wrap: anywhere; }\n-.execution-meta { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; color: var(--muted); font-size: 10px; }\n-.execution-meta span { padding: 3px 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-subtle); }\n-.change-file-explanation { display: grid; gap: 3px; padding: 9px 11px; border-top: 1px solid var(--line); color: var(--muted); font-size: 11px; line-height: 1.45; }\n-.change-review-tray:empty { display: none; }\n-.change-review-tray.is-saving { opacity: .68; pointer-events: none; }\n-.change-review-card.is-cursor { border-color: color-mix(in srgb, #3d7ea6 42%, var(--line)); }\n-.change-review-card.is-cursor > header { background: color-mix(in srgb, #3d7ea6 8%, var(--surface)); }\n-.change-review-card > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 12px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--accent) 6%, var(--surface)); }\n-.change-review-card > header > div:first-child { display: grid; gap: 2px; min-width: 0; }\n-.change-review-card > header strong { font-size: 12px; }\n-.change-review-card > header span { color: var(--muted); font-size: 10px; }\n-.change-review-bulk, .change-file-actions { display: flex; justify-content: flex-end; gap: 7px; }\n-.change-review-bulk button, .change-file-actions button { min-height: 34px; padding: 6px 9px; font-size: 10px; }\n-.change-review-files { display: grid; }\n-.change-review-file { overflow: hidden; border-bottom: 1px solid var(--line); }\n-.change-review-file:last-child { border-bottom: 0; }\n-.change-review-file > summary { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 42px; padding: 8px 11px; cursor: pointer; font: 650 11px/1.4 ui-monospace, SFMono-Regular, Consolas, monospace; }\n-.change-review-file > summary:hover { background: var(--surface-subtle); }\n-.change-review-file > summary span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n-.change-review-file > summary small { padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font: 700 9px/1.2 Inter, system-ui, sans-serif; text-transform: uppercase; }\n-.change-review-file.is-accepted > summary small { color: #21845f; }\n-.change-review-file.is-rejected > summary small { color: var(--danger); }\n-.change-review-file .diff-output { max-height: 280px; margin: 0; border-block: 1px solid var(--line); }\n-.change-file-actions { padding: 8px 10px; background: var(--surface-subtle); }\n-\n-.composer-wrap { position: relative; z-index: 4; flex: 0 0 auto; min-height: 0; padding: 10px max(18px, calc((100% - 850px) / 2)) max(12px, env(safe-area-inset-bottom)); background: linear-gradient(180deg, color-mix(in srgb, var(--surface) 72%, transparent), var(--surface) 24%); }\n-.context-chips { display: flex; gap: 6px; overflow-x: auto; margin: 0 0 7px; scrollbar-width: none; }\n-.context-chip { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; min-height: 30px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-subtle); font-size: 11px; }\n-.context-chip button { min-height: 22px; width: 22px; padding: 0; border: 0; background: transparent; color: var(--muted); }\n-.composer { overflow: hidden; border: 1px solid var(--strong-line); border-radius: 18px; background: var(--surface); box-shadow: 0 12px 40px rgba(32, 40, 70, .10); }\n-.composer:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent), var(--shadow-sm); }\n-.composer textarea { display: block; width: 100%; max-height: 180px; resize: none; border: 0; background: transparent; color: var(--ink); padding: 13px 14px 6px; line-height: 1.45; }\n-.composer textarea:focus { outline: 0; }\n-.agent-toolbar { display: flex; align-items: center; gap: 5px; min-width: 0; overflow-x: auto; padding: 6px 7px 0; scrollbar-width: none; }\n-.agent-toolbar::-webkit-scrollbar, .smart-actions::-webkit-scrollbar { display: none; }\n-.agent-toolbar > select { flex: 0 0 auto; width: auto; max-width: 180px; min-height: 32px; padding: 4px 8px; border-color: transparent; border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; font-weight: 650; }\n-.smart-actions { display: flex; align-items: center; gap: 4px; flex: 0 0 auto; min-width: 0; overflow-x: auto; scrollbar-width: none; }\n-.smart-actions button { min-height: 32px; padding: 5px 9px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); font-size: 12px; white-space: nowrap; }\n-.smart-actions button:hover { background: var(--surface-subtle); color: var(--ink); }\n-.composer-tools { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 7px; }\n-.attachment-controls { position: relative; flex: 0 0 auto; }\n-.attachment-command { display: grid; place-items: center; width: 36px; height: 36px; min-height: 36px; padding: 0; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 20px; }\n-.attachment-command:hover { border-color: var(--accent); color: var(--accent); }\n-.attachment-menu { position: absolute; z-index: 30; left: 0; bottom: calc(100% + 8px); width: min(290px, calc(100vw - 28px)); padding: 6px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-lg); }\n-.attachment-menu button { display: grid; gap: 3px; width: 100%; padding: 10px; border: 0; border-radius: 7px; background: transparent; color: var(--ink); text-align: left; }\n-.attachment-menu button:hover { background: var(--surface-subtle); }\n-.attachment-menu strong { font-size: 13px; }\n-.attachment-menu span { color: var(--muted); font-size: 12px; }\n-.run-options { display: flex; flex: 1; gap: 6px; min-width: 0; overflow-x: auto; scrollbar-width: none; }\n-.advanced-run-options { display: flex; flex: 1; gap: 6px; min-width: 0; }\n-.run-options select { width: auto; max-width: 190px; min-height: 34px; padding: 5px 8px; border-color: transparent; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }\n-#engine-select { max-width: 175px; font-weight: 650; }\n-.run-options-toggle { display: none; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; font-weight: 650; }\n-.send-command { width: 36px; height: 36px; border: 0; border-radius: 7px; background: var(--ink); color: white; font-size: 20px; font-weight: 700; }\n-.send-command:disabled, button:disabled, select:disabled { cursor: not-allowed; opacity: .45; }\n-.composer textarea:disabled,\n-.composer textarea:read-only,\n-.agent-toolbar select:disabled,\n-.run-options select:disabled {\n-  opacity: 1;\n-  color: var(--muted);\n-  -webkit-text-fill-color: var(--muted);\n-}\n-.composer textarea:disabled::placeholder,\n-.composer textarea:read-only::placeholder {\n-  color: var(--muted);\n-  opacity: 1;\n-  -webkit-text-fill-color: var(--muted);\n-}\n-.is-hidden { display: none !important; }\n-\n-.activity { display: none; height: 100dvh; min-height: 0; overflow: hidden; border-left: 1px solid var(--line); border-right: 0; }\n-.app-shell.activity-open { grid-template-columns: 252px minmax(0, 1fr) minmax(400px, 34vw); }\n-.app-shell.activity-open .activity { display: flex; flex-direction: column; }\n-.app-shell.activity-open .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }\n-  .app-shell.activity-open .run-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: visible; }\n-  .app-shell.activity-open .advanced-run-options { display: contents; }\n-  .app-shell.activity-open .run-options select { width: 100%; min-width: 0; max-width: none; }\n-.activity-header { flex: 0 0 auto; justify-content: space-between; background: var(--surface); }\n-.activity-title { display: grid; gap: 3px; flex: 1; min-width: 0; }\n-.activity-title strong { font-size: 15px; letter-spacing: -0.01em; }\n-.activity-title span { color: var(--muted); font-size: 12px; line-height: 1.4; overflow-wrap: anywhere; }\n-.control-hub { flex: 0 0 auto; display: grid; gap: 0; border-bottom: 1px solid var(--line); background: var(--surface); }\n-.control-groups { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; padding: 6px 8px 0; background: color-mix(in srgb, var(--surface-subtle) 70%, var(--surface)); }\n-.control-groups button { min-height: 42px; padding: 8px 4px; border: 0; border-radius: 8px 8px 0 0; background: transparent; color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: 0.01em; overflow-wrap: anywhere; }\n-.control-groups button:hover { color: var(--ink); background: color-mix(in srgb, var(--surface) 80%, transparent); }\n-.control-groups button.is-active { color: var(--accent); background: var(--surface); box-shadow: inset 0 -2px 0 var(--accent); }\n-.control-tabs { display: flex; overflow-x: auto; padding: 0 8px; scrollbar-width: thin; }\n-.control-tabs button { flex: 0 0 auto; min-width: 76px; min-height: 44px; padding: 8px 10px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--muted); font-size: 12px; font-weight: 650; }\n-.control-tabs button:hover { background: var(--surface-subtle); color: var(--ink); }\n-.control-tabs button.is-active { border-bottom-color: var(--accent); color: var(--accent); }\n-.control-tabs button[hidden] { display: none !important; }\n-.marketplace-panel { margin-top: 14px; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n-.marketplace-panel-head { display: grid; gap: 3px; margin-bottom: 10px; }\n-.marketplace-panel-head strong { font-size: 13px; }\n-.marketplace-panel-head span { color: var(--muted); font-size: 12px; line-height: 1.45; }\n-.marketplace-advanced { margin-top: 14px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }\n-.marketplace-advanced summary { cursor: pointer; font-size: 13px; font-weight: 700; color: var(--ink); }\n-.marketplace-advanced[open] summary { margin-bottom: 8px; }\n-.control-view { display: none; flex: 1 1 0; min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; padding: 14px 12px 24px; -webkit-overflow-scrolling: touch; }\n-.control-view.is-active { display: block; }\n-.control-view::-webkit-scrollbar, .thread-list::-webkit-scrollbar, .timeline::-webkit-scrollbar { width: 10px; height: 10px; }\n-.control-view::-webkit-scrollbar-thumb, .thread-list::-webkit-scrollbar-thumb, .timeline::-webkit-scrollbar-thumb { border: 3px solid transparent; border-radius: 10px; background: color-mix(in srgb, var(--muted) 45%, transparent); background-clip: padding-box; }\n-.control-view::-webkit-scrollbar-thumb:hover, .thread-list::-webkit-scrollbar-thumb:hover, .timeline::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--muted) 72%, transparent); }\n-.action-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }\n-.action-grid > button { min-width: 0; min-height: 96px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }\n-.action-grid > button:hover { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); box-shadow: var(--shadow-sm); transform: translateY(-1px); }\n-.action-grid strong, .action-grid span { display: block; overflow-wrap: anywhere; }\n-.action-grid strong { font-size: 13px; }\n-.action-grid span { margin-top: 5px; color: var(--muted); font-size: 12px; line-height: 1.4; }\n-.action-grid .danger-action { border-color: #d6aaa6; color: var(--danger); }\n-.session-actions { display: grid; grid-template-columns: 1fr; gap: 7px; margin-top: 12px; }\n-.session-actions a, .session-actions button { display: grid; place-items: center; width: 100%; text-decoration: none; }\n-.resource-summary { padding: 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 12px; line-height: 1.45; }\n-.resource-groups { display: grid; gap: 12px; margin-top: 12px; }\n-.resource-group { min-width: 0; }\n-.resource-group h3 { margin: 0 0 6px; font-size: 13px; }\n-.resource-list { display: grid; gap: 5px; }\n-.resource-row { min-width: 0; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n-.resource-row strong, .resource-row span { display: block; overflow-wrap: anywhere; }\n-.resource-row strong { font-size: 13px; color: var(--ink); }\n-.resource-row span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }\n-.resource-row button { width: 100%; min-height: 36px; margin-top: 6px; border: 1px solid var(--strong-line); border-radius: 5px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }\n-.explorer-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 4px; padding: 8px; border-bottom: 1px solid var(--line); }\n-.explorer-toolbar select { min-width: 0; font-size: 11px; }\n-.explorer-hint { margin: 0; padding: 8px 10px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n-.explorer-tree { flex: 1; min-height: 0; overflow: auto; padding: 0 6px 18px; }\n-.explorer-node { min-width: 0; }\n-.explorer-row { display: grid; grid-template-columns: minmax(0, 1fr) 34px; align-items: center; min-height: 36px; padding-left: calc(var(--tree-depth, 0) * 13px); border-radius: 6px; }\n-.explorer-row:hover, .explorer-row.is-dragging { background: var(--surface-subtle); }\n-.explorer-main { display: flex; align-items: center; gap: 6px; min-width: 0; min-height: 34px; padding: 4px 5px; border: 0; background: transparent; color: var(--ink); text-align: left; }\n-.explorer-main span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 11px/1.3 ui-monospace, SFMono-Regular, Consolas, monospace; }\n-.explorer-context { width: 32px; height: 32px; min-height: 32px; padding: 0; border: 0; border-radius: 5px; background: transparent; color: var(--muted); }\n-.explorer-context:hover { background: var(--line); color: var(--accent); }\n-.explorer-children { min-width: 0; }\n-.conversation.is-drop-target .composer { border-color: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 18%, transparent); }\n-.workspace-profile-form, .deployment-form { display: grid; gap: 10px; margin-top: 12px; }\n-.workspace-profile-form label, .deployment-form label, .marketplace-install label { display: grid; gap: 5px; }\n-.workspace-profile-form textarea:not(.settings-editor), .deployment-form textarea { width: 100%; resize: vertical; padding: 9px; border: 1px solid var(--strong-line); border-radius: 7px; background: var(--surface); color: var(--ink); }\n-.profile-editor { min-height: 150px; }\n-.marketplace-search { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; margin: 12px 0; }\n-.marketplace-install { display: grid; gap: 9px; min-width: 0; margin: 14px 0 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; }\n-.marketplace-install legend { padding: 0 5px; font-size: 11px; font-weight: 700; }\n-.deployment-form { padding: 13px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }\n-.deployment-form h3 { margin: 0 0 2px; font-size: 13px; }\n-.complement-badge { display: inline-flex; width: fit-content; margin-top: 6px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--accent); font-size: 11px; font-weight: 750; text-transform: uppercase; }\n-.command-search { display: grid; gap: 5px; }\n-.command-counts { margin: 9px 0; color: var(--muted); font-size: 12px; }\n-.command-list { display: grid; gap: 6px; }\n-.command-row { width: 100%; min-width: 0; min-height: 68px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }\n-.command-row:hover { border-color: var(--accent); box-shadow: var(--shadow-sm); transform: translateY(-1px); }\n-.command-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }\n-.command-row code { color: var(--accent); font-weight: 700; }\n-.command-support { flex: 0 0 auto; color: var(--muted); font-size: 11px; text-transform: uppercase; }\n-.command-row strong, .command-row span { display: block; overflow-wrap: anywhere; }\n-.command-row strong { margin-top: 4px; font-size: 13px; }\n-.command-row > span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }\n-.activity-summary { position: sticky; top: -14px; z-index: 1; margin: -14px -12px 0; padding: 12px 14px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); color: var(--muted); font-size: 12px; backdrop-filter: blur(10px); }\n-.activity-list { padding: 10px 0; }\n-.mission-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 10px 0; }\n-.mission-toolbar label { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 11px; }\n-.mission-toolbar input { width: 18px; height: 18px; accent-color: var(--accent); }\n-.evidence-summary { padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; line-height: 1.45; }\n-.twin-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: end; margin: 10px 0; }\n-.twin-toolbar label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }\n-.twin-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 10px 0; }\n-.twin-metric { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n-.twin-metric strong, .twin-metric span { display: block; }\n-.twin-metric strong { overflow-wrap: anywhere; font-size: 16px; line-height: 1.2; }\n-.twin-metric span { margin-top: 4px; color: var(--muted); font-size: 10px; }\n-.twin-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n-.twin-section > header { margin-bottom: 9px; }\n-.twin-section > header strong, .twin-section > header span { display: block; }\n-.twin-section > header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.45; }\n-.twin-change-grid, .twin-operation-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }\n-.twin-change-card, .twin-operation-card { min-width: 0; padding: 9px; border-radius: 8px; background: var(--surface-subtle); }\n-.twin-change-card strong, .twin-change-card span, .twin-operation-card strong, .twin-operation-card span { display: block; }\n-.twin-change-card span, .twin-operation-card span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }\n-.twin-change-card.is-risk strong { color: #dc2626; }\n-.twin-change-card.is-positive strong { color: #16a34a; }\n-.twin-topology, .twin-list { display: grid; gap: 6px; }\n-.twin-topology-row, .twin-list-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; min-width: 0; padding: 8px 9px; border-radius: 8px; background: var(--surface-subtle); }\n-.twin-topology-row strong, .twin-topology-row span, .twin-list-row strong, .twin-list-row span { min-width: 0; overflow-wrap: anywhere; }\n-.twin-topology-row span, .twin-list-row span { color: var(--muted); font-size: 10px; text-align: right; }\n-.twin-list + .twin-list { margin-top: 8px; }\n-.staging-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; margin: 10px 0; }\n-.staging-toolbar > div { min-width: 0; }\n-.staging-toolbar strong, .staging-toolbar span { display: block; }\n-.staging-toolbar span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }\n-.staging-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n-.staging-section > header { margin-bottom: 8px; }\n-.staging-section > header strong, .staging-section > header span { display: block; }\n-.staging-section > header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n-.staging-gates, .staging-files, .staging-history { display: grid; gap: 7px; }\n-.staging-gate, .staging-file, .staging-history-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }\n-.staging-gate.is-passed, .staging-file.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }\n-.staging-gate.is-failed, .staging-file.is-failed { border-color: color-mix(in srgb, #dc2626 55%, var(--line)); }\n-.staging-gate strong, .staging-gate span, .staging-file strong, .staging-file span, .staging-history-row strong, .staging-history-row span { display: block; overflow-wrap: anywhere; }\n-.staging-gate span, .staging-file span, .staging-history-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n-.staging-checks { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; }\n-.staging-checks small { padding: 3px 6px; border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 9px; }\n-.staging-checks small.is-failed { background: color-mix(in srgb, #dc2626 14%, var(--surface)); color: #dc2626; }\n-.mission-layout { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 10px; margin-top: 10px; }\n-.mission-list, .mission-detail { min-width: 0; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); overflow: hidden; }\n-.mission-list { display: grid; align-content: start; }\n-.mission-row { min-width: 0; min-height: 64px; padding: 10px 11px; border: 0; border-bottom: 1px solid var(--line); background: transparent; color: var(--ink); text-align: left; }\n-.mission-row:last-child { border-bottom: 0; }\n-.mission-row:hover, .mission-row.is-active { background: var(--surface-subtle); }\n-.mission-row.is-active { box-shadow: inset 3px 0 var(--accent); }\n-.mission-row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n-.mission-row-head strong { font-size: 11px; }\n-.mission-row-head time, .mission-row > span:last-child { color: var(--muted); font-size: 10px; }\n-.mission-row > span:last-child { display: block; margin-top: 5px; overflow-wrap: anywhere; }\n-.mission-detail { min-height: 180px; padding: 12px; color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }\n-.mission-detail h3 { margin: 0 0 10px; color: var(--ink); font-size: 13px; }\n-.mission-files { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 10px; }\n-.mission-files code { max-width: 100%; padding: 4px 6px; border-radius: 5px; background: var(--code); color: var(--code-ink); overflow-wrap: anywhere; }\n-.evidence-row { padding: 8px 0; border-top: 1px solid var(--line); }\n-.evidence-row strong, .evidence-row span { display: block; }\n-.evidence-row strong { color: var(--ink); font-size: 11px; }\n-.evidence-row span { margin-top: 2px; font-size: 10px; }\n-.mission-empty { padding: 16px; color: var(--muted); font-size: 11px; line-height: 1.5; }\n-.model-router-filters { display: grid; grid-template-columns: minmax(0, .7fr) minmax(0, 1.3fr); gap: 8px; margin: 10px 0; }\n-.model-router-filters label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }\n-.model-router-filters select, .model-router-filters input { width: 100%; min-width: 0; }\n-.model-router-list { display: grid; gap: 7px; }\n-.provider-status-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin: 10px 0; }\n-.provider-status-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); }\n-.provider-status-row strong, .provider-status-row span { display: block; overflow-wrap: anywhere; }\n-.provider-status-row strong { font-size: 10px; }\n-.provider-status-row span { margin-top: 3px; color: var(--muted); font-size: 9px; line-height: 1.4; }\n-.model-router-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n-.model-eval-selector { width: 20px; height: 20px; accent-color: var(--accent); }\n-.model-router-actions { display: grid; gap: 6px; min-width: 170px; }\n-.model-auto-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; margin: 10px 0; padding: 12px; border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line)); border-radius: 10px; background: color-mix(in srgb, var(--accent) 5%, var(--surface)); }\n-.model-budget-card { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(100px, .45fr) minmax(100px, .45fr); gap: 10px; align-items: end; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n-.model-budget-card > div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }\n-.model-budget-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }\n-.model-tool-cert-card { display: grid; gap: 9px; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n-.model-tool-cert-card > div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }\n-.model-tool-cert-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }\n-.mission-contract-form { display: grid; gap: 10px; }\n-.mission-contract-form > label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }\n-.contract-gates { display: grid; gap: 8px; margin-top: 12px; }\n-.contract-gate { padding: 11px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }\n-.contract-gate.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }\n-.contract-gate.is-failed { border-color: color-mix(in srgb, #dc2626 50%, var(--line)); }\n-.contract-gate.is-pending { border-color: color-mix(in srgb, #d97706 48%, var(--line)); }\n-.contract-gate strong, .contract-gate span { display: block; }\n-.contract-gate span { margin-top: 4px; color: var(--muted); font-size: 10px; }\n-.contract-criteria { display: grid; gap: 6px; margin-top: 8px; }\n-.contract-criterion { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; }\n-.model-auto-card strong, .model-auto-card span { display: block; }\n-.model-auto-card span, .model-ranking-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.45; }\n-.model-ranking { display: grid; gap: 7px; margin: 10px 0; }\n-.model-ranking-row { padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); overflow-wrap: anywhere; }\n-.model-router-row div, .model-router-row strong, .model-router-row span { min-width: 0; }\n-.model-router-row strong, .model-router-row span { display: block; overflow-wrap: anywhere; }\n-.model-router-row strong { font-size: 11px; }\n-.model-router-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n-.activity-row { padding: 9px 8px; border-bottom: 1px solid var(--line); }\n-.activity-row strong { display: block; margin-bottom: 3px; font-size: 11px; }\n-.activity-row span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }\n-\n-.settings-form { display: grid; gap: 14px; }\n-.settings-intro { display: grid; gap: 4px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n-.settings-intro strong { font-size: 13px; }\n-.settings-intro span { color: var(--muted); font-size: 12px; line-height: 1.45; }\n-.settings-form fieldset { display: grid; gap: 10px; min-width: 0; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n-.settings-editor { width: 100%; min-height: 220px; resize: vertical; padding: 11px; border: 1px solid var(--strong-line); border-radius: 8px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; }\n-.inline-actions { display: flex; justify-content: flex-end; gap: 7px; }\n-.settings-form legend { padding: 0 6px; color: var(--ink); font-size: 12px; font-weight: 700; }\n-.settings-form label:not(.toggle-row) { display: grid; gap: 5px; }\n-.settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; }\n-.toggle-row { display: grid; grid-template-columns: 40px minmax(0, 1fr); align-items: center; min-height: 52px; padding: 7px 8px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); cursor: pointer; }\n-.toggle-row input { width: 20px; height: 20px; margin: 0; accent-color: var(--accent); }\n-.toggle-row span { display: grid; gap: 2px; }\n-.toggle-row strong { color: var(--ink); font-size: 13px; }\n-.toggle-row small { color: var(--muted); font-size: 12px; line-height: 1.35; }\n-.policy-list { display: flex; flex-wrap: wrap; gap: 6px; }\n-.policy-list span { padding: 5px 7px; border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line)); border-radius: 6px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--accent); font-size: 11px; font-weight: 700; }\n-.settings-actions { position: sticky; bottom: -24px; display: grid; grid-template-columns: 1fr 1.4fr; gap: 8px; margin: 0 -12px -24px; padding: 12px; border-top: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); backdrop-filter: blur(10px); }\n-.settings-actions button { min-width: 0; }\n-.settings-form.is-saving { opacity: .72; pointer-events: none; }\n-.credential-status { padding: 9px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }\n-.credential-status.is-configured { border-color: color-mix(in srgb, var(--accent) 36%, var(--line)); color: var(--accent); }\n-.settings-note { margin: 0; color: var(--muted); font-size: 10px; line-height: 1.45; }\n-.diagnostics-hero { display: grid; gap: 12px; padding: 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-sm); }\n-.diagnostics-hero > div { display: grid; gap: 4px; }\n-.diagnostics-hero strong { font-size: 14px; }\n-.diagnostics-hero span { color: var(--muted); font-size: 11px; line-height: 1.45; }\n-.diagnostics-summary { margin: 12px 0; padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }\n-.diagnostics-list { display: grid; gap: 7px; }\n-.diagnostic-row { display: grid; grid-template-columns: 10px minmax(0, 1fr); gap: 10px; align-items: start; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n-.diagnostic-dot { width: 10px; height: 10px; margin-top: 3px; border-radius: 50%; background: var(--muted); }\n-.diagnostic-row.is-pass .diagnostic-dot { background: #21845f; }\n-.diagnostic-row.is-warn .diagnostic-dot { background: var(--warning); }\n-.diagnostic-row.is-fail .diagnostic-dot { background: var(--danger); }\n-.diagnostic-copy { display: grid; gap: 3px; min-width: 0; }\n-.diagnostic-copy strong { font-size: 11px; }\n-.diagnostic-copy span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }\n-.security-refresh { width: 100%; margin: 12px 0; }\n-.security-grid { display: grid; gap: 8px; }\n-.security-card { position: relative; padding: 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }\n-.security-card > strong { display: block; padding-right: 70px; font-size: 12px; }\n-.security-card > span { position: absolute; top: 10px; right: 10px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font-size: 9px; font-weight: 750; }\n-.security-card.is-pass > span { color: #21845f; }\n-.security-card.is-warn > span { color: var(--warning); }\n-.security-card.is-fail > span { color: var(--danger); }\n-.security-card ul { margin: 9px 0 0; padding-left: 18px; color: var(--muted); font-size: 10px; line-height: 1.5; }\n-.integration-dialog { width: min(720px, calc(100vw - 28px)); max-height: min(860px, calc(100dvh - 28px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }\n-.integration-dialog[open] { display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto auto; }\n-.integration-dialog::backdrop { background: rgba(20, 22, 20, .66); backdrop-filter: blur(4px); }\n-.integration-dialog > header, .integration-dialog > footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--line); }\n-.integration-dialog > header > div { display: grid; gap: 2px; min-width: 0; }\n-.integration-dialog > header small { color: var(--accent); font-size: 9px; font-weight: 800; letter-spacing: .08em; }\n-.integration-dialog > header strong { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }\n-.integration-dialog > footer { justify-content: flex-end; border-top: 1px solid var(--line); border-bottom: 0; }\n-.integration-content { min-height: 0; overflow-y: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 14px; }\n-.integration-content section { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }\n-.integration-content section > strong { display: block; margin-bottom: 6px; color: var(--ink); font-size: 10px; text-transform: uppercase; letter-spacing: .04em; }\n-.integration-content section > div { color: var(--muted); font-size: 11px; line-height: 1.5; overflow-wrap: anywhere; }\n-.integration-content ul { margin: 0; padding-left: 17px; }\n-.integration-endpoint { position: relative; z-index: 1; display: grid; gap: 5px; margin: 0; padding: 10px 14px 12px; border-top: 1px solid var(--line); background: var(--surface); color: var(--muted); font-size: 10px; }\n-.integration-dialog > .form-error { margin: 0 14px 10px; }\n-.integration-dialog > .form-error:empty { display: none; }\n-#integration-error { color: var(--muted); }\n-#integration-error[data-error=\"true\"] { color: var(--danger); }\n-\n-.login-dialog { width: min(390px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }\n-.login-dialog::backdrop { background: rgba(20, 22, 20, .58); }\n-.login-dialog form { display: grid; gap: 12px; padding: 22px; }\n-.login-brand { display: flex; align-items: center; gap: 11px; margin-bottom: 8px; }\n-.form-error { min-height: 18px; margin: 0; color: var(--danger); font-size: 12px; }\n-.app-error-boundary { position: fixed; z-index: 120; left: max(12px, env(safe-area-inset-left)); right: max(12px, env(safe-area-inset-right)); bottom: max(12px, env(safe-area-inset-bottom)); display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid color-mix(in srgb, var(--danger) 42%, var(--line)); border-radius: 14px; background: color-mix(in srgb, var(--surface) 94%, var(--danger)); box-shadow: 0 18px 46px rgba(0, 0, 0, .22); }\n-.app-error-boundary > div:first-child { display: grid; gap: 4px; min-width: 0; }\n-.app-error-boundary span { color: var(--muted); overflow-wrap: anywhere; }\n-.app-error-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }\n-.app-error-boundary[data-fatal=\"true\"] { top: 50%; bottom: auto; max-width: 680px; margin-inline: auto; transform: translateY(-50%); }\n-@media (max-width: 640px) { .app-error-boundary { align-items: stretch; flex-direction: column; } .app-error-actions > button { flex: 1 1 140px; min-height: 48px; } }\n-.action-dialog { width: min(460px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); }\n-.action-dialog::backdrop { background: rgba(20, 22, 20, .58); }\n-.action-dialog form { display: grid; gap: 12px; padding: 18px; }\n-.action-dialog header, .action-dialog footer { display: flex; align-items: center; gap: 8px; }\n-.action-dialog header strong { flex: 1; }\n-.action-dialog footer { justify-content: flex-end; }\n-.action-copy { color: var(--muted); font-size: 12px; line-height: 1.45; }\n-.action-fields { display: grid; gap: 10px; }\n-.action-fields label { display: grid; gap: 5px; }\n-.action-fields textarea { width: 100%; min-height: 90px; resize: vertical; border: 1px solid var(--strong-line); border-radius: 6px; background: var(--surface); color: var(--ink); padding: 9px; }\n-.manual-dialog { width: min(1180px, calc(100vw - 32px)); height: min(860px, calc(100dvh - 32px)); max-width: none; max-height: none; padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }\n-.manual-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }\n-.manual-dialog[open] { display: grid; grid-template-rows: 58px minmax(0, 1fr); }\n-.manual-dialog > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 5px 10px 5px 18px; border-bottom: 1px solid var(--line); background: var(--surface); }\n-.manual-dialog iframe { width: 100%; height: 100%; border: 0; background: var(--canvas); }\n-.file-preview-dialog { width: min(920px, calc(100vw - 32px)); height: min(760px, calc(100dvh - 32px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 11px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }\n-.file-preview-dialog[open] { display: grid; grid-template-rows: 54px minmax(0, 1fr) 58px; }\n-.file-preview-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }\n-.file-preview-dialog header, .file-preview-dialog footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 7px 12px 7px 16px; border-bottom: 1px solid var(--line); }\n-.file-preview-dialog footer { border-top: 1px solid var(--line); border-bottom: 0; color: var(--muted); font-size: 10px; }\n-.file-preview-dialog pre { min-width: 0; min-height: 0; overflow: auto; margin: 0; padding: 16px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre; tab-size: 2; }\n-.mobile-only, .mobile-nav { display: none; }\n-.resource-summary.is-loading::before { content: ''; display: inline-block; width: 10px; height: 10px; margin-right: 8px; border: 2px solid color-mix(in srgb, var(--accent) 25%, transparent); border-top-color: var(--accent); border-radius: 50%; animation: loading-spin .75s linear infinite; vertical-align: -1px; }\n-\n-@keyframes loading-spin { to { transform: rotate(360deg); } }\n-@keyframes status-pulse { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--warning) 38%, transparent); } 50% { box-shadow: 0 0 0 5px transparent; } }\n-\n-@media (max-width: 1060px) {\n-  .app-shell.activity-open { grid-template-columns: 200px minmax(0, 1fr) minmax(380px, 42vw); }\n-  .app-shell { grid-template-columns: 240px minmax(0, 1fr); }\n-}\n-\n-@media (max-width: 760px) {\n-  .desktop-only { display: none; }\n-  .mobile-only { display: grid; }\n-  body { font-size: 15px; }\n-  button, select { min-height: 48px; }\n-  .icon-button { width: 48px; height: 48px; }\n-  .app-shell, .app-shell.activity-open { display: block; height: calc(var(--app-height) - var(--safe-top)); padding-bottom: var(--mobile-nav-total); }\n-  .panel-view { display: none !important; width: 100%; height: calc(var(--app-height) - var(--safe-top) - var(--mobile-nav-total)); min-height: 0; border: 0; }\n-  .panel-view.is-active { display: flex !important; }\n-  .rail, .activity { position: static; }\n-  .rail-tabs button { min-height: 48px; }\n-  .conversation-header { padding-inline: 10px; }\n-  .connection span:last-child { display: none; }\n-  .timeline { padding: 18px 12px; }\n-  .timeline-item.user { margin-left: 24px; }\n-  .approval-tray { padding: 0 14px; }\n-  .change-review-tray { max-height: 52dvh; padding: 0 10px; }\n-  .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }\n-  .turn-watchdog button { min-height: 48px; }\n-  .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }\n-  .turn-status-banner button { min-height: 48px; }\n-  .change-review-card > header { align-items: stretch; flex-direction: column; }\n-  .change-review-bulk { display: grid; grid-template-columns: 1fr 1fr; }\n-  .change-review-bulk button, .change-file-actions button { min-height: 48px; }\n-  .change-file-actions { display: grid; grid-template-columns: 1fr 1fr; }\n-  .composer-wrap { padding: 6px 8px max(7px, var(--safe-bottom)); }\n-  .agent-toolbar { padding-top: 5px; }\n-  .agent-toolbar > select, .smart-actions button { min-height: 44px; }\n+.conversation-scroll { flex: 1 1 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }\n+.conversation-scroll > .timeline { flex: 1 1 0; min-height: 0; }\n+.conversation-scroll > .turn-status-banner,\n+.conversation-scroll > .turn-watchdog,\n+.conversation-scroll > .execution-status,\n+.conversation-scroll > .approval-tray,\n+.conversation-scroll > .change-review-tray { flex: 0 0 auto; }\n+.conversation-header { padding-inline: 18px; }\n+.thread-title { min-width: 0; flex: 1; display: flex; flex-direction: column; }\n+.thread-title strong, .thread-title span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n+.thread-title span { color: var(--muted); font-size: 11px; margin-top: 3px; }\n+.connection { display: flex; align-items: center; gap: 7px; color: var(--muted); font-size: 12px; }\n+.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #999; }\n+.status-dot.is-online { background: #21845f; }\n+.status-dot.is-running { background: var(--warning); animation: status-pulse 1.4s ease-in-out infinite; }\n+\n+.timeline { flex: 1 1 0; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: 32px max(24px, calc((100% - 820px) / 2)); scroll-behavior: smooth; -webkit-overflow-scrolling: touch; }\n+.empty-state { min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding-bottom: 8vh; }\n+.empty-mark { display: grid; place-items: center; width: 45px; height: 45px; border: 1px solid var(--strong-line); border-radius: 8px; font-size: 20px; font-weight: 750; }\n+.empty-state h1 { margin: 18px 0 7px; font-size: 25px; font-weight: 680; }\n+.empty-state p { margin: 0; color: var(--muted); }\n+\n+.turn-status-banner {\n+  flex: 0 0 auto;\n+  display: flex;\n+  align-items: center;\n+  gap: 12px;\n+  margin: 0 max(24px, calc((100% - 820px) / 2)) 10px;\n+  padding: 10px 12px;\n+  border: 1px solid var(--line);\n+  border-radius: 10px;\n+  background: color-mix(in srgb, var(--surface-subtle) 88%, #dfe8e2);\n+}\n+.turn-status-banner.is-hidden { display: none; }\n+.turn-status-banner[data-state=\"running\"] {\n+  border-color: color-mix(in srgb, var(--warning) 45%, var(--line));\n+  background: color-mix(in srgb, #fff8e8 70%, var(--surface));\n+}\n+.turn-status-banner[data-state=\"error\"] {\n+  border-color: color-mix(in srgb, #c45c4a 40%, var(--line));\n+  background: color-mix(in srgb, #fff1ee 75%, var(--surface));\n+}\n+.turn-status-banner[data-state=\"done\"] {\n+  border-color: color-mix(in srgb, var(--accent) 35%, var(--line));\n+}\n+.turn-status-main { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }\n+.turn-status-main strong { font-size: 12px; font-weight: 700; }\n+.turn-status-main span { color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }\n+.turn-inline-summary {\n+  margin-top: 8px;\n+  padding: 7px 9px;\n+  border-radius: 8px;\n+  border: 1px solid var(--line);\n+  background: var(--surface-subtle);\n+  color: var(--muted);\n+  font-size: 11px;\n+}\n+.turn-summary-card .item-body { padding: 0; overflow: hidden; }\n+.turn-summary-body { padding: 12px 14px; }\n+.turn-summary-body strong { display: block; margin-bottom: 4px; }\n+.turn-summary-body p { margin: 0 0 8px; color: var(--muted); font-size: 12px; }\n+.turn-tool-list { margin: 0; padding-left: 18px; color: var(--ink); font-size: 12px; }\n+.turn-tool-list li { margin: 0 0 4px; }\n+.activity-row.activity-cursor.is-live strong { color: var(--accent); }\n+\n+.turn-block { margin: 0 0 26px; }\n+.timeline-item { position: relative; margin: 0 0 14px; }\n+.timeline-item.user { margin-left: clamp(30px, 15%, 120px); }\n+.timeline-item.user .item-body { background: #edf2ee; border-color: #d8e1da; }\n+.timeline-item.assistant .item-body { padding-inline: 0; border-color: transparent; background: transparent; }\n+.item-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; color: var(--muted); font-size: 11px; font-weight: 650; }\n+.item-time { display: block; margin-top: 5px; color: var(--muted); font-size: 10px; line-height: 1.3; text-align: right; font-variant-numeric: tabular-nums; }\n+.item-status { margin-left: auto; font-weight: 500; }\n+.item-body { border: 1px solid var(--line); border-radius: 12px; background: var(--surface-subtle); padding: 12px 14px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }\n+.timeline-item.tool .item-body, .timeline-item.diff .item-body, .timeline-item.plan .item-body, .timeline-item.subagent .item-body { padding: 0; overflow: hidden; }\n+.timeline-item.plan .item-body { border-color: color-mix(in srgb, var(--accent) 32%, var(--line)); }\n+.timeline-item.subagent .item-body { border-color: color-mix(in srgb, #6e63d9 35%, var(--line)); }\n+.tool-summary { padding: 10px 12px; background: #f1f2ef; border-bottom: 1px solid var(--line); font-weight: 650; }\n+.tool-output, .diff-output { margin: 0; max-height: 340px; overflow: auto; padding: 12px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; }\n+.tool-output.is-empty { display: none; }\n+.timeline-item.tool .tool-summary:only-child { border-bottom: 0; }\n+.diff-line { display: block; min-height: 19px; padding: 0 6px; }\n+.diff-line.add { background: #173c2c; color: #c9f3dc; }\n+.diff-line.del { background: #482522; color: #ffd5d1; }\n+\n+.approval-tray { flex: 0 0 auto; padding: 0 max(24px, calc((100% - 820px) / 2)); }\n+.approval-card { margin: 0 0 10px; border: 1px solid #d9b67f; border-radius: 7px; background: #fffaf1; padding: 12px; }\n+.approval-card strong { display: block; margin-bottom: 7px; color: #71400e; }\n+.approval-card pre { max-height: 130px; overflow: auto; margin: 0 0 10px; white-space: pre-wrap; font: 11px/1.45 ui-monospace, Consolas, monospace; }\n+.approval-diffs { display: grid; gap: 7px; margin-bottom: 10px; }\n+.approval-diffs details { overflow: hidden; border: 1px solid #d9b67f; border-radius: 7px; background: var(--surface); }\n+.approval-diffs summary { padding: 9px 10px; cursor: pointer; color: var(--ink); font: 650 11px/1.4 ui-monospace, Consolas, monospace; overflow-wrap: anywhere; }\n+.approval-diffs .diff-output { max-height: 260px; margin: 0; border-radius: 0; }\n+.approval-actions { display: flex; justify-content: flex-end; gap: 7px; }\n+\n+.change-review-tray { flex: 0 1 auto; max-height: min(48dvh, 520px); overflow: auto; padding: 0 max(18px, calc((100% - 850px) / 2)); background: var(--surface); scrollbar-gutter: stable; }\n+.turn-watchdog { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 max(18px, calc((100% - 850px) / 2)) 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }\n+.turn-watchdog.is-hidden { display: none; }\n+.turn-watchdog > div { display: grid; gap: 2px; min-width: 0; }\n+.turn-watchdog strong { font-size: 12px; }\n+.turn-watchdog span { color: var(--muted); font-size: 10px; }\n+.turn-watchdog[data-status=\"stale\"], .turn-watchdog[data-status=\"stuckCompaction\"] { border-color: color-mix(in srgb, var(--danger) 48%, var(--line)); }\n+.execution-status { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-height: 30px; padding: 4px max(18px, calc((100% - 850px) / 2)); border-bottom: 1px solid var(--line); background: var(--surface-subtle); color: var(--muted); font-size: 12px; }\n+.execution-status-label { color: var(--ink); font-weight: 750; text-transform: uppercase; letter-spacing: .04em; }\n+#execution-status-text { overflow-wrap: anywhere; }\n+.execution-meta { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; color: var(--muted); font-size: 10px; }\n+.execution-meta span { padding: 3px 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-subtle); }\n+.change-file-explanation { display: grid; gap: 3px; padding: 9px 11px; border-top: 1px solid var(--line); color: var(--muted); font-size: 11px; line-height: 1.45; }\n+.change-review-tray:empty { display: none; }\n+.change-review-tray.is-saving { opacity: .68; pointer-events: none; }\n+.change-review-card.is-cursor { border-color: color-mix(in srgb, #3d7ea6 42%, var(--line)); }\n+.change-review-card.is-cursor > header { background: color-mix(in srgb, #3d7ea6 8%, var(--surface)); }\n+.change-review-card > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 12px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--accent) 6%, var(--surface)); }\n+.change-review-card > header > div:first-child { display: grid; gap: 2px; min-width: 0; }\n+.change-review-card > header strong { font-size: 12px; }\n+.change-review-card > header span { color: var(--muted); font-size: 10px; }\n+.change-review-bulk, .change-file-actions { display: flex; justify-content: flex-end; gap: 7px; }\n+.change-review-bulk button, .change-file-actions button { min-height: 34px; padding: 6px 9px; font-size: 10px; }\n+.change-review-files { display: grid; }\n+.change-review-file { overflow: hidden; border-bottom: 1px solid var(--line); }\n+.change-review-file:last-child { border-bottom: 0; }\n+.change-review-file > summary { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 42px; padding: 8px 11px; cursor: pointer; font: 650 11px/1.4 ui-monospace, SFMono-Regular, Consolas, monospace; }\n+.change-review-file > summary:hover { background: var(--surface-subtle); }\n+.change-review-file > summary span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n+.change-review-file > summary small { padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font: 700 9px/1.2 Inter, system-ui, sans-serif; text-transform: uppercase; }\n+.change-review-file.is-accepted > summary small { color: #21845f; }\n+.change-review-file.is-rejected > summary small { color: var(--danger); }\n+.change-review-file .diff-output { max-height: 280px; margin: 0; border-block: 1px solid var(--line); }\n+.change-file-actions { padding: 8px 10px; background: var(--surface-subtle); }\n+\n+.composer-wrap { position: relative; z-index: 4; flex: 0 0 auto; min-height: 0; padding: 10px max(18px, calc((100% - 850px) / 2)) max(12px, env(safe-area-inset-bottom)); background: linear-gradient(180deg, color-mix(in srgb, var(--surface) 72%, transparent), var(--surface) 24%); }\n+.context-chips { display: flex; gap: 6px; overflow-x: auto; margin: 0 0 7px; scrollbar-width: none; }\n+.context-chip { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; min-height: 30px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-subtle); font-size: 11px; }\n+.context-chip button { min-height: 22px; width: 22px; padding: 0; border: 0; background: transparent; color: var(--muted); }\n+.composer { overflow: hidden; border: 1px solid var(--strong-line); border-radius: 18px; background: var(--surface); box-shadow: 0 12px 40px rgba(32, 40, 70, .10); }\n+.composer:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent), var(--shadow-sm); }\n+.composer textarea { display: block; width: 100%; max-height: 180px; resize: none; border: 0; background: transparent; color: var(--ink); padding: 13px 14px 6px; line-height: 1.45; }\n+.composer textarea:focus { outline: 0; }\n+.agent-toolbar { display: flex; align-items: center; gap: 5px; min-width: 0; overflow-x: auto; padding: 6px 7px 0; scrollbar-width: none; }\n+.agent-toolbar::-webkit-scrollbar, .smart-actions::-webkit-scrollbar { display: none; }\n+.agent-toolbar > select { flex: 0 0 auto; width: auto; max-width: 180px; min-height: 32px; padding: 4px 8px; border-color: transparent; border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; font-weight: 650; }\n+.smart-actions { display: flex; align-items: center; gap: 4px; flex: 0 0 auto; min-width: 0; overflow-x: auto; scrollbar-width: none; }\n+.smart-actions button { min-height: 32px; padding: 5px 9px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); font-size: 12px; white-space: nowrap; }\n+.smart-actions button:hover { background: var(--surface-subtle); color: var(--ink); }\n+.composer-tools { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 7px; }\n+.attachment-controls { position: relative; flex: 0 0 auto; }\n+.attachment-command { display: grid; place-items: center; width: 36px; height: 36px; min-height: 36px; padding: 0; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 20px; }\n+.attachment-command:hover { border-color: var(--accent); color: var(--accent); }\n+.attachment-menu { position: absolute; z-index: 30; left: 0; bottom: calc(100% + 8px); width: min(290px, calc(100vw - 28px)); padding: 6px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-lg); }\n+.attachment-menu button { display: grid; gap: 3px; width: 100%; padding: 10px; border: 0; border-radius: 7px; background: transparent; color: var(--ink); text-align: left; }\n+.attachment-menu button:hover { background: var(--surface-subtle); }\n+.attachment-menu strong { font-size: 13px; }\n+.attachment-menu span { color: var(--muted); font-size: 12px; }\n+.run-options { display: flex; flex: 1; gap: 6px; min-width: 0; overflow-x: auto; scrollbar-width: none; }\n+.advanced-run-options { display: flex; flex: 1; gap: 6px; min-width: 0; }\n+.run-options select { width: auto; max-width: 190px; min-height: 34px; padding: 5px 8px; border-color: transparent; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }\n+#engine-select { max-width: 175px; font-weight: 650; }\n+.run-options-toggle { display: none; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; font-weight: 650; }\n+.send-command { width: 36px; height: 36px; border: 0; border-radius: 7px; background: var(--ink); color: white; font-size: 20px; font-weight: 700; }\n+.send-command:disabled, button:disabled, select:disabled { cursor: not-allowed; opacity: .45; }\n+.composer textarea:disabled,\n+.composer textarea:read-only,\n+.agent-toolbar select:disabled,\n+.run-options select:disabled {\n+  opacity: 1;\n+  color: var(--muted);\n+  -webkit-text-fill-color: var(--muted);\n+}\n+.composer textarea:disabled::placeholder,\n+.composer textarea:read-only::placeholder {\n+  color: var(--muted);\n+  opacity: 1;\n+  -webkit-text-fill-color: var(--muted);\n+}\n+.is-hidden { display: none !important; }\n+\n+.activity { display: none; height: 100dvh; min-height: 0; overflow: hidden; border-left: 1px solid var(--line); border-right: 0; }\n+.app-shell.activity-open { grid-template-columns: 252px minmax(0, 1fr) minmax(400px, 34vw); }\n+.app-shell.activity-open .activity { display: flex; flex-direction: column; }\n+.app-shell.activity-open .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }\n+  .app-shell.activity-open .run-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: visible; }\n+  .app-shell.activity-open .advanced-run-options { display: contents; }\n+  .app-shell.activity-open .run-options select { width: 100%; min-width: 0; max-width: none; }\n+.activity-header { flex: 0 0 auto; justify-content: space-between; background: var(--surface); }\n+.activity-title { display: grid; gap: 3px; flex: 1; min-width: 0; }\n+.activity-title strong { font-size: 15px; letter-spacing: -0.01em; }\n+.activity-title span { color: var(--muted); font-size: 12px; line-height: 1.4; overflow-wrap: anywhere; }\n+.control-hub { flex: 0 0 auto; display: grid; gap: 0; border-bottom: 1px solid var(--line); background: var(--surface); }\n+.control-groups { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; padding: 6px 8px 0; background: color-mix(in srgb, var(--surface-subtle) 70%, var(--surface)); }\n+.control-groups button { min-height: 42px; padding: 8px 4px; border: 0; border-radius: 8px 8px 0 0; background: transparent; color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: 0.01em; overflow-wrap: anywhere; }\n+.control-groups button:hover { color: var(--ink); background: color-mix(in srgb, var(--surface) 80%, transparent); }\n+.control-groups button.is-active { color: var(--accent); background: var(--surface); box-shadow: inset 0 -2px 0 var(--accent); }\n+.control-tabs { display: flex; overflow-x: auto; padding: 0 8px; scrollbar-width: thin; }\n+.control-tabs button { flex: 0 0 auto; min-width: 76px; min-height: 44px; padding: 8px 10px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--muted); font-size: 12px; font-weight: 650; }\n+.control-tabs button:hover { background: var(--surface-subtle); color: var(--ink); }\n+.control-tabs button.is-active { border-bottom-color: var(--accent); color: var(--accent); }\n+.control-tabs button[hidden] { display: none !important; }\n+.marketplace-panel { margin-top: 14px; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n+.marketplace-panel-head { display: grid; gap: 3px; margin-bottom: 10px; }\n+.marketplace-panel-head strong { font-size: 13px; }\n+.marketplace-panel-head span { color: var(--muted); font-size: 12px; line-height: 1.45; }\n+.marketplace-advanced { margin-top: 14px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }\n+.marketplace-advanced summary { cursor: pointer; font-size: 13px; font-weight: 700; color: var(--ink); }\n+.marketplace-advanced[open] summary { margin-bottom: 8px; }\n+.control-view { display: none; flex: 1 1 0; min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; padding: 14px 12px 24px; -webkit-overflow-scrolling: touch; }\n+.control-view.is-active { display: block; }\n+.control-view::-webkit-scrollbar, .thread-list::-webkit-scrollbar, .timeline::-webkit-scrollbar { width: 10px; height: 10px; }\n+.control-view::-webkit-scrollbar-thumb, .thread-list::-webkit-scrollbar-thumb, .timeline::-webkit-scrollbar-thumb { border: 3px solid transparent; border-radius: 10px; background: color-mix(in srgb, var(--muted) 45%, transparent); background-clip: padding-box; }\n+.control-view::-webkit-scrollbar-thumb:hover, .thread-list::-webkit-scrollbar-thumb:hover, .timeline::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--muted) 72%, transparent); }\n+.action-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }\n+.action-grid > button { min-width: 0; min-height: 96px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }\n+.action-grid > button:hover { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); box-shadow: var(--shadow-sm); transform: translateY(-1px); }\n+.action-grid strong, .action-grid span { display: block; overflow-wrap: anywhere; }\n+.action-grid strong { font-size: 13px; }\n+.action-grid span { margin-top: 5px; color: var(--muted); font-size: 12px; line-height: 1.4; }\n+.action-grid .danger-action { border-color: #d6aaa6; color: var(--danger); }\n+.session-actions { display: grid; grid-template-columns: 1fr; gap: 7px; margin-top: 12px; }\n+.session-actions a, .session-actions button { display: grid; place-items: center; width: 100%; text-decoration: none; }\n+.resource-summary { padding: 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 12px; line-height: 1.45; }\n+.resource-groups { display: grid; gap: 12px; margin-top: 12px; }\n+.resource-group { min-width: 0; }\n+.resource-group h3 { margin: 0 0 6px; font-size: 13px; }\n+.resource-list { display: grid; gap: 5px; }\n+.resource-row { min-width: 0; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n+.resource-row strong, .resource-row span { display: block; overflow-wrap: anywhere; }\n+.resource-row strong { font-size: 13px; color: var(--ink); }\n+.resource-row span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }\n+.resource-row button { width: 100%; min-height: 36px; margin-top: 6px; border: 1px solid var(--strong-line); border-radius: 5px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }\n+.explorer-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 4px; padding: 8px; border-bottom: 1px solid var(--line); }\n+.explorer-toolbar select { min-width: 0; font-size: 11px; }\n+.explorer-hint { margin: 0; padding: 8px 10px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n+.explorer-tree { flex: 1; min-height: 0; overflow: auto; padding: 0 6px 18px; }\n+.explorer-node { min-width: 0; }\n+.explorer-row { display: grid; grid-template-columns: minmax(0, 1fr) 34px; align-items: center; min-height: 36px; padding-left: calc(var(--tree-depth, 0) * 13px); border-radius: 6px; }\n+.explorer-row:hover, .explorer-row.is-dragging { background: var(--surface-subtle); }\n+.explorer-main { display: flex; align-items: center; gap: 6px; min-width: 0; min-height: 34px; padding: 4px 5px; border: 0; background: transparent; color: var(--ink); text-align: left; }\n+.explorer-main span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 11px/1.3 ui-monospace, SFMono-Regular, Consolas, monospace; }\n+.explorer-context { width: 32px; height: 32px; min-height: 32px; padding: 0; border: 0; border-radius: 5px; background: transparent; color: var(--muted); }\n+.explorer-context:hover { background: var(--line); color: var(--accent); }\n+.explorer-children { min-width: 0; }\n+.conversation.is-drop-target .composer { border-color: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 18%, transparent); }\n+.workspace-profile-form, .deployment-form { display: grid; gap: 10px; margin-top: 12px; }\n+.workspace-profile-form label, .deployment-form label, .marketplace-install label { display: grid; gap: 5px; }\n+.workspace-profile-form textarea:not(.settings-editor), .deployment-form textarea { width: 100%; resize: vertical; padding: 9px; border: 1px solid var(--strong-line); border-radius: 7px; background: var(--surface); color: var(--ink); }\n+.profile-editor { min-height: 150px; }\n+.marketplace-search { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; margin: 12px 0; }\n+.marketplace-install { display: grid; gap: 9px; min-width: 0; margin: 14px 0 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; }\n+.marketplace-install legend { padding: 0 5px; font-size: 11px; font-weight: 700; }\n+.deployment-form { padding: 13px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }\n+.deployment-form h3 { margin: 0 0 2px; font-size: 13px; }\n+.complement-badge { display: inline-flex; width: fit-content; margin-top: 6px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--accent); font-size: 11px; font-weight: 750; text-transform: uppercase; }\n+.command-search { display: grid; gap: 5px; }\n+.command-counts { margin: 9px 0; color: var(--muted); font-size: 12px; }\n+.command-list { display: grid; gap: 6px; }\n+.command-row { width: 100%; min-width: 0; min-height: 68px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }\n+.command-row:hover { border-color: var(--accent); box-shadow: var(--shadow-sm); transform: translateY(-1px); }\n+.command-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }\n+.command-row code { color: var(--accent); font-weight: 700; }\n+.command-support { flex: 0 0 auto; color: var(--muted); font-size: 11px; text-transform: uppercase; }\n+.command-row strong, .command-row span { display: block; overflow-wrap: anywhere; }\n+.command-row strong { margin-top: 4px; font-size: 13px; }\n+.command-row > span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }\n+.activity-summary { position: sticky; top: -14px; z-index: 1; margin: -14px -12px 0; padding: 12px 14px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); color: var(--muted); font-size: 12px; backdrop-filter: blur(10px); }\n+.activity-list { padding: 10px 0; }\n+.mission-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 10px 0; }\n+.mission-toolbar label { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 11px; }\n+.mission-toolbar input { width: 18px; height: 18px; accent-color: var(--accent); }\n+.evidence-summary { padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; line-height: 1.45; }\n+.twin-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: end; margin: 10px 0; }\n+.twin-toolbar label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }\n+.twin-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 10px 0; }\n+.twin-metric { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n+.twin-metric strong, .twin-metric span { display: block; }\n+.twin-metric strong { overflow-wrap: anywhere; font-size: 16px; line-height: 1.2; }\n+.twin-metric span { margin-top: 4px; color: var(--muted); font-size: 10px; }\n+.twin-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n+.twin-section > header { margin-bottom: 9px; }\n+.twin-section > header strong, .twin-section > header span { display: block; }\n+.twin-section > header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.45; }\n+.twin-change-grid, .twin-operation-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }\n+.twin-change-card, .twin-operation-card { min-width: 0; padding: 9px; border-radius: 8px; background: var(--surface-subtle); }\n+.twin-change-card strong, .twin-change-card span, .twin-operation-card strong, .twin-operation-card span { display: block; }\n+.twin-change-card span, .twin-operation-card span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }\n+.twin-change-card.is-risk strong { color: #dc2626; }\n+.twin-change-card.is-positive strong { color: #16a34a; }\n+.twin-topology, .twin-list { display: grid; gap: 6px; }\n+.twin-topology-row, .twin-list-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; min-width: 0; padding: 8px 9px; border-radius: 8px; background: var(--surface-subtle); }\n+.twin-topology-row strong, .twin-topology-row span, .twin-list-row strong, .twin-list-row span { min-width: 0; overflow-wrap: anywhere; }\n+.twin-topology-row span, .twin-list-row span { color: var(--muted); font-size: 10px; text-align: right; }\n+.twin-list + .twin-list { margin-top: 8px; }\n+.staging-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; margin: 10px 0; }\n+.staging-toolbar > div { min-width: 0; }\n+.staging-toolbar strong, .staging-toolbar span { display: block; }\n+.staging-toolbar span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }\n+.staging-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n+.staging-section > header { margin-bottom: 8px; }\n+.staging-section > header strong, .staging-section > header span { display: block; }\n+.staging-section > header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n+.staging-gates, .staging-files, .staging-history { display: grid; gap: 7px; }\n+.staging-gate, .staging-file, .staging-history-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }\n+.staging-gate.is-passed, .staging-file.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }\n+.staging-gate.is-failed, .staging-file.is-failed { border-color: color-mix(in srgb, #dc2626 55%, var(--line)); }\n+.staging-gate strong, .staging-gate span, .staging-file strong, .staging-file span, .staging-history-row strong, .staging-history-row span { display: block; overflow-wrap: anywhere; }\n+.staging-gate span, .staging-file span, .staging-history-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n+.staging-checks { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; }\n+.staging-checks small { padding: 3px 6px; border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 9px; }\n+.staging-checks small.is-failed { background: color-mix(in srgb, #dc2626 14%, var(--surface)); color: #dc2626; }\n+.mission-layout { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 10px; margin-top: 10px; }\n+.mission-list, .mission-detail { min-width: 0; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); overflow: hidden; }\n+.mission-list { display: grid; align-content: start; }\n+.mission-row { min-width: 0; min-height: 64px; padding: 10px 11px; border: 0; border-bottom: 1px solid var(--line); background: transparent; color: var(--ink); text-align: left; }\n+.mission-row:last-child { border-bottom: 0; }\n+.mission-row:hover, .mission-row.is-active { background: var(--surface-subtle); }\n+.mission-row.is-active { box-shadow: inset 3px 0 var(--accent); }\n+.mission-row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n+.mission-row-head strong { font-size: 11px; }\n+.mission-row-head time, .mission-row > span:last-child { color: var(--muted); font-size: 10px; }\n+.mission-row > span:last-child { display: block; margin-top: 5px; overflow-wrap: anywhere; }\n+.mission-detail { min-height: 180px; padding: 12px; color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }\n+.mission-detail h3 { margin: 0 0 10px; color: var(--ink); font-size: 13px; }\n+.mission-files { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 10px; }\n+.mission-files code { max-width: 100%; padding: 4px 6px; border-radius: 5px; background: var(--code); color: var(--code-ink); overflow-wrap: anywhere; }\n+.evidence-row { padding: 8px 0; border-top: 1px solid var(--line); }\n+.evidence-row strong, .evidence-row span { display: block; }\n+.evidence-row strong { color: var(--ink); font-size: 11px; }\n+.evidence-row span { margin-top: 2px; font-size: 10px; }\n+.mission-empty { padding: 16px; color: var(--muted); font-size: 11px; line-height: 1.5; }\n+.model-router-filters { display: grid; grid-template-columns: minmax(0, .7fr) minmax(0, 1.3fr); gap: 8px; margin: 10px 0; }\n+.model-router-filters label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }\n+.model-router-filters select, .model-router-filters input { width: 100%; min-width: 0; }\n+.model-router-list { display: grid; gap: 7px; }\n+.provider-status-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin: 10px 0; }\n+.provider-status-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); }\n+.provider-status-row strong, .provider-status-row span { display: block; overflow-wrap: anywhere; }\n+.provider-status-row strong { font-size: 10px; }\n+.provider-status-row span { margin-top: 3px; color: var(--muted); font-size: 9px; line-height: 1.4; }\n+.model-router-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n+.model-eval-selector { width: 20px; height: 20px; accent-color: var(--accent); }\n+.model-router-actions { display: grid; gap: 6px; min-width: 170px; }\n+.model-auto-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; margin: 10px 0; padding: 12px; border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line)); border-radius: 10px; background: color-mix(in srgb, var(--accent) 5%, var(--surface)); }\n+.model-budget-card { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(100px, .45fr) minmax(100px, .45fr); gap: 10px; align-items: end; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n+.model-budget-card > div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }\n+.model-budget-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }\n+.model-tool-cert-card { display: grid; gap: 9px; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }\n+.model-tool-cert-card > div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }\n+.model-tool-cert-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }\n+.mission-contract-form { display: grid; gap: 10px; }\n+.mission-contract-form > label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }\n+.contract-gates { display: grid; gap: 8px; margin-top: 12px; }\n+.contract-gate { padding: 11px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }\n+.contract-gate.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }\n+.contract-gate.is-failed { border-color: color-mix(in srgb, #dc2626 50%, var(--line)); }\n+.contract-gate.is-pending { border-color: color-mix(in srgb, #d97706 48%, var(--line)); }\n+.contract-gate strong, .contract-gate span { display: block; }\n+.contract-gate span { margin-top: 4px; color: var(--muted); font-size: 10px; }\n+.contract-criteria { display: grid; gap: 6px; margin-top: 8px; }\n+.contract-criterion { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; }\n+.model-auto-card strong, .model-auto-card span { display: block; }\n+.model-auto-card span, .model-ranking-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.45; }\n+.model-ranking { display: grid; gap: 7px; margin: 10px 0; }\n+.model-ranking-row { padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); overflow-wrap: anywhere; }\n+.model-router-row div, .model-router-row strong, .model-router-row span { min-width: 0; }\n+.model-router-row strong, .model-router-row span { display: block; overflow-wrap: anywhere; }\n+.model-router-row strong { font-size: 11px; }\n+.model-router-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }\n+.activity-row { padding: 9px 8px; border-bottom: 1px solid var(--line); }\n+.activity-row strong { display: block; margin-bottom: 3px; font-size: 11px; }\n+.activity-row span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }\n+\n+.settings-form { display: grid; gap: 14px; }\n+.settings-intro { display: grid; gap: 4px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n+.settings-intro strong { font-size: 13px; }\n+.settings-intro span { color: var(--muted); font-size: 12px; line-height: 1.45; }\n+.settings-form fieldset { display: grid; gap: 10px; min-width: 0; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n+.settings-editor { width: 100%; min-height: 220px; resize: vertical; padding: 11px; border: 1px solid var(--strong-line); border-radius: 8px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; }\n+.inline-actions { display: flex; justify-content: flex-end; gap: 7px; }\n+.settings-form legend { padding: 0 6px; color: var(--ink); font-size: 12px; font-weight: 700; }\n+.settings-form label:not(.toggle-row) { display: grid; gap: 5px; }\n+.settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; }\n+.toggle-row { display: grid; grid-template-columns: 40px minmax(0, 1fr); align-items: center; min-height: 52px; padding: 7px 8px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); cursor: pointer; }\n+.toggle-row input { width: 20px; height: 20px; margin: 0; accent-color: var(--accent); }\n+.toggle-row span { display: grid; gap: 2px; }\n+.toggle-row strong { color: var(--ink); font-size: 13px; }\n+.toggle-row small { color: var(--muted); font-size: 12px; line-height: 1.35; }\n+.policy-list { display: flex; flex-wrap: wrap; gap: 6px; }\n+.policy-list span { padding: 5px 7px; border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line)); border-radius: 6px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--accent); font-size: 11px; font-weight: 700; }\n+.settings-actions { position: sticky; bottom: -24px; display: grid; grid-template-columns: 1fr 1.4fr; gap: 8px; margin: 0 -12px -24px; padding: 12px; border-top: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); backdrop-filter: blur(10px); }\n+.settings-actions button { min-width: 0; }\n+.settings-form.is-saving { opacity: .72; pointer-events: none; }\n+.credential-status { padding: 9px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }\n+.credential-status.is-configured { border-color: color-mix(in srgb, var(--accent) 36%, var(--line)); color: var(--accent); }\n+.settings-note { margin: 0; color: var(--muted); font-size: 10px; line-height: 1.45; }\n+.diagnostics-hero { display: grid; gap: 12px; padding: 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-sm); }\n+.diagnostics-hero > div { display: grid; gap: 4px; }\n+.diagnostics-hero strong { font-size: 14px; }\n+.diagnostics-hero span { color: var(--muted); font-size: 11px; line-height: 1.45; }\n+.diagnostics-summary { margin: 12px 0; padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }\n+.diagnostics-list { display: grid; gap: 7px; }\n+.diagnostic-row { display: grid; grid-template-columns: 10px minmax(0, 1fr); gap: 10px; align-items: start; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }\n+.diagnostic-dot { width: 10px; height: 10px; margin-top: 3px; border-radius: 50%; background: var(--muted); }\n+.diagnostic-row.is-pass .diagnostic-dot { background: #21845f; }\n+.diagnostic-row.is-warn .diagnostic-dot { background: var(--warning); }\n+.diagnostic-row.is-fail .diagnostic-dot { background: var(--danger); }\n+.diagnostic-copy { display: grid; gap: 3px; min-width: 0; }\n+.diagnostic-copy strong { font-size: 11px; }\n+.diagnostic-copy span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }\n+.security-refresh { width: 100%; margin: 12px 0; }\n+.security-grid { display: grid; gap: 8px; }\n+.security-card { position: relative; padding: 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }\n+.security-card > strong { display: block; padding-right: 70px; font-size: 12px; }\n+.security-card > span { position: absolute; top: 10px; right: 10px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font-size: 9px; font-weight: 750; }\n+.security-card.is-pass > span { color: #21845f; }\n+.security-card.is-warn > span { color: var(--warning); }\n+.security-card.is-fail > span { color: var(--danger); }\n+.security-card ul { margin: 9px 0 0; padding-left: 18px; color: var(--muted); font-size: 10px; line-height: 1.5; }\n+.integration-dialog { width: min(720px, calc(100vw - 28px)); max-height: min(860px, calc(100dvh - 28px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }\n+.integration-dialog[open] { display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto auto; }\n+.integration-dialog::backdrop { background: rgba(20, 22, 20, .66); backdrop-filter: blur(4px); }\n+.integration-dialog > header, .integration-dialog > footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--line); }\n+.integration-dialog > header > div { display: grid; gap: 2px; min-width: 0; }\n+.integration-dialog > header small { color: var(--accent); font-size: 9px; font-weight: 800; letter-spacing: .08em; }\n+.integration-dialog > header strong { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }\n+.integration-dialog > footer { justify-content: flex-end; border-top: 1px solid var(--line); border-bottom: 0; }\n+.integration-content { min-height: 0; overflow-y: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 14px; }\n+.integration-content section { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }\n+.integration-content section > strong { display: block; margin-bottom: 6px; color: var(--ink); font-size: 10px; text-transform: uppercase; letter-spacing: .04em; }\n+.integration-content section > div { color: var(--muted); font-size: 11px; line-height: 1.5; overflow-wrap: anywhere; }\n+.integration-content ul { margin: 0; padding-left: 17px; }\n+.integration-endpoint { position: relative; z-index: 1; display: grid; gap: 5px; margin: 0; padding: 10px 14px 12px; border-top: 1px solid var(--line); background: var(--surface); color: var(--muted); font-size: 10px; }\n+.integration-dialog > .form-error { margin: 0 14px 10px; }\n+.integration-dialog > .form-error:empty { display: none; }\n+#integration-error { color: var(--muted); }\n+#integration-error[data-error=\"true\"] { color: var(--danger); }\n+\n+.login-dialog { width: min(390px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }\n+.login-dialog::backdrop { background: rgba(20, 22, 20, .58); }\n+.login-dialog form { display: grid; gap: 12px; padding: 22px; }\n+.login-brand { display: flex; align-items: center; gap: 11px; margin-bottom: 8px; }\n+.form-error { min-height: 18px; margin: 0; color: var(--danger); font-size: 12px; }\n+.app-error-boundary { position: fixed; z-index: 120; left: max(12px, env(safe-area-inset-left)); right: max(12px, env(safe-area-inset-right)); bottom: max(12px, env(safe-area-inset-bottom)); display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid color-mix(in srgb, var(--danger) 42%, var(--line)); border-radius: 14px; background: color-mix(in srgb, var(--surface) 94%, var(--danger)); box-shadow: 0 18px 46px rgba(0, 0, 0, .22); }\n+.app-error-boundary > div:first-child { display: grid; gap: 4px; min-width: 0; }\n+.app-error-boundary span { color: var(--muted); overflow-wrap: anywhere; }\n+.app-error-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }\n+.app-error-boundary[data-fatal=\"true\"] { top: 50%; bottom: auto; max-width: 680px; margin-inline: auto; transform: translateY(-50%); }\n+@media (max-width: 640px) { .app-error-boundary { align-items: stretch; flex-direction: column; } .app-error-actions > button { flex: 1 1 140px; min-height: 48px; } }\n+.action-dialog { width: min(460px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); }\n+.action-dialog::backdrop { background: rgba(20, 22, 20, .58); }\n+.action-dialog form { display: grid; gap: 12px; padding: 18px; }\n+.action-dialog header, .action-dialog footer { display: flex; align-items: center; gap: 8px; }\n+.action-dialog header strong { flex: 1; }\n+.action-dialog footer { justify-content: flex-end; }\n+.action-copy { color: var(--muted); font-size: 12px; line-height: 1.45; }\n+.action-fields { display: grid; gap: 10px; }\n+.action-fields label { display: grid; gap: 5px; }\n+.action-fields textarea { width: 100%; min-height: 90px; resize: vertical; border: 1px solid var(--strong-line); border-radius: 6px; background: var(--surface); color: var(--ink); padding: 9px; }\n+.manual-dialog { width: min(1180px, calc(100vw - 32px)); height: min(860px, calc(100dvh - 32px)); max-width: none; max-height: none; padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }\n+.manual-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }\n+.manual-dialog[open] { display: grid; grid-template-rows: 58px minmax(0, 1fr); }\n+.manual-dialog > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 5px 10px 5px 18px; border-bottom: 1px solid var(--line); background: var(--surface); }\n+.manual-dialog iframe { width: 100%; height: 100%; border: 0; background: var(--canvas); }\n+.file-preview-dialog { width: min(920px, calc(100vw - 32px)); height: min(760px, calc(100dvh - 32px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 11px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }\n+.file-preview-dialog[open] { display: grid; grid-template-rows: 54px minmax(0, 1fr) 58px; }\n+.file-preview-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }\n+.file-preview-dialog header, .file-preview-dialog footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 7px 12px 7px 16px; border-bottom: 1px solid var(--line); }\n+.file-preview-dialog footer { border-top: 1px solid var(--line); border-bottom: 0; color: var(--muted); font-size: 10px; }\n+.file-preview-dialog pre { min-width: 0; min-height: 0; overflow: auto; margin: 0; padding: 16px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre; tab-size: 2; }\n+.mobile-only, .mobile-nav { display: none; }\n+.resource-summary.is-loading::before { content: ''; display: inline-block; width: 10px; height: 10px; margin-right: 8px; border: 2px solid color-mix(in srgb, var(--accent) 25%, transparent); border-top-color: var(--accent); border-radius: 50%; animation: loading-spin .75s linear infinite; vertical-align: -1px; }\n+\n+@keyframes loading-spin { to { transform: rotate(360deg); } }\n+@keyframes status-pulse { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--warning) 38%, transparent); } 50% { box-shadow: 0 0 0 5px transparent; } }\n+\n+@media (max-width: 1060px) {\n+  .app-shell.activity-open { grid-template-columns: 200px minmax(0, 1fr) minmax(380px, 42vw); }\n+  .app-shell { grid-template-columns: 240px minmax(0, 1fr); }\n+}\n+\n+@media (max-width: 760px) {\n+  .desktop-only { display: none; }\n+  .mobile-only { display: grid; }\n+  body { font-size: 15px; }\n+  button, select { min-height: 48px; }\n+  .icon-button { width: 48px; height: 48px; }\n+  .app-shell {\n+    position: relative;\n+    overflow: hidden;\n+  }\n+  .app-shell, .app-shell.activity-open {\n+    display: block;\n+    height: calc(var(--app-height) - var(--safe-top));\n+    padding-bottom: var(--mobile-nav-total);\n+  }\n+  .panel-view {\n+    position: absolute;\n+    inset: 0 0 var(--mobile-nav-total);\n+    display: none !important;\n+    width: 100%;\n+    min-height: 0;\n+    border: 0;\n+    overflow: hidden;\n+  }\n+  .panel-view.is-active { display: flex !important; flex-direction: column; z-index: 1; }\n+  .conversation.panel-view.is-active {\n+    display: grid !important;\n+    grid-template-rows: auto minmax(0, 1fr) auto;\n+  }\n+  /* Scroll solo en timeline; bandejas visibles encima del compositor */\n+  .conversation-scroll {\n+    min-height: 0;\n+    overflow: hidden;\n+    display: flex;\n+    flex-direction: column;\n+  }\n+  .conversation-scroll > .timeline {\n+    flex: 1 1 0;\n+    min-height: 0;\n+    overflow: auto;\n+    overscroll-behavior: contain;\n+    -webkit-overflow-scrolling: touch;\n+    padding: 14px 12px 18px;\n+  }\n+  .conversation-scroll > .turn-status-banner,\n+  .conversation-scroll > .turn-watchdog { margin-inline: 10px; flex: 0 0 auto; }\n+  .conversation-scroll > .execution-status { flex: 0 0 auto; }\n+  .conversation-scroll > .approval-tray:not(:empty) { flex: 0 0 auto; padding: 0 10px 6px; }\n+  .conversation-scroll > .change-review-tray:not(:empty) {\n+    flex: 0 1 auto;\n+    max-height: min(26dvh, 200px);\n+    overflow: auto;\n+    margin: 0 8px 8px;\n+    border: 1px solid var(--line);\n+    border-radius: 12px;\n+    background: var(--surface);\n+    box-shadow: var(--shadow-sm);\n+  }\n+  .empty-state { min-height: auto; padding-bottom: 4vh; }\n+  .rail.panel-view.is-active,\n+  .activity.panel-view.is-active { display: flex !important; flex-direction: column; overflow: hidden; }\n+  .rail.panel-view,\n+  .activity.panel-view { min-height: 0; }\n+  .rail .rail-view.is-active,\n+  .activity .control-hub { flex: 0 0 auto; }\n+  .activity .control-view.is-active { flex: 1 1 0; min-height: 0; overflow-y: auto; }\n+  .rail-tabs button { min-height: 48px; }\n+  .conversation-header { padding-inline: 10px; }\n+  .connection span:last-child { display: none; }\n+  .timeline-item.user { margin-left: 24px; }\n+  .approval-tray { padding: 0 14px; }\n+  .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }\n+  .turn-watchdog button { min-height: 48px; }\n+  .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }\n+  .turn-status-banner button { min-height: 48px; }\n+  .change-review-card > header { align-items: stretch; flex-direction: column; }\n+  .change-review-bulk { display: grid; grid-template-columns: 1fr 1fr; }\n+  .change-review-bulk button, .change-file-actions button { min-height: 48px; }\n+  .change-file-actions { display: grid; grid-template-columns: 1fr 1fr; }\n+  .composer-wrap { padding: 6px 8px 4px; background: var(--surface); }\n+  .agent-toolbar { padding-top: 4px; gap: 4px; }\n+  .agent-toolbar > #participant-select,\n+  .agent-toolbar > #delegation-select,\n+  .agent-toolbar .smart-actions { display: none; }\n+  .agent-toolbar > select { min-height: 40px; max-width: none; flex: 1 1 auto; }\n   .composer textarea { max-height: 120px; padding-top: 9px; }\n   .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }\n   .attachment-command { width: 48px; height: 48px; }","linesAdded":562,"linesRemoved":498,"reconciled":true,"acceptedAt":1786326403393,"acceptedVia":"codex-suite","diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/static\\codex-suite\\style.css</div><div class=\"diff-line diff-meta\">+++ b/static\\codex-suite\\style.css</div><div class=\"diff-line diff-hunk\">@@ -91,504 +91,568 @@</div><div class=\"diff-line diff-ctx\"> .list-empty { padding: 20px 10px; color: var(--muted); text-align: center; font-size: 12px; }</div><div class=\"diff-line diff-ctx\"> </div><div class=\"diff-line diff-ctx\"> .conversation { min-width: 0; height: 100%; display: flex; flex-direction: column; overflow: hidden; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.conversation-header { padding-inline: 18px; }</div><div class=\"diff-line diff-del\">-.thread-title { min-width: 0; flex: 1; display: flex; flex-direction: column; }</div><div class=\"diff-line diff-del\">-.thread-title strong, .thread-title span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }</div><div class=\"diff-line diff-del\">-.thread-title span { color: var(--muted); font-size: 11px; margin-top: 3px; }</div><div class=\"diff-line diff-del\">-.connection { display: flex; align-items: center; gap: 7px; color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #999; }</div><div class=\"diff-line diff-del\">-.status-dot.is-online { background: #21845f; }</div><div class=\"diff-line diff-del\">-.status-dot.is-running { background: var(--warning); animation: status-pulse 1.4s ease-in-out infinite; }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.timeline { flex: 1 1 0; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: 32px max(24px, calc((100% - 820px) / 2)); scroll-behavior: smooth; -webkit-overflow-scrolling: touch; }</div><div class=\"diff-line diff-del\">-.empty-state { min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding-bottom: 8vh; }</div><div class=\"diff-line diff-del\">-.empty-mark { display: grid; place-items: center; width: 45px; height: 45px; border: 1px solid var(--strong-line); border-radius: 8px; font-size: 20px; font-weight: 750; }</div><div class=\"diff-line diff-del\">-.empty-state h1 { margin: 18px 0 7px; font-size: 25px; font-weight: 680; }</div><div class=\"diff-line diff-del\">-.empty-state p { margin: 0; color: var(--muted); }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.turn-status-banner {</div><div class=\"diff-line diff-del\">-  flex: 0 0 auto;</div><div class=\"diff-line diff-del\">-  display: flex;</div><div class=\"diff-line diff-del\">-  align-items: center;</div><div class=\"diff-line diff-del\">-  gap: 12px;</div><div class=\"diff-line diff-del\">-  margin: 0 max(24px, calc((100% - 820px) / 2)) 10px;</div><div class=\"diff-line diff-del\">-  padding: 10px 12px;</div><div class=\"diff-line diff-del\">-  border: 1px solid var(--line);</div><div class=\"diff-line diff-del\">-  border-radius: 10px;</div><div class=\"diff-line diff-del\">-  background: color-mix(in srgb, var(--surface-subtle) 88%, #dfe8e2);</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-.turn-status-banner.is-hidden { display: none; }</div><div class=\"diff-line diff-del\">-.turn-status-banner[data-state=\"running\"] {</div><div class=\"diff-line diff-del\">-  border-color: color-mix(in srgb, var(--warning) 45%, var(--line));</div><div class=\"diff-line diff-del\">-  background: color-mix(in srgb, #fff8e8 70%, var(--surface));</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-.turn-status-banner[data-state=\"error\"] {</div><div class=\"diff-line diff-del\">-  border-color: color-mix(in srgb, #c45c4a 40%, var(--line));</div><div class=\"diff-line diff-del\">-  background: color-mix(in srgb, #fff1ee 75%, var(--surface));</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-.turn-status-banner[data-state=\"done\"] {</div><div class=\"diff-line diff-del\">-  border-color: color-mix(in srgb, var(--accent) 35%, var(--line));</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-.turn-status-main { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }</div><div class=\"diff-line diff-del\">-.turn-status-main strong { font-size: 12px; font-weight: 700; }</div><div class=\"diff-line diff-del\">-.turn-status-main span { color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.turn-inline-summary {</div><div class=\"diff-line diff-del\">-  margin-top: 8px;</div><div class=\"diff-line diff-del\">-  padding: 7px 9px;</div><div class=\"diff-line diff-del\">-  border-radius: 8px;</div><div class=\"diff-line diff-del\">-  border: 1px solid var(--line);</div><div class=\"diff-line diff-del\">-  background: var(--surface-subtle);</div><div class=\"diff-line diff-del\">-  color: var(--muted);</div><div class=\"diff-line diff-del\">-  font-size: 11px;</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-.turn-summary-card .item-body { padding: 0; overflow: hidden; }</div><div class=\"diff-line diff-del\">-.turn-summary-body { padding: 12px 14px; }</div><div class=\"diff-line diff-del\">-.turn-summary-body strong { display: block; margin-bottom: 4px; }</div><div class=\"diff-line diff-del\">-.turn-summary-body p { margin: 0 0 8px; color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.turn-tool-list { margin: 0; padding-left: 18px; color: var(--ink); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.turn-tool-list li { margin: 0 0 4px; }</div><div class=\"diff-line diff-del\">-.activity-row.activity-cursor.is-live strong { color: var(--accent); }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.turn-block { margin: 0 0 26px; }</div><div class=\"diff-line diff-del\">-.timeline-item { position: relative; margin: 0 0 14px; }</div><div class=\"diff-line diff-del\">-.timeline-item.user { margin-left: clamp(30px, 15%, 120px); }</div><div class=\"diff-line diff-del\">-.timeline-item.user .item-body { background: #edf2ee; border-color: #d8e1da; }</div><div class=\"diff-line diff-del\">-.timeline-item.assistant .item-body { padding-inline: 0; border-color: transparent; background: transparent; }</div><div class=\"diff-line diff-del\">-.item-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; color: var(--muted); font-size: 11px; font-weight: 650; }</div><div class=\"diff-line diff-del\">-.item-time { display: block; margin-top: 5px; color: var(--muted); font-size: 10px; line-height: 1.3; text-align: right; font-variant-numeric: tabular-nums; }</div><div class=\"diff-line diff-del\">-.item-status { margin-left: auto; font-weight: 500; }</div><div class=\"diff-line diff-del\">-.item-body { border: 1px solid var(--line); border-radius: 12px; background: var(--surface-subtle); padding: 12px 14px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.timeline-item.tool .item-body, .timeline-item.diff .item-body, .timeline-item.plan .item-body, .timeline-item.subagent .item-body { padding: 0; overflow: hidden; }</div><div class=\"diff-line diff-del\">-.timeline-item.plan .item-body { border-color: color-mix(in srgb, var(--accent) 32%, var(--line)); }</div><div class=\"diff-line diff-del\">-.timeline-item.subagent .item-body { border-color: color-mix(in srgb, #6e63d9 35%, var(--line)); }</div><div class=\"diff-line diff-del\">-.tool-summary { padding: 10px 12px; background: #f1f2ef; border-bottom: 1px solid var(--line); font-weight: 650; }</div><div class=\"diff-line diff-del\">-.tool-output, .diff-output { margin: 0; max-height: 340px; overflow: auto; padding: 12px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; }</div><div class=\"diff-line diff-del\">-.tool-output.is-empty { display: none; }</div><div class=\"diff-line diff-del\">-.timeline-item.tool .tool-summary:only-child { border-bottom: 0; }</div><div class=\"diff-line diff-del\">-.diff-line { display: block; min-height: 19px; padding: 0 6px; }</div><div class=\"diff-line diff-del\">-.diff-line.add { background: #173c2c; color: #c9f3dc; }</div><div class=\"diff-line diff-del\">-.diff-line.del { background: #482522; color: #ffd5d1; }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.approval-tray { flex: 0 0 auto; padding: 0 max(24px, calc((100% - 820px) / 2)); }</div><div class=\"diff-line diff-del\">-.approval-card { margin: 0 0 10px; border: 1px solid #d9b67f; border-radius: 7px; background: #fffaf1; padding: 12px; }</div><div class=\"diff-line diff-del\">-.approval-card strong { display: block; margin-bottom: 7px; color: #71400e; }</div><div class=\"diff-line diff-del\">-.approval-card pre { max-height: 130px; overflow: auto; margin: 0 0 10px; white-space: pre-wrap; font: 11px/1.45 ui-monospace, Consolas, monospace; }</div><div class=\"diff-line diff-del\">-.approval-diffs { display: grid; gap: 7px; margin-bottom: 10px; }</div><div class=\"diff-line diff-del\">-.approval-diffs details { overflow: hidden; border: 1px solid #d9b67f; border-radius: 7px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.approval-diffs summary { padding: 9px 10px; cursor: pointer; color: var(--ink); font: 650 11px/1.4 ui-monospace, Consolas, monospace; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.approval-diffs .diff-output { max-height: 260px; margin: 0; border-radius: 0; }</div><div class=\"diff-line diff-del\">-.approval-actions { display: flex; justify-content: flex-end; gap: 7px; }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.change-review-tray { flex: 0 1 auto; max-height: min(48dvh, 520px); overflow: auto; padding: 0 max(18px, calc((100% - 850px) / 2)); background: var(--surface); scrollbar-gutter: stable; }</div><div class=\"diff-line diff-del\">-.turn-watchdog { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 max(18px, calc((100% - 850px) / 2)) 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.turn-watchdog.is-hidden { display: none; }</div><div class=\"diff-line diff-del\">-.turn-watchdog &gt; div { display: grid; gap: 2px; min-width: 0; }</div><div class=\"diff-line diff-del\">-.turn-watchdog strong { font-size: 12px; }</div><div class=\"diff-line diff-del\">-.turn-watchdog span { color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.turn-watchdog[data-status=\"stale\"], .turn-watchdog[data-status=\"stuckCompaction\"] { border-color: color-mix(in srgb, var(--danger) 48%, var(--line)); }</div><div class=\"diff-line diff-del\">-.execution-status { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-height: 30px; padding: 4px max(18px, calc((100% - 850px) / 2)); border-bottom: 1px solid var(--line); background: var(--surface-subtle); color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.execution-status-label { color: var(--ink); font-weight: 750; text-transform: uppercase; letter-spacing: .04em; }</div><div class=\"diff-line diff-del\">-#execution-status-text { overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.execution-meta { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.execution-meta span { padding: 3px 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.change-file-explanation { display: grid; gap: 3px; padding: 9px 11px; border-top: 1px solid var(--line); color: var(--muted); font-size: 11px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.change-review-tray:empty { display: none; }</div><div class=\"diff-line diff-del\">-.change-review-tray.is-saving { opacity: .68; pointer-events: none; }</div><div class=\"diff-line diff-del\">-.change-review-card.is-cursor { border-color: color-mix(in srgb, #3d7ea6 42%, var(--line)); }</div><div class=\"diff-line diff-del\">-.change-review-card.is-cursor &gt; header { background: color-mix(in srgb, #3d7ea6 8%, var(--surface)); }</div><div class=\"diff-line diff-del\">-.change-review-card &gt; header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 12px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--accent) 6%, var(--surface)); }</div><div class=\"diff-line diff-del\">-.change-review-card &gt; header &gt; div:first-child { display: grid; gap: 2px; min-width: 0; }</div><div class=\"diff-line diff-del\">-.change-review-card &gt; header strong { font-size: 12px; }</div><div class=\"diff-line diff-del\">-.change-review-card &gt; header span { color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.change-review-bulk, .change-file-actions { display: flex; justify-content: flex-end; gap: 7px; }</div><div class=\"diff-line diff-del\">-.change-review-bulk button, .change-file-actions button { min-height: 34px; padding: 6px 9px; font-size: 10px; }</div><div class=\"diff-line diff-del\">-.change-review-files { display: grid; }</div><div class=\"diff-line diff-del\">-.change-review-file { overflow: hidden; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-del\">-.change-review-file:last-child { border-bottom: 0; }</div><div class=\"diff-line diff-del\">-.change-review-file &gt; summary { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 42px; padding: 8px 11px; cursor: pointer; font: 650 11px/1.4 ui-monospace, SFMono-Regular, Consolas, monospace; }</div><div class=\"diff-line diff-del\">-.change-review-file &gt; summary:hover { background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.change-review-file &gt; summary span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }</div><div class=\"diff-line diff-del\">-.change-review-file &gt; summary small { padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font: 700 9px/1.2 Inter, system-ui, sans-serif; text-transform: uppercase; }</div><div class=\"diff-line diff-del\">-.change-review-file.is-accepted &gt; summary small { color: #21845f; }</div><div class=\"diff-line diff-del\">-.change-review-file.is-rejected &gt; summary small { color: var(--danger); }</div><div class=\"diff-line diff-del\">-.change-review-file .diff-output { max-height: 280px; margin: 0; border-block: 1px solid var(--line); }</div><div class=\"diff-line diff-del\">-.change-file-actions { padding: 8px 10px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.composer-wrap { position: relative; z-index: 4; flex: 0 0 auto; min-height: 0; padding: 10px max(18px, calc((100% - 850px) / 2)) max(12px, env(safe-area-inset-bottom)); background: linear-gradient(180deg, color-mix(in srgb, var(--surface) 72%, transparent), var(--surface) 24%); }</div><div class=\"diff-line diff-del\">-.context-chips { display: flex; gap: 6px; overflow-x: auto; margin: 0 0 7px; scrollbar-width: none; }</div><div class=\"diff-line diff-del\">-.context-chip { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; min-height: 30px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-subtle); font-size: 11px; }</div><div class=\"diff-line diff-del\">-.context-chip button { min-height: 22px; width: 22px; padding: 0; border: 0; background: transparent; color: var(--muted); }</div><div class=\"diff-line diff-del\">-.composer { overflow: hidden; border: 1px solid var(--strong-line); border-radius: 18px; background: var(--surface); box-shadow: 0 12px 40px rgba(32, 40, 70, .10); }</div><div class=\"diff-line diff-del\">-.composer:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent), var(--shadow-sm); }</div><div class=\"diff-line diff-del\">-.composer textarea { display: block; width: 100%; max-height: 180px; resize: none; border: 0; background: transparent; color: var(--ink); padding: 13px 14px 6px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.composer textarea:focus { outline: 0; }</div><div class=\"diff-line diff-del\">-.agent-toolbar { display: flex; align-items: center; gap: 5px; min-width: 0; overflow-x: auto; padding: 6px 7px 0; scrollbar-width: none; }</div><div class=\"diff-line diff-del\">-.agent-toolbar::-webkit-scrollbar, .smart-actions::-webkit-scrollbar { display: none; }</div><div class=\"diff-line diff-del\">-.agent-toolbar &gt; select { flex: 0 0 auto; width: auto; max-width: 180px; min-height: 32px; padding: 4px 8px; border-color: transparent; border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; font-weight: 650; }</div><div class=\"diff-line diff-del\">-.smart-actions { display: flex; align-items: center; gap: 4px; flex: 0 0 auto; min-width: 0; overflow-x: auto; scrollbar-width: none; }</div><div class=\"diff-line diff-del\">-.smart-actions button { min-height: 32px; padding: 5px 9px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); font-size: 12px; white-space: nowrap; }</div><div class=\"diff-line diff-del\">-.smart-actions button:hover { background: var(--surface-subtle); color: var(--ink); }</div><div class=\"diff-line diff-del\">-.composer-tools { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 7px; }</div><div class=\"diff-line diff-del\">-.attachment-controls { position: relative; flex: 0 0 auto; }</div><div class=\"diff-line diff-del\">-.attachment-command { display: grid; place-items: center; width: 36px; height: 36px; min-height: 36px; padding: 0; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 20px; }</div><div class=\"diff-line diff-del\">-.attachment-command:hover { border-color: var(--accent); color: var(--accent); }</div><div class=\"diff-line diff-del\">-.attachment-menu { position: absolute; z-index: 30; left: 0; bottom: calc(100% + 8px); width: min(290px, calc(100vw - 28px)); padding: 6px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-del\">-.attachment-menu button { display: grid; gap: 3px; width: 100%; padding: 10px; border: 0; border-radius: 7px; background: transparent; color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-del\">-.attachment-menu button:hover { background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.attachment-menu strong { font-size: 13px; }</div><div class=\"diff-line diff-del\">-.attachment-menu span { color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.run-options { display: flex; flex: 1; gap: 6px; min-width: 0; overflow-x: auto; scrollbar-width: none; }</div><div class=\"diff-line diff-del\">-.advanced-run-options { display: flex; flex: 1; gap: 6px; min-width: 0; }</div><div class=\"diff-line diff-del\">-.run-options select { width: auto; max-width: 190px; min-height: 34px; padding: 5px 8px; border-color: transparent; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }</div><div class=\"diff-line diff-del\">-#engine-select { max-width: 175px; font-weight: 650; }</div><div class=\"diff-line diff-del\">-.run-options-toggle { display: none; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; font-weight: 650; }</div><div class=\"diff-line diff-del\">-.send-command { width: 36px; height: 36px; border: 0; border-radius: 7px; background: var(--ink); color: white; font-size: 20px; font-weight: 700; }</div><div class=\"diff-line diff-del\">-.send-command:disabled, button:disabled, select:disabled { cursor: not-allowed; opacity: .45; }</div><div class=\"diff-line diff-del\">-.composer textarea:disabled,</div><div class=\"diff-line diff-del\">-.composer textarea:read-only,</div><div class=\"diff-line diff-del\">-.agent-toolbar select:disabled,</div><div class=\"diff-line diff-del\">-.run-options select:disabled {</div><div class=\"diff-line diff-del\">-  opacity: 1;</div><div class=\"diff-line diff-del\">-  color: var(--muted);</div><div class=\"diff-line diff-del\">-  -webkit-text-fill-color: var(--muted);</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-.composer textarea:disabled::placeholder,</div><div class=\"diff-line diff-del\">-.composer textarea:read-only::placeholder {</div><div class=\"diff-line diff-del\">-  color: var(--muted);</div><div class=\"diff-line diff-del\">-  opacity: 1;</div><div class=\"diff-line diff-del\">-  -webkit-text-fill-color: var(--muted);</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-.is-hidden { display: none !important; }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.activity { display: none; height: 100dvh; min-height: 0; overflow: hidden; border-left: 1px solid var(--line); border-right: 0; }</div><div class=\"diff-line diff-del\">-.app-shell.activity-open { grid-template-columns: 252px minmax(0, 1fr) minmax(400px, 34vw); }</div><div class=\"diff-line diff-del\">-.app-shell.activity-open .activity { display: flex; flex-direction: column; }</div><div class=\"diff-line diff-del\">-.app-shell.activity-open .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }</div><div class=\"diff-line diff-del\">-  .app-shell.activity-open .run-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: visible; }</div><div class=\"diff-line diff-del\">-  .app-shell.activity-open .advanced-run-options { display: contents; }</div><div class=\"diff-line diff-del\">-  .app-shell.activity-open .run-options select { width: 100%; min-width: 0; max-width: none; }</div><div class=\"diff-line diff-del\">-.activity-header { flex: 0 0 auto; justify-content: space-between; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.activity-title { display: grid; gap: 3px; flex: 1; min-width: 0; }</div><div class=\"diff-line diff-del\">-.activity-title strong { font-size: 15px; letter-spacing: -0.01em; }</div><div class=\"diff-line diff-del\">-.activity-title span { color: var(--muted); font-size: 12px; line-height: 1.4; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.control-hub { flex: 0 0 auto; display: grid; gap: 0; border-bottom: 1px solid var(--line); background: var(--surface); }</div><div class=\"diff-line diff-del\">-.control-groups { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; padding: 6px 8px 0; background: color-mix(in srgb, var(--surface-subtle) 70%, var(--surface)); }</div><div class=\"diff-line diff-del\">-.control-groups button { min-height: 42px; padding: 8px 4px; border: 0; border-radius: 8px 8px 0 0; background: transparent; color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: 0.01em; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.control-groups button:hover { color: var(--ink); background: color-mix(in srgb, var(--surface) 80%, transparent); }</div><div class=\"diff-line diff-del\">-.control-groups button.is-active { color: var(--accent); background: var(--surface); box-shadow: inset 0 -2px 0 var(--accent); }</div><div class=\"diff-line diff-del\">-.control-tabs { display: flex; overflow-x: auto; padding: 0 8px; scrollbar-width: thin; }</div><div class=\"diff-line diff-del\">-.control-tabs button { flex: 0 0 auto; min-width: 76px; min-height: 44px; padding: 8px 10px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--muted); font-size: 12px; font-weight: 650; }</div><div class=\"diff-line diff-del\">-.control-tabs button:hover { background: var(--surface-subtle); color: var(--ink); }</div><div class=\"diff-line diff-del\">-.control-tabs button.is-active { border-bottom-color: var(--accent); color: var(--accent); }</div><div class=\"diff-line diff-del\">-.control-tabs button[hidden] { display: none !important; }</div><div class=\"diff-line diff-del\">-.marketplace-panel { margin-top: 14px; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.marketplace-panel-head { display: grid; gap: 3px; margin-bottom: 10px; }</div><div class=\"diff-line diff-del\">-.marketplace-panel-head strong { font-size: 13px; }</div><div class=\"diff-line diff-del\">-.marketplace-panel-head span { color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.marketplace-advanced { margin-top: 14px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.marketplace-advanced summary { cursor: pointer; font-size: 13px; font-weight: 700; color: var(--ink); }</div><div class=\"diff-line diff-del\">-.marketplace-advanced[open] summary { margin-bottom: 8px; }</div><div class=\"diff-line diff-del\">-.control-view { display: none; flex: 1 1 0; min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; padding: 14px 12px 24px; -webkit-overflow-scrolling: touch; }</div><div class=\"diff-line diff-del\">-.control-view.is-active { display: block; }</div><div class=\"diff-line diff-del\">-.control-view::-webkit-scrollbar, .thread-list::-webkit-scrollbar, .timeline::-webkit-scrollbar { width: 10px; height: 10px; }</div><div class=\"diff-line diff-del\">-.control-view::-webkit-scrollbar-thumb, .thread-list::-webkit-scrollbar-thumb, .timeline::-webkit-scrollbar-thumb { border: 3px solid transparent; border-radius: 10px; background: color-mix(in srgb, var(--muted) 45%, transparent); background-clip: padding-box; }</div><div class=\"diff-line diff-del\">-.control-view::-webkit-scrollbar-thumb:hover, .thread-list::-webkit-scrollbar-thumb:hover, .timeline::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--muted) 72%, transparent); }</div><div class=\"diff-line diff-del\">-.action-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }</div><div class=\"diff-line diff-del\">-.action-grid &gt; button { min-width: 0; min-height: 96px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-del\">-.action-grid &gt; button:hover { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); box-shadow: var(--shadow-sm); transform: translateY(-1px); }</div><div class=\"diff-line diff-del\">-.action-grid strong, .action-grid span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.action-grid strong { font-size: 13px; }</div><div class=\"diff-line diff-del\">-.action-grid span { margin-top: 5px; color: var(--muted); font-size: 12px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.action-grid .danger-action { border-color: #d6aaa6; color: var(--danger); }</div><div class=\"diff-line diff-del\">-.session-actions { display: grid; grid-template-columns: 1fr; gap: 7px; margin-top: 12px; }</div><div class=\"diff-line diff-del\">-.session-actions a, .session-actions button { display: grid; place-items: center; width: 100%; text-decoration: none; }</div><div class=\"diff-line diff-del\">-.resource-summary { padding: 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.resource-groups { display: grid; gap: 12px; margin-top: 12px; }</div><div class=\"diff-line diff-del\">-.resource-group { min-width: 0; }</div><div class=\"diff-line diff-del\">-.resource-group h3 { margin: 0 0 6px; font-size: 13px; }</div><div class=\"diff-line diff-del\">-.resource-list { display: grid; gap: 5px; }</div><div class=\"diff-line diff-del\">-.resource-row { min-width: 0; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.resource-row strong, .resource-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.resource-row strong { font-size: 13px; color: var(--ink); }</div><div class=\"diff-line diff-del\">-.resource-row span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.resource-row button { width: 100%; min-height: 36px; margin-top: 6px; border: 1px solid var(--strong-line); border-radius: 5px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.explorer-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 4px; padding: 8px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-del\">-.explorer-toolbar select { min-width: 0; font-size: 11px; }</div><div class=\"diff-line diff-del\">-.explorer-hint { margin: 0; padding: 8px 10px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.explorer-tree { flex: 1; min-height: 0; overflow: auto; padding: 0 6px 18px; }</div><div class=\"diff-line diff-del\">-.explorer-node { min-width: 0; }</div><div class=\"diff-line diff-del\">-.explorer-row { display: grid; grid-template-columns: minmax(0, 1fr) 34px; align-items: center; min-height: 36px; padding-left: calc(var(--tree-depth, 0) * 13px); border-radius: 6px; }</div><div class=\"diff-line diff-del\">-.explorer-row:hover, .explorer-row.is-dragging { background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.explorer-main { display: flex; align-items: center; gap: 6px; min-width: 0; min-height: 34px; padding: 4px 5px; border: 0; background: transparent; color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-del\">-.explorer-main span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 11px/1.3 ui-monospace, SFMono-Regular, Consolas, monospace; }</div><div class=\"diff-line diff-del\">-.explorer-context { width: 32px; height: 32px; min-height: 32px; padding: 0; border: 0; border-radius: 5px; background: transparent; color: var(--muted); }</div><div class=\"diff-line diff-del\">-.explorer-context:hover { background: var(--line); color: var(--accent); }</div><div class=\"diff-line diff-del\">-.explorer-children { min-width: 0; }</div><div class=\"diff-line diff-del\">-.conversation.is-drop-target .composer { border-color: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 18%, transparent); }</div><div class=\"diff-line diff-del\">-.workspace-profile-form, .deployment-form { display: grid; gap: 10px; margin-top: 12px; }</div><div class=\"diff-line diff-del\">-.workspace-profile-form label, .deployment-form label, .marketplace-install label { display: grid; gap: 5px; }</div><div class=\"diff-line diff-del\">-.workspace-profile-form textarea:not(.settings-editor), .deployment-form textarea { width: 100%; resize: vertical; padding: 9px; border: 1px solid var(--strong-line); border-radius: 7px; background: var(--surface); color: var(--ink); }</div><div class=\"diff-line diff-del\">-.profile-editor { min-height: 150px; }</div><div class=\"diff-line diff-del\">-.marketplace-search { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; margin: 12px 0; }</div><div class=\"diff-line diff-del\">-.marketplace-install { display: grid; gap: 9px; min-width: 0; margin: 14px 0 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; }</div><div class=\"diff-line diff-del\">-.marketplace-install legend { padding: 0 5px; font-size: 11px; font-weight: 700; }</div><div class=\"diff-line diff-del\">-.deployment-form { padding: 13px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.deployment-form h3 { margin: 0 0 2px; font-size: 13px; }</div><div class=\"diff-line diff-del\">-.complement-badge { display: inline-flex; width: fit-content; margin-top: 6px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--accent); font-size: 11px; font-weight: 750; text-transform: uppercase; }</div><div class=\"diff-line diff-del\">-.command-search { display: grid; gap: 5px; }</div><div class=\"diff-line diff-del\">-.command-counts { margin: 9px 0; color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.command-list { display: grid; gap: 6px; }</div><div class=\"diff-line diff-del\">-.command-row { width: 100%; min-width: 0; min-height: 68px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-del\">-.command-row:hover { border-color: var(--accent); box-shadow: var(--shadow-sm); transform: translateY(-1px); }</div><div class=\"diff-line diff-del\">-.command-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }</div><div class=\"diff-line diff-del\">-.command-row code { color: var(--accent); font-weight: 700; }</div><div class=\"diff-line diff-del\">-.command-support { flex: 0 0 auto; color: var(--muted); font-size: 11px; text-transform: uppercase; }</div><div class=\"diff-line diff-del\">-.command-row strong, .command-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.command-row strong { margin-top: 4px; font-size: 13px; }</div><div class=\"diff-line diff-del\">-.command-row &gt; span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.activity-summary { position: sticky; top: -14px; z-index: 1; margin: -14px -12px 0; padding: 12px 14px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); color: var(--muted); font-size: 12px; backdrop-filter: blur(10px); }</div><div class=\"diff-line diff-del\">-.activity-list { padding: 10px 0; }</div><div class=\"diff-line diff-del\">-.mission-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 10px 0; }</div><div class=\"diff-line diff-del\">-.mission-toolbar label { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-del\">-.mission-toolbar input { width: 18px; height: 18px; accent-color: var(--accent); }</div><div class=\"diff-line diff-del\">-.evidence-summary { padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.twin-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: end; margin: 10px 0; }</div><div class=\"diff-line diff-del\">-.twin-toolbar label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-del\">-.twin-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 10px 0; }</div><div class=\"diff-line diff-del\">-.twin-metric { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.twin-metric strong, .twin-metric span { display: block; }</div><div class=\"diff-line diff-del\">-.twin-metric strong { overflow-wrap: anywhere; font-size: 16px; line-height: 1.2; }</div><div class=\"diff-line diff-del\">-.twin-metric span { margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.twin-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.twin-section &gt; header { margin-bottom: 9px; }</div><div class=\"diff-line diff-del\">-.twin-section &gt; header strong, .twin-section &gt; header span { display: block; }</div><div class=\"diff-line diff-del\">-.twin-section &gt; header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.twin-change-grid, .twin-operation-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }</div><div class=\"diff-line diff-del\">-.twin-change-card, .twin-operation-card { min-width: 0; padding: 9px; border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.twin-change-card strong, .twin-change-card span, .twin-operation-card strong, .twin-operation-card span { display: block; }</div><div class=\"diff-line diff-del\">-.twin-change-card span, .twin-operation-card span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.twin-change-card.is-risk strong { color: #dc2626; }</div><div class=\"diff-line diff-del\">-.twin-change-card.is-positive strong { color: #16a34a; }</div><div class=\"diff-line diff-del\">-.twin-topology, .twin-list { display: grid; gap: 6px; }</div><div class=\"diff-line diff-del\">-.twin-topology-row, .twin-list-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; min-width: 0; padding: 8px 9px; border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.twin-topology-row strong, .twin-topology-row span, .twin-list-row strong, .twin-list-row span { min-width: 0; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.twin-topology-row span, .twin-list-row span { color: var(--muted); font-size: 10px; text-align: right; }</div><div class=\"diff-line diff-del\">-.twin-list + .twin-list { margin-top: 8px; }</div><div class=\"diff-line diff-del\">-.staging-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; margin: 10px 0; }</div><div class=\"diff-line diff-del\">-.staging-toolbar &gt; div { min-width: 0; }</div><div class=\"diff-line diff-del\">-.staging-toolbar strong, .staging-toolbar span { display: block; }</div><div class=\"diff-line diff-del\">-.staging-toolbar span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.staging-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.staging-section &gt; header { margin-bottom: 8px; }</div><div class=\"diff-line diff-del\">-.staging-section &gt; header strong, .staging-section &gt; header span { display: block; }</div><div class=\"diff-line diff-del\">-.staging-section &gt; header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.staging-gates, .staging-files, .staging-history { display: grid; gap: 7px; }</div><div class=\"diff-line diff-del\">-.staging-gate, .staging-file, .staging-history-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.staging-gate.is-passed, .staging-file.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }</div><div class=\"diff-line diff-del\">-.staging-gate.is-failed, .staging-file.is-failed { border-color: color-mix(in srgb, #dc2626 55%, var(--line)); }</div><div class=\"diff-line diff-del\">-.staging-gate strong, .staging-gate span, .staging-file strong, .staging-file span, .staging-history-row strong, .staging-history-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.staging-gate span, .staging-file span, .staging-history-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.staging-checks { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; }</div><div class=\"diff-line diff-del\">-.staging-checks small { padding: 3px 6px; border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 9px; }</div><div class=\"diff-line diff-del\">-.staging-checks small.is-failed { background: color-mix(in srgb, #dc2626 14%, var(--surface)); color: #dc2626; }</div><div class=\"diff-line diff-del\">-.mission-layout { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 10px; margin-top: 10px; }</div><div class=\"diff-line diff-del\">-.mission-list, .mission-detail { min-width: 0; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); overflow: hidden; }</div><div class=\"diff-line diff-del\">-.mission-list { display: grid; align-content: start; }</div><div class=\"diff-line diff-del\">-.mission-row { min-width: 0; min-height: 64px; padding: 10px 11px; border: 0; border-bottom: 1px solid var(--line); background: transparent; color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-del\">-.mission-row:last-child { border-bottom: 0; }</div><div class=\"diff-line diff-del\">-.mission-row:hover, .mission-row.is-active { background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.mission-row.is-active { box-shadow: inset 3px 0 var(--accent); }</div><div class=\"diff-line diff-del\">-.mission-row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }</div><div class=\"diff-line diff-del\">-.mission-row-head strong { font-size: 11px; }</div><div class=\"diff-line diff-del\">-.mission-row-head time, .mission-row &gt; span:last-child { color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.mission-row &gt; span:last-child { display: block; margin-top: 5px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.mission-detail { min-height: 180px; padding: 12px; color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.mission-detail h3 { margin: 0 0 10px; color: var(--ink); font-size: 13px; }</div><div class=\"diff-line diff-del\">-.mission-files { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 10px; }</div><div class=\"diff-line diff-del\">-.mission-files code { max-width: 100%; padding: 4px 6px; border-radius: 5px; background: var(--code); color: var(--code-ink); overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.evidence-row { padding: 8px 0; border-top: 1px solid var(--line); }</div><div class=\"diff-line diff-del\">-.evidence-row strong, .evidence-row span { display: block; }</div><div class=\"diff-line diff-del\">-.evidence-row strong { color: var(--ink); font-size: 11px; }</div><div class=\"diff-line diff-del\">-.evidence-row span { margin-top: 2px; font-size: 10px; }</div><div class=\"diff-line diff-del\">-.mission-empty { padding: 16px; color: var(--muted); font-size: 11px; line-height: 1.5; }</div><div class=\"diff-line diff-del\">-.model-router-filters { display: grid; grid-template-columns: minmax(0, .7fr) minmax(0, 1.3fr); gap: 8px; margin: 10px 0; }</div><div class=\"diff-line diff-del\">-.model-router-filters label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.model-router-filters select, .model-router-filters input { width: 100%; min-width: 0; }</div><div class=\"diff-line diff-del\">-.model-router-list { display: grid; gap: 7px; }</div><div class=\"diff-line diff-del\">-.provider-status-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin: 10px 0; }</div><div class=\"diff-line diff-del\">-.provider-status-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.provider-status-row strong, .provider-status-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.provider-status-row strong { font-size: 10px; }</div><div class=\"diff-line diff-del\">-.provider-status-row span { margin-top: 3px; color: var(--muted); font-size: 9px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.model-router-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.model-eval-selector { width: 20px; height: 20px; accent-color: var(--accent); }</div><div class=\"diff-line diff-del\">-.model-router-actions { display: grid; gap: 6px; min-width: 170px; }</div><div class=\"diff-line diff-del\">-.model-auto-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; margin: 10px 0; padding: 12px; border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line)); border-radius: 10px; background: color-mix(in srgb, var(--accent) 5%, var(--surface)); }</div><div class=\"diff-line diff-del\">-.model-budget-card { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(100px, .45fr) minmax(100px, .45fr); gap: 10px; align-items: end; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.model-budget-card &gt; div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.model-budget-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.model-tool-cert-card { display: grid; gap: 9px; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.model-tool-cert-card &gt; div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.model-tool-cert-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.mission-contract-form { display: grid; gap: 10px; }</div><div class=\"diff-line diff-del\">-.mission-contract-form &gt; label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-del\">-.contract-gates { display: grid; gap: 8px; margin-top: 12px; }</div><div class=\"diff-line diff-del\">-.contract-gate { padding: 11px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.contract-gate.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }</div><div class=\"diff-line diff-del\">-.contract-gate.is-failed { border-color: color-mix(in srgb, #dc2626 50%, var(--line)); }</div><div class=\"diff-line diff-del\">-.contract-gate.is-pending { border-color: color-mix(in srgb, #d97706 48%, var(--line)); }</div><div class=\"diff-line diff-del\">-.contract-gate strong, .contract-gate span { display: block; }</div><div class=\"diff-line diff-del\">-.contract-gate span { margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.contract-criteria { display: grid; gap: 6px; margin-top: 8px; }</div><div class=\"diff-line diff-del\">-.contract-criterion { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; }</div><div class=\"diff-line diff-del\">-.model-auto-card strong, .model-auto-card span { display: block; }</div><div class=\"diff-line diff-del\">-.model-auto-card span, .model-ranking-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.model-ranking { display: grid; gap: 7px; margin: 10px 0; }</div><div class=\"diff-line diff-del\">-.model-ranking-row { padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.model-router-row div, .model-router-row strong, .model-router-row span { min-width: 0; }</div><div class=\"diff-line diff-del\">-.model-router-row strong, .model-router-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.model-router-row strong { font-size: 11px; }</div><div class=\"diff-line diff-del\">-.model-router-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-del\">-.activity-row { padding: 9px 8px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-del\">-.activity-row strong { display: block; margin-bottom: 3px; font-size: 11px; }</div><div class=\"diff-line diff-del\">-.activity-row span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.settings-form { display: grid; gap: 14px; }</div><div class=\"diff-line diff-del\">-.settings-intro { display: grid; gap: 4px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.settings-intro strong { font-size: 13px; }</div><div class=\"diff-line diff-del\">-.settings-intro span { color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.settings-form fieldset { display: grid; gap: 10px; min-width: 0; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.settings-editor { width: 100%; min-height: 220px; resize: vertical; padding: 11px; border: 1px solid var(--strong-line); border-radius: 8px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; }</div><div class=\"diff-line diff-del\">-.inline-actions { display: flex; justify-content: flex-end; gap: 7px; }</div><div class=\"diff-line diff-del\">-.settings-form legend { padding: 0 6px; color: var(--ink); font-size: 12px; font-weight: 700; }</div><div class=\"diff-line diff-del\">-.settings-form label:not(.toggle-row) { display: grid; gap: 5px; }</div><div class=\"diff-line diff-del\">-.settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; }</div><div class=\"diff-line diff-del\">-.toggle-row { display: grid; grid-template-columns: 40px minmax(0, 1fr); align-items: center; min-height: 52px; padding: 7px 8px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); cursor: pointer; }</div><div class=\"diff-line diff-del\">-.toggle-row input { width: 20px; height: 20px; margin: 0; accent-color: var(--accent); }</div><div class=\"diff-line diff-del\">-.toggle-row span { display: grid; gap: 2px; }</div><div class=\"diff-line diff-del\">-.toggle-row strong { color: var(--ink); font-size: 13px; }</div><div class=\"diff-line diff-del\">-.toggle-row small { color: var(--muted); font-size: 12px; line-height: 1.35; }</div><div class=\"diff-line diff-del\">-.policy-list { display: flex; flex-wrap: wrap; gap: 6px; }</div><div class=\"diff-line diff-del\">-.policy-list span { padding: 5px 7px; border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line)); border-radius: 6px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--accent); font-size: 11px; font-weight: 700; }</div><div class=\"diff-line diff-del\">-.settings-actions { position: sticky; bottom: -24px; display: grid; grid-template-columns: 1fr 1.4fr; gap: 8px; margin: 0 -12px -24px; padding: 12px; border-top: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); backdrop-filter: blur(10px); }</div><div class=\"diff-line diff-del\">-.settings-actions button { min-width: 0; }</div><div class=\"diff-line diff-del\">-.settings-form.is-saving { opacity: .72; pointer-events: none; }</div><div class=\"diff-line diff-del\">-.credential-status { padding: 9px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-del\">-.credential-status.is-configured { border-color: color-mix(in srgb, var(--accent) 36%, var(--line)); color: var(--accent); }</div><div class=\"diff-line diff-del\">-.settings-note { margin: 0; color: var(--muted); font-size: 10px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.diagnostics-hero { display: grid; gap: 12px; padding: 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-sm); }</div><div class=\"diff-line diff-del\">-.diagnostics-hero &gt; div { display: grid; gap: 4px; }</div><div class=\"diff-line diff-del\">-.diagnostics-hero strong { font-size: 14px; }</div><div class=\"diff-line diff-del\">-.diagnostics-hero span { color: var(--muted); font-size: 11px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.diagnostics-summary { margin: 12px 0; padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-del\">-.diagnostics-list { display: grid; gap: 7px; }</div><div class=\"diff-line diff-del\">-.diagnostic-row { display: grid; grid-template-columns: 10px minmax(0, 1fr); gap: 10px; align-items: start; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.diagnostic-dot { width: 10px; height: 10px; margin-top: 3px; border-radius: 50%; background: var(--muted); }</div><div class=\"diff-line diff-del\">-.diagnostic-row.is-pass .diagnostic-dot { background: #21845f; }</div><div class=\"diff-line diff-del\">-.diagnostic-row.is-warn .diagnostic-dot { background: var(--warning); }</div><div class=\"diff-line diff-del\">-.diagnostic-row.is-fail .diagnostic-dot { background: var(--danger); }</div><div class=\"diff-line diff-del\">-.diagnostic-copy { display: grid; gap: 3px; min-width: 0; }</div><div class=\"diff-line diff-del\">-.diagnostic-copy strong { font-size: 11px; }</div><div class=\"diff-line diff-del\">-.diagnostic-copy span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.security-refresh { width: 100%; margin: 12px 0; }</div><div class=\"diff-line diff-del\">-.security-grid { display: grid; gap: 8px; }</div><div class=\"diff-line diff-del\">-.security-card { position: relative; padding: 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }</div><div class=\"diff-line diff-del\">-.security-card &gt; strong { display: block; padding-right: 70px; font-size: 12px; }</div><div class=\"diff-line diff-del\">-.security-card &gt; span { position: absolute; top: 10px; right: 10px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font-size: 9px; font-weight: 750; }</div><div class=\"diff-line diff-del\">-.security-card.is-pass &gt; span { color: #21845f; }</div><div class=\"diff-line diff-del\">-.security-card.is-warn &gt; span { color: var(--warning); }</div><div class=\"diff-line diff-del\">-.security-card.is-fail &gt; span { color: var(--danger); }</div><div class=\"diff-line diff-del\">-.security-card ul { margin: 9px 0 0; padding-left: 18px; color: var(--muted); font-size: 10px; line-height: 1.5; }</div><div class=\"diff-line diff-del\">-.integration-dialog { width: min(720px, calc(100vw - 28px)); max-height: min(860px, calc(100dvh - 28px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-del\">-.integration-dialog[open] { display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto auto; }</div><div class=\"diff-line diff-del\">-.integration-dialog::backdrop { background: rgba(20, 22, 20, .66); backdrop-filter: blur(4px); }</div><div class=\"diff-line diff-del\">-.integration-dialog &gt; header, .integration-dialog &gt; footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-del\">-.integration-dialog &gt; header &gt; div { display: grid; gap: 2px; min-width: 0; }</div><div class=\"diff-line diff-del\">-.integration-dialog &gt; header small { color: var(--accent); font-size: 9px; font-weight: 800; letter-spacing: .08em; }</div><div class=\"diff-line diff-del\">-.integration-dialog &gt; header strong { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }</div><div class=\"diff-line diff-del\">-.integration-dialog &gt; footer { justify-content: flex-end; border-top: 1px solid var(--line); border-bottom: 0; }</div><div class=\"diff-line diff-del\">-.integration-content { min-height: 0; overflow-y: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 14px; }</div><div class=\"diff-line diff-del\">-.integration-content section { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-del\">-.integration-content section &gt; strong { display: block; margin-bottom: 6px; color: var(--ink); font-size: 10px; text-transform: uppercase; letter-spacing: .04em; }</div><div class=\"diff-line diff-del\">-.integration-content section &gt; div { color: var(--muted); font-size: 11px; line-height: 1.5; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.integration-content ul { margin: 0; padding-left: 17px; }</div><div class=\"diff-line diff-del\">-.integration-endpoint { position: relative; z-index: 1; display: grid; gap: 5px; margin: 0; padding: 10px 14px 12px; border-top: 1px solid var(--line); background: var(--surface); color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.integration-dialog &gt; .form-error { margin: 0 14px 10px; }</div><div class=\"diff-line diff-del\">-.integration-dialog &gt; .form-error:empty { display: none; }</div><div class=\"diff-line diff-del\">-#integration-error { color: var(--muted); }</div><div class=\"diff-line diff-del\">-#integration-error[data-error=\"true\"] { color: var(--danger); }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-.login-dialog { width: min(390px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-del\">-.login-dialog::backdrop { background: rgba(20, 22, 20, .58); }</div><div class=\"diff-line diff-del\">-.login-dialog form { display: grid; gap: 12px; padding: 22px; }</div><div class=\"diff-line diff-del\">-.login-brand { display: flex; align-items: center; gap: 11px; margin-bottom: 8px; }</div><div class=\"diff-line diff-del\">-.form-error { min-height: 18px; margin: 0; color: var(--danger); font-size: 12px; }</div><div class=\"diff-line diff-del\">-.app-error-boundary { position: fixed; z-index: 120; left: max(12px, env(safe-area-inset-left)); right: max(12px, env(safe-area-inset-right)); bottom: max(12px, env(safe-area-inset-bottom)); display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid color-mix(in srgb, var(--danger) 42%, var(--line)); border-radius: 14px; background: color-mix(in srgb, var(--surface) 94%, var(--danger)); box-shadow: 0 18px 46px rgba(0, 0, 0, .22); }</div><div class=\"diff-line diff-del\">-.app-error-boundary &gt; div:first-child { display: grid; gap: 4px; min-width: 0; }</div><div class=\"diff-line diff-del\">-.app-error-boundary span { color: var(--muted); overflow-wrap: anywhere; }</div><div class=\"diff-line diff-del\">-.app-error-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }</div><div class=\"diff-line diff-del\">-.app-error-boundary[data-fatal=\"true\"] { top: 50%; bottom: auto; max-width: 680px; margin-inline: auto; transform: translateY(-50%); }</div><div class=\"diff-line diff-del\">-@media (max-width: 640px) { .app-error-boundary { align-items: stretch; flex-direction: column; } .app-error-actions &gt; button { flex: 1 1 140px; min-height: 48px; } }</div><div class=\"diff-line diff-del\">-.action-dialog { width: min(460px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); }</div><div class=\"diff-line diff-del\">-.action-dialog::backdrop { background: rgba(20, 22, 20, .58); }</div><div class=\"diff-line diff-del\">-.action-dialog form { display: grid; gap: 12px; padding: 18px; }</div><div class=\"diff-line diff-del\">-.action-dialog header, .action-dialog footer { display: flex; align-items: center; gap: 8px; }</div><div class=\"diff-line diff-del\">-.action-dialog header strong { flex: 1; }</div><div class=\"diff-line diff-del\">-.action-dialog footer { justify-content: flex-end; }</div><div class=\"diff-line diff-del\">-.action-copy { color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-del\">-.action-fields { display: grid; gap: 10px; }</div><div class=\"diff-line diff-del\">-.action-fields label { display: grid; gap: 5px; }</div><div class=\"diff-line diff-del\">-.action-fields textarea { width: 100%; min-height: 90px; resize: vertical; border: 1px solid var(--strong-line); border-radius: 6px; background: var(--surface); color: var(--ink); padding: 9px; }</div><div class=\"diff-line diff-del\">-.manual-dialog { width: min(1180px, calc(100vw - 32px)); height: min(860px, calc(100dvh - 32px)); max-width: none; max-height: none; padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-del\">-.manual-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }</div><div class=\"diff-line diff-del\">-.manual-dialog[open] { display: grid; grid-template-rows: 58px minmax(0, 1fr); }</div><div class=\"diff-line diff-del\">-.manual-dialog &gt; header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 5px 10px 5px 18px; border-bottom: 1px solid var(--line); background: var(--surface); }</div><div class=\"diff-line diff-del\">-.manual-dialog iframe { width: 100%; height: 100%; border: 0; background: var(--canvas); }</div><div class=\"diff-line diff-del\">-.file-preview-dialog { width: min(920px, calc(100vw - 32px)); height: min(760px, calc(100dvh - 32px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 11px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-del\">-.file-preview-dialog[open] { display: grid; grid-template-rows: 54px minmax(0, 1fr) 58px; }</div><div class=\"diff-line diff-del\">-.file-preview-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }</div><div class=\"diff-line diff-del\">-.file-preview-dialog header, .file-preview-dialog footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 7px 12px 7px 16px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-del\">-.file-preview-dialog footer { border-top: 1px solid var(--line); border-bottom: 0; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-del\">-.file-preview-dialog pre { min-width: 0; min-height: 0; overflow: auto; margin: 0; padding: 16px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre; tab-size: 2; }</div><div class=\"diff-line diff-del\">-.mobile-only, .mobile-nav { display: none; }</div><div class=\"diff-line diff-del\">-.resource-summary.is-loading::before { content: ''; display: inline-block; width: 10px; height: 10px; margin-right: 8px; border: 2px solid color-mix(in srgb, var(--accent) 25%, transparent); border-top-color: var(--accent); border-radius: 50%; animation: loading-spin .75s linear infinite; vertical-align: -1px; }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-@keyframes loading-spin { to { transform: rotate(360deg); } }</div><div class=\"diff-line diff-del\">-@keyframes status-pulse { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--warning) 38%, transparent); } 50% { box-shadow: 0 0 0 5px transparent; } }</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-@media (max-width: 1060px) {</div><div class=\"diff-line diff-del\">-  .app-shell.activity-open { grid-template-columns: 200px minmax(0, 1fr) minmax(380px, 42vw); }</div><div class=\"diff-line diff-del\">-  .app-shell { grid-template-columns: 240px minmax(0, 1fr); }</div><div class=\"diff-line diff-del\">-}</div><div class=\"diff-line diff-del\">-</div><div class=\"diff-line diff-del\">-@media (max-width: 760px) {</div><div class=\"diff-line diff-del\">-  .desktop-only { display: none; }</div><div class=\"diff-line diff-del\">-  .mobile-only { display: grid; }</div><div class=\"diff-line diff-del\">-  body { font-size: 15px; }</div><div class=\"diff-line diff-del\">-  button, select { min-height: 48px; }</div><div class=\"diff-line diff-del\">-  .icon-button { width: 48px; height: 48px; }</div><div class=\"diff-line diff-del\">-  .app-shell, .app-shell.activity-open { display: block; height: calc(var(--app-height) - var(--safe-top)); padding-bottom: var(--mobile-nav-total); }</div><div class=\"diff-line diff-del\">-  .panel-view { display: none !important; width: 100%; height: calc(var(--app-height) - var(--safe-top) - var(--mobile-nav-total)); min-height: 0; border: 0; }</div><div class=\"diff-line diff-del\">-  .panel-view.is-active { display: flex !important; }</div><div class=\"diff-line diff-del\">-  .rail, .activity { position: static; }</div><div class=\"diff-line diff-del\">-  .rail-tabs button { min-height: 48px; }</div><div class=\"diff-line diff-del\">-  .conversation-header { padding-inline: 10px; }</div><div class=\"diff-line diff-del\">-  .connection span:last-child { display: none; }</div><div class=\"diff-line diff-del\">-  .timeline { padding: 18px 12px; }</div><div class=\"diff-line diff-del\">-  .timeline-item.user { margin-left: 24px; }</div><div class=\"diff-line diff-del\">-  .approval-tray { padding: 0 14px; }</div><div class=\"diff-line diff-del\">-  .change-review-tray { max-height: 52dvh; padding: 0 10px; }</div><div class=\"diff-line diff-del\">-  .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }</div><div class=\"diff-line diff-del\">-  .turn-watchdog button { min-height: 48px; }</div><div class=\"diff-line diff-del\">-  .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }</div><div class=\"diff-line diff-del\">-  .turn-status-banner button { min-height: 48px; }</div><div class=\"diff-line diff-del\">-  .change-review-card &gt; header { align-items: stretch; flex-direction: column; }</div><div class=\"diff-line diff-del\">-  .change-review-bulk { display: grid; grid-template-columns: 1fr 1fr; }</div><div class=\"diff-line diff-del\">-  .change-review-bulk button, .change-file-actions button { min-height: 48px; }</div><div class=\"diff-line diff-del\">-  .change-file-actions { display: grid; grid-template-columns: 1fr 1fr; }</div><div class=\"diff-line diff-del\">-  .composer-wrap { padding: 6px 8px max(7px, var(--safe-bottom)); }</div><div class=\"diff-line diff-del\">-  .agent-toolbar { padding-top: 5px; }</div><div class=\"diff-line diff-del\">-  .agent-toolbar &gt; select, .smart-actions button { min-height: 44px; }</div><div class=\"diff-line diff-add\">+.conversation-scroll { flex: 1 1 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }</div><div class=\"diff-line diff-add\">+.conversation-scroll &gt; .timeline { flex: 1 1 0; min-height: 0; }</div><div class=\"diff-line diff-add\">+.conversation-scroll &gt; .turn-status-banner,</div><div class=\"diff-line diff-add\">+.conversation-scroll &gt; .turn-watchdog,</div><div class=\"diff-line diff-add\">+.conversation-scroll &gt; .execution-status,</div><div class=\"diff-line diff-add\">+.conversation-scroll &gt; .approval-tray,</div><div class=\"diff-line diff-add\">+.conversation-scroll &gt; .change-review-tray { flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+.conversation-header { padding-inline: 18px; }</div><div class=\"diff-line diff-add\">+.thread-title { min-width: 0; flex: 1; display: flex; flex-direction: column; }</div><div class=\"diff-line diff-add\">+.thread-title strong, .thread-title span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }</div><div class=\"diff-line diff-add\">+.thread-title span { color: var(--muted); font-size: 11px; margin-top: 3px; }</div><div class=\"diff-line diff-add\">+.connection { display: flex; align-items: center; gap: 7px; color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #999; }</div><div class=\"diff-line diff-add\">+.status-dot.is-online { background: #21845f; }</div><div class=\"diff-line diff-add\">+.status-dot.is-running { background: var(--warning); animation: status-pulse 1.4s ease-in-out infinite; }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.timeline { flex: 1 1 0; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: 32px max(24px, calc((100% - 820px) / 2)); scroll-behavior: smooth; -webkit-overflow-scrolling: touch; }</div><div class=\"diff-line diff-add\">+.empty-state { min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding-bottom: 8vh; }</div><div class=\"diff-line diff-add\">+.empty-mark { display: grid; place-items: center; width: 45px; height: 45px; border: 1px solid var(--strong-line); border-radius: 8px; font-size: 20px; font-weight: 750; }</div><div class=\"diff-line diff-add\">+.empty-state h1 { margin: 18px 0 7px; font-size: 25px; font-weight: 680; }</div><div class=\"diff-line diff-add\">+.empty-state p { margin: 0; color: var(--muted); }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.turn-status-banner {</div><div class=\"diff-line diff-add\">+  flex: 0 0 auto;</div><div class=\"diff-line diff-add\">+  display: flex;</div><div class=\"diff-line diff-add\">+  align-items: center;</div><div class=\"diff-line diff-add\">+  gap: 12px;</div><div class=\"diff-line diff-add\">+  margin: 0 max(24px, calc((100% - 820px) / 2)) 10px;</div><div class=\"diff-line diff-add\">+  padding: 10px 12px;</div><div class=\"diff-line diff-add\">+  border: 1px solid var(--line);</div><div class=\"diff-line diff-add\">+  border-radius: 10px;</div><div class=\"diff-line diff-add\">+  background: color-mix(in srgb, var(--surface-subtle) 88%, #dfe8e2);</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+.turn-status-banner.is-hidden { display: none; }</div><div class=\"diff-line diff-add\">+.turn-status-banner[data-state=\"running\"] {</div><div class=\"diff-line diff-add\">+  border-color: color-mix(in srgb, var(--warning) 45%, var(--line));</div><div class=\"diff-line diff-add\">+  background: color-mix(in srgb, #fff8e8 70%, var(--surface));</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+.turn-status-banner[data-state=\"error\"] {</div><div class=\"diff-line diff-add\">+  border-color: color-mix(in srgb, #c45c4a 40%, var(--line));</div><div class=\"diff-line diff-add\">+  background: color-mix(in srgb, #fff1ee 75%, var(--surface));</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+.turn-status-banner[data-state=\"done\"] {</div><div class=\"diff-line diff-add\">+  border-color: color-mix(in srgb, var(--accent) 35%, var(--line));</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+.turn-status-main { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }</div><div class=\"diff-line diff-add\">+.turn-status-main strong { font-size: 12px; font-weight: 700; }</div><div class=\"diff-line diff-add\">+.turn-status-main span { color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.turn-inline-summary {</div><div class=\"diff-line diff-add\">+  margin-top: 8px;</div><div class=\"diff-line diff-add\">+  padding: 7px 9px;</div><div class=\"diff-line diff-add\">+  border-radius: 8px;</div><div class=\"diff-line diff-add\">+  border: 1px solid var(--line);</div><div class=\"diff-line diff-add\">+  background: var(--surface-subtle);</div><div class=\"diff-line diff-add\">+  color: var(--muted);</div><div class=\"diff-line diff-add\">+  font-size: 11px;</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+.turn-summary-card .item-body { padding: 0; overflow: hidden; }</div><div class=\"diff-line diff-add\">+.turn-summary-body { padding: 12px 14px; }</div><div class=\"diff-line diff-add\">+.turn-summary-body strong { display: block; margin-bottom: 4px; }</div><div class=\"diff-line diff-add\">+.turn-summary-body p { margin: 0 0 8px; color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.turn-tool-list { margin: 0; padding-left: 18px; color: var(--ink); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.turn-tool-list li { margin: 0 0 4px; }</div><div class=\"diff-line diff-add\">+.activity-row.activity-cursor.is-live strong { color: var(--accent); }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.turn-block { margin: 0 0 26px; }</div><div class=\"diff-line diff-add\">+.timeline-item { position: relative; margin: 0 0 14px; }</div><div class=\"diff-line diff-add\">+.timeline-item.user { margin-left: clamp(30px, 15%, 120px); }</div><div class=\"diff-line diff-add\">+.timeline-item.user .item-body { background: #edf2ee; border-color: #d8e1da; }</div><div class=\"diff-line diff-add\">+.timeline-item.assistant .item-body { padding-inline: 0; border-color: transparent; background: transparent; }</div><div class=\"diff-line diff-add\">+.item-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; color: var(--muted); font-size: 11px; font-weight: 650; }</div><div class=\"diff-line diff-add\">+.item-time { display: block; margin-top: 5px; color: var(--muted); font-size: 10px; line-height: 1.3; text-align: right; font-variant-numeric: tabular-nums; }</div><div class=\"diff-line diff-add\">+.item-status { margin-left: auto; font-weight: 500; }</div><div class=\"diff-line diff-add\">+.item-body { border: 1px solid var(--line); border-radius: 12px; background: var(--surface-subtle); padding: 12px 14px; line-height: 1.6; white-space: pre-wrap; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.timeline-item.tool .item-body, .timeline-item.diff .item-body, .timeline-item.plan .item-body, .timeline-item.subagent .item-body { padding: 0; overflow: hidden; }</div><div class=\"diff-line diff-add\">+.timeline-item.plan .item-body { border-color: color-mix(in srgb, var(--accent) 32%, var(--line)); }</div><div class=\"diff-line diff-add\">+.timeline-item.subagent .item-body { border-color: color-mix(in srgb, #6e63d9 35%, var(--line)); }</div><div class=\"diff-line diff-add\">+.tool-summary { padding: 10px 12px; background: #f1f2ef; border-bottom: 1px solid var(--line); font-weight: 650; }</div><div class=\"diff-line diff-add\">+.tool-output, .diff-output { margin: 0; max-height: 340px; overflow: auto; padding: 12px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; }</div><div class=\"diff-line diff-add\">+.tool-output.is-empty { display: none; }</div><div class=\"diff-line diff-add\">+.timeline-item.tool .tool-summary:only-child { border-bottom: 0; }</div><div class=\"diff-line diff-add\">+.diff-line { display: block; min-height: 19px; padding: 0 6px; }</div><div class=\"diff-line diff-add\">+.diff-line.add { background: #173c2c; color: #c9f3dc; }</div><div class=\"diff-line diff-add\">+.diff-line.del { background: #482522; color: #ffd5d1; }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.approval-tray { flex: 0 0 auto; padding: 0 max(24px, calc((100% - 820px) / 2)); }</div><div class=\"diff-line diff-add\">+.approval-card { margin: 0 0 10px; border: 1px solid #d9b67f; border-radius: 7px; background: #fffaf1; padding: 12px; }</div><div class=\"diff-line diff-add\">+.approval-card strong { display: block; margin-bottom: 7px; color: #71400e; }</div><div class=\"diff-line diff-add\">+.approval-card pre { max-height: 130px; overflow: auto; margin: 0 0 10px; white-space: pre-wrap; font: 11px/1.45 ui-monospace, Consolas, monospace; }</div><div class=\"diff-line diff-add\">+.approval-diffs { display: grid; gap: 7px; margin-bottom: 10px; }</div><div class=\"diff-line diff-add\">+.approval-diffs details { overflow: hidden; border: 1px solid #d9b67f; border-radius: 7px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.approval-diffs summary { padding: 9px 10px; cursor: pointer; color: var(--ink); font: 650 11px/1.4 ui-monospace, Consolas, monospace; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.approval-diffs .diff-output { max-height: 260px; margin: 0; border-radius: 0; }</div><div class=\"diff-line diff-add\">+.approval-actions { display: flex; justify-content: flex-end; gap: 7px; }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.change-review-tray { flex: 0 1 auto; max-height: min(48dvh, 520px); overflow: auto; padding: 0 max(18px, calc((100% - 850px) / 2)); background: var(--surface); scrollbar-gutter: stable; }</div><div class=\"diff-line diff-add\">+.turn-watchdog { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 max(18px, calc((100% - 850px) / 2)) 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.turn-watchdog.is-hidden { display: none; }</div><div class=\"diff-line diff-add\">+.turn-watchdog &gt; div { display: grid; gap: 2px; min-width: 0; }</div><div class=\"diff-line diff-add\">+.turn-watchdog strong { font-size: 12px; }</div><div class=\"diff-line diff-add\">+.turn-watchdog span { color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.turn-watchdog[data-status=\"stale\"], .turn-watchdog[data-status=\"stuckCompaction\"] { border-color: color-mix(in srgb, var(--danger) 48%, var(--line)); }</div><div class=\"diff-line diff-add\">+.execution-status { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; min-height: 30px; padding: 4px max(18px, calc((100% - 850px) / 2)); border-bottom: 1px solid var(--line); background: var(--surface-subtle); color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.execution-status-label { color: var(--ink); font-weight: 750; text-transform: uppercase; letter-spacing: .04em; }</div><div class=\"diff-line diff-add\">+#execution-status-text { overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.execution-meta { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.execution-meta span { padding: 3px 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.change-file-explanation { display: grid; gap: 3px; padding: 9px 11px; border-top: 1px solid var(--line); color: var(--muted); font-size: 11px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.change-review-tray:empty { display: none; }</div><div class=\"diff-line diff-add\">+.change-review-tray.is-saving { opacity: .68; pointer-events: none; }</div><div class=\"diff-line diff-add\">+.change-review-card.is-cursor { border-color: color-mix(in srgb, #3d7ea6 42%, var(--line)); }</div><div class=\"diff-line diff-add\">+.change-review-card.is-cursor &gt; header { background: color-mix(in srgb, #3d7ea6 8%, var(--surface)); }</div><div class=\"diff-line diff-add\">+.change-review-card &gt; header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 12px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--accent) 6%, var(--surface)); }</div><div class=\"diff-line diff-add\">+.change-review-card &gt; header &gt; div:first-child { display: grid; gap: 2px; min-width: 0; }</div><div class=\"diff-line diff-add\">+.change-review-card &gt; header strong { font-size: 12px; }</div><div class=\"diff-line diff-add\">+.change-review-card &gt; header span { color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.change-review-bulk, .change-file-actions { display: flex; justify-content: flex-end; gap: 7px; }</div><div class=\"diff-line diff-add\">+.change-review-bulk button, .change-file-actions button { min-height: 34px; padding: 6px 9px; font-size: 10px; }</div><div class=\"diff-line diff-add\">+.change-review-files { display: grid; }</div><div class=\"diff-line diff-add\">+.change-review-file { overflow: hidden; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-add\">+.change-review-file:last-child { border-bottom: 0; }</div><div class=\"diff-line diff-add\">+.change-review-file &gt; summary { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 42px; padding: 8px 11px; cursor: pointer; font: 650 11px/1.4 ui-monospace, SFMono-Regular, Consolas, monospace; }</div><div class=\"diff-line diff-add\">+.change-review-file &gt; summary:hover { background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.change-review-file &gt; summary span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }</div><div class=\"diff-line diff-add\">+.change-review-file &gt; summary small { padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font: 700 9px/1.2 Inter, system-ui, sans-serif; text-transform: uppercase; }</div><div class=\"diff-line diff-add\">+.change-review-file.is-accepted &gt; summary small { color: #21845f; }</div><div class=\"diff-line diff-add\">+.change-review-file.is-rejected &gt; summary small { color: var(--danger); }</div><div class=\"diff-line diff-add\">+.change-review-file .diff-output { max-height: 280px; margin: 0; border-block: 1px solid var(--line); }</div><div class=\"diff-line diff-add\">+.change-file-actions { padding: 8px 10px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.composer-wrap { position: relative; z-index: 4; flex: 0 0 auto; min-height: 0; padding: 10px max(18px, calc((100% - 850px) / 2)) max(12px, env(safe-area-inset-bottom)); background: linear-gradient(180deg, color-mix(in srgb, var(--surface) 72%, transparent), var(--surface) 24%); }</div><div class=\"diff-line diff-add\">+.context-chips { display: flex; gap: 6px; overflow-x: auto; margin: 0 0 7px; scrollbar-width: none; }</div><div class=\"diff-line diff-add\">+.context-chip { display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto; min-height: 30px; padding: 5px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-subtle); font-size: 11px; }</div><div class=\"diff-line diff-add\">+.context-chip button { min-height: 22px; width: 22px; padding: 0; border: 0; background: transparent; color: var(--muted); }</div><div class=\"diff-line diff-add\">+.composer { overflow: hidden; border: 1px solid var(--strong-line); border-radius: 18px; background: var(--surface); box-shadow: 0 12px 40px rgba(32, 40, 70, .10); }</div><div class=\"diff-line diff-add\">+.composer:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 13%, transparent), var(--shadow-sm); }</div><div class=\"diff-line diff-add\">+.composer textarea { display: block; width: 100%; max-height: 180px; resize: none; border: 0; background: transparent; color: var(--ink); padding: 13px 14px 6px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.composer textarea:focus { outline: 0; }</div><div class=\"diff-line diff-add\">+.agent-toolbar { display: flex; align-items: center; gap: 5px; min-width: 0; overflow-x: auto; padding: 6px 7px 0; scrollbar-width: none; }</div><div class=\"diff-line diff-add\">+.agent-toolbar::-webkit-scrollbar, .smart-actions::-webkit-scrollbar { display: none; }</div><div class=\"diff-line diff-add\">+.agent-toolbar &gt; select { flex: 0 0 auto; width: auto; max-width: 180px; min-height: 32px; padding: 4px 8px; border-color: transparent; border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; font-weight: 650; }</div><div class=\"diff-line diff-add\">+.smart-actions { display: flex; align-items: center; gap: 4px; flex: 0 0 auto; min-width: 0; overflow-x: auto; scrollbar-width: none; }</div><div class=\"diff-line diff-add\">+.smart-actions button { min-height: 32px; padding: 5px 9px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); font-size: 12px; white-space: nowrap; }</div><div class=\"diff-line diff-add\">+.smart-actions button:hover { background: var(--surface-subtle); color: var(--ink); }</div><div class=\"diff-line diff-add\">+.composer-tools { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 7px; }</div><div class=\"diff-line diff-add\">+.attachment-controls { position: relative; flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+.attachment-command { display: grid; place-items: center; width: 36px; height: 36px; min-height: 36px; padding: 0; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--ink); font-size: 20px; }</div><div class=\"diff-line diff-add\">+.attachment-command:hover { border-color: var(--accent); color: var(--accent); }</div><div class=\"diff-line diff-add\">+.attachment-menu { position: absolute; z-index: 30; left: 0; bottom: calc(100% + 8px); width: min(290px, calc(100vw - 28px)); padding: 6px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-add\">+.attachment-menu button { display: grid; gap: 3px; width: 100%; padding: 10px; border: 0; border-radius: 7px; background: transparent; color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-add\">+.attachment-menu button:hover { background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.attachment-menu strong { font-size: 13px; }</div><div class=\"diff-line diff-add\">+.attachment-menu span { color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.run-options { display: flex; flex: 1; gap: 6px; min-width: 0; overflow-x: auto; scrollbar-width: none; }</div><div class=\"diff-line diff-add\">+.advanced-run-options { display: flex; flex: 1; gap: 6px; min-width: 0; }</div><div class=\"diff-line diff-add\">+.run-options select { width: auto; max-width: 190px; min-height: 34px; padding: 5px 8px; border-color: transparent; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }</div><div class=\"diff-line diff-add\">+#engine-select { max-width: 175px; font-weight: 650; }</div><div class=\"diff-line diff-add\">+.run-options-toggle { display: none; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; font-weight: 650; }</div><div class=\"diff-line diff-add\">+.send-command { width: 36px; height: 36px; border: 0; border-radius: 7px; background: var(--ink); color: white; font-size: 20px; font-weight: 700; }</div><div class=\"diff-line diff-add\">+.send-command:disabled, button:disabled, select:disabled { cursor: not-allowed; opacity: .45; }</div><div class=\"diff-line diff-add\">+.composer textarea:disabled,</div><div class=\"diff-line diff-add\">+.composer textarea:read-only,</div><div class=\"diff-line diff-add\">+.agent-toolbar select:disabled,</div><div class=\"diff-line diff-add\">+.run-options select:disabled {</div><div class=\"diff-line diff-add\">+  opacity: 1;</div><div class=\"diff-line diff-add\">+  color: var(--muted);</div><div class=\"diff-line diff-add\">+  -webkit-text-fill-color: var(--muted);</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+.composer textarea:disabled::placeholder,</div><div class=\"diff-line diff-add\">+.composer textarea:read-only::placeholder {</div><div class=\"diff-line diff-add\">+  color: var(--muted);</div><div class=\"diff-line diff-add\">+  opacity: 1;</div><div class=\"diff-line diff-add\">+  -webkit-text-fill-color: var(--muted);</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+.is-hidden { display: none !important; }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.activity { display: none; height: 100dvh; min-height: 0; overflow: hidden; border-left: 1px solid var(--line); border-right: 0; }</div><div class=\"diff-line diff-add\">+.app-shell.activity-open { grid-template-columns: 252px minmax(0, 1fr) minmax(400px, 34vw); }</div><div class=\"diff-line diff-add\">+.app-shell.activity-open .activity { display: flex; flex-direction: column; }</div><div class=\"diff-line diff-add\">+.app-shell.activity-open .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }</div><div class=\"diff-line diff-add\">+  .app-shell.activity-open .run-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); overflow: visible; }</div><div class=\"diff-line diff-add\">+  .app-shell.activity-open .advanced-run-options { display: contents; }</div><div class=\"diff-line diff-add\">+  .app-shell.activity-open .run-options select { width: 100%; min-width: 0; max-width: none; }</div><div class=\"diff-line diff-add\">+.activity-header { flex: 0 0 auto; justify-content: space-between; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.activity-title { display: grid; gap: 3px; flex: 1; min-width: 0; }</div><div class=\"diff-line diff-add\">+.activity-title strong { font-size: 15px; letter-spacing: -0.01em; }</div><div class=\"diff-line diff-add\">+.activity-title span { color: var(--muted); font-size: 12px; line-height: 1.4; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.control-hub { flex: 0 0 auto; display: grid; gap: 0; border-bottom: 1px solid var(--line); background: var(--surface); }</div><div class=\"diff-line diff-add\">+.control-groups { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; padding: 6px 8px 0; background: color-mix(in srgb, var(--surface-subtle) 70%, var(--surface)); }</div><div class=\"diff-line diff-add\">+.control-groups button { min-height: 42px; padding: 8px 4px; border: 0; border-radius: 8px 8px 0 0; background: transparent; color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: 0.01em; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.control-groups button:hover { color: var(--ink); background: color-mix(in srgb, var(--surface) 80%, transparent); }</div><div class=\"diff-line diff-add\">+.control-groups button.is-active { color: var(--accent); background: var(--surface); box-shadow: inset 0 -2px 0 var(--accent); }</div><div class=\"diff-line diff-add\">+.control-tabs { display: flex; overflow-x: auto; padding: 0 8px; scrollbar-width: thin; }</div><div class=\"diff-line diff-add\">+.control-tabs button { flex: 0 0 auto; min-width: 76px; min-height: 44px; padding: 8px 10px; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--muted); font-size: 12px; font-weight: 650; }</div><div class=\"diff-line diff-add\">+.control-tabs button:hover { background: var(--surface-subtle); color: var(--ink); }</div><div class=\"diff-line diff-add\">+.control-tabs button.is-active { border-bottom-color: var(--accent); color: var(--accent); }</div><div class=\"diff-line diff-add\">+.control-tabs button[hidden] { display: none !important; }</div><div class=\"diff-line diff-add\">+.marketplace-panel { margin-top: 14px; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.marketplace-panel-head { display: grid; gap: 3px; margin-bottom: 10px; }</div><div class=\"diff-line diff-add\">+.marketplace-panel-head strong { font-size: 13px; }</div><div class=\"diff-line diff-add\">+.marketplace-panel-head span { color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.marketplace-advanced { margin-top: 14px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.marketplace-advanced summary { cursor: pointer; font-size: 13px; font-weight: 700; color: var(--ink); }</div><div class=\"diff-line diff-add\">+.marketplace-advanced[open] summary { margin-bottom: 8px; }</div><div class=\"diff-line diff-add\">+.control-view { display: none; flex: 1 1 0; min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; padding: 14px 12px 24px; -webkit-overflow-scrolling: touch; }</div><div class=\"diff-line diff-add\">+.control-view.is-active { display: block; }</div><div class=\"diff-line diff-add\">+.control-view::-webkit-scrollbar, .thread-list::-webkit-scrollbar, .timeline::-webkit-scrollbar { width: 10px; height: 10px; }</div><div class=\"diff-line diff-add\">+.control-view::-webkit-scrollbar-thumb, .thread-list::-webkit-scrollbar-thumb, .timeline::-webkit-scrollbar-thumb { border: 3px solid transparent; border-radius: 10px; background: color-mix(in srgb, var(--muted) 45%, transparent); background-clip: padding-box; }</div><div class=\"diff-line diff-add\">+.control-view::-webkit-scrollbar-thumb:hover, .thread-list::-webkit-scrollbar-thumb:hover, .timeline::-webkit-scrollbar-thumb:hover { background-color: color-mix(in srgb, var(--muted) 72%, transparent); }</div><div class=\"diff-line diff-add\">+.action-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }</div><div class=\"diff-line diff-add\">+.action-grid &gt; button { min-width: 0; min-height: 96px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-add\">+.action-grid &gt; button:hover { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); box-shadow: var(--shadow-sm); transform: translateY(-1px); }</div><div class=\"diff-line diff-add\">+.action-grid strong, .action-grid span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.action-grid strong { font-size: 13px; }</div><div class=\"diff-line diff-add\">+.action-grid span { margin-top: 5px; color: var(--muted); font-size: 12px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.action-grid .danger-action { border-color: #d6aaa6; color: var(--danger); }</div><div class=\"diff-line diff-add\">+.session-actions { display: grid; grid-template-columns: 1fr; gap: 7px; margin-top: 12px; }</div><div class=\"diff-line diff-add\">+.session-actions a, .session-actions button { display: grid; place-items: center; width: 100%; text-decoration: none; }</div><div class=\"diff-line diff-add\">+.resource-summary { padding: 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.resource-groups { display: grid; gap: 12px; margin-top: 12px; }</div><div class=\"diff-line diff-add\">+.resource-group { min-width: 0; }</div><div class=\"diff-line diff-add\">+.resource-group h3 { margin: 0 0 6px; font-size: 13px; }</div><div class=\"diff-line diff-add\">+.resource-list { display: grid; gap: 5px; }</div><div class=\"diff-line diff-add\">+.resource-row { min-width: 0; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.resource-row strong, .resource-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.resource-row strong { font-size: 13px; color: var(--ink); }</div><div class=\"diff-line diff-add\">+.resource-row span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.resource-row button { width: 100%; min-height: 36px; margin-top: 6px; border: 1px solid var(--strong-line); border-radius: 5px; background: var(--surface-subtle); color: var(--ink); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.explorer-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 4px; padding: 8px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-add\">+.explorer-toolbar select { min-width: 0; font-size: 11px; }</div><div class=\"diff-line diff-add\">+.explorer-hint { margin: 0; padding: 8px 10px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.explorer-tree { flex: 1; min-height: 0; overflow: auto; padding: 0 6px 18px; }</div><div class=\"diff-line diff-add\">+.explorer-node { min-width: 0; }</div><div class=\"diff-line diff-add\">+.explorer-row { display: grid; grid-template-columns: minmax(0, 1fr) 34px; align-items: center; min-height: 36px; padding-left: calc(var(--tree-depth, 0) * 13px); border-radius: 6px; }</div><div class=\"diff-line diff-add\">+.explorer-row:hover, .explorer-row.is-dragging { background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.explorer-main { display: flex; align-items: center; gap: 6px; min-width: 0; min-height: 34px; padding: 4px 5px; border: 0; background: transparent; color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-add\">+.explorer-main span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 11px/1.3 ui-monospace, SFMono-Regular, Consolas, monospace; }</div><div class=\"diff-line diff-add\">+.explorer-context { width: 32px; height: 32px; min-height: 32px; padding: 0; border: 0; border-radius: 5px; background: transparent; color: var(--muted); }</div><div class=\"diff-line diff-add\">+.explorer-context:hover { background: var(--line); color: var(--accent); }</div><div class=\"diff-line diff-add\">+.explorer-children { min-width: 0; }</div><div class=\"diff-line diff-add\">+.conversation.is-drop-target .composer { border-color: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 18%, transparent); }</div><div class=\"diff-line diff-add\">+.workspace-profile-form, .deployment-form { display: grid; gap: 10px; margin-top: 12px; }</div><div class=\"diff-line diff-add\">+.workspace-profile-form label, .deployment-form label, .marketplace-install label { display: grid; gap: 5px; }</div><div class=\"diff-line diff-add\">+.workspace-profile-form textarea:not(.settings-editor), .deployment-form textarea { width: 100%; resize: vertical; padding: 9px; border: 1px solid var(--strong-line); border-radius: 7px; background: var(--surface); color: var(--ink); }</div><div class=\"diff-line diff-add\">+.profile-editor { min-height: 150px; }</div><div class=\"diff-line diff-add\">+.marketplace-search { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; margin: 12px 0; }</div><div class=\"diff-line diff-add\">+.marketplace-install { display: grid; gap: 9px; min-width: 0; margin: 14px 0 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; }</div><div class=\"diff-line diff-add\">+.marketplace-install legend { padding: 0 5px; font-size: 11px; font-weight: 700; }</div><div class=\"diff-line diff-add\">+.deployment-form { padding: 13px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.deployment-form h3 { margin: 0 0 2px; font-size: 13px; }</div><div class=\"diff-line diff-add\">+.complement-badge { display: inline-flex; width: fit-content; margin-top: 6px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--accent); font-size: 11px; font-weight: 750; text-transform: uppercase; }</div><div class=\"diff-line diff-add\">+.command-search { display: grid; gap: 5px; }</div><div class=\"diff-line diff-add\">+.command-counts { margin: 9px 0; color: var(--muted); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.command-list { display: grid; gap: 6px; }</div><div class=\"diff-line diff-add\">+.command-row { width: 100%; min-width: 0; min-height: 68px; padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-add\">+.command-row:hover { border-color: var(--accent); box-shadow: var(--shadow-sm); transform: translateY(-1px); }</div><div class=\"diff-line diff-add\">+.command-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }</div><div class=\"diff-line diff-add\">+.command-row code { color: var(--accent); font-weight: 700; }</div><div class=\"diff-line diff-add\">+.command-support { flex: 0 0 auto; color: var(--muted); font-size: 11px; text-transform: uppercase; }</div><div class=\"diff-line diff-add\">+.command-row strong, .command-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.command-row strong { margin-top: 4px; font-size: 13px; }</div><div class=\"diff-line diff-add\">+.command-row &gt; span { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.activity-summary { position: sticky; top: -14px; z-index: 1; margin: -14px -12px 0; padding: 12px 14px; border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); color: var(--muted); font-size: 12px; backdrop-filter: blur(10px); }</div><div class=\"diff-line diff-add\">+.activity-list { padding: 10px 0; }</div><div class=\"diff-line diff-add\">+.mission-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 10px 0; }</div><div class=\"diff-line diff-add\">+.mission-toolbar label { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-add\">+.mission-toolbar input { width: 18px; height: 18px; accent-color: var(--accent); }</div><div class=\"diff-line diff-add\">+.evidence-summary { padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.twin-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: end; margin: 10px 0; }</div><div class=\"diff-line diff-add\">+.twin-toolbar label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-add\">+.twin-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 10px 0; }</div><div class=\"diff-line diff-add\">+.twin-metric { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.twin-metric strong, .twin-metric span { display: block; }</div><div class=\"diff-line diff-add\">+.twin-metric strong { overflow-wrap: anywhere; font-size: 16px; line-height: 1.2; }</div><div class=\"diff-line diff-add\">+.twin-metric span { margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.twin-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.twin-section &gt; header { margin-bottom: 9px; }</div><div class=\"diff-line diff-add\">+.twin-section &gt; header strong, .twin-section &gt; header span { display: block; }</div><div class=\"diff-line diff-add\">+.twin-section &gt; header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.twin-change-grid, .twin-operation-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }</div><div class=\"diff-line diff-add\">+.twin-change-card, .twin-operation-card { min-width: 0; padding: 9px; border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.twin-change-card strong, .twin-change-card span, .twin-operation-card strong, .twin-operation-card span { display: block; }</div><div class=\"diff-line diff-add\">+.twin-change-card span, .twin-operation-card span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.twin-change-card.is-risk strong { color: #dc2626; }</div><div class=\"diff-line diff-add\">+.twin-change-card.is-positive strong { color: #16a34a; }</div><div class=\"diff-line diff-add\">+.twin-topology, .twin-list { display: grid; gap: 6px; }</div><div class=\"diff-line diff-add\">+.twin-topology-row, .twin-list-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; min-width: 0; padding: 8px 9px; border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.twin-topology-row strong, .twin-topology-row span, .twin-list-row strong, .twin-list-row span { min-width: 0; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.twin-topology-row span, .twin-list-row span { color: var(--muted); font-size: 10px; text-align: right; }</div><div class=\"diff-line diff-add\">+.twin-list + .twin-list { margin-top: 8px; }</div><div class=\"diff-line diff-add\">+.staging-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; margin: 10px 0; }</div><div class=\"diff-line diff-add\">+.staging-toolbar &gt; div { min-width: 0; }</div><div class=\"diff-line diff-add\">+.staging-toolbar strong, .staging-toolbar span { display: block; }</div><div class=\"diff-line diff-add\">+.staging-toolbar span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.staging-section { margin-top: 10px; padding: 11px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.staging-section &gt; header { margin-bottom: 8px; }</div><div class=\"diff-line diff-add\">+.staging-section &gt; header strong, .staging-section &gt; header span { display: block; }</div><div class=\"diff-line diff-add\">+.staging-section &gt; header span { margin-top: 3px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.staging-gates, .staging-files, .staging-history { display: grid; gap: 7px; }</div><div class=\"diff-line diff-add\">+.staging-gate, .staging-file, .staging-history-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.staging-gate.is-passed, .staging-file.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }</div><div class=\"diff-line diff-add\">+.staging-gate.is-failed, .staging-file.is-failed { border-color: color-mix(in srgb, #dc2626 55%, var(--line)); }</div><div class=\"diff-line diff-add\">+.staging-gate strong, .staging-gate span, .staging-file strong, .staging-file span, .staging-history-row strong, .staging-history-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.staging-gate span, .staging-file span, .staging-history-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.staging-checks { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; }</div><div class=\"diff-line diff-add\">+.staging-checks small { padding: 3px 6px; border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 9px; }</div><div class=\"diff-line diff-add\">+.staging-checks small.is-failed { background: color-mix(in srgb, #dc2626 14%, var(--surface)); color: #dc2626; }</div><div class=\"diff-line diff-add\">+.mission-layout { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 10px; margin-top: 10px; }</div><div class=\"diff-line diff-add\">+.mission-list, .mission-detail { min-width: 0; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); overflow: hidden; }</div><div class=\"diff-line diff-add\">+.mission-list { display: grid; align-content: start; }</div><div class=\"diff-line diff-add\">+.mission-row { min-width: 0; min-height: 64px; padding: 10px 11px; border: 0; border-bottom: 1px solid var(--line); background: transparent; color: var(--ink); text-align: left; }</div><div class=\"diff-line diff-add\">+.mission-row:last-child { border-bottom: 0; }</div><div class=\"diff-line diff-add\">+.mission-row:hover, .mission-row.is-active { background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.mission-row.is-active { box-shadow: inset 3px 0 var(--accent); }</div><div class=\"diff-line diff-add\">+.mission-row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }</div><div class=\"diff-line diff-add\">+.mission-row-head strong { font-size: 11px; }</div><div class=\"diff-line diff-add\">+.mission-row-head time, .mission-row &gt; span:last-child { color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.mission-row &gt; span:last-child { display: block; margin-top: 5px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.mission-detail { min-height: 180px; padding: 12px; color: var(--muted); font-size: 11px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.mission-detail h3 { margin: 0 0 10px; color: var(--ink); font-size: 13px; }</div><div class=\"diff-line diff-add\">+.mission-files { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 10px; }</div><div class=\"diff-line diff-add\">+.mission-files code { max-width: 100%; padding: 4px 6px; border-radius: 5px; background: var(--code); color: var(--code-ink); overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.evidence-row { padding: 8px 0; border-top: 1px solid var(--line); }</div><div class=\"diff-line diff-add\">+.evidence-row strong, .evidence-row span { display: block; }</div><div class=\"diff-line diff-add\">+.evidence-row strong { color: var(--ink); font-size: 11px; }</div><div class=\"diff-line diff-add\">+.evidence-row span { margin-top: 2px; font-size: 10px; }</div><div class=\"diff-line diff-add\">+.mission-empty { padding: 16px; color: var(--muted); font-size: 11px; line-height: 1.5; }</div><div class=\"diff-line diff-add\">+.model-router-filters { display: grid; grid-template-columns: minmax(0, .7fr) minmax(0, 1.3fr); gap: 8px; margin: 10px 0; }</div><div class=\"diff-line diff-add\">+.model-router-filters label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.model-router-filters select, .model-router-filters input { width: 100%; min-width: 0; }</div><div class=\"diff-line diff-add\">+.model-router-list { display: grid; gap: 7px; }</div><div class=\"diff-line diff-add\">+.provider-status-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin: 10px 0; }</div><div class=\"diff-line diff-add\">+.provider-status-row { min-width: 0; padding: 9px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.provider-status-row strong, .provider-status-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.provider-status-row strong { font-size: 10px; }</div><div class=\"diff-line diff-add\">+.provider-status-row span { margin-top: 3px; color: var(--muted); font-size: 9px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.model-router-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.model-eval-selector { width: 20px; height: 20px; accent-color: var(--accent); }</div><div class=\"diff-line diff-add\">+.model-router-actions { display: grid; gap: 6px; min-width: 170px; }</div><div class=\"diff-line diff-add\">+.model-auto-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; align-items: center; margin: 10px 0; padding: 12px; border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line)); border-radius: 10px; background: color-mix(in srgb, var(--accent) 5%, var(--surface)); }</div><div class=\"diff-line diff-add\">+.model-budget-card { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(100px, .45fr) minmax(100px, .45fr); gap: 10px; align-items: end; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.model-budget-card &gt; div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.model-budget-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.model-tool-cert-card { display: grid; gap: 9px; margin: 10px 0; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.model-tool-cert-card &gt; div span { display: block; margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.model-tool-cert-card label { display: grid; gap: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.mission-contract-form { display: grid; gap: 10px; }</div><div class=\"diff-line diff-add\">+.mission-contract-form &gt; label { display: grid; gap: 5px; color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-add\">+.contract-gates { display: grid; gap: 8px; margin-top: 12px; }</div><div class=\"diff-line diff-add\">+.contract-gate { padding: 11px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.contract-gate.is-passed { border-color: color-mix(in srgb, #16a34a 45%, var(--line)); }</div><div class=\"diff-line diff-add\">+.contract-gate.is-failed { border-color: color-mix(in srgb, #dc2626 50%, var(--line)); }</div><div class=\"diff-line diff-add\">+.contract-gate.is-pending { border-color: color-mix(in srgb, #d97706 48%, var(--line)); }</div><div class=\"diff-line diff-add\">+.contract-gate strong, .contract-gate span { display: block; }</div><div class=\"diff-line diff-add\">+.contract-gate span { margin-top: 4px; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.contract-criteria { display: grid; gap: 6px; margin-top: 8px; }</div><div class=\"diff-line diff-add\">+.contract-criterion { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; align-items: center; }</div><div class=\"diff-line diff-add\">+.model-auto-card strong, .model-auto-card span { display: block; }</div><div class=\"diff-line diff-add\">+.model-auto-card span, .model-ranking-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.model-ranking { display: grid; gap: 7px; margin: 10px 0; }</div><div class=\"diff-line diff-add\">+.model-ranking-row { padding: 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.model-router-row div, .model-router-row strong, .model-router-row span { min-width: 0; }</div><div class=\"diff-line diff-add\">+.model-router-row strong, .model-router-row span { display: block; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.model-router-row strong { font-size: 11px; }</div><div class=\"diff-line diff-add\">+.model-router-row span { margin-top: 4px; color: var(--muted); font-size: 10px; line-height: 1.4; }</div><div class=\"diff-line diff-add\">+.activity-row { padding: 9px 8px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-add\">+.activity-row strong { display: block; margin-bottom: 3px; font-size: 11px; }</div><div class=\"diff-line diff-add\">+.activity-row span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.settings-form { display: grid; gap: 14px; }</div><div class=\"diff-line diff-add\">+.settings-intro { display: grid; gap: 4px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.settings-intro strong { font-size: 13px; }</div><div class=\"diff-line diff-add\">+.settings-intro span { color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.settings-form fieldset { display: grid; gap: 10px; min-width: 0; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.settings-editor { width: 100%; min-height: 220px; resize: vertical; padding: 11px; border: 1px solid var(--strong-line); border-radius: 8px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; }</div><div class=\"diff-line diff-add\">+.inline-actions { display: flex; justify-content: flex-end; gap: 7px; }</div><div class=\"diff-line diff-add\">+.settings-form legend { padding: 0 6px; color: var(--ink); font-size: 12px; font-weight: 700; }</div><div class=\"diff-line diff-add\">+.settings-form label:not(.toggle-row) { display: grid; gap: 5px; }</div><div class=\"diff-line diff-add\">+.settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; }</div><div class=\"diff-line diff-add\">+.toggle-row { display: grid; grid-template-columns: 40px minmax(0, 1fr); align-items: center; min-height: 52px; padding: 7px 8px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); cursor: pointer; }</div><div class=\"diff-line diff-add\">+.toggle-row input { width: 20px; height: 20px; margin: 0; accent-color: var(--accent); }</div><div class=\"diff-line diff-add\">+.toggle-row span { display: grid; gap: 2px; }</div><div class=\"diff-line diff-add\">+.toggle-row strong { color: var(--ink); font-size: 13px; }</div><div class=\"diff-line diff-add\">+.toggle-row small { color: var(--muted); font-size: 12px; line-height: 1.35; }</div><div class=\"diff-line diff-add\">+.policy-list { display: flex; flex-wrap: wrap; gap: 6px; }</div><div class=\"diff-line diff-add\">+.policy-list span { padding: 5px 7px; border: 1px solid color-mix(in srgb, var(--accent) 32%, var(--line)); border-radius: 6px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--accent); font-size: 11px; font-weight: 700; }</div><div class=\"diff-line diff-add\">+.settings-actions { position: sticky; bottom: -24px; display: grid; grid-template-columns: 1fr 1.4fr; gap: 8px; margin: 0 -12px -24px; padding: 12px; border-top: 1px solid var(--line); background: color-mix(in srgb, var(--surface-subtle) 94%, transparent); backdrop-filter: blur(10px); }</div><div class=\"diff-line diff-add\">+.settings-actions button { min-width: 0; }</div><div class=\"diff-line diff-add\">+.settings-form.is-saving { opacity: .72; pointer-events: none; }</div><div class=\"diff-line diff-add\">+.credential-status { padding: 9px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-add\">+.credential-status.is-configured { border-color: color-mix(in srgb, var(--accent) 36%, var(--line)); color: var(--accent); }</div><div class=\"diff-line diff-add\">+.settings-note { margin: 0; color: var(--muted); font-size: 10px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.diagnostics-hero { display: grid; gap: 12px; padding: 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); box-shadow: var(--shadow-sm); }</div><div class=\"diff-line diff-add\">+.diagnostics-hero &gt; div { display: grid; gap: 4px; }</div><div class=\"diff-line diff-add\">+.diagnostics-hero strong { font-size: 14px; }</div><div class=\"diff-line diff-add\">+.diagnostics-hero span { color: var(--muted); font-size: 11px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.diagnostics-summary { margin: 12px 0; padding: 10px 12px; border-radius: 8px; background: var(--surface-subtle); color: var(--muted); font-size: 11px; }</div><div class=\"diff-line diff-add\">+.diagnostics-list { display: grid; gap: 7px; }</div><div class=\"diff-line diff-add\">+.diagnostic-row { display: grid; grid-template-columns: 10px minmax(0, 1fr); gap: 10px; align-items: start; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.diagnostic-dot { width: 10px; height: 10px; margin-top: 3px; border-radius: 50%; background: var(--muted); }</div><div class=\"diff-line diff-add\">+.diagnostic-row.is-pass .diagnostic-dot { background: #21845f; }</div><div class=\"diff-line diff-add\">+.diagnostic-row.is-warn .diagnostic-dot { background: var(--warning); }</div><div class=\"diff-line diff-add\">+.diagnostic-row.is-fail .diagnostic-dot { background: var(--danger); }</div><div class=\"diff-line diff-add\">+.diagnostic-copy { display: grid; gap: 3px; min-width: 0; }</div><div class=\"diff-line diff-add\">+.diagnostic-copy strong { font-size: 11px; }</div><div class=\"diff-line diff-add\">+.diagnostic-copy span { color: var(--muted); font-size: 10px; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.security-refresh { width: 100%; margin: 12px 0; }</div><div class=\"diff-line diff-add\">+.security-grid { display: grid; gap: 8px; }</div><div class=\"diff-line diff-add\">+.security-card { position: relative; padding: 12px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+.security-card &gt; strong { display: block; padding-right: 70px; font-size: 12px; }</div><div class=\"diff-line diff-add\">+.security-card &gt; span { position: absolute; top: 10px; right: 10px; padding: 3px 6px; border-radius: 5px; background: var(--surface-subtle); color: var(--muted); font-size: 9px; font-weight: 750; }</div><div class=\"diff-line diff-add\">+.security-card.is-pass &gt; span { color: #21845f; }</div><div class=\"diff-line diff-add\">+.security-card.is-warn &gt; span { color: var(--warning); }</div><div class=\"diff-line diff-add\">+.security-card.is-fail &gt; span { color: var(--danger); }</div><div class=\"diff-line diff-add\">+.security-card ul { margin: 9px 0 0; padding-left: 18px; color: var(--muted); font-size: 10px; line-height: 1.5; }</div><div class=\"diff-line diff-add\">+.integration-dialog { width: min(720px, calc(100vw - 28px)); max-height: min(860px, calc(100dvh - 28px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-add\">+.integration-dialog[open] { display: grid; grid-template-rows: auto minmax(0, 1fr) auto auto auto; }</div><div class=\"diff-line diff-add\">+.integration-dialog::backdrop { background: rgba(20, 22, 20, .66); backdrop-filter: blur(4px); }</div><div class=\"diff-line diff-add\">+.integration-dialog &gt; header, .integration-dialog &gt; footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-add\">+.integration-dialog &gt; header &gt; div { display: grid; gap: 2px; min-width: 0; }</div><div class=\"diff-line diff-add\">+.integration-dialog &gt; header small { color: var(--accent); font-size: 9px; font-weight: 800; letter-spacing: .08em; }</div><div class=\"diff-line diff-add\">+.integration-dialog &gt; header strong { overflow: hidden; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }</div><div class=\"diff-line diff-add\">+.integration-dialog &gt; footer { justify-content: flex-end; border-top: 1px solid var(--line); border-bottom: 0; }</div><div class=\"diff-line diff-add\">+.integration-content { min-height: 0; overflow-y: auto; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; padding: 14px; }</div><div class=\"diff-line diff-add\">+.integration-content section { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-subtle); }</div><div class=\"diff-line diff-add\">+.integration-content section &gt; strong { display: block; margin-bottom: 6px; color: var(--ink); font-size: 10px; text-transform: uppercase; letter-spacing: .04em; }</div><div class=\"diff-line diff-add\">+.integration-content section &gt; div { color: var(--muted); font-size: 11px; line-height: 1.5; overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.integration-content ul { margin: 0; padding-left: 17px; }</div><div class=\"diff-line diff-add\">+.integration-endpoint { position: relative; z-index: 1; display: grid; gap: 5px; margin: 0; padding: 10px 14px 12px; border-top: 1px solid var(--line); background: var(--surface); color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.integration-dialog &gt; .form-error { margin: 0 14px 10px; }</div><div class=\"diff-line diff-add\">+.integration-dialog &gt; .form-error:empty { display: none; }</div><div class=\"diff-line diff-add\">+#integration-error { color: var(--muted); }</div><div class=\"diff-line diff-add\">+#integration-error[data-error=\"true\"] { color: var(--danger); }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+.login-dialog { width: min(390px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-add\">+.login-dialog::backdrop { background: rgba(20, 22, 20, .58); }</div><div class=\"diff-line diff-add\">+.login-dialog form { display: grid; gap: 12px; padding: 22px; }</div><div class=\"diff-line diff-add\">+.login-brand { display: flex; align-items: center; gap: 11px; margin-bottom: 8px; }</div><div class=\"diff-line diff-add\">+.form-error { min-height: 18px; margin: 0; color: var(--danger); font-size: 12px; }</div><div class=\"diff-line diff-add\">+.app-error-boundary { position: fixed; z-index: 120; left: max(12px, env(safe-area-inset-left)); right: max(12px, env(safe-area-inset-right)); bottom: max(12px, env(safe-area-inset-bottom)); display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid color-mix(in srgb, var(--danger) 42%, var(--line)); border-radius: 14px; background: color-mix(in srgb, var(--surface) 94%, var(--danger)); box-shadow: 0 18px 46px rgba(0, 0, 0, .22); }</div><div class=\"diff-line diff-add\">+.app-error-boundary &gt; div:first-child { display: grid; gap: 4px; min-width: 0; }</div><div class=\"diff-line diff-add\">+.app-error-boundary span { color: var(--muted); overflow-wrap: anywhere; }</div><div class=\"diff-line diff-add\">+.app-error-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }</div><div class=\"diff-line diff-add\">+.app-error-boundary[data-fatal=\"true\"] { top: 50%; bottom: auto; max-width: 680px; margin-inline: auto; transform: translateY(-50%); }</div><div class=\"diff-line diff-add\">+@media (max-width: 640px) { .app-error-boundary { align-items: stretch; flex-direction: column; } .app-error-actions &gt; button { flex: 1 1 140px; min-height: 48px; } }</div><div class=\"diff-line diff-add\">+.action-dialog { width: min(460px, calc(100vw - 28px)); border: 1px solid var(--strong-line); border-radius: 8px; padding: 0; color: var(--ink); background: var(--surface); }</div><div class=\"diff-line diff-add\">+.action-dialog::backdrop { background: rgba(20, 22, 20, .58); }</div><div class=\"diff-line diff-add\">+.action-dialog form { display: grid; gap: 12px; padding: 18px; }</div><div class=\"diff-line diff-add\">+.action-dialog header, .action-dialog footer { display: flex; align-items: center; gap: 8px; }</div><div class=\"diff-line diff-add\">+.action-dialog header strong { flex: 1; }</div><div class=\"diff-line diff-add\">+.action-dialog footer { justify-content: flex-end; }</div><div class=\"diff-line diff-add\">+.action-copy { color: var(--muted); font-size: 12px; line-height: 1.45; }</div><div class=\"diff-line diff-add\">+.action-fields { display: grid; gap: 10px; }</div><div class=\"diff-line diff-add\">+.action-fields label { display: grid; gap: 5px; }</div><div class=\"diff-line diff-add\">+.action-fields textarea { width: 100%; min-height: 90px; resize: vertical; border: 1px solid var(--strong-line); border-radius: 6px; background: var(--surface); color: var(--ink); padding: 9px; }</div><div class=\"diff-line diff-add\">+.manual-dialog { width: min(1180px, calc(100vw - 32px)); height: min(860px, calc(100dvh - 32px)); max-width: none; max-height: none; padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 12px; color: var(--ink); background: var(--surface); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-add\">+.manual-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }</div><div class=\"diff-line diff-add\">+.manual-dialog[open] { display: grid; grid-template-rows: 58px minmax(0, 1fr); }</div><div class=\"diff-line diff-add\">+.manual-dialog &gt; header { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 5px 10px 5px 18px; border-bottom: 1px solid var(--line); background: var(--surface); }</div><div class=\"diff-line diff-add\">+.manual-dialog iframe { width: 100%; height: 100%; border: 0; background: var(--canvas); }</div><div class=\"diff-line diff-add\">+.file-preview-dialog { width: min(920px, calc(100vw - 32px)); height: min(760px, calc(100dvh - 32px)); padding: 0; overflow: hidden; border: 1px solid var(--strong-line); border-radius: 11px; background: var(--surface); color: var(--ink); box-shadow: var(--shadow-lg); }</div><div class=\"diff-line diff-add\">+.file-preview-dialog[open] { display: grid; grid-template-rows: 54px minmax(0, 1fr) 58px; }</div><div class=\"diff-line diff-add\">+.file-preview-dialog::backdrop { background: rgba(20, 22, 20, .62); backdrop-filter: blur(4px); }</div><div class=\"diff-line diff-add\">+.file-preview-dialog header, .file-preview-dialog footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 7px 12px 7px 16px; border-bottom: 1px solid var(--line); }</div><div class=\"diff-line diff-add\">+.file-preview-dialog footer { border-top: 1px solid var(--line); border-bottom: 0; color: var(--muted); font-size: 10px; }</div><div class=\"diff-line diff-add\">+.file-preview-dialog pre { min-width: 0; min-height: 0; overflow: auto; margin: 0; padding: 16px; background: var(--code); color: var(--code-ink); font: 12px/1.55 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre; tab-size: 2; }</div><div class=\"diff-line diff-add\">+.mobile-only, .mobile-nav { display: none; }</div><div class=\"diff-line diff-add\">+.resource-summary.is-loading::before { content: ''; display: inline-block; width: 10px; height: 10px; margin-right: 8px; border: 2px solid color-mix(in srgb, var(--accent) 25%, transparent); border-top-color: var(--accent); border-radius: 50%; animation: loading-spin .75s linear infinite; vertical-align: -1px; }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+@keyframes loading-spin { to { transform: rotate(360deg); } }</div><div class=\"diff-line diff-add\">+@keyframes status-pulse { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--warning) 38%, transparent); } 50% { box-shadow: 0 0 0 5px transparent; } }</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+@media (max-width: 1060px) {</div><div class=\"diff-line diff-add\">+  .app-shell.activity-open { grid-template-columns: 200px minmax(0, 1fr) minmax(380px, 42vw); }</div><div class=\"diff-line diff-add\">+  .app-shell { grid-template-columns: 240px minmax(0, 1fr); }</div><div class=\"diff-line diff-add\">+}</div><div class=\"diff-line diff-add\">+</div><div class=\"diff-line diff-add\">+@media (max-width: 760px) {</div><div class=\"diff-line diff-add\">+  .desktop-only { display: none; }</div><div class=\"diff-line diff-add\">+  .mobile-only { display: grid; }</div><div class=\"diff-line diff-add\">+  body { font-size: 15px; }</div><div class=\"diff-line diff-add\">+  button, select { min-height: 48px; }</div><div class=\"diff-line diff-add\">+  .icon-button { width: 48px; height: 48px; }</div><div class=\"diff-line diff-add\">+  .app-shell {</div><div class=\"diff-line diff-add\">+    position: relative;</div><div class=\"diff-line diff-add\">+    overflow: hidden;</div><div class=\"diff-line diff-add\">+  }</div><div class=\"diff-line diff-add\">+  .app-shell, .app-shell.activity-open {</div><div class=\"diff-line diff-add\">+    display: block;</div><div class=\"diff-line diff-add\">+    height: calc(var(--app-height) - var(--safe-top));</div><div class=\"diff-line diff-add\">+    padding-bottom: var(--mobile-nav-total);</div><div class=\"diff-line diff-add\">+  }</div><div class=\"diff-line diff-add\">+  .panel-view {</div><div class=\"diff-line diff-add\">+    position: absolute;</div><div class=\"diff-line diff-add\">+    inset: 0 0 var(--mobile-nav-total);</div><div class=\"diff-line diff-add\">+    display: none !important;</div><div class=\"diff-line diff-add\">+    width: 100%;</div><div class=\"diff-line diff-add\">+    min-height: 0;</div><div class=\"diff-line diff-add\">+    border: 0;</div><div class=\"diff-line diff-add\">+    overflow: hidden;</div><div class=\"diff-line diff-add\">+  }</div><div class=\"diff-line diff-add\">+  .panel-view.is-active { display: flex !important; flex-direction: column; z-index: 1; }</div><div class=\"diff-line diff-add\">+  .conversation.panel-view.is-active {</div><div class=\"diff-line diff-add\">+    display: grid !important;</div><div class=\"diff-line diff-add\">+    grid-template-rows: auto minmax(0, 1fr) auto;</div><div class=\"diff-line diff-add\">+  }</div><div class=\"diff-line diff-add\">+  /* Scroll solo en timeline; bandejas visibles encima del compositor */</div><div class=\"diff-line diff-add\">+  .conversation-scroll {</div><div class=\"diff-line diff-add\">+    min-height: 0;</div><div class=\"diff-line diff-add\">+    overflow: hidden;</div><div class=\"diff-line diff-add\">+    display: flex;</div><div class=\"diff-line diff-add\">+    flex-direction: column;</div><div class=\"diff-line diff-add\">+  }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .timeline {</div><div class=\"diff-line diff-add\">+    flex: 1 1 0;</div><div class=\"diff-line diff-add\">+    min-height: 0;</div><div class=\"diff-line diff-add\">+    overflow: auto;</div><div class=\"diff-line diff-add\">+    overscroll-behavior: contain;</div><div class=\"diff-line diff-add\">+    -webkit-overflow-scrolling: touch;</div><div class=\"diff-line diff-add\">+    padding: 14px 12px 18px;</div><div class=\"diff-line diff-add\">+  }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .turn-status-banner,</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .turn-watchdog { margin-inline: 10px; flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .execution-status { flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .approval-tray:not(:empty) { flex: 0 0 auto; padding: 0 10px 6px; }</div><div class=\"diff-line diff-add\">+  .conversation-scroll &gt; .change-review-tray:not(:empty) {</div><div class=\"diff-line diff-add\">+    flex: 0 1 auto;</div><div class=\"diff-line diff-add\">+    max-height: min(26dvh, 200px);</div><div class=\"diff-line diff-add\">+    overflow: auto;</div><div class=\"diff-line diff-add\">+    margin: 0 8px 8px;</div><div class=\"diff-line diff-add\">+    border: 1px solid var(--line);</div><div class=\"diff-line diff-add\">+    border-radius: 12px;</div><div class=\"diff-line diff-add\">+    background: var(--surface);</div><div class=\"diff-line diff-add\">+    box-shadow: var(--shadow-sm);</div><div class=\"diff-line diff-add\">+  }</div><div class=\"diff-line diff-add\">+  .empty-state { min-height: auto; padding-bottom: 4vh; }</div><div class=\"diff-line diff-add\">+  .rail.panel-view.is-active,</div><div class=\"diff-line diff-add\">+  .activity.panel-view.is-active { display: flex !important; flex-direction: column; overflow: hidden; }</div><div class=\"diff-line diff-add\">+  .rail.panel-view,</div><div class=\"diff-line diff-add\">+  .activity.panel-view { min-height: 0; }</div><div class=\"diff-line diff-add\">+  .rail .rail-view.is-active,</div><div class=\"diff-line diff-add\">+  .activity .control-hub { flex: 0 0 auto; }</div><div class=\"diff-line diff-add\">+  .activity .control-view.is-active { flex: 1 1 0; min-height: 0; overflow-y: auto; }</div><div class=\"diff-line diff-add\">+  .rail-tabs button { min-height: 48px; }</div><div class=\"diff-line diff-add\">+  .conversation-header { padding-inline: 10px; }</div><div class=\"diff-line diff-add\">+  .connection span:last-child { display: none; }</div><div class=\"diff-line diff-add\">+  .timeline-item.user { margin-left: 24px; }</div><div class=\"diff-line diff-add\">+  .approval-tray { padding: 0 14px; }</div><div class=\"diff-line diff-add\">+  .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }</div><div class=\"diff-line diff-add\">+  .turn-watchdog button { min-height: 48px; }</div><div class=\"diff-line diff-add\">+  .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }</div><div class=\"diff-line diff-add\">+  .turn-status-banner button { min-height: 48px; }</div><div class=\"diff-line diff-add\">+  .change-review-card &gt; header { align-items: stretch; flex-direction: column; }</div><div class=\"diff-line diff-add\">+  .change-review-bulk { display: grid; grid-template-columns: 1fr 1fr; }</div><div class=\"diff-line diff-add\">+  .change-review-bulk button, .change-file-actions button { min-height: 48px; }</div><div class=\"diff-line diff-add\">+  .change-file-actions { display: grid; grid-template-columns: 1fr 1fr; }</div><div class=\"diff-line diff-add\">+  .composer-wrap { padding: 6px 8px 4px; background: var(--surface); }</div><div class=\"diff-line diff-add\">+  .agent-toolbar { padding-top: 4px; gap: 4px; }</div><div class=\"diff-line diff-add\">+  .agent-toolbar &gt; #participant-select,</div><div class=\"diff-line diff-add\">+  .agent-toolbar &gt; #delegation-select,</div><div class=\"diff-line diff-add\">+  .agent-toolbar .smart-actions { display: none; }</div><div class=\"diff-line diff-add\">+  .agent-toolbar &gt; select { min-height: 40px; max-width: none; flex: 1 1 auto; }</div><div class=\"diff-line diff-ctx\">   .composer textarea { max-height: 120px; padding-top: 9px; }</div><div class=\"diff-line diff-ctx\">   .composer-tools { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: end; }</div><div class=\"diff-line diff-ctx\">   .attachment-command { width: 48px; height: 48px; }</div></div>"},{"id":"ch-3","status":"pending","callId":"tool_1cf4d4a4-c5a2-462f-8f1b-7313e1411bc","path":"static\\codex-suite\\style.css","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css\n@@ -637,10 +637,8 @@\n   .rail-tabs button { min-height: 48px; }\n   .conversation-header { padding-inline: 10px; }\n   .connection span:last-child { display: none; }\n-  .timeline { padding: 18px 12px; }\n   .timeline-item.user { margin-left: 24px; }\n   .approval-tray { padding: 0 14px; }\n-  .change-review-tray { max-height: 52dvh; padding: 0 10px; }\n   .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }\n   .turn-watchdog button { min-height: 48px; }\n   .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }","linesAdded":0,"linesRemoved":2,"diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\style.css</div><div class=\"diff-line diff-hunk\">@@ -637,10 +637,8 @@</div><div class=\"diff-line diff-ctx\">   .rail-tabs button { min-height: 48px; }</div><div class=\"diff-line diff-ctx\">   .conversation-header { padding-inline: 10px; }</div><div class=\"diff-line diff-ctx\">   .connection span:last-child { display: none; }</div><div class=\"diff-line diff-del\">-  .timeline { padding: 18px 12px; }</div><div class=\"diff-line diff-ctx\">   .timeline-item.user { margin-left: 24px; }</div><div class=\"diff-line diff-ctx\">   .approval-tray { padding: 0 14px; }</div><div class=\"diff-line diff-del\">-  .change-review-tray { max-height: 52dvh; padding: 0 10px; }</div><div class=\"diff-line diff-ctx\">   .turn-watchdog { align-items: stretch; flex-direction: column; margin-inline: 10px; }</div><div class=\"diff-line diff-ctx\">   .turn-watchdog button { min-height: 48px; }</div><div class=\"diff-line diff-ctx\">   .turn-status-banner { flex-direction: column; align-items: stretch; margin-inline: 10px; }</div></div>"},{"id":"ch-4","status":"pending","callId":"tool_b51d0ac0-0814-4282-bdb0-870183a1d3e","path":"static\\codex-suite\\index.html","type":"edit","diffString":"--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html\n+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html\n@@ -699,6 +699,6 @@\n     <footer><button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\">Analizar para este proyecto</button><button type=\"button\" class=\"primary-command\" id=\"activate-integration\">Habilitar</button></footer>\n   </dialog>\n \n-  <script type=\"module\" src=\"/static/codex-suite/app.js?v=57\"></script>\n+  <script type=\"module\" src=\"/static/codex-suite/app.js?v=58\"></script>\n </body>\n </html>","linesAdded":1,"linesRemoved":1,"diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html</div><div class=\"diff-line diff-meta\">+++ b/C:\\xampp\\htdocs\\cursor-mobile-bridge\\static\\codex-suite\\index.html</div><div class=\"diff-line diff-hunk\">@@ -699,6 +699,6 @@</div><div class=\"diff-line diff-ctx\">     &lt;footer&gt;&lt;button type=\"button\" class=\"secondary-command\" id=\"analyze-integration\"&gt;Analizar para este proyecto&lt;/button&gt;&lt;button type=\"button\" class=\"primary-command\" id=\"activate-integration\"&gt;Habilitar&lt;/button&gt;&lt;/footer&gt;</div><div class=\"diff-line diff-ctx\">   &lt;/dialog&gt;</div><div class=\"diff-line diff-ctx\"> </div><div class=\"diff-line diff-del\">-  &lt;script type=\"module\" src=\"/static/codex-suite/app.js?v=57\"&gt;&lt;/script&gt;</div><div class=\"diff-line diff-add\">+  &lt;script type=\"module\" src=\"/static/codex-suite/app.js?v=58\"&gt;&lt;/script&gt;</div><div class=\"diff-line diff-ctx\"> &lt;/body&gt;</div><div class=\"diff-line diff-ctx\"> &lt;/html&gt;</div></div>"},{"id":"ch-5","status":"pending","callId":"reconcile-static\\codex-suite\\service-worker.js","path":"static\\codex-suite\\service-worker.js","type":"edit","diffString":"--- a/static\\codex-suite\\service-worker.js\n+++ b/static\\codex-suite\\service-worker.js\n@@ -1,7 +1,7 @@\n-const CACHE = 'codex-suite-shell-v56';\n-const SHELL = [\n-  '/static/codex-suite/style.css?v=56',\n-  '/static/codex-suite/app.js?v=56',\n+const CACHE = 'codex-suite-shell-v58';\n+const SHELL = [\n+  '/static/codex-suite/style.css?v=58',\n+  '/static/codex-suite/app.js?v=58',\n   '/static/codex-suite/modules/core.js',\n   '/static/codex-suite/modules/settings.js',\n   '/static/codex-suite/modules/workspace.js',","linesAdded":4,"linesRemoved":4,"reconciled":true,"diffHtml":"<div class=\"diff-colored\"><div class=\"diff-line diff-meta\">--- a/static\\codex-suite\\service-worker.js</div><div class=\"diff-line diff-meta\">+++ b/static\\codex-suite\\service-worker.js</div><div class=\"diff-line diff-hunk\">@@ -1,7 +1,7 @@</div><div class=\"diff-line diff-del\">-const CACHE = 'codex-suite-shell-v56';</div><div class=\"diff-line diff-del\">-const SHELL = [</div><div class=\"diff-line diff-del\">-  '/static/codex-suite/style.css?v=56',</div><div class=\"diff-line diff-del\">-  '/static/codex-suite/app.js?v=56',</div><div class=\"diff-line diff-add\">+const CACHE = 'codex-suite-shell-v58';</div><div class=\"diff-line diff-add\">+const SHELL = [</div><div class=\"diff-line diff-add\">+  '/static/codex-suite/style.css?v=58',</div><div class=\"diff-line diff-add\">+  '/static/codex-suite/app.js?v=58',</div><div class=\"diff-line diff-ctx\">   '/static/codex-suite/modules/core.js',</div><div class=\"diff-line diff-ctx\">   '/static/codex-suite/modules/settings.js',</div><div class=\"diff-line diff-ctx\">   '/static/codex-suite/modules/workspace.js',</div></div>"}],"sensitivePending":[],"toolCount":80,"transcriptPath":"C:\\Users\\Paterna\\.cursor\\projects\\c-xampp-htdocs-cursor-mobile-bridge\\agent-transcripts\\ed876c2a-e53d-4c2c-a378-fbfec5e6168e\\ed876c2a-e53d-4c2c-a378-fbfec5e6168e.jsonl","notifyTitle":"Agente terminado","notifyBody":"Reviso el layout móvil actual y los cambios recientes del transcript para corregir qué tapa el contenido central.\nRestau"},"at":1786326625500}]}
