@import"https://fonts.googleapis.com/css2?family=Source+Sans+3:wght@400;500;600&display=swap";:root{--color-primary: oklch(.42 .19 262);--color-primary-hover: oklch(.36 .17 262);--color-bg: oklch(1 0 0);--color-surface: oklch(.96 .003 262);--color-surface-alt: oklch(.92 .004 262);--color-ink: oklch(.15 .006 262);--color-muted: oklch(.5 .004 262);--color-divider: oklch(.88 .002 262);--color-on-primary: oklch(1 0 0);--font-body: "Source Sans 3", system-ui, -apple-system, sans-serif;--space-section: clamp(4rem, 8vw, 8rem);--space-container: clamp(1rem, 5vw, 2rem);--radius-sm: 8px;--radius-md: 12px;--color-error: #c62828;--color-error-bg: #ffebee;--color-ok: #2e7d32;--color-ok-bg: #e8f5e9;--shadow-hover: 0 2px 8px rgba(0, 0, 0, .08)}:root{font-family:var(--font-body);line-height:1.5;font-weight:400;color-scheme:light;color:var(--color-ink);background-color:var(--color-bg);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;background-color:var(--color-bg);color:var(--color-ink);font-family:var(--font-body)}#root{min-height:100vh}a{color:var(--color-primary);text-decoration:none}a:hover{color:var(--color-primary-hover)}button{border-radius:var(--radius-sm);border:1px solid var(--color-divider);padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:transparent;color:var(--color-ink);cursor:pointer;transition:border-color .15s ease,background-color .15s ease}button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}input,select,textarea{font-family:inherit;font-size:inherit;border:1px solid var(--color-divider);border-radius:var(--radius-sm);padding:8px 12px;background-color:var(--color-bg);color:var(--color-ink)}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.analyze-image-page :focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.analyze-image-page button:focus-visible,.analyze-image-page input:focus-visible,.analyze-image-page a:focus-visible,.analyze-image-page [tabindex]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}@media(prefers-contrast:high){.analyze-image-page :focus{outline:3px solid #000}.analysis-row__status--ok{background-color:#000;color:#fff;border:2px solid #fff}.analysis-row__status--error{background-color:#fff;color:#000;border:2px solid #000}}@media(prefers-reduced-motion:reduce){.analyze-image-page *,.analyze-image-page *:before,.analyze-image-page *:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.loading-spinner{animation:none;border:3px solid var(--color-primary)}}.analyze-image-page{min-height:100vh;background-color:var(--color-bg);padding:24px;font-family:var(--font-body)}.analyze-image-page__container{max-width:1400px;margin:0 auto}.analyze-image-page__header{margin-bottom:24px}.analyze-image-page__title{font-size:28px;font-weight:600;color:var(--color-ink);margin:0 0 8px}.analyze-image-page__subtitle{font-size:16px;color:var(--color-muted);margin:0}.upload-panel{background:var(--color-bg);border-radius:12px;padding:24px;margin-bottom:24px;border:1px solid var(--color-divider)}.upload-panel__title{font-size:18px;font-weight:600;color:var(--color-ink);margin:0 0 20px}.upload-panel__content{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:20px}.upload-panel__uploader,.upload-panel__angles{min-width:0}.upload-panel__actions{display:flex;justify-content:flex-start;margin-top:20px}.results-section{background:transparent}.results-section__header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.results-section__title{font-size:20px;font-weight:600;color:var(--color-ink);margin:0}.results-section__clear-button{display:inline-flex;align-items:center;justify-content:center;min-height:40px;padding:10px 16px;background-color:var(--color-error-bg);border:1px solid var(--color-error);border-radius:var(--radius-sm);color:var(--color-error);font-size:14px;font-weight:600;cursor:pointer;transition:background-color .2s ease,color .2s ease,border-color .2s ease}.results-section__clear-button:hover:not(:disabled){background-color:var(--color-error-bg);border-color:#b71c1c}.results-section__clear-button:disabled{opacity:.55;cursor:not-allowed}.loading-overlay{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;transform:none}.loading-overlay .loading-message{display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:var(--color-bg);padding:32px 48px;border-radius:12px;box-shadow:0 4px 24px #0003}.loading-overlay .loading-message span{color:var(--color-ink);font-size:16px;font-weight:500}.analyze-button--cancel{background-color:#c62828}.analyze-button--cancel:hover,.analyze-button--cancel:active{background-color:#b71c1c}.upload-panel__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;cursor:pointer}.upload-panel__title{font-size:18px;font-weight:600;color:var(--color-ink);margin:0}.upload-panel__toggle{background:none;border:none;padding:8px;cursor:pointer;color:var(--color-muted);transition:transform .2s ease}.upload-panel__toggle--collapsed{transform:rotate(180deg)}.upload-panel__content{display:grid;grid-template-columns:1fr 1fr;gap:24px}.upload-panel__content--collapsed{display:none}.image-uploader{width:100%}.image-uploader__file-input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.image-uploader__drop-zone{border:2px dashed var(--color-divider);border-radius:12px;padding:40px 24px;text-align:center;cursor:pointer;transition:all .2s ease;background-color:var(--color-surface)}.image-uploader__drop-zone:hover{border-color:var(--color-primary);background-color:var(--color-surface)}.image-uploader__drop-zone--active{border-color:var(--color-primary);background-color:var(--color-surface-alt)}.image-uploader__drop-zone--disabled{opacity:.5;cursor:not-allowed}.image-uploader__drop-zone:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-color:var(--color-primary)}.image-uploader__drop-zone-content{display:flex;flex-direction:column;align-items:center;gap:12px}.image-uploader__icon{color:var(--color-muted)}.image-uploader__drop-text{font-size:16px;color:var(--color-ink);margin:0}.image-uploader__formats{font-size:13px;color:var(--color-muted);margin:0}.image-uploader__preview{display:flex;flex-direction:column;gap:16px}.image-uploader__preview-image-container{border-radius:var(--radius-sm);overflow:hidden;background-color:var(--color-surface)}.image-uploader__preview-image{width:100%;max-height:200px;object-fit:contain;display:block}.image-uploader__file-info{display:flex;flex-direction:column;gap:4px}.image-uploader__file-name{font-size:14px;font-weight:500;color:var(--color-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.image-uploader__file-details{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--color-muted)}.image-uploader__file-separator{color:var(--color-divider)}.image-uploader__warning{display:flex;align-items:center;gap:8px;padding:8px 12px;background-color:#fff3cd;border-radius:6px;font-size:13px;color:#856404}.image-uploader__remove-button{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;background-color:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-sm);font-size:14px;color:var(--color-ink);cursor:pointer;transition:all .2s ease}.image-uploader__remove-button:hover{background-color:var(--color-surface-alt)}.image-uploader__remove-button:disabled{opacity:.5;cursor:not-allowed}.image-uploader__error{display:flex;align-items:center;gap:8px;margin-top:12px;padding:12px;background-color:var(--color-error-bg);border-radius:var(--radius-sm);font-size:14px;color:var(--color-error)}.angle-selector{border:1px solid var(--color-divider);border-radius:12px;padding:20px;background-color:var(--color-bg)}.angle-selector-legend{font-size:16px;font-weight:600;color:var(--color-ink);padding:0 8px}.angle-selector-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--color-divider)}.angle-selector-toggle-all{background:none;border:none;font-size:14px;color:var(--color-primary);cursor:pointer;padding:4px 8px}.angle-selector-toggle-all:hover{text-decoration:underline}.angle-selector-toggle-all:disabled{color:var(--color-divider);cursor:not-allowed}.angle-selector-count{font-size:13px;color:var(--color-muted)}.angle-selector-options{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.angle-option{display:flex;align-items:center;gap:10px}.angle-checkbox{width:18px;height:18px;cursor:pointer;accent-color:var(--color-primary)}.angle-label{font-size:14px;color:var(--color-ink);cursor:pointer}.angle-selector-warning{display:flex;align-items:center;gap:8px;margin-top:12px;padding:10px 12px;background-color:#fff3cd;border-radius:6px;font-size:13px;color:#856404}.angle-selector-warning .warning-icon{flex-shrink:0;line-height:1}.angle-selector-warning .warning-text{flex:1}.angle-checkbox:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.analyze-button{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:14px 24px;background-color:var(--color-primary);color:var(--color-on-primary);border:none;border-radius:var(--radius-sm);font-size:16px;font-weight:500;cursor:pointer;transition:background-color .2s ease}.analyze-button:hover:not(:disabled){background-color:var(--color-primary-hover)}.analyze-button:active:not(:disabled){background-color:#002472;background-color:oklch(.3 .15 262)}.analyze-button:disabled{background-color:var(--color-surface-alt);cursor:not-allowed}.analyze-button--loading{position:relative}.analysis-results-table{background:var(--color-bg);border-radius:12px;overflow:hidden;border:1px solid var(--color-divider)}.analysis-results-table--empty{padding:40px}.analysis-results-table__container{overflow-x:auto}.analysis-results-table__table{width:100%;border-collapse:collapse;table-layout:auto}.analysis-results-table__header{background-color:var(--color-surface-alt);border-bottom:1px solid var(--color-divider)}.analysis-results-table__th{padding:14px 16px;text-align:left;font-size:13px;font-weight:600;color:var(--color-muted);text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}.analysis-results-table__th--preview,.analysis-results-table__th--annotated{min-width:150px}.analysis-results-table__th--status{min-width:100px}.analysis-results-table__th--angles{min-width:180px}.analysis-results-table__th--file-info{min-width:140px}.analysis-results-table__th--timestamp{min-width:160px}.analysis-results-table__th--actions{min-width:80px}.analysis-results-table__body{background-color:var(--color-bg)}.analysis-results-table__sentinel{height:1px;width:100%}.analysis-results-table__loading{display:flex;align-items:center;justify-content:center;gap:12px;padding:24px;color:var(--color-muted);font-size:14px}.analysis-results-table__end{display:flex;align-items:center;justify-content:center;padding:16px;color:var(--color-muted);font-size:13px;border-top:1px solid var(--color-divider)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 24px;text-align:center}.empty-state__icon{color:var(--color-divider);margin-bottom:20px}.empty-state__message{font-size:16px;color:var(--color-muted);margin:0;max-width:300px}.analysis-row{border-bottom:1px solid var(--color-divider);transition:background-color .15s ease}.analysis-row:hover{background-color:var(--color-surface)}.analysis-row:last-child{border-bottom:none}.analysis-row__cell{padding:16px;vertical-align:middle}.analysis-row__cell--image,.analysis-row__cell--annotated{padding:12px}.analysis-row__image-container{width:150px;height:100px;border-radius:6px;overflow:hidden;background-color:var(--color-surface);display:flex;align-items:center;justify-content:center}.analysis-row__image-link{display:inline-flex;border-radius:var(--radius-sm);text-decoration:none}.analysis-row__image-link:hover .analysis-row__image-container{box-shadow:inset 0 0 0 1px var(--color-primary)}.analysis-row__image-link:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.analysis-row__thumbnail,.analysis-row__annotated-image{width:100%;height:100%;object-fit:contain}.analysis-row__no-image{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-divider);font-size:14px}.analysis-row__status{display:inline-flex;align-items:center;padding:4px 10px;border-radius:4px;font-size:13px;font-weight:500}.analysis-row__status--ok{background-color:var(--color-ok-bg);color:var(--color-ok)}.analysis-row__status--error{background-color:var(--color-error-bg);color:var(--color-error);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.analysis-row__angles-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.analysis-row__angle-item{display:flex;align-items:center;gap:6px;font-size:13px}.analysis-row__angle-name{color:var(--color-muted)}.analysis-row__angle-value{color:var(--color-ink);font-weight:500}.analysis-row__no-angles{font-size:13px;color:var(--color-muted);font-style:italic}.analysis-row__file-info{display:flex;flex-direction:column;gap:4px}.analysis-row__file-name{font-size:13px;font-weight:500;color:var(--color-ink);max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.analysis-row__file-size{font-size:12px;color:var(--color-muted)}.analysis-row__selected-angles{display:flex;align-items:center;gap:4px;font-size:12px;color:var(--color-muted)}.analysis-row__selected-angles-label{color:var(--color-muted)}.analysis-row__selected-angles-value{color:var(--color-ink);font-weight:500}.analysis-row__timestamp{font-size:13px;color:var(--color-ink);white-space:nowrap}.analysis-row__delete-button{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;background-color:transparent;border:1px solid var(--color-divider);border-radius:6px;color:var(--color-muted);font-size:13px;cursor:pointer;transition:all .2s ease}.analysis-row__delete-button:hover{background-color:var(--color-error-bg);border-color:var(--color-error);color:var(--color-error)}.analysis-row__delete-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.loading-spinner{width:20px;height:20px;border:2px solid var(--color-divider);border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite;flex-shrink:0}.loading-spinner--large{width:48px;height:48px;border-width:4px}.loading-text{font-size:14px;color:var(--color-muted)}@keyframes spin{to{transform:rotate(360deg)}}.status-ok,.analysis-row__status--ok{background-color:var(--color-ok-bg);color:var(--color-ok)}.status-error,.analysis-row__status--error{background-color:var(--color-error-bg);color:var(--color-error)}.status-ok--high-contrast{background-color:#1b5e20;color:#fff}.status-error--high-contrast{background-color:#b71c1c;color:#fff}.error-banner{display:flex;align-items:center;gap:12px;padding:12px 16px;background-color:var(--color-error-bg);border-radius:var(--radius-sm);margin-bottom:16px}.error-banner__icon{color:var(--color-error);flex-shrink:0}.error-banner__content{flex:1}.error-banner__title{font-size:14px;font-weight:600;color:var(--color-error);margin:0 0 4px}.error-banner__message{font-size:13px;color:var(--color-error);margin:0}@media(max-width:1024px){.upload-panel__content{grid-template-columns:1fr}.analysis-results-table__th--file-info,.analysis-row__cell--file-info{display:none}}@media(max-width:768px){.analyze-image-page{padding:16px}.analyze-image-page__title{font-size:24px}.upload-panel{padding:16px}.results-section__header{align-items:flex-start;flex-direction:column}.results-section__clear-button{width:100%}.angle-selector-options{grid-template-columns:1fr}.analysis-results-table__th--file-info,.analysis-results-table__th--timestamp,.analysis-row__cell--file-info,.analysis-row__cell--timestamp{display:none}.analysis-row__image-container{width:100px;height:75px}}@media(max-width:480px){.analyze-image-page,.upload-panel{padding:12px}.image-uploader__drop-zone{padding:24px 16px}.image-uploader__drop-text{font-size:14px}.analysis-results-table__th--annotated,.analysis-row__cell--annotated{display:none}.analysis-row__image-container{width:80px;height:60px}.analysis-row__delete-text{display:none}.analysis-row__delete-button{padding:8px}}@media(max-width:375px){.analysis-results-table__table{display:block}.analysis-results-table__header{display:none}.analysis-results-table__body{display:flex;flex-direction:column;gap:12px}.analysis-row{display:flex;flex-direction:column;border:1px solid var(--color-divider);border-radius:var(--radius-sm);padding:12px;background-color:var(--color-bg)}.analysis-row:hover{background-color:var(--color-bg)}.analysis-row__cell--image{order:1;padding:0 0 12px}.analysis-row__image-container{width:100%;height:120px;border-radius:6px}.analysis-row__cell--status{order:2;padding:0 0 8px}.analysis-row__cell--angles{order:3;padding:0 0 8px}.analysis-row__angles-list{flex-direction:row;flex-wrap:wrap;gap:8px}.analysis-row__cell--actions{order:4;padding:8px 0 0;border-top:1px solid var(--color-divider);margin-top:8px;display:flex;justify-content:flex-end}.analysis-row__cell--annotated,.analysis-row__cell--file-info,.analysis-row__cell--timestamp{display:none}.analysis-row__cell:before{content:attr(data-label);font-weight:600;font-size:12px;color:var(--color-muted);text-transform:uppercase;letter-spacing:.5px;display:block;margin-bottom:4px}.analysis-row__cell--image:before{content:"Image"}.analysis-row__cell--status:before{content:"Status"}.analysis-row__cell--angles:before{content:"Angles"}.analysis-row__cell--actions:before{display:none}}.skip-link{position:absolute;top:-40px;left:0;background:var(--color-primary);color:var(--color-on-primary);padding:8px 16px;text-decoration:none;font-weight:500;border-radius:0 0 4px;z-index:1001;transition:top .2s ease}.skip-link:focus{top:0;outline:2px solid var(--color-on-primary);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media print{.analyze-image-page{background-color:var(--color-bg);padding:0}.upload-panel,.loading-overlay,.analysis-row__delete-button{display:none}.analysis-row__status--ok{background-color:transparent;color:var(--color-ok);border:1px solid var(--color-ok)}.analysis-row__status--error{background-color:transparent;color:var(--color-error);border:1px solid var(--color-error)}}.image-dialog-overlay{position:fixed;inset:0;--image-dialog-padding: clamp(12px, 3vw, 28px);--image-dialog-control-size: 44px;--image-dialog-control-gap: 12px;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:2000;padding:var(--image-dialog-padding);box-sizing:border-box}.image-dialog{position:relative;display:flex;align-items:center;justify-content:center;width:min(100%,1400px);max-width:calc(100vw - (var(--image-dialog-padding) * 2));max-height:calc(100dvh - (var(--image-dialog-padding) * 2))}.image-dialog__controls{position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:flex-end;gap:var(--image-dialog-control-gap);z-index:1}.image-dialog__download-button{display:inline-flex;align-items:center;gap:8px;min-height:var(--image-dialog-control-size);padding:0 16px;background-color:var(--color-bg);color:var(--color-ink);border:1px solid var(--color-divider);border-radius:var(--radius-sm);font-size:14px;font-weight:600;cursor:pointer;transition:background-color .2s ease,border-color .2s ease,transform .2s ease,box-shadow .2s ease}.image-dialog__download-button:hover{background-color:var(--color-surface);border-color:var(--color-primary);box-shadow:var(--shadow-hover)}.image-dialog__download-button:active{transform:translateY(1px)}.image-dialog__download-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.image-dialog__close-button{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--image-dialog-control-size);height:var(--image-dialog-control-size);background-color:var(--color-bg);border:1px solid var(--color-divider);border-radius:var(--radius-sm);color:var(--color-muted);cursor:pointer;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease,box-shadow .2s ease}.image-dialog__close-button:hover{background-color:#c62828;border-color:#c62828;color:#fff}.image-dialog__close-button:active{transform:translateY(1px)}.image-dialog__close-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.image-dialog__close-icon{position:relative;display:block;width:18px;height:18px}.image-dialog__close-icon-line{position:absolute;top:50%;left:50%;width:18px;height:2.5px;border-radius:var(--radius-sm);background-color:currentColor;transform-origin:center}.image-dialog__close-icon-line:first-child{transform:translate(-50%,-50%) rotate(45deg)}.image-dialog__close-icon-line:last-child{transform:translate(-50%,-50%) rotate(-45deg)}.image-dialog__stage{display:flex;align-items:center;justify-content:center;width:100%;max-width:calc(100vw - (var(--image-dialog-padding) * 2));max-height:calc(100dvh - (var(--image-dialog-padding) * 2));padding:calc(var(--image-dialog-control-size) + 16px) 0 0;overflow:hidden}.image-dialog__image{display:block;width:auto;height:auto;max-width:100%;max-height:calc(100dvh - (var(--image-dialog-padding) * 2) - var(--image-dialog-control-size) - 16px);object-fit:contain;border-radius:var(--radius-md)}@media(max-width:768px){.image-dialog-overlay{--image-dialog-padding: 16px}.image-dialog__download-button{padding:0 14px;font-size:13px}.image-dialog__download-button span{display:none}.image-dialog__close-button{width:36px;height:36px}.image-dialog__stage{padding-top:calc(var(--image-dialog-control-size) + 12px)}.image-dialog__image{max-height:calc(100dvh - (var(--image-dialog-padding) * 2) - var(--image-dialog-control-size) - 12px)}}@media(max-width:480px){.image-dialog-overlay{--image-dialog-padding: 12px;--image-dialog-control-gap: 8px;--image-dialog-control-size: 40px}.image-dialog__image{max-height:calc(100dvh - (var(--image-dialog-padding) * 2) - var(--image-dialog-control-size) - 8px)}}.error-boundary{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:#000000f2;z-index:1000}.error-boundary-content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;max-width:400px;text-align:center}.error-boundary-title{color:#fff;font-size:24px;font-weight:600;margin:0 0 16px;font-family:var(--font-body)}.error-boundary-message{color:#ffffffb3;font-size:16px;margin:0 0 24px;font-family:var(--font-body);line-height:1.5}.error-boundary-retry{min-width:140px}
