*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background-color:#05060b;color:#f5f5f5}#root{min-height:100vh}:root{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.4;color:#f5f5f5;background:#060b16}body{margin:0;background:radial-gradient(circle at top,#101835,#05060b 60%);min-height:100vh}.layout{max-width:960px;margin:0 auto;padding:2rem 1.5rem 4rem}header{margin-bottom:2rem}.panel{background:#0e1223d9;border:1px solid rgba(255,255,255,.08);border-radius:16px;padding:1.5rem;margin-bottom:1.5rem;box-shadow:0 10px 30px #0006}.panel-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.form{display:flex;flex-direction:column;gap:1rem}input[type=password],input[type=file],button{font-size:1rem}input[type=password]{padding:.8rem 1rem;border-radius:10px;border:1px solid rgba(255,255,255,.15);background:#0000004d;color:#f5f5f5}button{cursor:pointer;border:none;border-radius:999px;padding:.8rem 1.6rem;font-weight:600;background:linear-gradient(120deg,#5bd5f9,#917bff);color:#060b16;transition:opacity .2s ease}button:disabled{opacity:.5;cursor:not-allowed}table{width:100%;border-collapse:collapse}th,td{padding:.75rem;border-bottom:1px solid rgba(255,255,255,.06)}th{text-align:left;font-weight:600}.downloads a{margin-right:.75rem;color:#76d3ff;text-decoration:none;font-size:.9rem}.status{text-transform:capitalize}.status.status-success{color:#4ade80}.status.status-queued,.status.status-solving{color:#facc15}.status.status-failure{color:#f87171}.flash{text-align:center;padding:1rem;border-radius:12px;background:#5bd5f91f;border:1px solid rgba(91,213,249,.3)}.job-grid-page{max-width:1400px;margin:0 auto;padding:2rem 1.5rem 4rem}.page-header{text-align:center;margin-bottom:2rem}.page-header h1{margin:0 0 .5rem;font-size:2rem}.page-header p{color:#9ca3af;margin:0 0 1rem}.header-actions{display:flex;justify-content:center;align-items:center;gap:1rem}.job-count{color:#9ca3af;font-size:.9rem}.btn-refresh{padding:.5rem 1rem;font-size:.9rem}.btn-new-job{display:inline-block;padding:.5rem 1rem;font-size:.9rem;text-decoration:none;border-radius:999px;font-weight:600;background:linear-gradient(120deg,#5bd5f9,#917bff);color:#060b16;transition:opacity .2s ease}.btn-new-job:hover{opacity:.9}.job-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.5rem}.job-card{display:block;text-decoration:none;color:inherit;background:#0e1223d9;border:1px solid rgba(255,255,255,.08);border-radius:12px;overflow:hidden;transition:transform .2s ease,box-shadow .2s ease}.job-card:hover{transform:translateY(-4px);box-shadow:0 12px 40px #00000080}.job-card-image{position:relative;aspect-ratio:4/3;background:#0000004d;overflow:hidden}.job-card-image img{width:100%;height:100%;object-fit:cover}.job-card-placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:#6b7280;font-size:.9rem}.job-card-status{position:absolute;top:.75rem;right:.75rem;padding:.25rem .75rem;border-radius:999px;font-size:.75rem;font-weight:600;color:#000;text-transform:uppercase}.job-card-info{padding:1rem}.job-card-id{font-weight:600;margin-bottom:.25rem}.job-card-stage{font-size:.8rem;color:#fbbf24;margin-bottom:.25rem}.job-card-date{font-size:.8rem;color:#6b7280}.empty-state{text-align:center;padding:4rem 2rem;color:#6b7280}.load-more{text-align:center;margin-top:2rem}.btn-load-more{padding:.75rem 2rem}.error-message{background:#f8717126;border:1px solid rgba(248,113,113,.3);color:#f87171;padding:1rem;border-radius:8px;margin-bottom:1rem}.job-detail-page{max-width:1000px;margin:0 auto;padding:2rem 1.5rem 4rem}.detail-header{display:flex;align-items:center;gap:1rem;margin-bottom:1.5rem}.detail-header h1{flex:1;margin:0}.back-link{color:#76d3ff;text-decoration:none;font-size:.9rem}.back-link:hover{text-decoration:underline}.detail-status-bar{display:flex;align-items:center;gap:1rem;margin-bottom:1.5rem;padding:1rem;background:#0e1223d9;border-radius:8px}.status-badge{padding:.25rem .75rem;border-radius:999px;font-size:.85rem;font-weight:600;color:#000;text-transform:uppercase}.stage-info{color:#fbbf24;font-size:.9rem}.detail-content{display:flex;flex-direction:column;gap:1.5rem}.detail-image{position:relative;background:#0e1223d9;border-radius:12px;overflow:hidden}.detail-image img{width:100%;height:auto;display:block}.image-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0009;color:#fbbf24;font-size:1.5rem;font-weight:600}.failure-reason{background:#f871711a;border:1px solid rgba(248,113,113,.3);border-radius:8px;padding:1rem}.failure-reason h3{margin:0 0 .5rem;color:#f87171}.failure-reason pre{margin:0;white-space:pre-wrap;word-break:break-word;font-size:.85rem;color:#f5f5f5}.objects-section,.calibration-section,.downloads-section,.log-section,.timestamps-section{background:#0e1223d9;border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:1.25rem}.objects-section h3,.calibration-section h3,.downloads-section h3,.log-section h3,.timestamps-section h3{margin:0 0 1rem;font-size:1rem}.objects-list{display:flex;flex-wrap:wrap;gap:.5rem}.object-tag{padding:.25rem .75rem;background:#5bd5f926;border-radius:999px;font-size:.85rem}.calibration-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.calibration-item{display:flex;gap:.5rem}.calibration-item .label{color:#9ca3af}.calibration-item .value{font-weight:500}.download-links{display:flex;flex-wrap:wrap;gap:.75rem}.download-btn{display:inline-block;padding:.5rem 1rem;background:#5bd5f926;border:1px solid rgba(91,213,249,.3);border-radius:8px;color:#76d3ff;text-decoration:none;font-size:.9rem;transition:background .2s ease}.download-btn:hover{background:#5bd5f940}.log-section h3{display:flex;align-items:center;gap:.5rem}.polling-indicator{font-size:.8rem;font-weight:400;color:#fbbf24}.log-viewer{background:#0006;border-radius:8px;padding:1rem;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.8rem;line-height:1.5;max-height:400px;overflow-y:auto;white-space:pre-wrap;word-break:break-word;margin:0}.log-viewer-empty{color:#6b7280;text-align:center;padding:2rem}.timestamps-section{display:flex;flex-wrap:wrap;gap:1.5rem}.timestamp-item{display:flex;gap:.5rem}.timestamp-item .label{color:#9ca3af}.loading{text-align:center;padding:4rem 2rem;color:#9ca3af}
