:root{--page-bg:#eef1f5;--page-text:#1f2937;--header-bg:#fff;--header-border:#d7dce5;--header-shadow:0 2px 8px #0000000a;--panel-bg:#fff;--panel-border:#d7dce5;--panel-muted-bg:#f7f9fc;--panel-muted-border:#d7dce5;--text-strong:#162033;--text-normal:#111827;--text-muted:#475569;--link:#1d4ed8;--link-hover:#1e40af;--button-bg:#2563eb;--button-border:#2563eb;--button-bg-hover:#1d4ed8;--button-border-hover:#1d4ed8;--button-text:#fff;--secondary-bg:#fff;--secondary-border:#d1d5db;--secondary-text:#111827;--secondary-bg-hover:#f3f4f6;--danger-bg:#dc2626;--danger-border:#dc2626;--danger-bg-hover:#b91c1c;--danger-text:#dc2626;--warning-bg:#facc15;--warning-border:#eab308;--warning-bg-hover:#eab308;--warning-text:#111827;--warning-banner-bg:#fef3c7;--warning-banner-border:#fbbf24;--warning-banner-text:#78350f;--search-input-bg:#fff;--search-input-border:#cbd5e1;--search-input-text:#111827;--search-input-placeholder:#64748b;--table-row-border:#e5e7eb;--file-row-hover:#eff6ff;--file-row-selected:#dbeafe;--code-inline-bg:#0000000d;--modal-overlay-bg:#0f172a73}:root[data-theme=dark]{--page-bg:#0f172a;--page-text:#e5e7eb;--header-bg:#111827;--header-border:#243041;--header-shadow:0 2px 10px #00000059;--panel-bg:#111827;--panel-border:#243041;--panel-muted-bg:#172033;--panel-muted-border:#243041;--text-strong:#f8fafc;--text-normal:#e5e7eb;--text-muted:#cbd5e1;--link:#93c5fd;--link-hover:#bfdbfe;--button-bg:#2563eb;--button-border:#2563eb;--button-bg-hover:#1d4ed8;--button-border-hover:#1d4ed8;--button-text:#fff;--secondary-bg:#111827;--secondary-border:#334155;--secondary-text:#e5e7eb;--secondary-bg-hover:#1f2937;--danger-bg:#dc2626;--danger-border:#dc2626;--danger-bg-hover:#b91c1c;--danger-text:#f87171;--warning-bg:#facc15;--warning-border:#eab308;--warning-bg-hover:#eab308;--warning-text:#111827;--warning-banner-bg:#422006;--warning-banner-border:#b45309;--warning-banner-text:#fde68a;--search-input-bg:#0f172a;--search-input-border:#334155;--search-input-text:#e5e7eb;--search-input-placeholder:#94a3b8;--table-row-border:#243041;--file-row-hover:#172554;--file-row-selected:#1d4ed8;--code-inline-bg:#ffffff14;--modal-overlay-bg:#020617b8}body{background:var(--page-bg);color:var(--page-text);margin:0;font-family:Arial,sans-serif}.boot-screen{background:var(--page-bg);min-height:100vh;color:var(--text-muted);justify-content:center;align-items:center;font-size:18px;display:flex}.app-shell{box-sizing:border-box;max-width:1400px;margin:0 auto;padding:24px 20px 40px}.app-header-row{background:var(--header-bg);border:1px solid var(--header-border);box-shadow:var(--header-shadow);border-radius:12px;justify-content:space-between;align-items:center;gap:20px;margin-bottom:24px;padding:18px 20px;display:flex}.app-header-copy h1{color:var(--text-strong);margin:0;font-size:28px;font-weight:700;line-height:1.1}.app-header-copy p{color:var(--text-normal);margin:4px 0 0;font-size:16px}.app-header-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.icon-button{border:1px solid var(--secondary-border);background:var(--secondary-bg);width:48px;height:48px;color:var(--secondary-text);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;padding:0;font-size:22px;line-height:1;display:inline-flex}.icon-button:hover{background:var(--secondary-bg-hover)}.home-button{border:1px solid var(--button-border);background:var(--button-bg);min-width:120px;height:48px;color:var(--button-text);cursor:pointer;border-radius:10px;justify-content:center;align-items:center;padding:0 18px;font-size:18px;font-weight:700;text-decoration:none;display:inline-flex}.home-button:hover{background:var(--button-bg-hover);border-color:var(--button-border-hover)}.secondary-button{border:1px solid var(--secondary-border);background:var(--secondary-bg);min-width:100px;height:44px;color:var(--secondary-text);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0 18px;font-size:16px;font-weight:700;text-decoration:none;display:inline-flex}.secondary-button:hover{background:var(--secondary-bg-hover)}.login-page{background:var(--page-bg);min-height:100vh;color:var(--page-text);font-family:Arial,sans-serif}.login-shell{box-sizing:border-box;max-width:1400px;margin:0 auto;padding:24px 20px 0}.login-shell .app-header-row{margin-bottom:0}.login-wrap{box-sizing:border-box;justify-content:center;align-items:center;min-height:calc(100vh - 120px);padding:30px;display:flex}.login-card{background:var(--panel-bg);border:1px solid var(--panel-border);box-sizing:border-box;width:100%;max-width:440px;box-shadow:var(--header-shadow);border-radius:12px;padding:28px 28px 22px}.logo-wrap{text-align:center;margin-bottom:18px}.copsgit-logo{object-fit:contain;width:120px;height:120px;display:inline-block}.title{text-align:center;color:var(--text-strong);margin:0 0 24px;font-size:34px;font-weight:700}.field{margin-bottom:16px}.field label{color:var(--text-normal);margin-bottom:6px;font-size:16px;font-weight:700;display:block}.field input{box-sizing:border-box;border:1px solid var(--search-input-border);background:var(--search-input-bg);width:100%;height:44px;color:var(--search-input-text);border-radius:8px;padding:0 12px;font-size:16px}.field input:focus{border-color:var(--button-border);outline:none;box-shadow:0 0 0 3px #2563eb2e}.error-box{background:var(--panel-muted-bg);border:1px solid var(--panel-muted-border);color:var(--text-normal);border-radius:8px;margin-bottom:16px;padding:12px 14px;font-size:15px}.turnstile-wrap{justify-content:center;width:100%;margin:0 0 16px;display:flex}.turnstile-wrap .cf-turnstile{margin:0 auto}.login-button{border:1px solid var(--button-border);background:var(--button-bg);width:100%;min-width:120px;height:44px;color:var(--button-text);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0 18px;font-size:16px;font-weight:700;display:inline-flex}.login-button:hover:not(:disabled){background:var(--button-bg-hover);border-color:var(--button-border-hover)}.login-button:disabled{opacity:.7;cursor:default}.login-ip{text-align:center;color:var(--text-muted);margin-top:18px;font-size:13px;font-style:italic}.landing-grid{grid-template-columns:repeat(2,minmax(260px,1fr));gap:20px;display:grid}.landing-card{border:1px solid var(--panel-border);background:var(--panel-bg);cursor:pointer;text-align:left;min-height:180px;color:var(--text-normal);box-shadow:var(--header-shadow);border-radius:12px;flex-direction:column;align-items:flex-start;gap:10px;padding:24px;transition:border-color .15s,box-shadow .15s;display:flex}.landing-card:hover{border-color:var(--button-border);box-shadow:0 6px 20px #2563eb1f}.landing-title{color:var(--text-strong);font-size:24px;font-weight:700}.landing-text{color:var(--text-muted);font-size:16px;line-height:1.5}.browser-header-shell{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:16px;display:flex}.browser-header-left{flex:auto;min-width:0}.browser-header-right{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:12px;display:flex}.browser-breadcrumb-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.breadcrumbs{text-align:left;color:var(--text-normal);margin:0;font-size:20px;font-weight:700;line-height:1.4}.crumb-button{font:inherit;color:var(--link);cursor:pointer;text-underline-offset:3px;background:0 0;border:none;padding:0;font-weight:700;text-decoration:underline}.crumb-button:hover{color:var(--link-hover)}.crumb-sep{color:var(--text-muted);font-weight:400}.upload-button{border:1px solid var(--secondary-border);background:var(--secondary-bg);min-width:96px;height:40px;color:var(--secondary-text);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:0 14px;font-size:14px;font-weight:700;display:inline-flex}.upload-button:hover:not(:disabled){background:var(--secondary-bg-hover)}.upload-button:disabled{opacity:.6;cursor:default}.search-form{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.search-input{border:1px solid var(--search-input-border);background:var(--search-input-bg);width:320px;max-width:100%;height:42px;color:var(--search-input-text);box-sizing:border-box;border-radius:8px;padding:0 14px;font-size:15px}.search-input::placeholder{color:var(--search-input-placeholder)}.search-input:focus{border-color:var(--button-border);outline:none;box-shadow:0 0 0 3px #2563eb2e}.search-button,.search-clear{box-sizing:border-box;cursor:pointer;border-radius:8px;justify-content:center;align-items:center;height:42px;padding:0 14px;font-size:15px;font-weight:700;display:inline-flex}.search-button{border:1px solid var(--button-border);background:var(--button-bg);color:var(--button-text)}.search-button:hover{background:var(--button-bg-hover);border-color:var(--button-border-hover)}.search-clear{border:1px solid var(--secondary-border);background:var(--secondary-bg);color:var(--secondary-text)}.search-clear:hover{background:var(--secondary-bg-hover)}.actions-bar{flex-wrap:nowrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.actions-bar button{background:var(--button-bg);color:var(--button-text);border:1px solid var(--button-border);cursor:pointer;border-radius:8px;min-width:88px;padding:10px 14px;font-size:15px;font-weight:700}.actions-bar button:hover:not(:disabled){background:var(--button-bg-hover);border-color:var(--button-border-hover)}.actions-bar button:disabled{opacity:.6;cursor:not-allowed}.actions-bar .action-deploy{background:var(--danger-bg);border-color:var(--danger-border)}.actions-bar .action-deploy:hover:not(:disabled){background:var(--danger-bg-hover);border-color:var(--danger-bg-hover)}.actions-bar .action-rollback{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}.actions-bar .action-rollback:hover:not(:disabled){background:var(--warning-bg-hover);border-color:var(--warning-border)}.browser-card{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:10px;overflow:hidden}.browser-status{color:var(--text-muted);padding:20px;font-size:15px}.browser-table{border-collapse:collapse;width:100%}.browser-table th{background:var(--panel-muted-bg);color:var(--text-strong);text-align:left;border-bottom:1px solid var(--table-row-border);padding:12px 14px;font-size:14px;font-weight:700}.browser-table td{border-bottom:1px solid var(--table-row-border);color:var(--text-normal);vertical-align:middle;padding:10px 14px;font-size:15px}.browser-table tbody tr:hover{background:var(--file-row-hover)}.browser-table .check-col{white-space:nowrap;width:110px}.browser-link,.sort-button,.select-link{color:var(--link);cursor:pointer;font:inherit;text-underline-offset:2px;background:0 0;border:none;padding:0;font-weight:700;line-height:1.2;text-decoration:underline}.sort-button{color:var(--text-normal);align-items:center;text-decoration:none;display:inline-flex}.sort-button:hover{color:var(--link);text-decoration:underline}.browser-link:hover,.select-link:hover{color:var(--link-hover)}.sort-arrows{letter-spacing:-1px;color:var(--text-muted);margin-left:6px;font-size:11px;line-height:1}.view-link,.download-link,.sync-link{border:1px solid var(--secondary-border);background:var(--secondary-bg);width:32px;height:32px;color:var(--secondary-text);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;font-size:18px;line-height:1;text-decoration:none;display:inline-flex}.view-link:hover,.download-link:hover,.sync-link:hover:not(:disabled){background:var(--secondary-bg-hover);text-decoration:none}.view-link{font-size:17px}.sync-link{color:var(--link);font-size:19px;font-weight:700}.sync-link:disabled{opacity:.5;cursor:default}.modal-overlay{background:var(--modal-overlay-bg);z-index:2000;box-sizing:border-box;justify-content:center;align-items:flex-start;padding:40px 20px;display:flex;position:fixed;inset:0}.modal-window{background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:12px;flex-direction:column;width:min(1200px,100%);max-height:calc(100vh - 80px);display:flex;overflow:hidden;box-shadow:0 18px 50px #00000038}.modal-header{border-bottom:1px solid var(--table-row-border);background:var(--panel-muted-bg);justify-content:space-between;align-items:center;padding:14px 18px;display:flex}.modal-title{color:var(--text-strong);font-size:22px;font-weight:700}.modal-close{border:1px solid var(--secondary-border);background:var(--secondary-bg);width:40px;height:40px;color:var(--secondary-text);cursor:pointer;border-radius:8px;font-size:22px;line-height:1}.modal-close:hover{background:var(--secondary-bg-hover)}.modal-body{color:var(--text-normal);padding:20px;overflow:auto}.modal-message{white-space:pre-wrap;word-break:break-word;color:var(--text-normal);margin:0;font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:1.5}.code-viewer{background:#282c34;border:0;border-radius:0;max-height:72vh;margin:0;overflow:auto}.code-viewer code{background:0 0;padding:18px 20px;font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:1.6;display:block}.code-viewer code.hljs{background:0 0}.comment-block{margin-bottom:16px}.comment-label{color:var(--text-strong);margin-bottom:6px;font-size:14px;font-weight:700;display:block}.comment-input{border:1px solid var(--search-input-border);background:var(--search-input-bg);width:100%;color:var(--search-input-text);resize:vertical;box-sizing:border-box;border-radius:8px;min-height:80px;padding:10px 12px;font-family:inherit;font-size:14px;line-height:1.45}.comment-input:focus{border-color:var(--button-border);outline:none;box-shadow:0 0 0 3px #2563eb2e}.comment-input:disabled{opacity:.7;cursor:not-allowed}.comment-counter{color:var(--text-muted);text-align:right;margin-top:4px;font-size:12px}.comment-counter.invalid{color:var(--danger-text);font-weight:700}.deploy-modal{width:min(1000px,100%)}.deploy-files-block{background:var(--panel-muted-bg);border:1px solid var(--panel-muted-border);border-radius:8px;margin-bottom:18px;padding:12px 14px}.deploy-files-label{color:var(--text-strong);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;font-size:13px;font-weight:700}.deploy-skipped-block{background:var(--panel-muted-bg);border:1px dashed var(--panel-muted-border);opacity:.85;border-radius:8px;margin-bottom:18px;padding:10px 14px}.deploy-skipped-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;font-size:12px;font-weight:700}.deploy-skipped-block .deploy-files-list li{color:var(--text-muted)}.deploy-files-list{margin:0;padding:0 0 0 18px;list-style:outside}.deploy-files-list li{color:var(--text-normal);margin-bottom:4px;font-size:14px}.deploy-files-list code{color:var(--text-normal);background:var(--code-inline-bg);border-radius:4px;padding:1px 6px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px}.rollback-modal,.sync-modal{width:min(1100px,100%)}.rollback-explain{background:var(--panel-muted-bg);border:1px solid var(--panel-muted-border);color:var(--text-normal);border-radius:8px;margin-bottom:18px;padding:12px 14px;font-size:14px;line-height:1.5}.rollback-file-block{margin-bottom:22px}.rollback-file-block:last-of-type{margin-bottom:8px}.rollback-file-name{color:var(--text-strong);word-break:break-all;margin-bottom:8px;font-family:Consolas,Monaco,Courier New,monospace;font-size:16px;font-weight:700}.rollback-empty-note{background:var(--panel-muted-bg);border:1px solid var(--panel-muted-border);color:var(--text-muted);border-radius:8px;padding:12px 14px;font-size:14px;font-style:italic}.rollback-commits{border-collapse:collapse;border:1px solid var(--panel-border);border-radius:8px;width:100%;overflow:hidden}.rollback-commits td{border-bottom:1px solid var(--table-row-border);vertical-align:middle;color:var(--text-normal);padding:8px 12px;font-size:14px}.rollback-commits tr:last-of-type td{border-bottom:0}.rollback-commit-row:hover:not(.rollback-commit-current){background:var(--file-row-hover);cursor:pointer}.rollback-commit-current{background:var(--panel-muted-bg);color:var(--text-muted)}.rollback-commit-current td{color:var(--text-muted)}.rollback-radio-cell{width:30px}.rollback-hash{white-space:nowrap;font-family:Consolas,Monaco,Courier New,monospace;font-weight:700}.rollback-hash label{cursor:pointer}.rollback-commit-current .rollback-hash label{cursor:default}.rollback-date{white-space:nowrap;color:var(--text-muted);font-family:Consolas,Monaco,Courier New,monospace}.rollback-author{white-space:nowrap;color:var(--text-normal)}.rollback-subject{word-break:break-word}.rollback-current-tag{color:var(--text-muted);margin-left:6px;font-size:12px;font-weight:700}.rollback-actions{border-top:1px solid var(--table-row-border);justify-content:flex-end;align-items:center;gap:12px;margin-top:18px;padding-top:14px;display:flex}.rollback-actions .secondary-button,.rollback-actions .action-rollback,.rollback-actions .action-sync,.rollback-actions .action-deploy{cursor:pointer;border-radius:8px;min-width:110px;height:42px;padding:0 18px;font-size:15px;font-weight:700}.rollback-actions .secondary-button{border:1px solid var(--secondary-border);background:var(--secondary-bg);color:var(--secondary-text)}.rollback-actions .secondary-button:hover:not(:disabled){background:var(--secondary-bg-hover)}.rollback-actions .action-rollback{border:1px solid var(--warning-border);background:var(--warning-bg);color:var(--warning-text)}.rollback-actions .action-rollback:hover:not(:disabled){background:var(--warning-bg-hover);border-color:var(--warning-border)}.rollback-actions .action-sync{border:1px solid var(--button-border);background:var(--button-bg);color:var(--button-text)}.rollback-actions .action-sync:hover:not(:disabled){background:var(--button-bg-hover);border-color:var(--button-border-hover)}.rollback-actions .action-deploy{border:1px solid var(--danger-border);background:var(--danger-bg);color:var(--button-text)}.rollback-actions .action-deploy:hover:not(:disabled){background:var(--danger-bg-hover);border-color:var(--danger-bg-hover)}.rollback-actions .action-rollback:disabled,.rollback-actions .action-sync:disabled,.rollback-actions .action-deploy:disabled,.rollback-actions .secondary-button:disabled{opacity:.55;cursor:not-allowed}.rollback-error{margin-top:16px;margin-bottom:0}.rollback-results{flex-direction:column;gap:18px;display:flex}.rollback-result-block{border:1px solid var(--panel-border);border-radius:8px;overflow:hidden}.rollback-result-block .rollback-file-name{background:var(--panel-muted-bg);border-bottom:1px solid var(--panel-border);margin:0;padding:10px 14px;font-size:14px}.rollback-result-block .modal-message{padding:14px}.sync-warning{background:var(--warning-banner-bg);border:1px solid var(--warning-banner-border);color:var(--warning-banner-text);border-radius:8px;margin-bottom:16px;padding:14px 16px;font-size:14px;line-height:1.55}.sync-warning strong{color:var(--warning-banner-text);margin-right:4px;display:inline-block}.sync-warning code{background:#00000014;border-radius:4px;padding:0 4px;font-family:Consolas,Monaco,Courier New,monospace;font-size:13px}:root[data-theme=dark] .sync-warning code{background:#ffffff1a}.sync-commits{margin-top:4px}.sync-head-row{background:var(--panel-muted-bg)}.sync-head-label{color:var(--text-normal)}.sync-head-label label{cursor:pointer}.sync-head-label code{font-family:Consolas,Monaco,Courier New,monospace;font-weight:700}@media (width<=980px){.browser-header-shell{flex-direction:column;align-items:stretch}.browser-header-right{justify-content:flex-start}.search-input{width:100%}.actions-bar{flex-wrap:wrap;justify-content:flex-start}.rollback-commits,.rollback-commits tbody,.rollback-commits tr,.rollback-commits td{width:100%;display:block}.rollback-commits tr{border-bottom:1px solid var(--table-row-border);padding:8px 0}}@media (width<=720px){.app-header-row{flex-direction:column;align-items:flex-start}.landing-grid{grid-template-columns:1fr}}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-keyword,.hljs-operator,.hljs-pattern-match{color:#f92672}.hljs-pattern-match .hljs-constructor,.hljs-function{color:#61aeee}.hljs-function .hljs-params{color:#a6e22e}.hljs-function .hljs-params .hljs-typing{color:#fd971f}.hljs-module-access .hljs-module{color:#7e57c2}.hljs-constructor{color:#e2b93d}.hljs-constructor .hljs-string{color:#9ccc65}.hljs-comment,.hljs-quote{color:#b18eb1;font-style:italic}.hljs-doctag,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string{color:#98c379}.hljs-built_in,.hljs-title.class_,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-family:Arial,sans-serif;font-weight:400;line-height:1.5}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{min-height:100vh}
