@bridge_gpt/mcp-server 0.2.16 → 0.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CONDUCTOR.md +75 -0
  2. package/README.md +2 -2
  3. package/build/agent-capabilities/probe-context.js +13 -3
  4. package/build/agent-capabilities/probes.js +262 -11
  5. package/build/agent-capabilities/reporter.js +1 -0
  6. package/build/agents.generated.js +3 -3
  7. package/build/backend-warnings.js +44 -0
  8. package/build/claude-settings.js +129 -0
  9. package/build/commands.generated.js +7 -6
  10. package/build/conductor/bridge-api-client.js +198 -18
  11. package/build/conductor/claude-hook.js +22 -4
  12. package/build/conductor/cli.js +76 -25
  13. package/build/conductor/deny-enforcement-preflight.js +96 -0
  14. package/build/conductor/doctor.js +183 -2
  15. package/build/conductor/done-gate.js +5 -0
  16. package/build/conductor/epic-reconcile.js +71 -14
  17. package/build/conductor/epic-runtime.js +839 -67
  18. package/build/conductor/epic-state.js +524 -63
  19. package/build/conductor/errors.js +156 -3
  20. package/build/conductor/event-accessors.js +252 -0
  21. package/build/conductor/file-scope-guard.js +201 -0
  22. package/build/conductor/github-mergeability.js +85 -0
  23. package/build/conductor/local-merge.js +47 -1
  24. package/build/conductor/merge-identity.js +41 -0
  25. package/build/conductor/merge-ledger.js +19 -72
  26. package/build/conductor/plan.js +12 -2
  27. package/build/conductor/pr-ci-producer.js +17 -2
  28. package/build/conductor/pr-discovery.js +11 -1
  29. package/build/conductor/producer-ledger.js +1 -1
  30. package/build/conductor/store.js +161 -18
  31. package/build/conductor/supervisor-config.js +4 -39
  32. package/build/conductor/supervisor-escalation.js +10 -26
  33. package/build/conductor/supervisor-ledger.js +5 -12
  34. package/build/conductor/supervisor-merge.js +32 -5
  35. package/build/conductor/supervisor-message-relay.js +2 -5
  36. package/build/conductor/supervisor-notification.js +1 -1
  37. package/build/conductor/supervisor-runtime.js +12 -54
  38. package/build/conductor/supervisor-state.js +4 -18
  39. package/build/conductor/supervisor-types.js +2 -2
  40. package/build/conductor/taxonomy.js +12 -0
  41. package/build/conductor/tools.js +28 -6
  42. package/build/conductor/worker-ledger-cli.js +244 -0
  43. package/build/conductor-bin.js +1800 -5166
  44. package/build/conductor-claude-hook-bin.js +4 -2
  45. package/build/doctor.js +40 -0
  46. package/build/executor/cli.js +229 -0
  47. package/build/executor/credentials.js +65 -0
  48. package/build/executor/deps.js +117 -0
  49. package/build/executor/env.js +79 -0
  50. package/build/executor/heartbeat.js +59 -0
  51. package/build/executor/http-client.js +131 -0
  52. package/build/executor/index.js +10 -0
  53. package/build/executor/job-errors.js +55 -0
  54. package/build/executor/job-log-registry.js +110 -0
  55. package/build/executor/job-runner.js +688 -0
  56. package/build/executor/job-types.js +60 -0
  57. package/build/executor/merge-job.js +155 -0
  58. package/build/executor/observation.js +123 -0
  59. package/build/executor/permissions.js +79 -0
  60. package/build/executor/preflight.js +144 -0
  61. package/build/executor/process.js +81 -0
  62. package/build/executor/prompt-spec.js +235 -0
  63. package/build/executor/results.js +134 -0
  64. package/build/executor/resume-pre-spawn.js +179 -0
  65. package/build/executor/runner.js +98 -0
  66. package/build/executor/terminal-mutation.js +34 -0
  67. package/build/executor/test-clock.js +109 -0
  68. package/build/executor/types.js +18 -0
  69. package/build/executor/verdict-artifact.js +53 -0
  70. package/build/executor/viewer-tabs.js +78 -0
  71. package/build/executor/watch-cli.js +113 -0
  72. package/build/executor/worker-command.js +106 -0
  73. package/build/executor/worker-finalization.js +97 -0
  74. package/build/executor/worker-log.js +92 -0
  75. package/build/executor/worktree-gc.js +134 -0
  76. package/build/executor/worktree-inspection.js +86 -0
  77. package/build/executor/worktree.js +103 -0
  78. package/build/index.js +13950 -9669
  79. package/build/install-bridge.js +25 -8
  80. package/build/install-doctor.js +387 -0
  81. package/build/mcp-invoke.js +19 -3
  82. package/build/mcp-provisioning.js +31 -25
  83. package/build/mcp-registration-doctor.js +27 -7
  84. package/build/mcp-server-invocation.js +152 -0
  85. package/build/pipelines.generated.js +31 -6
  86. package/build/readme.generated.js +1 -1
  87. package/build/regression-check.js +53 -1
  88. package/build/review-tickets.js +175 -21
  89. package/build/sfcc/reads-site-preference.js +52 -19
  90. package/build/start-tickets-conductor.js +47 -99
  91. package/build/start-tickets-prereqs.js +185 -4
  92. package/build/start-tickets.js +218 -180
  93. package/build/version.generated.js +1 -1
  94. package/build/visual-diff-worker.js +313 -0
  95. package/build/visual-diff.js +632 -0
  96. package/build/worktree-core.js +202 -0
  97. package/package.json +10 -6
  98. package/pipelines/review-ticket.json +24 -2
  99. package/public/css/main.min.css +3311 -1
  100. package/public/css/main.min.css.map +1 -1
  101. package/public/js/main.min.js +7924 -1
  102. package/public/js/main.min.js.map +1 -1
  103. package/smoke-test/SMOKE-TEST.md +5 -2
@@ -1,2 +1,3312 @@
1
- body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.header{background-color:var(--surface-color);box-shadow:var(--box-shadow);height:var(--header-height);left:0;position:fixed;top:0;width:100%;z-index:100}.header-container{align-items:center;display:flex;height:100%;justify-content:space-between;margin:0 auto;max-width:1200px;padding:0 1rem}.logo-container img{height:32px;width:auto}.nav-menu ul{display:flex;list-style-type:none}.nav-menu li{margin-left:2rem}.nav-menu a{color:var(--text-color);font-weight:500;text-decoration:none}.nav-menu a:hover{color:var(--primary-color)}.main-content{margin:2rem auto;max-width:1200px;padding:0 1rem}.container{background-color:var(--surface-color);border-radius:.5rem;box-shadow:var(--box-shadow);margin-bottom:2rem;padding:2rem}.section-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:2rem}.section-header h1{color:var(--text-color);font-size:1.5rem;font-weight:600}.form-intro{color:var(--secondary-color);font-size:.875rem;margin-bottom:1.5rem}.form-intro code{color:var(--text-color);font-size:.8125rem}.form-group{margin-bottom:1.5rem}.form-group-block{align-items:center;display:flex;justify-content:left}input[type=email],input[type=number],input[type=password],input[type=text],input[type=url],select,textarea{background-color:#fff;border:1px solid var(--border-color);border-radius:.25rem;font-size:1rem;padding:.5rem;width:100%}.projects-grid{display:grid;gap:1rem;grid-template-columns:1fr}.project-card{background-color:var(--surface-color);border:1px solid var(--border-color);border-radius:.5rem;padding:1.5rem;transition:transform .15s cubic-bezier(.4,0,.2,1),box-shadow .15s cubic-bezier(.4,0,.2,1)}.project-card:hover{box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);transform:translateY(-2px)}.project-card h2{color:var(--text-color);font-size:1.125rem;margin-bottom:1rem}.project-card p{color:var(--secondary-color);display:-webkit-box;font-size:.875rem;height:4.5rem;margin-bottom:1.5rem;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:3;-webkit-box-orient:vertical;line-clamp:3}.project-card .project-meta{align-items:center;color:var(--secondary-color);display:flex;font-size:.75rem;justify-content:space-between;margin-bottom:1rem}.project-card-actions{flex-direction:column;gap:.75rem}.project-card-actions-row{align-items:center;display:flex;gap:.5rem;justify-content:space-between;width:100%}.project-card-actions-row .btn{flex:1;margin:.5rem;text-align:center}.project-card-actions-secondary{justify-content:flex-end}.delete-link{color:var(--error-color);cursor:pointer;font-size:.875rem;font-weight:500;text-decoration:none;transition:color .15s ease}.delete-link:hover{color:#dc2626;text-decoration:underline}.modal{background-color:rgba(0,0,0,.4);height:100%;overflow:auto;width:100%}.modal-content{background-color:var(--surface-color);border-radius:.5rem;box-shadow:var(--box-shadow);margin:15% auto;max-width:500px;padding:2rem;width:80%}.close-modal{color:var(--secondary-color);cursor:pointer;float:right;font-size:1.5rem;font-weight:700}.close-modal:hover{color:var(--text-color)}#modal-body,#modal-title{margin-bottom:1rem}#modal-body{line-height:1.5}#modal-body ul{margin:.5rem 0;padding-left:1.5rem}#modal-body li{margin:.25rem 0}#modal-body p{margin:.5rem 0}.modal-actions{border-top:1px solid var(--border-color);display:flex;gap:.75rem;justify-content:flex-end;margin-top:1.5rem;padding-top:1rem}.modal-actions.hidden{display:none}.loading-overlay{align-items:center;background-color:hsla(0,0%,100%,.8);display:flex;flex-direction:column;height:100%;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:2000}.spinner{animation:spin 1s linear infinite;border:4px solid rgba(0,0,0,.1);border-radius:50%;border-top:4px solid var(--primary-color);height:40px;margin-bottom:1rem;width:40px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (max-width:768px){.projects-grid{grid-template-columns:1fr}.header-container{padding:0 1rem}.nav-menu li{margin-left:1rem}.container{padding:1.5rem}.modal-content{margin:10% auto;width:90%}}input.input-error,select.input-error,textarea.input-error{border-color:var(--error-color);box-shadow:0 0 0 .2rem rgba(239,68,68,.25)}.health-stat-value.config-healthy{color:#16a34a}.health-stat-value.config-errors{color:var(--error-color)}.health-stat-value.config-warnings{color:#f59e0b}.dismiss-warning-btn{background-color:transparent;border:1px solid var(--border-color);border-radius:.25rem;color:var(--secondary-color);cursor:pointer;font-size:.875rem;padding:.375rem .75rem;transition:all .2s ease}.dismiss-warning-btn:hover{background-color:#f9fafb;border-color:var(--secondary-color);color:var(--text-color)}.dismiss-warning-btn:active{background-color:#f3f4f6}.dismiss-warning-btn:disabled{cursor:not-allowed;opacity:.5}.pinecone-stat-label{color:var(--secondary-color);font-size:.875rem;margin-bottom:.25rem}.pinecone-stat-value{color:var(--text-color);font-size:1.5rem;font-weight:600}.pinecone-stat-value.stat-healthy{color:#16a34a}.pinecone-stat-value.stat-error{color:var(--error-color)}.pinecone-match-badge{border-radius:.25rem;display:inline-block;font-size:.75rem;font-weight:500;padding:.125rem .5rem}.pinecone-match-badge.match-yes{background-color:#dcfce7;color:#166534}.pinecone-match-badge.match-no{background-color:#fef2f2;color:#991b1b}.setup-detail-intro{color:var(--secondary-color);font-size:.9rem;line-height:1.5;margin:.5rem 0 1.5rem}.install-status-panel{background-color:#f9fafb;border:1px solid var(--border-color);border-radius:.25rem;margin-bottom:2rem;padding:1rem}.install-status-panel-title{color:var(--text-color);font-size:1rem;font-weight:500;margin-bottom:.75rem}.install-status-summary{align-items:center;color:var(--secondary-color);display:flex;flex-wrap:wrap;font-size:.875rem;gap:1rem;margin-bottom:1rem}.install-status-summary-count{color:var(--text-color);font-weight:600}.install-status-groups{display:flex;flex-direction:column;gap:1rem}.install-status-group{border-top:1px solid var(--border-color);padding-top:.75rem}.install-status-group-title{color:var(--text-color);font-size:.875rem;font-weight:500;margin-bottom:.5rem}.install-status-field-row{align-items:center;display:flex;flex-wrap:wrap;font-size:.875rem;gap:.5rem;padding:.375rem 0}.install-status-field-name{color:var(--text-color);font-weight:500}.install-status-field-value{color:var(--secondary-color);word-break:break-word}.install-status-field-confirm{color:#92400e;font-size:.75rem;font-style:italic}.install-status-error{background-color:#f9fafb;border:1px solid var(--border-color);border-radius:.25rem;color:var(--secondary-color);font-size:.875rem;padding:.75rem 1rem}.install-status-badge{border-radius:.25rem;display:inline-block;font-size:.75rem;font-weight:500;line-height:1.4;padding:.125rem .5rem;white-space:nowrap}.install-status-badge.status-set{background-color:#dcfce7;color:#166534}.install-status-badge.status-unset{background-color:#fef3c7;color:#92400e}.install-status-badge.status-loading,.install-status-badge.status-unavailable{background-color:#f1f5f9;color:var(--secondary-color)}.install-status-badge-slot{align-items:center;display:inline-flex;margin-left:6px;vertical-align:middle}.install-status-edit{background:none;border:none;color:var(--primary-color,#2563eb);cursor:pointer;font-size:.8rem;font-weight:500;padding:0;text-decoration:underline}.install-status-edit:hover{text-decoration:none}.install-status-edit:focus-visible{border-radius:.25rem;outline:2px solid var(--primary-color,#2563eb);outline-offset:2px}@media (max-width:600px){.install-status-summary{gap:.5rem}.install-status-field-row{align-items:flex-start;flex-direction:column}.install-status-badge-slot{margin-left:0;margin-top:.25rem}}.public-page-header{align-items:center;border-bottom:1px solid var(--border-color);display:flex;justify-content:flex-start;margin-bottom:1.5rem;padding:1rem 0}.public-page-header a{align-items:center;color:inherit;display:inline-flex;text-decoration:none}.public-page-logo{display:block;height:auto;max-width:240px;width:100%}@media (max-width:480px){.public-page-logo{max-width:180px}}.public-page-hero{padding:2rem 0 1.5rem}.public-page-hero h1{color:var(--text-color);font-size:1.75rem;font-weight:600;margin-bottom:1rem}.public-page-copy{color:var(--text-color);font-size:1rem;line-height:1.6}.public-page-copy p{margin-bottom:.75rem}.public-page-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.5rem}.public-page-actions a{display:inline-block;text-decoration:none}.public-page-footer{border-top:1px solid var(--border-color);color:var(--secondary-color);font-size:.875rem;margin-top:3rem;padding-top:1.5rem}.public-page-footer-nav{display:flex;flex-wrap:wrap;gap:1.5rem}.public-page-footer-nav a{color:var(--secondary-color);text-decoration:none}.public-page-footer-nav a:hover{color:var(--primary-color);text-decoration:underline}.legal-page-content{background-color:var(--surface-color);border-radius:.5rem;box-shadow:var(--box-shadow);max-width:800px;padding:2rem}.legal-page-content h1{color:var(--text-color);font-size:1.75rem;font-weight:600;margin-bottom:.5rem}.legal-page-content .last-updated{color:var(--secondary-color);font-size:.875rem;margin-bottom:1.5rem}.legal-section{margin-bottom:1.5rem}.legal-section h2{color:var(--text-color);font-size:1.25rem;font-weight:600;margin-bottom:.5rem}.legal-section p{color:var(--text-color);line-height:1.6;margin-bottom:.75rem}.save-container{display:flex;justify-content:center;margin-top:2rem}.save-container .btn{font-size:1rem;padding:.75rem 1.5rem}.form-static-text{background-color:var(--background-color);border:1px solid var(--border-color);border-radius:.25rem;color:var(--secondary-color);font-family:monospace;margin-top:.5rem;padding:.5rem;word-break:break-all}.header-title{color:var(--text-color);font-size:1.2rem;font-weight:600}.explain-link{color:var(--primary-color);margin-left:.5rem}.explain-link:hover{text-decoration:underline}.explanation-content{background-color:#eef2ff;border-left:4px solid var(--primary-color);border-radius:0 .25rem .25rem 0;color:#374151;flex-basis:100%;font-size:.875rem;margin-top:.5rem;padding:.75rem;width:100%}.project-card-actions{align-items:center;display:flex;justify-content:space-between}.explain-link{background-color:#6c757d;border-radius:50%;color:#fff;cursor:pointer;display:inline-block;font-size:.8em;font-weight:700;line-height:1.2;margin-left:6px;padding:1px 6px;text-decoration:none;vertical-align:middle}.explain-link:hover{background-color:#444;text-decoration:none}.explanation-content{background-color:#f8f9fa;border:1px solid #ced4da;border-radius:4px;color:#495057;font-size:.9em;line-height:1.4;margin-top:8px;padding:10px}#project-detail-container .explanation-content{display:block}#project-detail-container .explanation-content.hidden{display:none}.code-input{border:1px solid var(--border-color);border-radius:.25rem;font-family:Courier New,Courier,monospace;font-size:.9rem;line-height:1.4;padding:.75rem;width:100%}.form-error{color:#dc3545;font-size:.875em}input.input-error,select.input-error,textarea.input-error{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-error:not(:empty){display:block}.form-error{color:var(--error-color);display:none;font-size:.875rem;margin-top:.5rem}.form-error.visible{display:block}.mcp-docs-checkbox-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.mcp-doc-option{align-items:center;cursor:pointer;display:flex;gap:.5rem;line-height:1.4}.mcp-doc-checkbox{flex-shrink:0;margin:0}.mcp-doc-label{display:inline}.mcp-docs-empty-state{color:var(--secondary-color);font-size:.875rem;padding:.5rem .75rem}#project-detail-container .ci-followup-section,.mcp-docs-empty-state{border:1px solid var(--border-color);border-radius:.25rem;margin-top:.5rem}#project-detail-container .ci-followup-section{padding:.75rem}#project-detail-container .ci-followup-controls{display:flex;flex-direction:column;gap:.75rem;margin-top:.75rem}#project-detail-container .ci-followup-strategy-option{display:block;margin-bottom:.5rem}#project-detail-container .form-help{color:var(--secondary-color);font-size:.875rem;margin:.25rem 0 0}#project-detail-container .ci-followup-byte-counter{color:var(--secondary-color);font-size:.8125rem;margin-top:.25rem}#project-detail-container .ci-followup-byte-counter.over-limit{color:var(--error-color)}#project-detail-container .form-group-document-format{border-left:3px solid var(--border-color);padding-left:.75rem}#project-detail-container .document-format-help{color:var(--secondary-color);font-size:.875rem;line-height:1.4;margin:0 0 .5rem}.analysis-section{border-bottom:1px solid var(--border-color);margin-bottom:2rem;padding-bottom:1.5rem}#build-section{padding-top:2rem}.analysis-section:last-child{border-bottom:none}.analysis-section h4{font-size:1.1rem;font-weight:600;margin-bottom:1rem}.analysis-info-label{color:#555;font-style:italic;line-height:1.5;margin-bottom:10px}.reanalyze-container{font-size:.9em;margin-top:10px}.reanalyze-container p{margin:0}.reanalyze-container a{color:var(--primary-color);font-weight:500;text-decoration:none}.reanalyze-container a:hover{text-decoration:underline}.code-analysis{border-top:1px solid var(--border-color);margin-top:2rem;padding:1rem 0}.code-analysis h3{font-size:1.1rem;font-weight:600;margin-bottom:1rem}.code-analysis form{display:flex;flex-direction:column;gap:1rem;margin-bottom:1rem}.code-analysis form>div{display:flex;flex-direction:column;gap:.25rem}.code-analysis label{color:var(--text-color);font-weight:500}.code-analysis select,.code-analysis textarea{border:1px solid var(--border-color);border-radius:.25rem;font-family:inherit;padding:.5rem}.code-analysis select:focus,.code-analysis textarea:focus{border-color:var(--primary-color);box-shadow:0 0 0 3px rgba(37,99,235,.1);outline:none}.status-message{border-radius:.25rem;font-size:.875rem;margin-top:.5rem;padding:.5rem}.status-message.processing{background-color:#e0f2fe;border:1px solid #81d4fa;color:#0277bd}.status-message.success{background-color:#e8f5e8;border:1px solid #a5d6a7;color:#2e7d32}.status-message.error{background-color:#ffebee;border:1px solid #ef9a9a;color:#c62828}.textarea-wide{font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.875rem;line-height:1.4;resize:vertical;width:100%}.code-analysis button{align-self:flex-start;margin-top:.5rem}.planner-section{display:flex;flex-direction:column;gap:1rem;margin-top:1rem}select[multiple]{border:1px solid var(--border-color);border-radius:.25rem;min-height:180px}label{color:var(--text-color)}#learn-repository-section{border-bottom:1px solid var(--border-color);padding-bottom:2rem;*{margin-top:1rem}}.learn-section{border-bottom:1px solid #e5e7eb;margin-bottom:1.5rem;padding-bottom:1.5rem}.learn-section:last-of-type{border-bottom:none;margin-bottom:0}.learn-section.lr-state-idle{border-left:3px solid var(--border-color);padding-left:1rem}.learn-section.lr-state-draft,.learn-section.lr-state-review,.learn-section.lr-state-running{border-left:3px solid var(--primary-color);padding-left:1rem}.learn-section.lr-state-complete{border-left:3px solid var(--text-color);padding-left:1rem}.lr-reanalyze-link{display:inline-block}.lr-initial-mode-options{align-items:center;display:flex;flex-direction:row;gap:1.25rem}.lr-initial-mode-options label{display:inline;font-weight:400}.lr-in-progress-container{border:1px solid var(--border-color);border-radius:.375rem;margin:.5rem 0 1rem;padding:.75rem 1rem}.lr-reanalyze-confirm-btn+.lr-reanalyze-cancel-btn{margin-left:.5rem}#estimator-section{display:flex;flex-direction:column;gap:1rem}#estimator-section>div{border:1px solid var(--border-color);border-radius:.375rem;padding:1rem}#estimator-optimize{background-color:#f0f9ff;border-color:#0ea5e9}#estimator-running{background-color:#fef3c7;border-color:#f59e0b}#estimator-review{background-color:#f0fdf4;border-color:#22c55e}#estimator-loading{background-color:#f3f4f6;border-color:var(--border-color);text-align:center}#range-editor{margin:1rem 0}#range-json{background-color:#f8fafc;border:1px solid var(--border-color);border-radius:.375rem;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.875rem;line-height:1.5;min-height:300px;padding:.75rem;resize:vertical;width:100%}#range-json:focus{border-color:var(--primary-color);box-shadow:0 0 0 2px rgba(37,99,235,.1);outline:none}.estimator-actions{display:flex;gap:.5rem;margin-top:1rem}.estimator-actions .btn{flex:0 0 auto}@media (max-width:768px){#range-json{font-size:.75rem;min-height:200px}.estimator-actions{flex-direction:column}.estimator-actions .btn{width:100%}}.estimator-message{border-radius:.375rem;margin-bottom:1rem;padding:.75rem}.estimator-message.success{background-color:#dcfce7;border:1px solid #22c55e;color:#166534}.estimator-message.error{background-color:#fef2f2;border:1px solid #ef4444;color:#991b1b}.estimator-message.info{background-color:#eff6ff;border:1px solid #3b82f6;color:#1e40af}.draft-review-container .btn+.btn{margin-left:1.5rem}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;src:url(/public/fonts/SourceSansPro-Regular.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(/public/fonts/SourceSansPro-Italic.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:200;src:url(/public/fonts/SourceSansPro-ExtraLight.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:200;src:url(/public/fonts/SourceSansPro-ExtraLightItalic.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:300;src:url(/public/fonts/SourceSansPro-Light.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:300;src:url(/public/fonts/SourceSansPro-LightItalic.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:600;src:url(/public/fonts/SourceSansPro-SemiBold.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(/public/fonts/SourceSansPro-SemiBoldItalic.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;src:url(/public/fonts/SourceSansPro-Bold.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(/public/fonts/SourceSansPro-BoldItalic.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:900;src:url(/public/fonts/SourceSansPro-Black.ttf) format("truetype")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:900;src:url(/public/fonts/SourceSansPro-BlackItalic.ttf) format("truetype")}:root{--primary-color:#e2624b;--primary-dark:#c51616;--secondary-color:#6b7280;--light-grey:#eee;--secondary-button-background:#fdf4ec;--light-orange:#f2b27a;--dark-orange:#e17055;--background-color:#fffdf0;--surface-color:#fff;--text-color:#393d4e;--border-color:#e6e4d5;--error-color:#ef4444;--success-color:#10b981;--header-height:60px;--box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}*{box-sizing:border-box;margin:0;padding:0}body{background-color:var(--background-color);color:var(--text-color);font-family:Source Sans Pro,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;line-height:1.5;min-height:100vh;padding-top:var(--header-height)}.hidden{display:none!important}.btn{border:1px solid transparent;border-radius:4px;cursor:pointer;font-size:1rem;line-height:1.25rem;padding:.75rem 2rem;transition:background-color .3s ease}.btn-primary{background-color:var(--primary-color);color:#fff}.btn-primary:hover{background-color:var(--primary-dark)}.btn-secondary{background-color:var(--secondary-button-background);border:1px solid var(--light-orange);color:#333}.btn-secondary:hover{background-color:var(--dark-orange);color:#fff;text-shadow:1px 1px 2px rgba(0,0,0,.2)}.btn-sm{font-size:.75rem;padding:.2rem .5rem}.btn-danger{background-color:var(--error-color);color:#fff}.btn-danger:hover{background-color:#b91c1c}.btn:disabled{background-color:#d1d5db;cursor:not-allowed;opacity:.6}label{display:block;font-size:.875rem;font-weight:500;margin-bottom:.5rem}input[type=email],input[type=number],input[type=password],input[type=text],input[type=url],textarea{background-color:#fff;border:1px solid var(--border-color);border-radius:.25rem;font-size:1rem;padding:.5rem;width:100%}input[type=number]{width:auto}textarea{min-height:100px;resize:vertical}.required{color:var(--error-color)}.form-group.checkbox{align-items:center;display:flex;flex-wrap:wrap}.form-group.checkbox input{margin-right:.5rem}.form-group.checkbox label{margin-bottom:0}.modal{align-items:center;background:rgba(0,0,0,.4);display:none;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:1000}#get-started-container .get-started-intro{color:var(--text-muted,#666);line-height:1.6;margin-bottom:1.5rem;max-width:720px}#get-started-container .get-started-section{background:var(--card-bg,#fff);border:1px solid var(--border-color,#e0e0e0);border-radius:8px;margin-bottom:1.5rem;padding:1.5rem}#get-started-container .get-started-section h2{font-size:1.15rem;margin-bottom:.75rem;margin-top:0}.install-key-panel{background:var(--code-bg,#f8f9fa);border:1px solid var(--border-color,#e0e0e0);border-radius:8px;margin:.75rem 0 1.25rem;padding:1rem 1.25rem}.install-key-header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between}.install-key-header h3{font-size:1rem;margin:0 0 .25rem}.install-key-header p{color:var(--text-muted,#666);font-size:.88rem;margin:0;max-width:48ch}.install-key-actions{align-items:center;display:flex;flex-shrink:0;gap:.6rem}.install-key-status{color:var(--success-color,#28a745);font-size:.82rem}.install-key-error{color:var(--danger-color,#dc3545);font-size:.85rem;margin:.75rem 0 0}.install-key-error.hidden{display:none}.install-key-result{margin-top:1rem}.install-key-result.hidden{display:none}.install-key-panel .key-warning{background:#fff3cd;border:1px solid #ffc107;border-radius:4px;color:#856404;font-size:.88rem;font-weight:600;margin-bottom:.75rem;padding:.75rem}.install-key-panel .key-display{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem}.install-key-panel .key-display input{background:#fff;border:1px solid var(--border-color,#dee2e6);border-radius:4px;flex:1;font-family:monospace;font-size:.85rem;min-width:200px;padding:.5rem .75rem}.bapi-api-key-slot-filled{background:#d4edda;color:#155724;font-style:normal}#editor-tabs{border-bottom:2px solid var(--border-color,#e0e0e0);display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;padding-bottom:.25rem}.snippet-tab-btn{background:none;border:none;border-bottom:3px solid transparent;border-radius:4px 4px 0 0;color:var(--text-muted,#666);cursor:pointer;font-size:.9rem;padding:.4rem .8rem;transition:color .15s,border-color .15s}.snippet-tab-btn:hover{color:var(--primary-color,#007bff)}.snippet-tab-btn.active,.snippet-tab-btn[aria-selected=true]{border-bottom-color:var(--primary-color,#007bff);color:var(--primary-color,#007bff);font-weight:600}.snippet-tab-btn:focus-visible{outline:2px solid var(--primary-color,#007bff);outline-offset:2px}.snippet-panel{margin-bottom:.5rem}.snippet-panel.hidden{display:none}.snippet-meta{color:var(--text-muted,#888);font-family:monospace;font-size:.78rem;margin-bottom:.4rem}.snippet-notes{color:var(--text-muted,#666);font-size:.85rem;font-style:italic;margin-bottom:.5rem}.snippet-panel pre{background:var(--code-bg,#f5f5f5);border:1px solid var(--border-color,#ddd);border-radius:6px;margin-bottom:.5rem;max-width:100%;overflow-x:auto;padding:1rem}.snippet-panel code{font-family:Courier New,Courier,monospace;font-size:.82rem;line-height:1.5;overflow-wrap:normal;white-space:pre;word-break:normal}.bapi-api-key-slot{background:#fff3cd;border-radius:3px;color:#856404;font-style:italic;font-weight:600;padding:0 2px}.snippet-copy-row{align-items:center;display:flex;gap:.5rem;margin-top:.25rem}.copy-status{color:var(--success-color,#28a745);font-size:.82rem;min-width:60px}.install-bridge-notice{background:#fff8e1;border-left:4px solid #f59e0b;border-radius:4px;font-size:.9rem;line-height:1.5;margin-bottom:1rem;padding:.75rem 1rem}.handoff-copy-row{align-items:center;display:flex;flex-wrap:wrap;gap:.75rem}.handoff-command{background:var(--code-bg,#f5f5f5);border:1px solid var(--border-color,#ddd);border-radius:4px;font-family:monospace;font-size:.95rem;padding:.3rem .6rem}.status-summary{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem}.status-total{color:var(--text-muted,#666);font-size:.85rem}.status-chip{border-radius:12px;display:inline-block;font-size:.8rem;font-weight:600;letter-spacing:.02em;padding:.2rem .6rem}.status-set{background:#d4edda;color:#155724}.status-unset{background:#f8d7da;color:#721c24}.status-group{margin-bottom:1rem}.status-group-title{color:var(--text-muted,#555);font-size:.9rem;font-weight:600;letter-spacing:.05em;margin:0 0 .4rem;text-transform:uppercase}.status-field-row{align-items:baseline;border-bottom:1px solid var(--border-color,#eee);display:flex;flex-wrap:wrap;gap:.6rem;padding:.25rem 0}.status-field-row:last-child{border-bottom:none}.status-field-name{font-family:monospace;font-size:.88rem}.status-field-value{color:var(--text-muted,#888);font-family:monospace;font-size:.8rem;word-break:break-all}.status-empty{color:var(--text-muted,#888);font-size:.9rem;font-style:italic}.get-started-state{padding:1rem 0}.get-started-state.hidden{display:none}.skeleton{animation:skeleton-shimmer 1.4s infinite;background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0 50%,#f0f0f0 75%);background-size:200% 100%;border-radius:6px;margin-bottom:.75rem}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-tabs{height:36px;width:70%}.skeleton-code{height:160px;width:100%}.skeleton-status{height:80px;width:100%}.get-started-error-msg{color:var(--danger-color,#dc3545);margin-bottom:.75rem}.get-started-footer{margin-top:1rem;text-align:center}@media (max-width:600px){.snippet-tab-btn{font-size:.82rem;padding:.35rem .55rem}.handoff-copy-row{align-items:flex-start}.handoff-copy-row,.install-key-header{flex-direction:column}.install-key-actions{width:100%}.install-key-actions .btn{flex:1}.install-key-panel .key-display{align-items:stretch;flex-direction:column}.install-key-panel .key-display .btn,.install-key-panel .key-display input{width:100%}.status-field-row{flex-direction:column;gap:.2rem}}.collapsible-drawers{margin-bottom:2rem}.drawer{border:1px solid var(--border-color);border-radius:.25rem;margin-bottom:1rem;overflow:hidden}.drawer-header{align-items:center;background-color:#f9fafb;cursor:pointer;display:flex;justify-content:space-between;padding:1rem}.drawer-header h2{font-size:1rem;font-weight:500}.toggle-drawer{background:none;border:none;cursor:pointer;font-size:1rem;transition:transform var(--drawer-transition)}.drawer-content{border-top:1px solid var(--border-color);padding:1rem}.learn-repository-jobs-section,.parse-repository-jobs-section{display:flex;flex-direction:column;gap:1.5rem}.operation-last-ran{font-size:.875rem;margin-top:.5rem}.parse-schedule-status{border:1px solid var(--border-color);border-radius:4px;font-size:.875rem;margin-top:.75rem;padding:.75rem}.parse-schedule-status--active{border-color:var(--success-color);color:var(--success-color)}.parse-schedule-status--empty,.parse-schedule-status--paused{border-color:var(--dark-orange);color:var(--dark-orange)}.parse-schedule-next-run{color:var(--text-color);display:block;margin-top:.25rem}.parse-schedule-actions{display:flex;gap:.5rem;margin-top:.5rem}.operation-row{border-bottom:1px solid var(--border-color);display:flex;flex-direction:column;padding-bottom:1rem}.operation-row:last-child{border-bottom:none;padding-bottom:0}.operation-item{display:flex;flex-direction:column;gap:.5rem}.operation-item .btn{align-self:flex-start}.operation-label{color:var(--secondary-color);font-size:.875rem;line-height:1.4}.schedule-controls{align-items:flex-end;display:flex;gap:1rem;margin-top:.5rem}.schedule-controls .form-group{margin-bottom:0}.schedule-controls .form-group.inline{display:flex;flex-direction:column;gap:.25rem}.schedule-controls .form-group.inline label{color:var(--secondary-color);font-size:.75rem}.schedule-controls .form-group.inline input,.schedule-controls .form-group.inline select{font-size:.875rem;min-width:120px;padding:.375rem .5rem;width:auto}.integrity-error,.integrity-loading{color:var(--secondary-color);padding:1rem;text-align:center}.integrity-error{background-color:#fef2f2;border:1px solid #fecaca;border-radius:.25rem;color:var(--error-color)}.integrity-summary{background-color:#f9fafb;border-radius:.25rem;display:flex;gap:2rem;margin-bottom:1.5rem;padding:1rem}.integrity-stat{align-items:center;display:flex;flex-direction:column}.integrity-stat-label{color:var(--secondary-color);font-size:.875rem;margin-bottom:.25rem}.integrity-stat-value{color:var(--text-color);font-size:1.5rem;font-weight:600}.integrity-stat-value.integrity-healthy{color:#16a34a}.integrity-empty-state{background-color:#f0fdf4;border:1px solid #bbf7d0;border-radius:.25rem;color:#166534;padding:1.5rem;text-align:center}.integrity-empty-state p{font-weight:500;margin:0}.integrity-table{border-collapse:collapse;margin-top:1rem;width:100%}.integrity-table td,.integrity-table th{border-bottom:1px solid var(--border-color);padding:.75rem;text-align:left}.integrity-table th{background-color:#f9fafb;color:var(--secondary-color);font-size:.875rem;font-weight:500}.integrity-table td{font-size:.875rem;vertical-align:top}.integrity-table tbody tr:hover{background-color:#f9fafb}.integrity-file-list{background-color:#f1f5f9;border-radius:4px;font-family:monospace;font-size:.8rem;list-style:none;margin:0;max-height:150px;overflow-y:auto;padding:.5rem}.integrity-file-list li{padding:.125rem 0;word-break:break-all}.integrity-file-list li:not(:last-child){border-bottom:1px solid #e2e8f0}.integrity-more-files{color:var(--secondary-color);font-size:.8rem;font-style:italic;margin-top:.25rem}#integrity-issues-container h3{color:var(--text-color);font-size:1rem;font-weight:500;margin-bottom:.5rem}.config-health-error,.config-health-loading{color:var(--secondary-color);padding:1rem;text-align:center}.config-health-error{background-color:#fef2f2;border:1px solid #fecaca;border-radius:.25rem;color:var(--error-color)}.health-stats{background-color:#f9fafb;border-radius:.25rem;display:flex;gap:2rem;margin-bottom:1.5rem;padding:1rem}.health-stat{align-items:center;display:flex;flex-direction:column}.health-stat-label{color:var(--secondary-color);font-size:.875rem;margin-bottom:.25rem}.health-stat-value{color:var(--text-color);font-size:1.5rem;font-weight:600}.health-stat-value.health-configured{color:#16a34a}.health-stat-value.health-errors{color:var(--error-color)}.health-stat-value.health-warnings{color:#f59e0b}.config-health-all-good{background-color:#f0fdf4;border:1px solid #bbf7d0;border-radius:.25rem;color:#166534;padding:1.5rem;text-align:center}.config-health-all-good p{font-weight:500;margin:0}.config-health-table{border-collapse:collapse;margin-top:1rem;width:100%}.config-health-table td,.config-health-table th{border-bottom:1px solid var(--border-color);padding:.75rem;text-align:left}.config-health-table th{background-color:#f9fafb;color:var(--secondary-color);font-size:.875rem;font-weight:500}.config-health-table td{font-size:.875rem;vertical-align:top}.config-health-table tbody tr:hover{background-color:#f9fafb}.config-status-badge{border-radius:.25rem;display:inline-block;font-size:.75rem;font-weight:500;padding:.25rem .5rem;text-transform:uppercase}.config-status-badge.status-invalid,.config-status-badge.status-missing{background-color:#fef2f2;color:#991b1b}.btn-text{background-color:transparent;border:1px solid var(--border-color);border-radius:.25rem;color:var(--secondary-color);cursor:pointer;font-size:.875rem;padding:.375rem .75rem;transition:all .2s ease}.btn-text:hover{background-color:#f9fafb;border-color:var(--secondary-color);color:var(--text-color)}.btn-text:active{background-color:#f3f4f6}.btn-text:disabled{cursor:not-allowed;opacity:.5}#config-errors-container h3,#config-warnings-container h3{color:var(--text-color);font-size:1rem;font-weight:500;margin-bottom:.5rem;margin-top:1.5rem}#config-errors-container h3{color:var(--error-color)}#config-warnings-container h3{color:#f59e0b}.pinecone-health-actions{align-items:center;display:flex;gap:1rem;margin-bottom:1rem}.last-run-text{color:var(--secondary-color);font-size:.875rem}.pinecone-health-error,.pinecone-health-loading{color:var(--secondary-color);padding:1rem;text-align:center}.pinecone-health-error{background-color:#fef2f2;border:1px solid #fecaca;border-radius:.25rem;color:var(--error-color)}.pinecone-health-no-results{background-color:#f9fafb;border:1px solid var(--border-color);border-radius:.25rem;color:var(--secondary-color);padding:1rem;text-align:center}.pinecone-health-no-results p{margin:0}.pinecone-health-status-container{align-items:center;display:flex;gap:.5rem;margin-bottom:1rem}.pinecone-health-status{border-radius:.25rem;display:inline-block;font-size:.75rem;font-weight:600;padding:.25rem .75rem;text-transform:uppercase}.pinecone-health-status.status-healthy{background-color:#dcfce7;color:#166534}.pinecone-health-status.status-error{background-color:#fef2f2;color:#991b1b}.pinecone-health-status.status-warning{background-color:#fef3c7;color:#92400e}.pinecone-health-status.status-running{background-color:#dbeafe;color:#1e40af}.pinecone-health-summary{background-color:#f9fafb;border-radius:.25rem;display:flex;flex-wrap:wrap;gap:2rem;margin-bottom:1.5rem;padding:1rem}.pinecone-health-stat{align-items:center;display:flex;flex-direction:column;min-width:80px}.pinecone-health-stat-label{color:var(--secondary-color);font-size:.875rem;margin-bottom:.25rem}.pinecone-health-stat-value{color:var(--text-color);font-size:1.5rem;font-weight:600}.pinecone-health-all-good{background-color:#f0fdf4;border:1px solid #bbf7d0;border-radius:.25rem;color:#166534;padding:1.5rem;text-align:center}.pinecone-health-all-good p{font-weight:500;margin:0}.pinecone-health-table{border-collapse:collapse;margin-top:1rem;table-layout:fixed;width:100%}.pinecone-health-table td,.pinecone-health-table th{border-bottom:1px solid var(--border-color);padding:.75rem;text-align:left}.pinecone-health-table th{background-color:#f9fafb;color:var(--secondary-color);font-size:.875rem;font-weight:500}.pinecone-health-table td{font-size:.875rem;vertical-align:middle;word-wrap:break-word}.pinecone-health-table tbody tr:hover{background-color:#f9fafb}#pinecone-namespace-container .pinecone-health-table td:first-child,#pinecone-namespace-container .pinecone-health-table th:first-child{width:25%}#pinecone-namespace-container .pinecone-health-table td:nth-child(2),#pinecone-namespace-container .pinecone-health-table th:nth-child(2){width:15%}#pinecone-namespace-container .pinecone-health-table td:nth-child(3),#pinecone-namespace-container .pinecone-health-table td:nth-child(4),#pinecone-namespace-container .pinecone-health-table td:nth-child(5),#pinecone-namespace-container .pinecone-health-table th:nth-child(3),#pinecone-namespace-container .pinecone-health-table th:nth-child(4),#pinecone-namespace-container .pinecone-health-table th:nth-child(5){text-align:right;width:12%}#pinecone-namespace-container .pinecone-health-table td:nth-child(6),#pinecone-namespace-container .pinecone-health-table th:nth-child(6){text-align:center;width:12%}#pinecone-failures-container .pinecone-health-table td:first-child,#pinecone-failures-container .pinecone-health-table th:first-child{width:20%}#pinecone-failures-container .pinecone-health-table td:nth-child(2),#pinecone-failures-container .pinecone-health-table th:nth-child(2){width:15%}#pinecone-failures-container .pinecone-health-table td:nth-child(3),#pinecone-failures-container .pinecone-health-table th:nth-child(3){font-family:monospace;font-size:.8rem;width:30%}#pinecone-failures-container .pinecone-health-table td:nth-child(4),#pinecone-failures-container .pinecone-health-table th:nth-child(4){width:35%}#pinecone-failures-container h3,#pinecone-namespace-container h3{color:var(--text-color);font-size:1rem;font-weight:500;margin-bottom:.5rem;margin-top:1.5rem}#pinecone-failures-container h3{color:var(--error-color)}.pinecone-regenerate-section{border-top:1px solid var(--border-color);margin-top:1.5rem;padding-top:1.5rem}.pinecone-regenerate-section h4{color:var(--text-color);font-size:.95rem;font-weight:600;margin:0 0 .5rem}.regenerate-instructions{color:var(--secondary-color);font-size:.875rem;margin:0 0 .75rem}.regenerate-checkboxes{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.regenerate-checkboxes .checkbox-label{align-items:center;cursor:pointer;display:flex;font-size:.875rem;gap:.5rem}.regenerate-checkboxes .checkbox-label input[type=checkbox]{accent-color:var(--primary-color);cursor:pointer;height:16px;width:16px}.regenerate-checkboxes .checkbox-label span{color:var(--text-color)}.regenerate-checkboxes .namespace-name{background-color:#f1f5f9;border-radius:.25rem;color:var(--secondary-color);font-family:monospace;font-size:.8rem;padding:.125rem .375rem}.regenerate-checkboxes .metadata-warning{color:#f59e0b;font-size:.75rem;margin-left:.25rem}.info-tooltip-btn{align-items:center;background:none;border:none;color:#6b7280;cursor:pointer;display:inline-flex;font-size:.75rem;height:18px;justify-content:center;margin-left:.375rem;padding:0;transition:color .15s ease;vertical-align:middle;width:18px}.info-tooltip-btn:hover{color:var(--primary-color)}.namespace-info{background-color:#f3f4f6;border-left:3px solid var(--primary-color);border-radius:0 .25rem .25rem 0;color:#4b5563;font-size:.8rem;line-height:1.4;margin:.375rem 0 .75rem 1.5rem;padding:.625rem .75rem}.namespace-info.hidden{display:none}.namespace-info strong{color:var(--text-color)}.regenerate-note{align-items:flex-start;background-color:#eff6ff;border:1px solid #bfdbfe;border-radius:.25rem;display:flex;gap:.5rem;margin-bottom:1rem;padding:.625rem .75rem}.regenerate-note .note-label{color:#1e40af;font-size:.8rem;font-weight:600}.regenerate-note .note-text{color:#1e40af;font-size:.8rem;line-height:1.4}.regenerate-warning{align-items:flex-start;background-color:#fef3c7;border:1px solid #fcd34d;border-radius:.25rem;display:flex;gap:.5rem;margin-bottom:1rem;padding:.75rem}.regenerate-warning .warning-icon{font-size:1rem;line-height:1}.regenerate-warning .warning-text{color:#92400e;font-size:.8rem;line-height:1.4}.btn-warning{background-color:#f59e0b;border:1px solid #d97706;color:#fff}.btn-warning:hover{background-color:#d97706;border-color:#b45309}.btn-warning:active{background-color:#b45309}.btn-warning:disabled{background-color:#fcd34d;border-color:#fcd34d;cursor:not-allowed}.learn-repo-schedule-section{border-radius:6px;margin-top:.75rem;padding:1rem}.learn-repo-schedule-section h4{margin:0 0 .25rem}.learn-repo-instructions{color:#6b7280;font-size:.85rem;margin-bottom:.75rem}.learn-repo-analysis-types{border:none;display:grid;gap:.25rem 1rem;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));margin:0 0 .75rem;padding:0}.learn-repo-analysis-types legend{font-weight:600;margin-bottom:.25rem}.learn-repo-actions{margin-top:.5rem}.learn-repo-message{color:#1f2937;font-size:.875rem;margin-top:.5rem}.learn-repo-schedule-status{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}.learn-repo-schedule-row{background-color:#f9fafb;border:1px solid #e5e7eb;border-radius:4px;padding:.75rem}.learn-repo-schedule-meta{color:#4b5563;font-size:.85rem;margin:.25rem 0}.learn-repo-row-actions{display:flex;gap:.5rem;margin-top:.5rem}.learn-repo-status-running{color:#2563eb}.learn-repo-status-success{color:#15803d}.learn-repo-status-failure{color:#b91c1c}.learn-repo-status-idle{color:#6b7280}.learn-repo-schedule-row details{font-size:.85rem;margin-top:.5rem}.learn-repo-schedule-row details pre{background-color:#fff;border:1px solid #e5e7eb;border-radius:3px;margin:.25rem 0 0;padding:.5rem;white-space:pre-wrap}.form-error{color:#b91c1c;font-size:.85rem;margin-top:.25rem}
1
+ /*!*************************************************************************************************!*\
2
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/setup.css ***!
3
+ \*************************************************************************************************/
4
+ /* Setup page CSS */
5
+
6
+ /* Reset and base styles */
7
+ * {
8
+ margin: 0;
9
+ padding: 0;
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ body {
14
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
15
+ background-color: var(--background-color);
16
+ color: var(--text-color);
17
+ line-height: 1.5;
18
+ min-height: 100vh;
19
+ padding-top: var(--header-height);
20
+ }
21
+
22
+ /* Header styles */
23
+ .header {
24
+ position: fixed;
25
+ top: 0;
26
+ left: 0;
27
+ width: 100%;
28
+ height: var(--header-height);
29
+ background-color: var(--surface-color);
30
+ box-shadow: var(--box-shadow);
31
+ z-index: 100;
32
+ }
33
+
34
+ .header-container {
35
+ display: flex;
36
+ justify-content: space-between;
37
+ align-items: center;
38
+ max-width: 1200px;
39
+ height: 100%;
40
+ margin: 0 auto;
41
+ padding: 0 1rem;
42
+ }
43
+
44
+ .logo-container img {
45
+ height: 32px;
46
+ width: auto;
47
+ }
48
+
49
+ .nav-menu ul {
50
+ display: flex;
51
+ list-style-type: none;
52
+ }
53
+
54
+ .nav-menu li {
55
+ margin-left: 2rem;
56
+ }
57
+
58
+ .nav-menu a {
59
+ color: var(--text-color);
60
+ text-decoration: none;
61
+ font-weight: 500;
62
+ }
63
+
64
+ .nav-menu a:hover {
65
+ color: var(--primary-color);
66
+ }
67
+
68
+ /* Main content area */
69
+ .main-content {
70
+ max-width: 1200px;
71
+ margin: 2rem auto;
72
+ padding: 0 1rem;
73
+ }
74
+
75
+ /* Container styles */
76
+ .container {
77
+ background-color: var(--surface-color);
78
+ border-radius: 0.5rem;
79
+ padding: 2rem;
80
+ box-shadow: var(--box-shadow);
81
+ margin-bottom: 2rem;
82
+ }
83
+
84
+ .hidden {
85
+ display: none !important;
86
+ }
87
+
88
+ /* Section header */
89
+ .section-header {
90
+ display: flex;
91
+ justify-content: space-between;
92
+ align-items: center;
93
+ margin-bottom: 2rem;
94
+ }
95
+
96
+ .section-header h1 {
97
+ font-size: 1.5rem;
98
+ font-weight: 600;
99
+ color: var(--text-color);
100
+ }
101
+
102
+ /* Form styles */
103
+ .form-intro {
104
+ font-size: 0.875rem;
105
+ color: var(--secondary-color);
106
+ margin-bottom: 1.5rem;
107
+ }
108
+
109
+ .form-intro code {
110
+ font-size: 0.8125rem;
111
+ color: var(--text-color);
112
+ }
113
+
114
+ .form-group {
115
+ margin-bottom: 1.5rem;
116
+ }
117
+
118
+ .form-group-block {
119
+ display: flex;
120
+ justify-content: left;
121
+ align-items: center;
122
+ }
123
+
124
+ label {
125
+ display: block;
126
+ font-size: 0.875rem;
127
+ font-weight: 500;
128
+ margin-bottom: 0.5rem;
129
+ }
130
+
131
+ input[type="text"],
132
+ input[type="password"],
133
+ input[type="email"],
134
+ input[type="url"],
135
+ input[type="number"],
136
+ select,
137
+ textarea {
138
+ width: 100%;
139
+ padding: 0.5rem;
140
+ font-size: 1rem;
141
+ border: 1px solid var(--border-color);
142
+ border-radius: 0.25rem;
143
+ background-color: #fff;
144
+ }
145
+
146
+ input[type="number"] {
147
+ width: auto;
148
+ }
149
+
150
+ textarea {
151
+ min-height: 100px;
152
+ resize: vertical;
153
+ }
154
+
155
+ .required {
156
+ color: var(--error-color);
157
+ }
158
+
159
+ /* Checkbox styling */
160
+ .form-group.checkbox {
161
+ display: flex;
162
+ align-items: center;
163
+ flex-wrap: wrap;
164
+ }
165
+
166
+ .form-group.checkbox input {
167
+ margin-right: 0.5rem;
168
+ }
169
+
170
+ .form-group.checkbox label {
171
+ margin-bottom: 0;
172
+ }
173
+
174
+ /* Projects grid */
175
+ .projects-grid {
176
+ display: grid;
177
+ grid-template-columns: 1fr;
178
+ gap: 1rem;
179
+ }
180
+
181
+ .project-card {
182
+ background-color: var(--surface-color);
183
+ border: 1px solid var(--border-color);
184
+ border-radius: 0.5rem;
185
+ padding: 1.5rem;
186
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
187
+ }
188
+
189
+ .project-card:hover {
190
+ transform: translateY(-2px);
191
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
192
+ }
193
+
194
+ .project-card h2 {
195
+ font-size: 1.125rem;
196
+ margin-bottom: 1rem;
197
+ color: var(--text-color);
198
+ }
199
+
200
+ .project-card p {
201
+ font-size: 0.875rem;
202
+ color: var(--secondary-color);
203
+ margin-bottom: 1.5rem;
204
+ height: 4.5rem;
205
+ overflow: hidden;
206
+ text-overflow: ellipsis;
207
+ display: -webkit-box;
208
+ -webkit-line-clamp: 3;
209
+ -webkit-box-orient: vertical;
210
+ line-clamp: 3;
211
+ }
212
+
213
+ .project-card .project-meta {
214
+ display: flex;
215
+ justify-content: space-between;
216
+ align-items: center;
217
+ font-size: 0.75rem;
218
+ color: var(--secondary-color);
219
+ margin-bottom: 1rem;
220
+ }
221
+
222
+ /* Project card actions layout */
223
+ .project-card-actions {
224
+ display: flex;
225
+ flex-direction: column;
226
+ gap: 0.75rem;
227
+ }
228
+
229
+ .project-card-actions-row {
230
+ display: flex;
231
+ gap: 0.5rem;
232
+ justify-content: space-between;
233
+ align-items: center;
234
+ width: 100%;
235
+ }
236
+
237
+ .project-card-actions-row .btn {
238
+ flex: 1;
239
+ text-align: center;
240
+ margin: 0.5rem;
241
+ }
242
+
243
+ .project-card-actions-secondary {
244
+ justify-content: flex-end;
245
+ }
246
+
247
+ /* Delete link styling */
248
+ .delete-link {
249
+ color: var(--error-color);
250
+ text-decoration: none;
251
+ font-size: 0.875rem;
252
+ font-weight: 500;
253
+ cursor: pointer;
254
+ transition: color 150ms ease;
255
+ }
256
+
257
+ .delete-link:hover {
258
+ color: #dc2626;
259
+ text-decoration: underline;
260
+ }
261
+
262
+ /* Modal styles */
263
+ .modal {
264
+ display: none;
265
+ position: fixed;
266
+ z-index: 1000;
267
+ left: 0;
268
+ top: 0;
269
+ width: 100%;
270
+ height: 100%;
271
+ overflow: auto;
272
+ background-color: rgba(0, 0, 0, 0.4);
273
+ }
274
+
275
+ .modal-content {
276
+ background-color: var(--surface-color);
277
+ margin: 15% auto;
278
+ padding: 2rem;
279
+ border-radius: 0.5rem;
280
+ width: 80%;
281
+ max-width: 500px;
282
+ box-shadow: var(--box-shadow);
283
+ }
284
+
285
+ .close-modal {
286
+ color: var(--secondary-color);
287
+ float: right;
288
+ font-size: 1.5rem;
289
+ font-weight: bold;
290
+ cursor: pointer;
291
+ }
292
+
293
+ .close-modal:hover {
294
+ color: var(--text-color);
295
+ }
296
+
297
+ #modal-title {
298
+ margin-bottom: 1rem;
299
+ }
300
+
301
+ #modal-body {
302
+ margin-bottom: 1rem;
303
+ line-height: 1.5;
304
+ }
305
+
306
+ #modal-body ul {
307
+ margin: 0.5rem 0;
308
+ padding-left: 1.5rem;
309
+ }
310
+
311
+ #modal-body li {
312
+ margin: 0.25rem 0;
313
+ }
314
+
315
+ #modal-body p {
316
+ margin: 0.5rem 0;
317
+ }
318
+
319
+ .modal-actions {
320
+ display: flex;
321
+ justify-content: flex-end;
322
+ gap: 0.75rem;
323
+ margin-top: 1.5rem;
324
+ padding-top: 1rem;
325
+ border-top: 1px solid var(--border-color);
326
+ }
327
+
328
+ .modal-actions.hidden {
329
+ display: none;
330
+ }
331
+
332
+ /* Loading overlay */
333
+ .loading-overlay {
334
+ position: fixed;
335
+ top: 0;
336
+ left: 0;
337
+ width: 100%;
338
+ height: 100%;
339
+ background-color: rgba(255, 255, 255, 0.8);
340
+ z-index: 2000;
341
+ display: flex;
342
+ flex-direction: column;
343
+ justify-content: center;
344
+ align-items: center;
345
+ }
346
+
347
+ .spinner {
348
+ border: 4px solid rgba(0, 0, 0, 0.1);
349
+ width: 40px;
350
+ height: 40px;
351
+ border-radius: 50%;
352
+ border-top-color: var(--primary-color);
353
+ animation: spin 1s linear infinite;
354
+ margin-bottom: 1rem;
355
+ }
356
+
357
+ @keyframes spin {
358
+ 0% { transform: rotate(0deg); }
359
+ 100% { transform: rotate(360deg); }
360
+ }
361
+
362
+ /* Responsive adjustments */
363
+ @media (max-width: 768px) {
364
+ .projects-grid {
365
+ grid-template-columns: 1fr;
366
+ }
367
+
368
+ .header-container {
369
+ padding: 0 1rem;
370
+ }
371
+
372
+ .nav-menu li {
373
+ margin-left: 1rem;
374
+ }
375
+
376
+ .container {
377
+ padding: 1.5rem;
378
+ }
379
+
380
+ .modal-content {
381
+ width: 90%;
382
+ margin: 10% auto;
383
+ }
384
+ }
385
+ /*!********************************************************************************************************!*\
386
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/setup-detail.css ***!
387
+ \********************************************************************************************************/
388
+ /* src/css/setup-detail.css */
389
+
390
+ /* Collapsible drawers specific to Setup Detail View */
391
+ .collapsible-drawers {
392
+ margin-bottom: 2rem;
393
+ }
394
+
395
+ .drawer {
396
+ border: 1px solid var(--border-color);
397
+ border-radius: 0.25rem;
398
+ margin-bottom: 1rem;
399
+ overflow: hidden;
400
+ }
401
+
402
+ .drawer-header {
403
+ display: flex;
404
+ justify-content: space-between;
405
+ align-items: center;
406
+ padding: 1rem;
407
+ background-color: #f9fafb;
408
+ cursor: pointer;
409
+ }
410
+
411
+ .drawer-header h2 {
412
+ font-size: 1rem;
413
+ font-weight: 500;
414
+ }
415
+
416
+ .toggle-drawer {
417
+ background: none;
418
+ border: none;
419
+ font-size: 1rem;
420
+ cursor: pointer;
421
+ transition: transform var(--drawer-transition);
422
+ }
423
+
424
+ .drawer-content {
425
+ padding: 1rem;
426
+ border-top: 1px solid var(--border-color);
427
+ /* Visibility is controlled solely by the global `.hidden` class (BAPI-301);
428
+ `.expanded` is reserved for header/glyph styling. The shared drawer helper
429
+ sets the ▲/▼ glyph text directly, so no CSS rotation is applied. */
430
+ }
431
+
432
+ /* Save button container specific to Setup Detail View */
433
+ .save-container {
434
+ display: flex;
435
+ justify-content: center;
436
+ margin-top: 2rem;
437
+ }
438
+
439
+ .save-container .btn {
440
+ padding: 0.75rem 1.5rem;
441
+ font-size: 1rem;
442
+ }
443
+
444
+ /* Static text display (like repo name) */
445
+ .form-static-text {
446
+ background-color: var(--background-color);
447
+ padding: 0.5rem;
448
+ border: 1px solid var(--border-color);
449
+ border-radius: 0.25rem;
450
+ font-family: monospace;
451
+ color: var(--secondary-color);
452
+ margin-top: 0.5rem;
453
+ word-break: break-all;
454
+ }
455
+
456
+ /* Header title specific to this page */
457
+ .header-title {
458
+ font-size: 1.2rem;
459
+ font-weight: 600;
460
+ color: var(--text-color);
461
+ }
462
+
463
+ /* Explain Link Styling */
464
+ .explain-link {
465
+ display: inline-block;
466
+ margin-left: 6px;
467
+ padding: 1px 6px;
468
+ font-size: 0.8em;
469
+ font-weight: bold;
470
+ color: #fff;
471
+ background-color: #6c757d;
472
+ border-radius: 50%;
473
+ text-decoration: none;
474
+ cursor: pointer;
475
+ vertical-align: middle;
476
+ line-height: 1.2;
477
+ }
478
+
479
+ .explain-link:hover {
480
+ background-color: #444;
481
+ text-decoration: none;
482
+ }
483
+
484
+ .explanation-content {
485
+ /* Hidden by default via the global `.hidden` class in the markup; the JS
486
+ toggles only `.hidden` (BAPI-301), so no base `display: none` here. */
487
+ margin-top: 8px;
488
+ padding: 10px;
489
+ border: 1px solid #ced4da;
490
+ border-radius: 4px;
491
+ background-color: #f8f9fa;
492
+ font-size: 0.9em;
493
+ color: #495057;
494
+ line-height: 1.4;
495
+ }
496
+
497
+ /* Structured server-sourced setup instructions (BAPI-515), rendered inside
498
+ .explanation-content by renderExplanationContent(). Scoped to this wrapper
499
+ only — the container above is left untouched. */
500
+ .explanation-content .setup-instructions {
501
+ display: flex;
502
+ flex-direction: column;
503
+ gap: 8px;
504
+ }
505
+
506
+ .explanation-content .setup-instructions-link {
507
+ color: var(--primary-color);
508
+ font-weight: 500;
509
+ text-decoration: underline;
510
+ overflow-wrap: anywhere;
511
+ }
512
+
513
+ .explanation-content .setup-instructions-link:hover {
514
+ color: var(--primary-dark);
515
+ }
516
+
517
+ .explanation-content .setup-instructions-link:focus-visible {
518
+ outline: 2px solid var(--primary-color);
519
+ outline-offset: 2px;
520
+ }
521
+
522
+ .explanation-content .setup-instructions-steps {
523
+ margin: 0;
524
+ padding-left: 20px;
525
+ }
526
+
527
+ .explanation-content .setup-instructions-steps li + li {
528
+ margin-top: 4px;
529
+ }
530
+
531
+ .explanation-content .setup-instructions-note {
532
+ margin: 0;
533
+ color: var(--secondary-color);
534
+ }
535
+
536
+ /* Form error styling */
537
+ .form-error {
538
+ color: var(--error-color);
539
+ font-size: 0.875rem;
540
+ margin-top: 0.5rem;
541
+ display: none;
542
+ }
543
+
544
+ .form-error.visible {
545
+ display: block;
546
+ }
547
+
548
+ input.input-error,
549
+ textarea.input-error,
550
+ select.input-error {
551
+ border-color: var(--error-color);
552
+ box-shadow: 0 0 0 0.2rem rgba(239, 68, 68, 0.25);
553
+ }
554
+
555
+ /* Required field indicator */
556
+ .required {
557
+ color: var(--error-color);
558
+ }
559
+
560
+ /* ========================================
561
+ Data Integrity Section Styles
562
+ ======================================== */
563
+
564
+ /* Loading and error states */
565
+ .integrity-loading,
566
+ .integrity-error {
567
+ padding: 1rem;
568
+ text-align: center;
569
+ color: var(--secondary-color);
570
+ }
571
+
572
+ .integrity-error {
573
+ color: var(--error-color);
574
+ background-color: #fef2f2;
575
+ border: 1px solid #fecaca;
576
+ border-radius: 0.25rem;
577
+ }
578
+
579
+ /* Summary statistics */
580
+ .integrity-summary {
581
+ display: flex;
582
+ gap: 2rem;
583
+ margin-bottom: 1.5rem;
584
+ padding: 1rem;
585
+ background-color: #f9fafb;
586
+ border-radius: 0.25rem;
587
+ }
588
+
589
+ .integrity-stat {
590
+ display: flex;
591
+ flex-direction: column;
592
+ align-items: center;
593
+ }
594
+
595
+ .integrity-stat-label {
596
+ font-size: 0.875rem;
597
+ color: var(--secondary-color);
598
+ margin-bottom: 0.25rem;
599
+ }
600
+
601
+ .integrity-stat-value {
602
+ font-size: 1.5rem;
603
+ font-weight: 600;
604
+ color: var(--text-color);
605
+ }
606
+
607
+ .integrity-stat-value.integrity-healthy {
608
+ color: #16a34a;
609
+ }
610
+
611
+ /* Empty state */
612
+ .integrity-empty-state {
613
+ padding: 1.5rem;
614
+ text-align: center;
615
+ background-color: #f0fdf4;
616
+ border: 1px solid #bbf7d0;
617
+ border-radius: 0.25rem;
618
+ color: #166534;
619
+ }
620
+
621
+ .integrity-empty-state p {
622
+ margin: 0;
623
+ font-weight: 500;
624
+ }
625
+
626
+ /* Issues table */
627
+ .integrity-table {
628
+ width: 100%;
629
+ border-collapse: collapse;
630
+ margin-top: 1rem;
631
+ }
632
+
633
+ .integrity-table th,
634
+ .integrity-table td {
635
+ padding: 0.75rem;
636
+ text-align: left;
637
+ border-bottom: 1px solid var(--border-color);
638
+ }
639
+
640
+ .integrity-table th {
641
+ background-color: #f9fafb;
642
+ font-weight: 500;
643
+ font-size: 0.875rem;
644
+ color: var(--secondary-color);
645
+ }
646
+
647
+ .integrity-table td {
648
+ font-size: 0.875rem;
649
+ vertical-align: top;
650
+ }
651
+
652
+ .integrity-table tbody tr:hover {
653
+ background-color: #f9fafb;
654
+ }
655
+
656
+ /* File list styling */
657
+ .integrity-file-list {
658
+ font-family: monospace;
659
+ font-size: 0.8rem;
660
+ background-color: #f1f5f9;
661
+ padding: 0.5rem;
662
+ border-radius: 4px;
663
+ max-height: 150px;
664
+ overflow-y: auto;
665
+ margin: 0;
666
+ list-style: none;
667
+ }
668
+
669
+ .integrity-file-list li {
670
+ padding: 0.125rem 0;
671
+ word-break: break-all;
672
+ }
673
+
674
+ .integrity-file-list li:not(:last-child) {
675
+ border-bottom: 1px solid #e2e8f0;
676
+ }
677
+
678
+ .integrity-more-files {
679
+ font-style: italic;
680
+ color: var(--secondary-color);
681
+ font-size: 0.8rem;
682
+ margin-top: 0.25rem;
683
+ }
684
+
685
+ /* Issues container header */
686
+ #integrity-issues-container h3 {
687
+ font-size: 1rem;
688
+ font-weight: 500;
689
+ color: var(--text-color);
690
+ margin-bottom: 0.5rem;
691
+ }
692
+
693
+ /* ========================================
694
+ Configuration Health Section Styles
695
+ ======================================== */
696
+
697
+ /* Loading and error states */
698
+ .config-health-loading,
699
+ .config-health-error {
700
+ padding: 1rem;
701
+ text-align: center;
702
+ color: var(--secondary-color);
703
+ }
704
+
705
+ .config-health-error {
706
+ color: var(--error-color);
707
+ background-color: #fef2f2;
708
+ border: 1px solid #fecaca;
709
+ border-radius: 0.25rem;
710
+ }
711
+
712
+ /* Summary statistics */
713
+ .health-stats {
714
+ display: flex;
715
+ gap: 2rem;
716
+ margin-bottom: 1.5rem;
717
+ padding: 1rem;
718
+ background-color: #f9fafb;
719
+ border-radius: 0.25rem;
720
+ }
721
+
722
+ .health-stat {
723
+ display: flex;
724
+ flex-direction: column;
725
+ align-items: center;
726
+ }
727
+
728
+ .health-stat-label {
729
+ font-size: 0.875rem;
730
+ color: var(--secondary-color);
731
+ margin-bottom: 0.25rem;
732
+ }
733
+
734
+ .health-stat-value {
735
+ font-size: 1.5rem;
736
+ font-weight: 600;
737
+ color: var(--text-color);
738
+ }
739
+
740
+ .health-stat-value.config-healthy {
741
+ color: #16a34a;
742
+ }
743
+
744
+ .health-stat-value.config-errors {
745
+ color: var(--error-color);
746
+ }
747
+
748
+ .health-stat-value.config-warnings {
749
+ color: #f59e0b;
750
+ }
751
+
752
+ /* All good state */
753
+ .config-health-all-good {
754
+ padding: 1.5rem;
755
+ text-align: center;
756
+ background-color: #f0fdf4;
757
+ border: 1px solid #bbf7d0;
758
+ border-radius: 0.25rem;
759
+ color: #166534;
760
+ }
761
+
762
+ .config-health-all-good p {
763
+ margin: 0;
764
+ font-weight: 500;
765
+ }
766
+
767
+ /* Config health table */
768
+ .config-health-table {
769
+ width: 100%;
770
+ border-collapse: collapse;
771
+ margin-top: 1rem;
772
+ }
773
+
774
+ .config-health-table th,
775
+ .config-health-table td {
776
+ padding: 0.75rem;
777
+ text-align: left;
778
+ border-bottom: 1px solid var(--border-color);
779
+ }
780
+
781
+ .config-health-table th {
782
+ background-color: #f9fafb;
783
+ font-weight: 500;
784
+ font-size: 0.875rem;
785
+ color: var(--secondary-color);
786
+ }
787
+
788
+ .config-health-table td {
789
+ font-size: 0.875rem;
790
+ vertical-align: top;
791
+ }
792
+
793
+ .config-health-table tbody tr:hover {
794
+ background-color: #f9fafb;
795
+ }
796
+
797
+ /* Status badge styling */
798
+ .config-status-badge {
799
+ display: inline-block;
800
+ padding: 0.25rem 0.5rem;
801
+ border-radius: 0.25rem;
802
+ font-size: 0.75rem;
803
+ font-weight: 500;
804
+ text-transform: uppercase;
805
+ }
806
+
807
+ .config-status-badge.status-missing {
808
+ background-color: #fef2f2;
809
+ color: #991b1b;
810
+ }
811
+
812
+ .config-status-badge.status-invalid {
813
+ background-color: #fef2f2;
814
+ color: #991b1b;
815
+ }
816
+
817
+ /* Dismiss button styling */
818
+ .dismiss-warning-btn {
819
+ background-color: transparent;
820
+ border: 1px solid var(--border-color);
821
+ border-radius: 0.25rem;
822
+ padding: 0.375rem 0.75rem;
823
+ font-size: 0.875rem;
824
+ color: var(--secondary-color);
825
+ cursor: pointer;
826
+ transition: all 0.2s ease;
827
+ }
828
+
829
+ .dismiss-warning-btn:hover {
830
+ background-color: #f9fafb;
831
+ border-color: var(--secondary-color);
832
+ color: var(--text-color);
833
+ }
834
+
835
+ .dismiss-warning-btn:active {
836
+ background-color: #f3f4f6;
837
+ }
838
+
839
+ .dismiss-warning-btn:disabled {
840
+ opacity: 0.5;
841
+ cursor: not-allowed;
842
+ }
843
+
844
+ /* Config errors/warnings container headers */
845
+ #config-errors-container h3,
846
+ #config-warnings-container h3 {
847
+ font-size: 1rem;
848
+ font-weight: 500;
849
+ color: var(--text-color);
850
+ margin-bottom: 0.5rem;
851
+ margin-top: 1.5rem;
852
+ }
853
+
854
+ #config-errors-container h3 {
855
+ color: var(--error-color);
856
+ }
857
+
858
+ #config-warnings-container h3 {
859
+ color: #f59e0b;
860
+ }
861
+
862
+ /* ========================================
863
+ Pinecone Data Integrity Section Styles
864
+ ======================================== */
865
+
866
+ /* Actions container with button and last run text */
867
+ .pinecone-health-actions {
868
+ display: flex;
869
+ align-items: center;
870
+ gap: 1rem;
871
+ margin-bottom: 1rem;
872
+ }
873
+
874
+ .last-run-text {
875
+ font-size: 0.875rem;
876
+ color: var(--secondary-color);
877
+ }
878
+
879
+ /* Loading and error states */
880
+ .pinecone-health-loading,
881
+ .pinecone-health-error {
882
+ padding: 1rem;
883
+ text-align: center;
884
+ color: var(--secondary-color);
885
+ }
886
+
887
+ .pinecone-health-error {
888
+ color: var(--error-color);
889
+ background-color: #fef2f2;
890
+ border: 1px solid #fecaca;
891
+ border-radius: 0.25rem;
892
+ }
893
+
894
+ /* No results state */
895
+ .pinecone-health-no-results {
896
+ padding: 1rem;
897
+ text-align: center;
898
+ color: var(--secondary-color);
899
+ background-color: #f9fafb;
900
+ border: 1px solid var(--border-color);
901
+ border-radius: 0.25rem;
902
+ }
903
+
904
+ .pinecone-health-no-results p {
905
+ margin: 0;
906
+ }
907
+
908
+ /* Status container and badge */
909
+ .pinecone-health-status-container {
910
+ display: flex;
911
+ align-items: center;
912
+ gap: 0.5rem;
913
+ margin-bottom: 1rem;
914
+ }
915
+
916
+ .pinecone-health-status {
917
+ display: inline-block;
918
+ padding: 0.25rem 0.75rem;
919
+ border-radius: 0.25rem;
920
+ font-size: 0.75rem;
921
+ font-weight: 600;
922
+ text-transform: uppercase;
923
+ }
924
+
925
+ .pinecone-health-status.status-healthy {
926
+ background-color: #dcfce7;
927
+ color: #166534;
928
+ }
929
+
930
+ .pinecone-health-status.status-error {
931
+ background-color: #fef2f2;
932
+ color: #991b1b;
933
+ }
934
+
935
+ .pinecone-health-status.status-warning {
936
+ background-color: #fef3c7;
937
+ color: #92400e;
938
+ }
939
+
940
+ .pinecone-health-status.status-running {
941
+ background-color: #dbeafe;
942
+ color: #1e40af;
943
+ }
944
+
945
+ /* Summary statistics */
946
+ .pinecone-health-summary {
947
+ display: flex;
948
+ gap: 2rem;
949
+ margin-bottom: 1.5rem;
950
+ padding: 1rem;
951
+ background-color: #f9fafb;
952
+ border-radius: 0.25rem;
953
+ flex-wrap: wrap;
954
+ }
955
+
956
+ .pinecone-health-stat {
957
+ display: flex;
958
+ flex-direction: column;
959
+ align-items: center;
960
+ min-width: 80px;
961
+ }
962
+
963
+ .pinecone-stat-label {
964
+ font-size: 0.875rem;
965
+ color: var(--secondary-color);
966
+ margin-bottom: 0.25rem;
967
+ }
968
+
969
+ .pinecone-stat-value {
970
+ font-size: 1.5rem;
971
+ font-weight: 600;
972
+ color: var(--text-color);
973
+ }
974
+
975
+ .pinecone-stat-value.stat-healthy {
976
+ color: #16a34a;
977
+ }
978
+
979
+ .pinecone-stat-value.stat-error {
980
+ color: var(--error-color);
981
+ }
982
+
983
+ /* All good state */
984
+ .pinecone-health-all-good {
985
+ padding: 1.5rem;
986
+ text-align: center;
987
+ background-color: #f0fdf4;
988
+ border: 1px solid #bbf7d0;
989
+ border-radius: 0.25rem;
990
+ color: #166534;
991
+ }
992
+
993
+ .pinecone-health-all-good p {
994
+ margin: 0;
995
+ font-weight: 500;
996
+ }
997
+
998
+ /* Pinecone health table (shared styles for namespace and failures tables) */
999
+ .pinecone-health-table {
1000
+ width: 100%;
1001
+ border-collapse: collapse;
1002
+ margin-top: 1rem;
1003
+ table-layout: fixed;
1004
+ }
1005
+
1006
+ .pinecone-health-table th,
1007
+ .pinecone-health-table td {
1008
+ padding: 0.75rem;
1009
+ text-align: left;
1010
+ border-bottom: 1px solid var(--border-color);
1011
+ }
1012
+
1013
+ .pinecone-health-table th {
1014
+ background-color: #f9fafb;
1015
+ font-weight: 500;
1016
+ font-size: 0.875rem;
1017
+ color: var(--secondary-color);
1018
+ }
1019
+
1020
+ .pinecone-health-table td {
1021
+ font-size: 0.875rem;
1022
+ vertical-align: middle;
1023
+ word-wrap: break-word;
1024
+ }
1025
+
1026
+ .pinecone-health-table tbody tr:hover {
1027
+ background-color: #f9fafb;
1028
+ }
1029
+
1030
+ /* Namespace results table column widths */
1031
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(1),
1032
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(1) {
1033
+ width: 25%;
1034
+ }
1035
+
1036
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(2),
1037
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(2) {
1038
+ width: 15%;
1039
+ }
1040
+
1041
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(3),
1042
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(3),
1043
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(4),
1044
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(4),
1045
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(5),
1046
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(5) {
1047
+ width: 12%;
1048
+ text-align: right;
1049
+ }
1050
+
1051
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(6),
1052
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(6) {
1053
+ width: 12%;
1054
+ text-align: center;
1055
+ }
1056
+
1057
+ /* Sample failures table column widths */
1058
+ #pinecone-failures-container .pinecone-health-table th:nth-child(1),
1059
+ #pinecone-failures-container .pinecone-health-table td:nth-child(1) {
1060
+ width: 20%;
1061
+ }
1062
+
1063
+ #pinecone-failures-container .pinecone-health-table th:nth-child(2),
1064
+ #pinecone-failures-container .pinecone-health-table td:nth-child(2) {
1065
+ width: 15%;
1066
+ }
1067
+
1068
+ #pinecone-failures-container .pinecone-health-table th:nth-child(3),
1069
+ #pinecone-failures-container .pinecone-health-table td:nth-child(3) {
1070
+ width: 30%;
1071
+ font-family: monospace;
1072
+ font-size: 0.8rem;
1073
+ }
1074
+
1075
+ #pinecone-failures-container .pinecone-health-table th:nth-child(4),
1076
+ #pinecone-failures-container .pinecone-health-table td:nth-child(4) {
1077
+ width: 35%;
1078
+ }
1079
+
1080
+ /* Match indicator */
1081
+ .pinecone-match-badge {
1082
+ display: inline-block;
1083
+ padding: 0.125rem 0.5rem;
1084
+ border-radius: 0.25rem;
1085
+ font-size: 0.75rem;
1086
+ font-weight: 500;
1087
+ }
1088
+
1089
+ .pinecone-match-badge.match-yes {
1090
+ background-color: #dcfce7;
1091
+ color: #166534;
1092
+ }
1093
+
1094
+ .pinecone-match-badge.match-no {
1095
+ background-color: #fef2f2;
1096
+ color: #991b1b;
1097
+ }
1098
+
1099
+ /* Container headers */
1100
+ #pinecone-namespace-container h3,
1101
+ #pinecone-failures-container h3 {
1102
+ font-size: 1rem;
1103
+ font-weight: 500;
1104
+ color: var(--text-color);
1105
+ margin-bottom: 0.5rem;
1106
+ margin-top: 1.5rem;
1107
+ }
1108
+
1109
+ #pinecone-failures-container h3 {
1110
+ color: var(--error-color);
1111
+ }
1112
+
1113
+ /* ========================================
1114
+ Install Status Review Panel (BAPI-384)
1115
+ ======================================== */
1116
+
1117
+ /* Intro paragraph below the page title */
1118
+ .setup-detail-intro {
1119
+ margin: 0.5rem 0 1.5rem;
1120
+ font-size: 0.9rem;
1121
+ color: var(--secondary-color);
1122
+ line-height: 1.5;
1123
+ }
1124
+
1125
+ /* Top-level review panel; matches the drawer/panel border + radius + spacing */
1126
+ .install-status-panel {
1127
+ border: 1px solid var(--border-color);
1128
+ border-radius: 0.25rem;
1129
+ padding: 1rem;
1130
+ margin-bottom: 2rem;
1131
+ background-color: #f9fafb;
1132
+ }
1133
+
1134
+ .install-status-panel-title {
1135
+ font-size: 1rem;
1136
+ font-weight: 500;
1137
+ color: var(--text-color);
1138
+ margin-bottom: 0.75rem;
1139
+ }
1140
+
1141
+ /* Compact set/unset counts */
1142
+ .install-status-summary {
1143
+ display: flex;
1144
+ flex-wrap: wrap;
1145
+ align-items: center;
1146
+ gap: 1rem;
1147
+ font-size: 0.875rem;
1148
+ color: var(--secondary-color);
1149
+ margin-bottom: 1rem;
1150
+ }
1151
+
1152
+ .install-status-summary-count {
1153
+ font-weight: 600;
1154
+ color: var(--text-color);
1155
+ }
1156
+
1157
+ /* Manifest-driven group list */
1158
+ .install-status-groups {
1159
+ display: flex;
1160
+ flex-direction: column;
1161
+ gap: 1rem;
1162
+ }
1163
+
1164
+ .install-status-group {
1165
+ border-top: 1px solid var(--border-color);
1166
+ padding-top: 0.75rem;
1167
+ }
1168
+
1169
+ .install-status-group-title {
1170
+ font-size: 0.875rem;
1171
+ font-weight: 500;
1172
+ color: var(--text-color);
1173
+ margin-bottom: 0.5rem;
1174
+ }
1175
+
1176
+ .install-status-field-row {
1177
+ display: flex;
1178
+ flex-wrap: wrap;
1179
+ align-items: center;
1180
+ gap: 0.5rem;
1181
+ padding: 0.375rem 0;
1182
+ font-size: 0.875rem;
1183
+ }
1184
+
1185
+ .install-status-field-name {
1186
+ font-weight: 500;
1187
+ color: var(--text-color);
1188
+ }
1189
+
1190
+ .install-status-field-value {
1191
+ color: var(--secondary-color);
1192
+ word-break: break-word;
1193
+ }
1194
+
1195
+ .install-status-field-confirm {
1196
+ font-size: 0.75rem;
1197
+ font-style: italic;
1198
+ color: #92400e;
1199
+ }
1200
+
1201
+ /* Unavailable / error area */
1202
+ .install-status-error {
1203
+ padding: 0.75rem 1rem;
1204
+ font-size: 0.875rem;
1205
+ color: var(--secondary-color);
1206
+ background-color: #f9fafb;
1207
+ border: 1px solid var(--border-color);
1208
+ border-radius: 0.25rem;
1209
+ }
1210
+
1211
+ /* Base status badge — always pairs color with text, never color alone */
1212
+ .install-status-badge {
1213
+ display: inline-block;
1214
+ padding: 0.125rem 0.5rem;
1215
+ border-radius: 0.25rem;
1216
+ font-size: 0.75rem;
1217
+ font-weight: 500;
1218
+ line-height: 1.4;
1219
+ white-space: nowrap;
1220
+ }
1221
+
1222
+ .install-status-badge.status-set {
1223
+ background-color: #dcfce7;
1224
+ color: #166534;
1225
+ }
1226
+
1227
+ .install-status-badge.status-unset {
1228
+ background-color: #fef3c7;
1229
+ color: #92400e;
1230
+ }
1231
+
1232
+ .install-status-badge.status-loading {
1233
+ background-color: #f1f5f9;
1234
+ color: var(--secondary-color);
1235
+ }
1236
+
1237
+ .install-status-badge.status-unavailable {
1238
+ background-color: #f1f5f9;
1239
+ color: var(--secondary-color);
1240
+ }
1241
+
1242
+ /* Inline badge slot next to a field label */
1243
+ .install-status-badge-slot {
1244
+ display: inline-flex;
1245
+ align-items: center;
1246
+ margin-left: 6px;
1247
+ vertical-align: middle;
1248
+ }
1249
+
1250
+ /* Keyboard-focusable edit affordance — matches existing link/button affordances */
1251
+ .install-status-edit {
1252
+ background: none;
1253
+ border: none;
1254
+ padding: 0;
1255
+ font-size: 0.8rem;
1256
+ font-weight: 500;
1257
+ color: var(--primary-color, #2563eb);
1258
+ text-decoration: underline;
1259
+ cursor: pointer;
1260
+ }
1261
+
1262
+ .install-status-edit:hover {
1263
+ text-decoration: none;
1264
+ }
1265
+
1266
+ .install-status-edit:focus-visible {
1267
+ outline: 2px solid var(--primary-color, #2563eb);
1268
+ outline-offset: 2px;
1269
+ border-radius: 0.25rem;
1270
+ }
1271
+
1272
+ /* Mobile: keep labels/badges/edit controls from crowding the controls */
1273
+ @media (max-width: 600px) {
1274
+ .install-status-summary {
1275
+ gap: 0.5rem;
1276
+ }
1277
+
1278
+ .install-status-field-row {
1279
+ flex-direction: column;
1280
+ align-items: flex-start;
1281
+ }
1282
+
1283
+ .install-status-badge-slot {
1284
+ margin-left: 0;
1285
+ margin-top: 0.25rem;
1286
+ }
1287
+ }
1288
+
1289
+
1290
+ /*!********************************************************************************************************!*\
1291
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/public-pages.css ***!
1292
+ \********************************************************************************************************/
1293
+ /* Public-page styling for the homepage and the legal placeholder pages.
1294
+ Class-scoped only — no overrides of body, :root, .hidden, or form elements. */
1295
+
1296
+ .public-page-header {
1297
+ display: flex;
1298
+ align-items: center;
1299
+ justify-content: flex-start;
1300
+ padding: 1rem 0;
1301
+ margin-bottom: 1.5rem;
1302
+ border-bottom: 1px solid var(--border-color);
1303
+ }
1304
+
1305
+ .public-page-header a {
1306
+ display: inline-flex;
1307
+ align-items: center;
1308
+ text-decoration: none;
1309
+ color: inherit;
1310
+ }
1311
+
1312
+ .public-page-logo {
1313
+ height: auto;
1314
+ max-width: 240px;
1315
+ width: 100%;
1316
+ display: block;
1317
+ }
1318
+
1319
+ @media (max-width: 480px) {
1320
+ .public-page-logo {
1321
+ max-width: 180px;
1322
+ }
1323
+ }
1324
+
1325
+ .public-page-hero {
1326
+ padding: 2rem 0 1.5rem;
1327
+ }
1328
+
1329
+ .public-page-hero h1 {
1330
+ font-size: 1.75rem;
1331
+ font-weight: 600;
1332
+ color: var(--text-color);
1333
+ margin-bottom: 1rem;
1334
+ }
1335
+
1336
+ .public-page-copy {
1337
+ font-size: 1rem;
1338
+ color: var(--text-color);
1339
+ line-height: 1.6;
1340
+ }
1341
+
1342
+ .public-page-copy p {
1343
+ margin-bottom: 0.75rem;
1344
+ }
1345
+
1346
+ .public-page-actions {
1347
+ margin-top: 1.5rem;
1348
+ display: flex;
1349
+ gap: 0.75rem;
1350
+ flex-wrap: wrap;
1351
+ }
1352
+
1353
+ .public-page-actions a {
1354
+ text-decoration: none;
1355
+ display: inline-block;
1356
+ }
1357
+
1358
+ .public-page-footer {
1359
+ margin-top: 3rem;
1360
+ padding-top: 1.5rem;
1361
+ border-top: 1px solid var(--border-color);
1362
+ color: var(--secondary-color);
1363
+ font-size: 0.875rem;
1364
+ }
1365
+
1366
+ .public-page-footer-nav {
1367
+ display: flex;
1368
+ gap: 1.5rem;
1369
+ flex-wrap: wrap;
1370
+ }
1371
+
1372
+ .public-page-footer-nav a {
1373
+ color: var(--secondary-color);
1374
+ text-decoration: none;
1375
+ }
1376
+
1377
+ .public-page-footer-nav a:hover {
1378
+ color: var(--primary-color);
1379
+ text-decoration: underline;
1380
+ }
1381
+
1382
+ .legal-page-content {
1383
+ max-width: 800px;
1384
+ background-color: var(--surface-color);
1385
+ border-radius: 0.5rem;
1386
+ padding: 2rem;
1387
+ box-shadow: var(--box-shadow);
1388
+ }
1389
+
1390
+ .legal-page-content h1 {
1391
+ font-size: 1.75rem;
1392
+ font-weight: 600;
1393
+ color: var(--text-color);
1394
+ margin-bottom: 0.5rem;
1395
+ }
1396
+
1397
+ .legal-page-content .last-updated {
1398
+ color: var(--secondary-color);
1399
+ font-size: 0.875rem;
1400
+ margin-bottom: 1.5rem;
1401
+ }
1402
+
1403
+ .legal-section {
1404
+ margin-bottom: 1.5rem;
1405
+ }
1406
+
1407
+ .legal-section h2 {
1408
+ font-size: 1.25rem;
1409
+ font-weight: 600;
1410
+ color: var(--text-color);
1411
+ margin-bottom: 0.5rem;
1412
+ }
1413
+
1414
+ .legal-section p {
1415
+ color: var(--text-color);
1416
+ line-height: 1.6;
1417
+ margin-bottom: 0.75rem;
1418
+ }
1419
+
1420
+ /*!**********************************************************************************************************!*\
1421
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/project-detail.css ***!
1422
+ \**********************************************************************************************************/
1423
+ /* src/css/project-detail.css */
1424
+
1425
+ /* Collapsible drawers specific to Project Detail View */
1426
+ .collapsible-drawers {
1427
+ margin-bottom: 2rem;
1428
+ }
1429
+
1430
+ .drawer {
1431
+ border: 1px solid var(--border-color);
1432
+ border-radius: 0.25rem;
1433
+ margin-bottom: 1rem;
1434
+ overflow: hidden;
1435
+ }
1436
+
1437
+ .drawer-header {
1438
+ display: flex;
1439
+ justify-content: space-between;
1440
+ align-items: center;
1441
+ padding: 1rem;
1442
+ background-color: #f9fafb;
1443
+ cursor: pointer;
1444
+ }
1445
+
1446
+ .drawer-header h2 {
1447
+ font-size: 1rem;
1448
+ font-weight: 500;
1449
+ }
1450
+
1451
+ .toggle-drawer {
1452
+ background: none;
1453
+ border: none;
1454
+ font-size: 1rem;
1455
+ cursor: pointer;
1456
+ transition: transform var(--drawer-transition);
1457
+ }
1458
+
1459
+ .drawer-content {
1460
+ padding: 1rem;
1461
+ border-top: 1px solid var(--border-color);
1462
+ /* Visibility is controlled solely by the global `.hidden` class (BAPI-301);
1463
+ `.expanded` is reserved for header/glyph styling. The shared drawer helper
1464
+ sets the ▲/▼ glyph text directly, so no CSS rotation is applied. */
1465
+ }
1466
+
1467
+ /* Save button container specific to Project Detail View */
1468
+ .save-container {
1469
+ display: flex;
1470
+ justify-content: center;
1471
+ margin-top: 2rem;
1472
+ }
1473
+
1474
+ .save-container .btn {
1475
+ padding: 0.75rem 1.5rem;
1476
+ font-size: 1rem;
1477
+ }
1478
+
1479
+ /* Static text display (like project path) */
1480
+ .form-static-text {
1481
+ background-color: var(--background-color);
1482
+ padding: 0.5rem;
1483
+ border: 1px solid var(--border-color);
1484
+ border-radius: 0.25rem;
1485
+ font-family: monospace; /* Or choose appropriate font */
1486
+ color: var(--secondary-color);
1487
+ margin-top: 0.5rem; /* Align with inputs */
1488
+ word-break: break-all; /* Prevent long paths from breaking layout */
1489
+ }
1490
+
1491
+ /* Header title specific to this page */
1492
+ .header-title {
1493
+ font-size: 1.2rem;
1494
+ font-weight: 600;
1495
+ color: var(--text-color);
1496
+ }
1497
+
1498
+ /* Explain Link Styling */
1499
+ .explain-link {
1500
+ margin-left: 0.5rem;
1501
+ color: var(--primary-color);
1502
+ text-decoration: none;
1503
+ font-weight: bold;
1504
+ }
1505
+
1506
+ .explain-link:hover {
1507
+ text-decoration: underline;
1508
+ }
1509
+
1510
+ .explanation-content {
1511
+ margin-top: 0.5rem;
1512
+ padding: 0.75rem;
1513
+ background-color: #eef2ff; /* Light indigo background */
1514
+ border-left: 4px solid var(--primary-color);
1515
+ font-size: 0.875rem;
1516
+ color: #374151; /* Gray-700 */
1517
+ border-radius: 0 0.25rem 0.25rem 0; /* Slight rounding */
1518
+ flex-basis: 100%;
1519
+ width: 100%;
1520
+ }
1521
+
1522
+ .project-card-actions {
1523
+ display: flex;
1524
+ justify-content: space-between;
1525
+ align-items: center;
1526
+ }
1527
+
1528
+ /* Explanation link and content styles */
1529
+ .explain-link {
1530
+ display: inline-block;
1531
+ margin-left: 6px;
1532
+ padding: 1px 6px;
1533
+ font-size: 0.8em;
1534
+ font-weight: bold;
1535
+ color: #fff;
1536
+ background-color: #6c757d; /* Bootstrap secondary color */
1537
+ border-radius: 50%;
1538
+ text-decoration: none;
1539
+ cursor: pointer;
1540
+ vertical-align: middle; /* Align with the label text */
1541
+ line-height: 1.2;
1542
+ }
1543
+
1544
+ .explain-link:hover {
1545
+ background-color: #444;
1546
+ text-decoration: none;
1547
+ }
1548
+
1549
+ .explanation-content {
1550
+ /* Base styling only; visibility is toggled via the .hidden class so the JS
1551
+ can show/hide help without inline display mutations. */
1552
+ margin-top: 8px;
1553
+ padding: 10px;
1554
+ border: 1px solid #ced4da; /* Light grey border */
1555
+ border-radius: 4px;
1556
+ background-color: #f8f9fa; /* Light background */
1557
+ font-size: 0.9em;
1558
+ color: #495057;
1559
+ line-height: 1.4;
1560
+ }
1561
+
1562
+ /* The shared setup-detail.css defines a global `.explanation-content { display:
1563
+ none }` that also lands in the bundled stylesheet. Scope the visible/hidden
1564
+ states to this page's container so they win deterministically regardless of
1565
+ bundle order, while leaving the setup-detail page's own behavior untouched.
1566
+ The .hidden variant has higher specificity so it always hides when present. */
1567
+ #project-detail-container .explanation-content {
1568
+ display: block;
1569
+ }
1570
+
1571
+ #project-detail-container .explanation-content.hidden {
1572
+ display: none;
1573
+ }
1574
+
1575
+ /* Added styles for JSON input textarea */
1576
+ .code-input {
1577
+ font-family: 'Courier New', Courier, monospace;
1578
+ border: 1px solid var(--border-color);
1579
+ border-radius: 0.25rem;
1580
+ padding: 0.75rem;
1581
+ font-size: 0.9rem;
1582
+ line-height: 1.4;
1583
+ width: 100%; /* Ensure it takes full width */
1584
+ }
1585
+
1586
+ /* Add styles for input validation feedback */
1587
+ .form-error {
1588
+ color: #dc3545; /* Bootstrap danger color */
1589
+ font-size: 0.875em;
1590
+ margin-top: 0.25rem;
1591
+ display: none; /* Hide by default */
1592
+ }
1593
+
1594
+ input.input-error,
1595
+ textarea.input-error,
1596
+ select.input-error {
1597
+ border-color: #dc3545;
1598
+ box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); /* Optional: Add a glow */
1599
+ }
1600
+
1601
+ /* Ensure error messages are shown when they have content */
1602
+ .form-error:not(:empty) {
1603
+ display: block;
1604
+ }
1605
+
1606
+ /* Added styles for validation error messages */
1607
+ .form-error {
1608
+ color: var(--error-color);
1609
+ font-size: 0.875rem;
1610
+ margin-top: 0.5rem;
1611
+ display: none; /* Hidden by default */
1612
+ }
1613
+
1614
+ .form-error.visible {
1615
+ display: block; /* Visible when needed */
1616
+ }
1617
+
1618
+ /* MCP Validation Manuals selector
1619
+ Lay each manual out on its own row with clear spacing between the checkbox and
1620
+ its label. JS-emitted classes (.mcp-doc-option/.mcp-doc-checkbox/.mcp-doc-label)
1621
+ are only styled here — never renamed. */
1622
+ .mcp-docs-checkbox-list {
1623
+ display: flex;
1624
+ flex-direction: column;
1625
+ gap: 0.5rem;
1626
+ margin-top: 0.5rem;
1627
+ }
1628
+
1629
+ .mcp-doc-option {
1630
+ display: flex;
1631
+ align-items: center;
1632
+ gap: 0.5rem;
1633
+ line-height: 1.4;
1634
+ cursor: pointer;
1635
+ }
1636
+
1637
+ .mcp-doc-checkbox {
1638
+ margin: 0; /* drop inconsistent default checkbox margins */
1639
+ flex-shrink: 0; /* keep the checkbox from shrinking next to long labels */
1640
+ }
1641
+
1642
+ .mcp-doc-label {
1643
+ /* Spacing comes from the parent's gap; keep the label inline and readable. */
1644
+ display: inline;
1645
+ }
1646
+
1647
+ .mcp-docs-empty-state {
1648
+ margin-top: 0.5rem;
1649
+ padding: 0.5rem 0.75rem;
1650
+ border: 1px solid var(--border-color);
1651
+ border-radius: 0.25rem;
1652
+ color: var(--secondary-color);
1653
+ font-size: 0.875rem;
1654
+ }
1655
+
1656
+ /* --- CI Follow-up sub-section (BAPI-308) --- */
1657
+ /* Page-scoped under #project-detail-container so these styles never leak to other
1658
+ Configure-page-like layouts. Uses existing semantic CSS variables. */
1659
+ #project-detail-container .ci-followup-section {
1660
+ border: 1px solid var(--border-color);
1661
+ border-radius: 0.25rem;
1662
+ padding: 0.75rem;
1663
+ margin-top: 0.5rem;
1664
+ }
1665
+
1666
+ #project-detail-container .ci-followup-controls {
1667
+ display: flex;
1668
+ flex-direction: column;
1669
+ gap: 0.75rem;
1670
+ margin-top: 0.75rem;
1671
+ }
1672
+
1673
+ #project-detail-container .ci-followup-strategy-option {
1674
+ display: block;
1675
+ margin-bottom: 0.5rem;
1676
+ }
1677
+
1678
+ /* .form-help styles all page-scoped help paragraphs (the deep-research stall
1679
+ timeout helper and the CI Follow-up strategy descriptions), not only the CI
1680
+ Follow-up sub-section. */
1681
+ #project-detail-container .form-help {
1682
+ margin: 0.25rem 0 0;
1683
+ color: var(--secondary-color);
1684
+ font-size: 0.875rem;
1685
+ }
1686
+
1687
+ #project-detail-container .ci-followup-byte-counter {
1688
+ margin-top: 0.25rem;
1689
+ color: var(--secondary-color);
1690
+ font-size: 0.8125rem;
1691
+ }
1692
+
1693
+ #project-detail-container .ci-followup-byte-counter.over-limit {
1694
+ color: var(--error-color);
1695
+ }
1696
+
1697
+ /* BAPI-355: low-emphasis grouping for the TDD/FSD document-format controls.
1698
+ Keeps the existing drawer rhythm (form-group spacing, textarea readability,
1699
+ focus states inherited from the base textarea rules) while visually grouping
1700
+ the two document-format textareas under a shared intro paragraph. */
1701
+ #project-detail-container .form-group-document-format {
1702
+ border-left: 3px solid var(--border-color);
1703
+ padding-left: 0.75rem;
1704
+ }
1705
+
1706
+ #project-detail-container .document-format-help {
1707
+ margin: 0 0 0.5rem;
1708
+ color: var(--secondary-color);
1709
+ font-size: 0.875rem;
1710
+ line-height: 1.4;
1711
+ }
1712
+ /*!*************************************************************************************************************!*\
1713
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/optimize_analysis.css ***!
1714
+ \*************************************************************************************************************/
1715
+ /* Code Analysis Styling */
1716
+
1717
+ .hidden {
1718
+ display: none !important;
1719
+ }
1720
+
1721
+ .analysis-section {
1722
+ margin-bottom: 2rem;
1723
+ padding-bottom: 1.5rem;
1724
+ border-bottom: 1px solid var(--border-color);
1725
+ }
1726
+
1727
+ #build-section {
1728
+ padding-top: 2rem;
1729
+ }
1730
+
1731
+ .analysis-section:last-child {
1732
+ border-bottom: none;
1733
+ }
1734
+
1735
+ .analysis-section h4 {
1736
+ margin-bottom: 1rem;
1737
+ font-size: 1.1rem;
1738
+ font-weight: 600;
1739
+ }
1740
+
1741
+ .analysis-info-label {
1742
+ margin-bottom: 10px;
1743
+ font-style: italic;
1744
+ color: #555;
1745
+ line-height: 1.5;
1746
+ }
1747
+
1748
+ .reanalyze-container {
1749
+ margin-top: 10px;
1750
+ font-size: 0.9em;
1751
+ }
1752
+
1753
+ .reanalyze-container p {
1754
+ margin: 0;
1755
+ }
1756
+
1757
+ .reanalyze-container a {
1758
+ color: var(--primary-color);
1759
+ text-decoration: none;
1760
+ font-weight: 500;
1761
+ }
1762
+
1763
+ .reanalyze-container a:hover {
1764
+ text-decoration: underline;
1765
+ }
1766
+
1767
+ .code-analysis {
1768
+ margin-top: 2rem;
1769
+ padding: 1rem 0;
1770
+ border-top: 1px solid var(--border-color);
1771
+ }
1772
+
1773
+ .code-analysis h3 {
1774
+ margin-bottom: 1rem;
1775
+ font-size: 1.1rem;
1776
+ font-weight: 600;
1777
+ }
1778
+
1779
+ .code-analysis form {
1780
+ display: flex;
1781
+ flex-direction: column;
1782
+ gap: 1rem;
1783
+ margin-bottom: 1rem;
1784
+ }
1785
+
1786
+ .code-analysis form > div {
1787
+ display: flex;
1788
+ flex-direction: column;
1789
+ gap: 0.25rem;
1790
+ }
1791
+
1792
+ .code-analysis label {
1793
+ font-weight: 500;
1794
+ color: var(--text-color);
1795
+ }
1796
+
1797
+ .code-analysis select,
1798
+ .code-analysis textarea {
1799
+ padding: 0.5rem;
1800
+ border: 1px solid var(--border-color);
1801
+ border-radius: 0.25rem;
1802
+ font-family: inherit;
1803
+ }
1804
+
1805
+ .code-analysis select:focus,
1806
+ .code-analysis textarea:focus {
1807
+ outline: none;
1808
+ border-color: var(--primary-color);
1809
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
1810
+ }
1811
+
1812
+ .status-message {
1813
+ margin-top: 0.5rem;
1814
+ font-size: 0.875rem;
1815
+ padding: 0.5rem;
1816
+ border-radius: 0.25rem;
1817
+ }
1818
+
1819
+ .status-message.processing {
1820
+ background-color: #e0f2fe;
1821
+ color: #0277bd;
1822
+ border: 1px solid #81d4fa;
1823
+ }
1824
+
1825
+ .status-message.success {
1826
+ background-color: #e8f5e8;
1827
+ color: #2e7d32;
1828
+ border: 1px solid #a5d6a7;
1829
+ }
1830
+
1831
+ .status-message.error {
1832
+ background-color: #ffebee;
1833
+ color: #c62828;
1834
+ border: 1px solid #ef9a9a;
1835
+ }
1836
+
1837
+ .textarea-wide {
1838
+ width: 100%;
1839
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
1840
+ font-size: 0.875rem;
1841
+ line-height: 1.4;
1842
+ resize: vertical;
1843
+ }
1844
+
1845
+ .code-analysis button {
1846
+ align-self: flex-start;
1847
+ margin-top: 0.5rem;
1848
+ }
1849
+
1850
+ /*!****************************************************************************************************!*\
1851
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/optimize.css ***!
1852
+ \****************************************************************************************************/
1853
+ /* src/css/optimize.css */
1854
+
1855
+ /* Collapsible drawers specific to Optimize View */
1856
+ .collapsible-drawers {
1857
+ margin-bottom: 2rem;
1858
+ }
1859
+
1860
+ .drawer {
1861
+ border: 1px solid var(--border-color);
1862
+ border-radius: 0.25rem;
1863
+ margin-bottom: 1rem;
1864
+ overflow: hidden;
1865
+ }
1866
+
1867
+ .drawer-header {
1868
+ display: flex;
1869
+ justify-content: space-between;
1870
+ align-items: center;
1871
+ padding: 1rem;
1872
+ background-color: #f9fafb;
1873
+ cursor: pointer;
1874
+ }
1875
+
1876
+ .drawer-header h2 {
1877
+ font-size: 1rem;
1878
+ font-weight: 500;
1879
+ }
1880
+
1881
+ .toggle-drawer {
1882
+ background: none;
1883
+ border: none;
1884
+ font-size: 1rem;
1885
+ cursor: pointer;
1886
+ transition: transform var(--drawer-transition);
1887
+ }
1888
+
1889
+ .drawer-content {
1890
+ padding: 1rem;
1891
+ border-top: 1px solid var(--border-color);
1892
+ /* Visibility is controlled solely by the global `.hidden` class (BAPI-301);
1893
+ `.expanded` is reserved for header/glyph styling. The shared drawer helper
1894
+ sets the ▲/▼ glyph text directly, so no CSS rotation is applied. */
1895
+ }
1896
+
1897
+ /* Planner sub-section */
1898
+ .planner-section {
1899
+ display: flex;
1900
+ flex-direction: column;
1901
+ gap: 1rem;
1902
+ margin-top: 1rem;
1903
+ }
1904
+
1905
+ select[multiple] {
1906
+ min-height: 180px;
1907
+ border: 1px solid var(--border-color);
1908
+ border-radius: 0.25rem;
1909
+ }
1910
+
1911
+ /* Label styling */
1912
+ label {
1913
+ font-weight: 500;
1914
+ color: var(--text-color);
1915
+ margin-bottom: 0.5rem;
1916
+ display: block;
1917
+ }
1918
+
1919
+ /* ====================================================================
1920
+ * LEARN REPOSITORY STYLES
1921
+ * ==================================================================== */
1922
+ #learn-repository-section {
1923
+ * {
1924
+ margin-top: 1rem;
1925
+ }
1926
+
1927
+ padding-bottom: 2rem;
1928
+ border-bottom: 1px solid var(--border-color);
1929
+ }
1930
+
1931
+ .learn-section {
1932
+ padding-bottom: 1.5rem;
1933
+ margin-bottom: 1.5rem;
1934
+ border-bottom: 1px solid #e5e7eb;
1935
+ }
1936
+
1937
+ .learn-section:last-of-type {
1938
+ border-bottom: none;
1939
+ margin-bottom: 0;
1940
+ }
1941
+
1942
+ /* ====================================================================
1943
+ * LEARN REPOSITORY PER-SECTION STATE CLASSES (BAPI-307)
1944
+ *
1945
+ * Declarative per-section state cues. Visibility is driven ONLY by the global
1946
+ * `.hidden` class (toggled in JS by the renderer); these classes add a small
1947
+ * left-border status accent and never set display/visibility. `data-state` is
1948
+ * intentionally NOT used as a visibility mechanism, and `.hidden` is never
1949
+ * redefined here.
1950
+ * ==================================================================== */
1951
+ .learn-section.lr-state-idle {
1952
+ border-left: 3px solid var(--border-color);
1953
+ padding-left: 1rem;
1954
+ }
1955
+
1956
+ .learn-section.lr-state-running {
1957
+ border-left: 3px solid var(--primary-color);
1958
+ padding-left: 1rem;
1959
+ }
1960
+
1961
+ .learn-section.lr-state-review {
1962
+ border-left: 3px solid var(--primary-color);
1963
+ padding-left: 1rem;
1964
+ }
1965
+
1966
+ .learn-section.lr-state-draft {
1967
+ border-left: 3px solid var(--primary-color);
1968
+ padding-left: 1rem;
1969
+ }
1970
+
1971
+ .learn-section.lr-state-complete {
1972
+ border-left: 3px solid var(--text-color);
1973
+ padding-left: 1rem;
1974
+ }
1975
+
1976
+ /* The Reanalyze control is now a <button> (BAPI-307) rather than an inline
1977
+ * link; keep it left-aligned as a block action within the section actions. */
1978
+ .lr-reanalyze-link {
1979
+ display: inline-block;
1980
+ }
1981
+
1982
+ .lr-initial-mode-options {
1983
+ display: flex;
1984
+ flex-direction: row;
1985
+ gap: 1.25rem;
1986
+ align-items: center;
1987
+ }
1988
+
1989
+ .lr-initial-mode-options label {
1990
+ display: inline;
1991
+ font-weight: normal;
1992
+ }
1993
+
1994
+ .lr-in-progress-container {
1995
+ margin: 0.5rem 0 1rem;
1996
+ padding: 0.75rem 1rem;
1997
+ border: 1px solid var(--border-color);
1998
+ border-radius: 0.375rem;
1999
+ }
2000
+
2001
+ /* Horizontal separation between the reanalyze Confirm and Cancel buttons.
2002
+ * Adjacent-sibling margin keeps the existing block-level radio labels from
2003
+ * being reflowed, which a flex/gap container would do. */
2004
+ .lr-reanalyze-confirm-btn + .lr-reanalyze-cancel-btn {
2005
+ margin-left: 0.5rem;
2006
+ }
2007
+
2008
+ /* ====================================================================
2009
+ * ESTIMATOR SECTION STYLES
2010
+ * ==================================================================== */
2011
+
2012
+ #estimator-section {
2013
+ display: flex;
2014
+ flex-direction: column;
2015
+ gap: 1rem;
2016
+ }
2017
+
2018
+ #estimator-section > div {
2019
+ padding: 1rem;
2020
+ border-radius: 0.375rem;
2021
+ border: 1px solid var(--border-color);
2022
+ }
2023
+
2024
+ #estimator-optimize {
2025
+ background-color: #f0f9ff;
2026
+ border-color: #0ea5e9;
2027
+ }
2028
+
2029
+ #estimator-running {
2030
+ background-color: #fef3c7;
2031
+ border-color: #f59e0b;
2032
+ }
2033
+
2034
+ #estimator-review {
2035
+ background-color: #f0fdf4;
2036
+ border-color: #22c55e;
2037
+ }
2038
+
2039
+ #estimator-loading {
2040
+ background-color: #f3f4f6;
2041
+ border-color: var(--border-color);
2042
+ text-align: center;
2043
+ }
2044
+
2045
+ #range-editor {
2046
+ margin: 1rem 0;
2047
+ }
2048
+
2049
+ #range-json {
2050
+ width: 100%;
2051
+ min-height: 300px;
2052
+ padding: 0.75rem;
2053
+ border: 1px solid var(--border-color);
2054
+ border-radius: 0.375rem;
2055
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
2056
+ font-size: 0.875rem;
2057
+ line-height: 1.5;
2058
+ background-color: #f8fafc;
2059
+ resize: vertical;
2060
+ }
2061
+
2062
+ #range-json:focus {
2063
+ outline: none;
2064
+ border-color: var(--primary-color);
2065
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);
2066
+ }
2067
+
2068
+ .estimator-actions {
2069
+ display: flex;
2070
+ gap: 0.5rem;
2071
+ margin-top: 1rem;
2072
+ }
2073
+
2074
+ .estimator-actions .btn {
2075
+ flex: 0 0 auto;
2076
+ }
2077
+
2078
+ /* Responsive design for estimator */
2079
+ @media (max-width: 768px) {
2080
+ #range-json {
2081
+ min-height: 200px;
2082
+ font-size: 0.75rem;
2083
+ }
2084
+
2085
+ .estimator-actions {
2086
+ flex-direction: column;
2087
+ }
2088
+
2089
+ .estimator-actions .btn {
2090
+ width: 100%;
2091
+ }
2092
+ }
2093
+
2094
+ /* Success/Error states for estimator messages */
2095
+ .estimator-message {
2096
+ padding: 0.75rem;
2097
+ border-radius: 0.375rem;
2098
+ margin-bottom: 1rem;
2099
+ }
2100
+
2101
+ .estimator-message.success {
2102
+ background-color: #dcfce7;
2103
+ color: #166534;
2104
+ border: 1px solid #22c55e;
2105
+ }
2106
+
2107
+ .estimator-message.error {
2108
+ background-color: #fef2f2;
2109
+ color: #991b1b;
2110
+ border: 1px solid #ef4444;
2111
+ }
2112
+
2113
+ .estimator-message.info {
2114
+ background-color: #eff6ff;
2115
+ color: #1e40af;
2116
+ border: 1px solid #3b82f6;
2117
+ }
2118
+
2119
+ .draft-review-container .btn + .btn {
2120
+ margin-left: 1.5rem;
2121
+ }
2122
+
2123
+ /*!***************************************************************************************************!*\
2124
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/globals.css ***!
2125
+ \***************************************************************************************************/
2126
+ /* Font faces */
2127
+ @font-face {
2128
+ font-family: 'Source Sans Pro';
2129
+ src: url('/public/fonts/SourceSansPro-Regular.ttf') format('truetype');
2130
+ font-weight: 400;
2131
+ font-style: normal;
2132
+ }
2133
+
2134
+ @font-face {
2135
+ font-family: 'Source Sans Pro';
2136
+ src: url('/public/fonts/SourceSansPro-Italic.ttf') format('truetype');
2137
+ font-weight: 400;
2138
+ font-style: italic;
2139
+ }
2140
+
2141
+ @font-face {
2142
+ font-family: 'Source Sans Pro';
2143
+ src: url('/public/fonts/SourceSansPro-ExtraLight.ttf') format('truetype');
2144
+ font-weight: 200;
2145
+ font-style: normal;
2146
+ }
2147
+
2148
+ @font-face {
2149
+ font-family: 'Source Sans Pro';
2150
+ src: url('/public/fonts/SourceSansPro-ExtraLightItalic.ttf') format('truetype');
2151
+ font-weight: 200;
2152
+ font-style: italic;
2153
+ }
2154
+
2155
+ @font-face {
2156
+ font-family: 'Source Sans Pro';
2157
+ src: url('/public/fonts/SourceSansPro-Light.ttf') format('truetype');
2158
+ font-weight: 300;
2159
+ font-style: normal;
2160
+ }
2161
+
2162
+ @font-face {
2163
+ font-family: 'Source Sans Pro';
2164
+ src: url('/public/fonts/SourceSansPro-LightItalic.ttf') format('truetype');
2165
+ font-weight: 300;
2166
+ font-style: italic;
2167
+ }
2168
+
2169
+ @font-face {
2170
+ font-family: 'Source Sans Pro';
2171
+ src: url('/public/fonts/SourceSansPro-SemiBold.ttf') format('truetype');
2172
+ font-weight: 600;
2173
+ font-style: normal;
2174
+ }
2175
+
2176
+ @font-face {
2177
+ font-family: 'Source Sans Pro';
2178
+ src: url('/public/fonts/SourceSansPro-SemiBoldItalic.ttf') format('truetype');
2179
+ font-weight: 600;
2180
+ font-style: italic;
2181
+ }
2182
+
2183
+ @font-face {
2184
+ font-family: 'Source Sans Pro';
2185
+ src: url('/public/fonts/SourceSansPro-Bold.ttf') format('truetype');
2186
+ font-weight: 700;
2187
+ font-style: normal;
2188
+ }
2189
+
2190
+ @font-face {
2191
+ font-family: 'Source Sans Pro';
2192
+ src: url('/public/fonts/SourceSansPro-BoldItalic.ttf') format('truetype');
2193
+ font-weight: 700;
2194
+ font-style: italic;
2195
+ }
2196
+
2197
+ @font-face {
2198
+ font-family: 'Source Sans Pro';
2199
+ src: url('/public/fonts/SourceSansPro-Black.ttf') format('truetype');
2200
+ font-weight: 900;
2201
+ font-style: normal;
2202
+ }
2203
+
2204
+ @font-face {
2205
+ font-family: 'Source Sans Pro';
2206
+ src: url('/public/fonts/SourceSansPro-BlackItalic.ttf') format('truetype');
2207
+ font-weight: 900;
2208
+ font-style: italic;
2209
+ }
2210
+
2211
+ /* Global variables */
2212
+ :root {
2213
+ --primary-color: #E2624B;
2214
+ --primary-dark: #C51616;
2215
+ --secondary-color: #6b7280;
2216
+ --light-grey: #eee;
2217
+ --secondary-button-background: #fdf4ec;
2218
+ --light-orange: #F2B27A;
2219
+ --dark-orange: #e17055;
2220
+ --background-color: #fffdf0;
2221
+ --surface-color: #ffffff;
2222
+ --text-color: #393D4E;
2223
+ --border-color: #e6e4d5;
2224
+ --error-color: #ef4444;
2225
+ --success-color: #10b981;
2226
+ --header-height: 60px;
2227
+ --box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
2228
+ }
2229
+
2230
+ /* Reset and base styles */
2231
+ * {
2232
+ margin: 0;
2233
+ padding: 0;
2234
+ box-sizing: border-box;
2235
+ }
2236
+
2237
+ body {
2238
+ font-family: 'Source Sans Pro', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
2239
+ background-color: var(--background-color);
2240
+ color: var(--text-color);
2241
+ line-height: 1.5;
2242
+ min-height: 100vh;
2243
+ padding-top: var(--header-height);
2244
+ }
2245
+
2246
+ .hidden {
2247
+ display: none !important;
2248
+ }
2249
+
2250
+ /* Button styles */
2251
+ .btn {
2252
+ cursor: pointer;
2253
+ padding: 0.75rem 2rem;
2254
+ border-radius: 4px;
2255
+ border: 1px solid transparent;
2256
+ font-size: 1rem;
2257
+ line-height: 1.25rem;
2258
+ transition: background-color 0.3s ease;
2259
+ }
2260
+
2261
+ .btn-primary {
2262
+ background-color: var(--primary-color);
2263
+ color: white;
2264
+ }
2265
+
2266
+ .btn-primary:hover {
2267
+ background-color: var(--primary-dark);
2268
+ }
2269
+
2270
+ .btn-secondary {
2271
+ background-color: var(--secondary-button-background);
2272
+ border: 1px solid var(--light-orange);
2273
+ color: #333;
2274
+ }
2275
+
2276
+ .btn-secondary:hover {
2277
+ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
2278
+ background-color: var(--dark-orange);
2279
+ color: white;
2280
+ }
2281
+
2282
+ .btn-sm {
2283
+ padding: 0.2rem 0.5rem;
2284
+ font-size: 0.75rem;
2285
+ }
2286
+
2287
+ .btn-danger {
2288
+ background-color: var(--error-color);
2289
+ color: white;
2290
+ }
2291
+
2292
+ .btn-danger:hover {
2293
+ background-color: #b91c1c; /* darker red for hover */
2294
+ }
2295
+
2296
+ .btn:disabled {
2297
+ background-color: #d1d5db;
2298
+ cursor: not-allowed;
2299
+ opacity: 0.6;
2300
+ }
2301
+
2302
+ /* Form element base styles */
2303
+ label {
2304
+ display: block;
2305
+ font-size: 0.875rem;
2306
+ font-weight: 500;
2307
+ margin-bottom: 0.5rem;
2308
+ }
2309
+
2310
+ input[type="text"],
2311
+ input[type="password"],
2312
+ input[type="email"],
2313
+ input[type="url"],
2314
+ input[type="number"],
2315
+ textarea {
2316
+ width: 100%;
2317
+ padding: 0.5rem;
2318
+ font-size: 1rem;
2319
+ border: 1px solid var(--border-color);
2320
+ border-radius: 0.25rem;
2321
+ background-color: #fff;
2322
+ }
2323
+
2324
+ input[type="number"] {
2325
+ width: auto;
2326
+ }
2327
+
2328
+ textarea {
2329
+ min-height: 100px;
2330
+ resize: vertical;
2331
+ }
2332
+
2333
+ .required {
2334
+ color: var(--error-color);
2335
+ }
2336
+
2337
+ /* Checkbox styling */
2338
+ .form-group.checkbox {
2339
+ display: flex;
2340
+ align-items: center;
2341
+ flex-wrap: wrap;
2342
+ }
2343
+
2344
+ .form-group.checkbox input {
2345
+ margin-right: 0.5rem;
2346
+ }
2347
+
2348
+ .form-group.checkbox label {
2349
+ margin-bottom: 0;
2350
+ }
2351
+
2352
+ /* Modal base styles (if used globally) */
2353
+ .modal {
2354
+ display: none;
2355
+ position: fixed;
2356
+ z-index: 1000;
2357
+ left: 0;
2358
+ top: 0;
2359
+ width: 100vw;
2360
+ height: 100vh;
2361
+ background: rgba(0,0,0,0.4);
2362
+ align-items: center;
2363
+ justify-content: center;
2364
+ }
2365
+
2366
+ /*!*******************************************************************************************************!*\
2367
+ !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./src/css/data_health.css ***!
2368
+ \*******************************************************************************************************/
2369
+ /* src/css/data_health.css */
2370
+
2371
+ /* Collapsible drawers for Data Health View */
2372
+ .collapsible-drawers {
2373
+ margin-bottom: 2rem;
2374
+ }
2375
+
2376
+ .drawer {
2377
+ border: 1px solid var(--border-color);
2378
+ border-radius: 0.25rem;
2379
+ margin-bottom: 1rem;
2380
+ overflow: hidden;
2381
+ }
2382
+
2383
+ .drawer-header {
2384
+ display: flex;
2385
+ justify-content: space-between;
2386
+ align-items: center;
2387
+ padding: 1rem;
2388
+ background-color: #f9fafb;
2389
+ cursor: pointer;
2390
+ }
2391
+
2392
+ .drawer-header h2 {
2393
+ font-size: 1rem;
2394
+ font-weight: 500;
2395
+ }
2396
+
2397
+ .toggle-drawer {
2398
+ background: none;
2399
+ border: none;
2400
+ font-size: 1rem;
2401
+ cursor: pointer;
2402
+ transition: transform var(--drawer-transition);
2403
+ }
2404
+
2405
+ .drawer-content {
2406
+ padding: 1rem;
2407
+ border-top: 1px solid var(--border-color);
2408
+ /* Visibility is controlled solely by the global `.hidden` class (BAPI-301);
2409
+ `.expanded` is reserved for header/glyph styling. The shared drawer helper
2410
+ sets the ▲/▼ glyph text directly, so no CSS rotation is applied. */
2411
+ }
2412
+
2413
+ /* ========================================
2414
+ Parse / Learn Repository Jobs Section Styles
2415
+ ======================================== */
2416
+
2417
+ .parse-repository-jobs-section,
2418
+ .learn-repository-jobs-section {
2419
+ display: flex;
2420
+ flex-direction: column;
2421
+ gap: 1.5rem;
2422
+ }
2423
+
2424
+ /* Last-ran timestamp shown under the Update Repository action.
2425
+ Replaces a former inline style on the template. */
2426
+ .operation-last-ran {
2427
+ margin-top: 0.5rem;
2428
+ font-size: 0.875rem;
2429
+ }
2430
+
2431
+ /* Parse schedule status panel. Replaces the former inline-styled status
2432
+ blocks; state colors come from global design tokens (no hardcoded colors). */
2433
+ .parse-schedule-status {
2434
+ margin-top: 0.75rem;
2435
+ padding: 0.75rem;
2436
+ border: 1px solid var(--border-color);
2437
+ border-radius: 4px;
2438
+ font-size: 0.875rem;
2439
+ }
2440
+
2441
+ .parse-schedule-status--active {
2442
+ color: var(--success-color);
2443
+ border-color: var(--success-color);
2444
+ }
2445
+
2446
+ .parse-schedule-status--paused,
2447
+ .parse-schedule-status--empty {
2448
+ color: var(--dark-orange);
2449
+ border-color: var(--dark-orange);
2450
+ }
2451
+
2452
+ .parse-schedule-next-run {
2453
+ display: block;
2454
+ margin-top: 0.25rem;
2455
+ color: var(--text-color);
2456
+ }
2457
+
2458
+ .parse-schedule-actions {
2459
+ margin-top: 0.5rem;
2460
+ display: flex;
2461
+ gap: 0.5rem;
2462
+ }
2463
+
2464
+ .operation-row {
2465
+ display: flex;
2466
+ flex-direction: column;
2467
+ padding-bottom: 1rem;
2468
+ border-bottom: 1px solid var(--border-color);
2469
+ }
2470
+
2471
+ .operation-row:last-child {
2472
+ border-bottom: none;
2473
+ padding-bottom: 0;
2474
+ }
2475
+
2476
+ .operation-item {
2477
+ display: flex;
2478
+ flex-direction: column;
2479
+ gap: 0.5rem;
2480
+ }
2481
+
2482
+ .operation-item .btn {
2483
+ align-self: flex-start;
2484
+ }
2485
+
2486
+ .operation-label {
2487
+ font-size: 0.875rem;
2488
+ color: var(--secondary-color);
2489
+ line-height: 1.4;
2490
+ }
2491
+
2492
+ .schedule-controls {
2493
+ display: flex;
2494
+ gap: 1rem;
2495
+ margin-top: 0.5rem;
2496
+ align-items: flex-end;
2497
+ }
2498
+
2499
+ .schedule-controls .form-group {
2500
+ margin-bottom: 0;
2501
+ }
2502
+
2503
+ .schedule-controls .form-group.inline {
2504
+ display: flex;
2505
+ flex-direction: column;
2506
+ gap: 0.25rem;
2507
+ }
2508
+
2509
+ .schedule-controls .form-group.inline label {
2510
+ font-size: 0.75rem;
2511
+ color: var(--secondary-color);
2512
+ }
2513
+
2514
+ .schedule-controls .form-group.inline input,
2515
+ .schedule-controls .form-group.inline select {
2516
+ width: auto;
2517
+ min-width: 120px;
2518
+ padding: 0.375rem 0.5rem;
2519
+ font-size: 0.875rem;
2520
+ }
2521
+
2522
+ /* ========================================
2523
+ Data Integrity Section Styles
2524
+ ======================================== */
2525
+
2526
+ /* Loading and error states */
2527
+ .integrity-loading,
2528
+ .integrity-error {
2529
+ padding: 1rem;
2530
+ text-align: center;
2531
+ color: var(--secondary-color);
2532
+ }
2533
+
2534
+ .integrity-error {
2535
+ color: var(--error-color);
2536
+ background-color: #fef2f2;
2537
+ border: 1px solid #fecaca;
2538
+ border-radius: 0.25rem;
2539
+ }
2540
+
2541
+ /* Summary statistics */
2542
+ .integrity-summary {
2543
+ display: flex;
2544
+ gap: 2rem;
2545
+ margin-bottom: 1.5rem;
2546
+ padding: 1rem;
2547
+ background-color: #f9fafb;
2548
+ border-radius: 0.25rem;
2549
+ }
2550
+
2551
+ .integrity-stat {
2552
+ display: flex;
2553
+ flex-direction: column;
2554
+ align-items: center;
2555
+ }
2556
+
2557
+ .integrity-stat-label {
2558
+ font-size: 0.875rem;
2559
+ color: var(--secondary-color);
2560
+ margin-bottom: 0.25rem;
2561
+ }
2562
+
2563
+ .integrity-stat-value {
2564
+ font-size: 1.5rem;
2565
+ font-weight: 600;
2566
+ color: var(--text-color);
2567
+ }
2568
+
2569
+ .integrity-stat-value.integrity-healthy {
2570
+ color: #16a34a;
2571
+ }
2572
+
2573
+ /* Empty state */
2574
+ .integrity-empty-state {
2575
+ padding: 1.5rem;
2576
+ text-align: center;
2577
+ background-color: #f0fdf4;
2578
+ border: 1px solid #bbf7d0;
2579
+ border-radius: 0.25rem;
2580
+ color: #166534;
2581
+ }
2582
+
2583
+ .integrity-empty-state p {
2584
+ margin: 0;
2585
+ font-weight: 500;
2586
+ }
2587
+
2588
+ /* Issues table */
2589
+ .integrity-table {
2590
+ width: 100%;
2591
+ border-collapse: collapse;
2592
+ margin-top: 1rem;
2593
+ }
2594
+
2595
+ .integrity-table th,
2596
+ .integrity-table td {
2597
+ padding: 0.75rem;
2598
+ text-align: left;
2599
+ border-bottom: 1px solid var(--border-color);
2600
+ }
2601
+
2602
+ .integrity-table th {
2603
+ background-color: #f9fafb;
2604
+ font-weight: 500;
2605
+ font-size: 0.875rem;
2606
+ color: var(--secondary-color);
2607
+ }
2608
+
2609
+ .integrity-table td {
2610
+ font-size: 0.875rem;
2611
+ vertical-align: top;
2612
+ }
2613
+
2614
+ .integrity-table tbody tr:hover {
2615
+ background-color: #f9fafb;
2616
+ }
2617
+
2618
+ /* File list styling */
2619
+ .integrity-file-list {
2620
+ font-family: monospace;
2621
+ font-size: 0.8rem;
2622
+ background-color: #f1f5f9;
2623
+ padding: 0.5rem;
2624
+ border-radius: 4px;
2625
+ max-height: 150px;
2626
+ overflow-y: auto;
2627
+ margin: 0;
2628
+ list-style: none;
2629
+ }
2630
+
2631
+ .integrity-file-list li {
2632
+ padding: 0.125rem 0;
2633
+ word-break: break-all;
2634
+ }
2635
+
2636
+ .integrity-file-list li:not(:last-child) {
2637
+ border-bottom: 1px solid #e2e8f0;
2638
+ }
2639
+
2640
+ .integrity-more-files {
2641
+ font-style: italic;
2642
+ color: var(--secondary-color);
2643
+ font-size: 0.8rem;
2644
+ margin-top: 0.25rem;
2645
+ }
2646
+
2647
+ /* Issues container header */
2648
+ #integrity-issues-container h3 {
2649
+ font-size: 1rem;
2650
+ font-weight: 500;
2651
+ color: var(--text-color);
2652
+ margin-bottom: 0.5rem;
2653
+ }
2654
+
2655
+ /* ========================================
2656
+ Configuration Health Section Styles
2657
+ ======================================== */
2658
+
2659
+ /* Loading and error states */
2660
+ .config-health-loading,
2661
+ .config-health-error {
2662
+ padding: 1rem;
2663
+ text-align: center;
2664
+ color: var(--secondary-color);
2665
+ }
2666
+
2667
+ .config-health-error {
2668
+ color: var(--error-color);
2669
+ background-color: #fef2f2;
2670
+ border: 1px solid #fecaca;
2671
+ border-radius: 0.25rem;
2672
+ }
2673
+
2674
+ /* Summary statistics */
2675
+ .health-stats {
2676
+ display: flex;
2677
+ gap: 2rem;
2678
+ margin-bottom: 1.5rem;
2679
+ padding: 1rem;
2680
+ background-color: #f9fafb;
2681
+ border-radius: 0.25rem;
2682
+ }
2683
+
2684
+ .health-stat {
2685
+ display: flex;
2686
+ flex-direction: column;
2687
+ align-items: center;
2688
+ }
2689
+
2690
+ .health-stat-label {
2691
+ font-size: 0.875rem;
2692
+ color: var(--secondary-color);
2693
+ margin-bottom: 0.25rem;
2694
+ }
2695
+
2696
+ .health-stat-value {
2697
+ font-size: 1.5rem;
2698
+ font-weight: 600;
2699
+ color: var(--text-color);
2700
+ }
2701
+
2702
+ .health-stat-value.health-configured {
2703
+ color: #16a34a;
2704
+ }
2705
+
2706
+ .health-stat-value.health-errors {
2707
+ color: var(--error-color);
2708
+ }
2709
+
2710
+ .health-stat-value.health-warnings {
2711
+ color: #f59e0b;
2712
+ }
2713
+
2714
+ /* All good state */
2715
+ .config-health-all-good {
2716
+ padding: 1.5rem;
2717
+ text-align: center;
2718
+ background-color: #f0fdf4;
2719
+ border: 1px solid #bbf7d0;
2720
+ border-radius: 0.25rem;
2721
+ color: #166534;
2722
+ }
2723
+
2724
+ .config-health-all-good p {
2725
+ margin: 0;
2726
+ font-weight: 500;
2727
+ }
2728
+
2729
+ /* Config health table */
2730
+ .config-health-table {
2731
+ width: 100%;
2732
+ border-collapse: collapse;
2733
+ margin-top: 1rem;
2734
+ }
2735
+
2736
+ .config-health-table th,
2737
+ .config-health-table td {
2738
+ padding: 0.75rem;
2739
+ text-align: left;
2740
+ border-bottom: 1px solid var(--border-color);
2741
+ }
2742
+
2743
+ .config-health-table th {
2744
+ background-color: #f9fafb;
2745
+ font-weight: 500;
2746
+ font-size: 0.875rem;
2747
+ color: var(--secondary-color);
2748
+ }
2749
+
2750
+ .config-health-table td {
2751
+ font-size: 0.875rem;
2752
+ vertical-align: top;
2753
+ }
2754
+
2755
+ .config-health-table tbody tr:hover {
2756
+ background-color: #f9fafb;
2757
+ }
2758
+
2759
+ /* Status badge styling */
2760
+ .config-status-badge {
2761
+ display: inline-block;
2762
+ padding: 0.25rem 0.5rem;
2763
+ border-radius: 0.25rem;
2764
+ font-size: 0.75rem;
2765
+ font-weight: 500;
2766
+ text-transform: uppercase;
2767
+ }
2768
+
2769
+ .config-status-badge.status-missing {
2770
+ background-color: #fef2f2;
2771
+ color: #991b1b;
2772
+ }
2773
+
2774
+ .config-status-badge.status-invalid {
2775
+ background-color: #fef2f2;
2776
+ color: #991b1b;
2777
+ }
2778
+
2779
+ /* Dismiss button / text button styling */
2780
+ .btn-text {
2781
+ background-color: transparent;
2782
+ border: 1px solid var(--border-color);
2783
+ border-radius: 0.25rem;
2784
+ padding: 0.375rem 0.75rem;
2785
+ font-size: 0.875rem;
2786
+ color: var(--secondary-color);
2787
+ cursor: pointer;
2788
+ transition: all 0.2s ease;
2789
+ }
2790
+
2791
+ .btn-text:hover {
2792
+ background-color: #f9fafb;
2793
+ border-color: var(--secondary-color);
2794
+ color: var(--text-color);
2795
+ }
2796
+
2797
+ .btn-text:active {
2798
+ background-color: #f3f4f6;
2799
+ }
2800
+
2801
+ .btn-text:disabled {
2802
+ opacity: 0.5;
2803
+ cursor: not-allowed;
2804
+ }
2805
+
2806
+ /* Config errors/warnings container headers */
2807
+ #config-errors-container h3,
2808
+ #config-warnings-container h3 {
2809
+ font-size: 1rem;
2810
+ font-weight: 500;
2811
+ color: var(--text-color);
2812
+ margin-bottom: 0.5rem;
2813
+ margin-top: 1.5rem;
2814
+ }
2815
+
2816
+ #config-errors-container h3 {
2817
+ color: var(--error-color);
2818
+ }
2819
+
2820
+ #config-warnings-container h3 {
2821
+ color: #f59e0b;
2822
+ }
2823
+
2824
+ /* ========================================
2825
+ Pinecone Data Integrity Section Styles
2826
+ ======================================== */
2827
+
2828
+ /* Actions container with button and last run text */
2829
+ .pinecone-health-actions {
2830
+ display: flex;
2831
+ align-items: center;
2832
+ gap: 1rem;
2833
+ margin-bottom: 1rem;
2834
+ }
2835
+
2836
+ .last-run-text {
2837
+ font-size: 0.875rem;
2838
+ color: var(--secondary-color);
2839
+ }
2840
+
2841
+ /* Loading and error states */
2842
+ .pinecone-health-loading,
2843
+ .pinecone-health-error {
2844
+ padding: 1rem;
2845
+ text-align: center;
2846
+ color: var(--secondary-color);
2847
+ }
2848
+
2849
+ .pinecone-health-error {
2850
+ color: var(--error-color);
2851
+ background-color: #fef2f2;
2852
+ border: 1px solid #fecaca;
2853
+ border-radius: 0.25rem;
2854
+ }
2855
+
2856
+ /* No results state */
2857
+ .pinecone-health-no-results {
2858
+ padding: 1rem;
2859
+ text-align: center;
2860
+ color: var(--secondary-color);
2861
+ background-color: #f9fafb;
2862
+ border: 1px solid var(--border-color);
2863
+ border-radius: 0.25rem;
2864
+ }
2865
+
2866
+ .pinecone-health-no-results p {
2867
+ margin: 0;
2868
+ }
2869
+
2870
+ /* Status container and badge */
2871
+ .pinecone-health-status-container {
2872
+ display: flex;
2873
+ align-items: center;
2874
+ gap: 0.5rem;
2875
+ margin-bottom: 1rem;
2876
+ }
2877
+
2878
+ .pinecone-health-status {
2879
+ display: inline-block;
2880
+ padding: 0.25rem 0.75rem;
2881
+ border-radius: 0.25rem;
2882
+ font-size: 0.75rem;
2883
+ font-weight: 600;
2884
+ text-transform: uppercase;
2885
+ }
2886
+
2887
+ .pinecone-health-status.status-healthy {
2888
+ background-color: #dcfce7;
2889
+ color: #166534;
2890
+ }
2891
+
2892
+ .pinecone-health-status.status-error {
2893
+ background-color: #fef2f2;
2894
+ color: #991b1b;
2895
+ }
2896
+
2897
+ .pinecone-health-status.status-warning {
2898
+ background-color: #fef3c7;
2899
+ color: #92400e;
2900
+ }
2901
+
2902
+ .pinecone-health-status.status-running {
2903
+ background-color: #dbeafe;
2904
+ color: #1e40af;
2905
+ }
2906
+
2907
+ /* Summary statistics */
2908
+ .pinecone-health-summary {
2909
+ display: flex;
2910
+ gap: 2rem;
2911
+ margin-bottom: 1.5rem;
2912
+ padding: 1rem;
2913
+ background-color: #f9fafb;
2914
+ border-radius: 0.25rem;
2915
+ flex-wrap: wrap;
2916
+ }
2917
+
2918
+ .pinecone-health-stat {
2919
+ display: flex;
2920
+ flex-direction: column;
2921
+ align-items: center;
2922
+ min-width: 80px;
2923
+ }
2924
+
2925
+ .pinecone-health-stat-label {
2926
+ font-size: 0.875rem;
2927
+ color: var(--secondary-color);
2928
+ margin-bottom: 0.25rem;
2929
+ }
2930
+
2931
+ .pinecone-health-stat-value {
2932
+ font-size: 1.5rem;
2933
+ font-weight: 600;
2934
+ color: var(--text-color);
2935
+ }
2936
+
2937
+ /* All good state */
2938
+ .pinecone-health-all-good {
2939
+ padding: 1.5rem;
2940
+ text-align: center;
2941
+ background-color: #f0fdf4;
2942
+ border: 1px solid #bbf7d0;
2943
+ border-radius: 0.25rem;
2944
+ color: #166534;
2945
+ }
2946
+
2947
+ .pinecone-health-all-good p {
2948
+ margin: 0;
2949
+ font-weight: 500;
2950
+ }
2951
+
2952
+ /* Pinecone health table (shared styles for namespace and failures tables) */
2953
+ .pinecone-health-table {
2954
+ width: 100%;
2955
+ border-collapse: collapse;
2956
+ margin-top: 1rem;
2957
+ table-layout: fixed;
2958
+ }
2959
+
2960
+ .pinecone-health-table th,
2961
+ .pinecone-health-table td {
2962
+ padding: 0.75rem;
2963
+ text-align: left;
2964
+ border-bottom: 1px solid var(--border-color);
2965
+ }
2966
+
2967
+ .pinecone-health-table th {
2968
+ background-color: #f9fafb;
2969
+ font-weight: 500;
2970
+ font-size: 0.875rem;
2971
+ color: var(--secondary-color);
2972
+ }
2973
+
2974
+ .pinecone-health-table td {
2975
+ font-size: 0.875rem;
2976
+ vertical-align: middle;
2977
+ word-wrap: break-word;
2978
+ }
2979
+
2980
+ .pinecone-health-table tbody tr:hover {
2981
+ background-color: #f9fafb;
2982
+ }
2983
+
2984
+ /* Namespace results table column widths */
2985
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(1),
2986
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(1) {
2987
+ width: 25%;
2988
+ }
2989
+
2990
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(2),
2991
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(2) {
2992
+ width: 15%;
2993
+ }
2994
+
2995
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(3),
2996
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(3),
2997
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(4),
2998
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(4),
2999
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(5),
3000
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(5) {
3001
+ width: 12%;
3002
+ text-align: right;
3003
+ }
3004
+
3005
+ #pinecone-namespace-container .pinecone-health-table th:nth-child(6),
3006
+ #pinecone-namespace-container .pinecone-health-table td:nth-child(6) {
3007
+ width: 12%;
3008
+ text-align: center;
3009
+ }
3010
+
3011
+ /* Sample failures table column widths */
3012
+ #pinecone-failures-container .pinecone-health-table th:nth-child(1),
3013
+ #pinecone-failures-container .pinecone-health-table td:nth-child(1) {
3014
+ width: 20%;
3015
+ }
3016
+
3017
+ #pinecone-failures-container .pinecone-health-table th:nth-child(2),
3018
+ #pinecone-failures-container .pinecone-health-table td:nth-child(2) {
3019
+ width: 15%;
3020
+ }
3021
+
3022
+ #pinecone-failures-container .pinecone-health-table th:nth-child(3),
3023
+ #pinecone-failures-container .pinecone-health-table td:nth-child(3) {
3024
+ width: 30%;
3025
+ font-family: monospace;
3026
+ font-size: 0.8rem;
3027
+ }
3028
+
3029
+ #pinecone-failures-container .pinecone-health-table th:nth-child(4),
3030
+ #pinecone-failures-container .pinecone-health-table td:nth-child(4) {
3031
+ width: 35%;
3032
+ }
3033
+
3034
+ /* Container headers */
3035
+ #pinecone-namespace-container h3,
3036
+ #pinecone-failures-container h3 {
3037
+ font-size: 1rem;
3038
+ font-weight: 500;
3039
+ color: var(--text-color);
3040
+ margin-bottom: 0.5rem;
3041
+ margin-top: 1.5rem;
3042
+ }
3043
+
3044
+ #pinecone-failures-container h3 {
3045
+ color: var(--error-color);
3046
+ }
3047
+
3048
+ /* ========================================
3049
+ Pinecone Regenerate Section Styles
3050
+ ======================================== */
3051
+
3052
+ .pinecone-regenerate-section {
3053
+ margin-top: 1.5rem;
3054
+ padding-top: 1.5rem;
3055
+ border-top: 1px solid var(--border-color);
3056
+ }
3057
+
3058
+ .pinecone-regenerate-section h4 {
3059
+ font-size: 0.95rem;
3060
+ font-weight: 600;
3061
+ color: var(--text-color);
3062
+ margin: 0 0 0.5rem 0;
3063
+ }
3064
+
3065
+ .regenerate-instructions {
3066
+ font-size: 0.875rem;
3067
+ color: var(--secondary-color);
3068
+ margin: 0 0 0.75rem 0;
3069
+ }
3070
+
3071
+ .regenerate-checkboxes {
3072
+ display: flex;
3073
+ flex-direction: column;
3074
+ gap: 0.5rem;
3075
+ margin-bottom: 1rem;
3076
+ }
3077
+
3078
+ .regenerate-checkboxes .checkbox-label {
3079
+ display: flex;
3080
+ align-items: center;
3081
+ gap: 0.5rem;
3082
+ font-size: 0.875rem;
3083
+ cursor: pointer;
3084
+ }
3085
+
3086
+ .regenerate-checkboxes .checkbox-label input[type="checkbox"] {
3087
+ width: 16px;
3088
+ height: 16px;
3089
+ cursor: pointer;
3090
+ accent-color: var(--primary-color);
3091
+ }
3092
+
3093
+ .regenerate-checkboxes .checkbox-label span {
3094
+ color: var(--text-color);
3095
+ }
3096
+
3097
+ .regenerate-checkboxes .namespace-name {
3098
+ font-family: monospace;
3099
+ font-size: 0.8rem;
3100
+ background-color: #f1f5f9;
3101
+ padding: 0.125rem 0.375rem;
3102
+ border-radius: 0.25rem;
3103
+ color: var(--secondary-color);
3104
+ }
3105
+
3106
+ .regenerate-checkboxes .metadata-warning {
3107
+ font-size: 0.75rem;
3108
+ color: #f59e0b;
3109
+ margin-left: 0.25rem;
3110
+ }
3111
+
3112
+ /* Info tooltip button */
3113
+ .info-tooltip-btn {
3114
+ display: inline-flex;
3115
+ align-items: center;
3116
+ justify-content: center;
3117
+ width: 18px;
3118
+ height: 18px;
3119
+ margin-left: 0.375rem;
3120
+ padding: 0;
3121
+ font-size: 0.75rem;
3122
+ color: #6b7280;
3123
+ background: none;
3124
+ border: none;
3125
+ cursor: pointer;
3126
+ vertical-align: middle;
3127
+ transition: color 0.15s ease;
3128
+ }
3129
+
3130
+ .info-tooltip-btn:hover {
3131
+ color: var(--primary-color);
3132
+ }
3133
+
3134
+ /* Namespace info panel */
3135
+ .namespace-info {
3136
+ margin: 0.375rem 0 0.75rem 1.5rem;
3137
+ padding: 0.625rem 0.75rem;
3138
+ font-size: 0.8rem;
3139
+ color: #4b5563;
3140
+ background-color: #f3f4f6;
3141
+ border-left: 3px solid var(--primary-color);
3142
+ border-radius: 0 0.25rem 0.25rem 0;
3143
+ line-height: 1.4;
3144
+ }
3145
+
3146
+ .namespace-info.hidden {
3147
+ display: none;
3148
+ }
3149
+
3150
+ .namespace-info strong {
3151
+ color: var(--text-color);
3152
+ }
3153
+
3154
+ /* Note styling (softer than warning) */
3155
+ .regenerate-note {
3156
+ display: flex;
3157
+ align-items: flex-start;
3158
+ gap: 0.5rem;
3159
+ padding: 0.625rem 0.75rem;
3160
+ background-color: #eff6ff;
3161
+ border: 1px solid #bfdbfe;
3162
+ border-radius: 0.25rem;
3163
+ margin-bottom: 1rem;
3164
+ }
3165
+
3166
+ .regenerate-note .note-label {
3167
+ font-size: 0.8rem;
3168
+ font-weight: 600;
3169
+ color: #1e40af;
3170
+ }
3171
+
3172
+ .regenerate-note .note-text {
3173
+ font-size: 0.8rem;
3174
+ color: #1e40af;
3175
+ line-height: 1.4;
3176
+ }
3177
+
3178
+ .regenerate-warning {
3179
+ display: flex;
3180
+ align-items: flex-start;
3181
+ gap: 0.5rem;
3182
+ padding: 0.75rem;
3183
+ background-color: #fef3c7;
3184
+ border: 1px solid #fcd34d;
3185
+ border-radius: 0.25rem;
3186
+ margin-bottom: 1rem;
3187
+ }
3188
+
3189
+ .regenerate-warning .warning-icon {
3190
+ font-size: 1rem;
3191
+ line-height: 1;
3192
+ }
3193
+
3194
+ .regenerate-warning .warning-text {
3195
+ font-size: 0.8rem;
3196
+ color: #92400e;
3197
+ line-height: 1.4;
3198
+ }
3199
+
3200
+ /* Warning button style */
3201
+ .btn-warning {
3202
+ background-color: #f59e0b;
3203
+ color: #fff;
3204
+ border: 1px solid #d97706;
3205
+ }
3206
+
3207
+ .btn-warning:hover {
3208
+ background-color: #d97706;
3209
+ border-color: #b45309;
3210
+ }
3211
+
3212
+ .btn-warning:active {
3213
+ background-color: #b45309;
3214
+ }
3215
+
3216
+ .btn-warning:disabled {
3217
+ background-color: #fcd34d;
3218
+ border-color: #fcd34d;
3219
+ cursor: not-allowed;
3220
+ }
3221
+
3222
+ /* `.hidden` is provided by the global utility in src/css/globals.css; do not
3223
+ redefine it here (BAPI-301). */
3224
+
3225
+ /* Phase 1b: Learn-repository auto-update schedule */
3226
+ .learn-repo-schedule-section {
3227
+ border-radius: 6px;
3228
+ padding: 1rem;
3229
+ margin-top: 0.75rem;
3230
+ }
3231
+ .learn-repo-schedule-section h4 {
3232
+ margin: 0 0 0.25rem 0;
3233
+ }
3234
+ .learn-repo-instructions {
3235
+ font-size: 0.85rem;
3236
+ color: #6b7280;
3237
+ margin-bottom: 0.75rem;
3238
+ }
3239
+ .learn-repo-analysis-types {
3240
+ border: none;
3241
+ padding: 0;
3242
+ margin: 0 0 0.75rem 0;
3243
+ display: grid;
3244
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
3245
+ gap: 0.25rem 1rem;
3246
+ }
3247
+ .learn-repo-analysis-types legend {
3248
+ font-weight: 600;
3249
+ margin-bottom: 0.25rem;
3250
+ }
3251
+ .learn-repo-actions {
3252
+ margin-top: 0.5rem;
3253
+ }
3254
+ .learn-repo-message {
3255
+ margin-top: 0.5rem;
3256
+ font-size: 0.875rem;
3257
+ color: #1f2937;
3258
+ }
3259
+ .learn-repo-schedule-status {
3260
+ margin-top: 0.75rem;
3261
+ display: flex;
3262
+ flex-direction: column;
3263
+ gap: 0.5rem;
3264
+ }
3265
+ .learn-repo-schedule-row {
3266
+ border: 1px solid #e5e7eb;
3267
+ border-radius: 4px;
3268
+ padding: 0.75rem;
3269
+ background-color: #f9fafb;
3270
+ }
3271
+ .learn-repo-schedule-meta {
3272
+ font-size: 0.85rem;
3273
+ color: #4b5563;
3274
+ margin: 0.25rem 0;
3275
+ }
3276
+ .learn-repo-row-actions {
3277
+ margin-top: 0.5rem;
3278
+ display: flex;
3279
+ gap: 0.5rem;
3280
+ }
3281
+ .learn-repo-status-running {
3282
+ color: #2563eb;
3283
+ }
3284
+ .learn-repo-status-success {
3285
+ color: #15803d;
3286
+ }
3287
+ .learn-repo-status-failure {
3288
+ color: #b91c1c;
3289
+ }
3290
+ .learn-repo-status-idle {
3291
+ color: #6b7280;
3292
+ }
3293
+ .learn-repo-schedule-row details {
3294
+ margin-top: 0.5rem;
3295
+ font-size: 0.85rem;
3296
+ }
3297
+ .learn-repo-schedule-row details pre {
3298
+ white-space: pre-wrap;
3299
+ background-color: #ffffff;
3300
+ border: 1px solid #e5e7eb;
3301
+ border-radius: 3px;
3302
+ padding: 0.5rem;
3303
+ margin: 0.25rem 0 0 0;
3304
+ }
3305
+ .form-error {
3306
+ color: #b91c1c;
3307
+ font-size: 0.85rem;
3308
+ margin-top: 0.25rem;
3309
+ }
3310
+
3311
+
2
3312
  /*# sourceMappingURL=main.min.css.map*/