/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}.static{position:static}.sticky{position:sticky}.z-50{z-index:50}.container{width:100%}.mx-auto{margin-inline:auto}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.h-\[270px\]{height:270px}.min-h-screen{min-height:100vh}.w-\[270px\]{width:270px}.w-full{width:100%}.flex-1{flex:1}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-none{--tw-border-style:none;border-style:none}.object-contain{-o-object-fit:contain;object-fit:contain}.text-center{text-align:center}.font-\[\'Noto_Sans_TC\'\]{font-family:Noto Sans TC}.uppercase{text-transform:uppercase}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.duration-200{--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}}html,body{box-sizing:border-box;width:100%;height:100%;margin:0;padding:0}#app{width:100vw;min-height:100vh;margin:0;padding:0}.custom-margin-bottom{margin-bottom:1.6rem!important}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}.review-engagement-graph{width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.review-engagement-graph h1{text-align:center;color:#333;margin:20px 0;font-size:2.5rem;font-weight:600}.upload-file-section{max-width:800px;margin:40px auto;padding:0 20px}.upload-section-container{background:#fff;border-radius:24px;padding:40px;box-shadow:0 8px 32px #0000001a;border:2px solid #f0f0f0}.upload-section-title{text-align:center;font-size:1.8rem;font-weight:600;color:#333;margin-bottom:30px}.upload-area-wrapper{position:relative}.upload-area{border:2px dashed #d1d5db;border-radius:16px;padding:60px 40px;text-align:center;cursor:pointer;transition:all .3s ease;background:#fafafa;position:relative;overflow:hidden}.upload-area:hover{border-color:#9ca3af;background:#f5f5f5;transform:translateY(-2px)}.upload-area.drag-over{border-color:#3b82f6;background:#eff6ff;transform:scale(1.02)}.upload-area.has-file{border-color:#66bdea;background:#e9f9ff}.upload-area.upload-success{border-color:#ae8292;background:linear-gradient(135deg,#f3fbff,#f3fbff)}.upload-placeholder{display:flex;flex-direction:column;align-items:center;gap:16px}.upload-icon{color:#6b7280;opacity:.7}.upload-text{font-size:1.5rem;font-weight:600;color:#374151;margin:0}.upload-hint{font-size:1.1rem;color:#9ca3af;margin:0}.uploaded-file-info{display:flex;flex-direction:column;align-items:center;gap:12px}.file-success-icon{color:#4596c0;margin-bottom:8px}.file-name{font-size:1.4rem;font-weight:600;color:#374151;margin:0;word-break:break-all}.file-size{font-size:1rem;color:#6b7280;margin:0}.remove-btn{background:#f3f4f6;color:#6b7280;border:none;padding:8px 16px;border-radius:8px;cursor:pointer;font-size:.9rem;transition:all .2s ease}.remove-btn:hover{background:#e5e7eb;color:#374151}.upload-success-message{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:16px;padding:12px 20px;background:#d1fae5;color:#c79cab;border-radius:8px;font-weight:500}.success-icon{background:#c79cab;color:#fff;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px}.upload-error-message{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:16px;padding:12px 20px;background:#fee2e2;color:#991b1b;border-radius:8px;font-weight:500}.error-icon{background:#ef4444;color:#fff;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px}.upload-to-backend-section{margin-top:20px;text-align:center}.upload-to-backend-btn{background:linear-gradient(135deg,#3b82f6,#1d4ed8);color:#fff;border:none;padding:16px 32px;font-size:1.1rem;font-weight:600;border-radius:12px;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 12px #3b82f64d;display:flex;align-items:center;justify-content:center;gap:8px;margin:0 auto}.upload-to-backend-btn:hover:not(:disabled){background:linear-gradient(135deg,#1d4ed8,#1e40af);transform:translateY(-2px);box-shadow:0 6px 16px #3b82f666}.upload-to-backend-btn:disabled{background:#e5e7eb;color:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.upload-to-backend-btn svg{flex-shrink:0}.uploading-indicator{display:flex;flex-direction:column;align-items:center;gap:12px;margin-top:20px;padding:20px}.upload-spinner{width:24px;height:24px;border:3px solid #f3f4f6;border-top:3px solid #3b82f6;border-radius:50%;animation:spin 1s linear infinite}.uploading-indicator p{color:#6b7280;font-size:1rem;margin:0}.backend-upload-success{margin-top:20px;padding:20px;background:linear-gradient(135deg,#ffeff5);border:1px solid #c79cab;border-radius:12px;display:flex;align-items:flex-start;gap:12px}.backend-upload-success .success-icon{background:#66bdea;color:#fff;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;margin-top:2px}.upload-result-content{flex:1}.upload-result-title{font-size:1.1rem;font-weight:600;color:#ae8292;margin:0 0 12px}.upload-result-details{font-size:.95rem;color:#c1a7b1}.upload-result-details p{margin:6px 0;word-break:break-all}.upload-result-details strong{font-weight:600}.upload-link{color:#c79cab;text-decoration:none;font-weight:500;margin-left:8px}.upload-link:hover{text-decoration:underline}.processing-section{max-width:800px;margin:30px auto;padding:0 20px;text-align:center}.process-btn{background:linear-gradient(135deg,#9ca3af,#6b7280);color:#fff;border:none;padding:20px 60px;font-size:1.4rem;font-weight:600;border-radius:16px;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 16px #0000001a}.process-btn:hover:not(:disabled){background:linear-gradient(135deg,#6b7280,#4b5563);transform:translateY(-2px);box-shadow:0 8px 24px #00000026}.process-btn:disabled{background:#e5e7eb;color:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.processing-indicator{display:flex;flex-direction:column;align-items:center;gap:16px;padding:24px;background:linear-gradient(135deg,#f0f9ff,#e0f2fe);border-radius:16px;border:1px solid #bae6fd}.spinner{width:32px;height:32px;border:3px solid #f3f4f6;border-top:3px solid #3b82f6;border-radius:50%;animation:spin 1s linear infinite}.processing-indicator p{color:#0369a1;font-size:1.1rem;font-weight:500;margin:0;text-align:center}.task-status-section{max-width:800px;margin:20px auto;padding:0 20px}.task-info{background:linear-gradient(135deg,#f8f9fa,#fff);border-radius:16px;padding:24px;border:1px solid #e9ecef;box-shadow:0 4px 12px #0000000d}.task-info h4{margin:0 0 16px;color:#333;font-size:1.2rem;font-weight:600}.task-details p{margin:10px 0;font-size:.95rem;color:#555}.progress-section{margin:16px 0;padding:12px;background:#f8f9ff;border-radius:8px;border:1px solid #e0e7ff}.progress-info{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.progress-label{font-weight:600;color:#4f46e5}.progress-percentage{font-weight:600;font-size:1.1rem;color:#4f46e5}.progress-bar-container{width:100%;height:8px;background:#e5e7eb;border-radius:4px;overflow:hidden}.progress-bar{height:100%;background:linear-gradient(90deg,#3b82f6,#1d4ed8);border-radius:4px;transition:width .3s ease;position:relative}.progress-bar:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);animation:shimmer 2s infinite}.progress-message{margin:12px 0!important;padding:8px 12px;background:#eff6ff;border-left:3px solid #3b82f6;border-radius:4px;font-style:italic}.timestamp-section{margin-top:16px;padding-top:12px;border-top:1px solid #e5e7eb}.timestamp-item{margin:4px 0!important;font-size:.85rem!important;color:#6b7280!important}.status-pending{color:#f59e0b;font-weight:600}.status-processing,.status-running{color:#0ea5e9;font-weight:600}.status-completed{color:#10b981;font-weight:600}.status-failed,.status-error{color:#ef4444;font-weight:600}.switch-bar{display:flex;justify-content:center;gap:4px;background:#f8f9fa;border-radius:16px;padding:4px 16px;margin:20px auto;width:-moz-fit-content;width:fit-content;box-shadow:0 2px 8px #0000000a}.switch-btn{border:none;background:transparent;color:#4682b4;font-size:1.15rem;padding:12px 32px;margin:0;border-radius:10px;cursor:pointer;transition:background .2s,color .2s;font-weight:500}.switch-btn.active{background:#7fc6ee;color:#fff;font-weight:600}.switch-btn:not(.active):hover{background:#e6f3ff;color:#4682b4}#review-graph-container{position:relative;width:100vw;height:70vh;margin:20px 0}.floating-panel{position:absolute;top:20px;left:20px;background:#fffffff2;padding:15px;border-radius:8px;box-shadow:0 4px 12px #0000001a;z-index:1000;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.assignment-label{display:block;font-weight:600;margin-bottom:8px;color:#333}#hw-select{width:120px;margin-bottom:10px;border:1px solid #ddd;border-radius:4px;background:#fff}#hw-apply-btn{background:#4682b4;color:#fff;border:none;padding:8px 16px;border-radius:4px;cursor:pointer;font-weight:600;width:100%}#hw-apply-btn:hover{background:#5a9bd4}#review-graph{width:100%;height:100%}.bubble-chart-section{margin:40px auto;max-width:1200px;padding:0 20px}.bubble-chart-section h2{text-align:center;color:#333;margin-bottom:10px}.bubble-description{text-align:center;color:#666;margin-bottom:20px;line-height:1.5}.note{color:#666}.sub-note{color:#999}.export-controls{text-align:center;margin:20px 0}.export-btn{background:#28a745;color:#fff;border:none;padding:10px 20px;margin:0 10px;border-radius:5px;cursor:pointer;font-weight:500}.export-btn:hover{background:#c79cab}.bubble-chart-container{width:100%;height:600px;border:1px solid #ddd;border-radius:8px;overflow:hidden}#bubbleChart{width:100%;height:100%}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.text-analysis-container[data-v-721f60da]{max-width:1200px;margin:0 auto;padding:20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.header[data-v-721f60da]{text-align:center;margin-bottom:40px}.title[data-v-721f60da]{font-size:2.5rem;font-weight:600;color:#2c3e50;margin:0}.upload-section[data-v-721f60da]{margin-bottom:30px}.upload-area[data-v-721f60da]{border:3px dashed #e0e0e0;border-radius:12px;padding:40px 20px;text-align:center;cursor:pointer;transition:all .3s ease;background:#fafafa;min-height:120px;display:flex;align-items:center;justify-content:center}.upload-area[data-v-721f60da]:hover{border-color:#3498db;background:#f0f8ff}.upload-area.drag-over[data-v-721f60da]{border-color:#2980b9;background:#e3f2fd;transform:scale(1.02)}.upload-area.has-file[data-v-721f60da],.upload-area.upload-success[data-v-721f60da]{border-color:#27ae60;background:#f0fff4}.upload-content[data-v-721f60da]{width:100%}.upload-placeholder[data-v-721f60da]{display:flex;flex-direction:column;align-items:center;gap:12px}.upload-icon[data-v-721f60da]{font-size:3rem;opacity:.6}.upload-text[data-v-721f60da]{font-size:1.2rem;color:#7f8c8d;font-weight:500}.file-info[data-v-721f60da]{display:flex;justify-content:center}.file-details[data-v-721f60da]{display:flex;align-items:center;gap:15px;background:#fff;padding:15px 25px;border-radius:8px;box-shadow:0 2px 8px #0000001a}.file-name[data-v-721f60da]{font-weight:600;color:#2c3e50}.file-size[data-v-721f60da]{color:#7f8c8d;font-size:.9rem}.remove-btn[data-v-721f60da]{background:#e74c3c;color:#fff;border:none;border-radius:50%;width:24px;height:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1rem;line-height:1}.remove-btn[data-v-721f60da]:hover{background:#c0392b}.upload-success-info[data-v-721f60da]{display:flex;flex-direction:column;align-items:center;gap:12px}.success-icon[data-v-721f60da]{font-size:3rem}.success-text[data-v-721f60da]{font-size:1.3rem;color:#27ae60;font-weight:600}.upload-details[data-v-721f60da]{background:#fff;padding:15px;border-radius:8px;box-shadow:0 2px 8px #0000001a;text-align:left}.detail-item[data-v-721f60da]{margin-bottom:8px;color:#2c3e50}.url-link[data-v-721f60da]{color:#3498db;text-decoration:none;margin-left:8px}.url-link[data-v-721f60da]:hover{text-decoration:underline}.error-message[data-v-721f60da]{background:#ffe6e6;color:#e74c3c;padding:12px 16px;border-radius:8px;margin-top:15px;border-left:4px solid #e74c3c}.process-section[data-v-721f60da]{text-align:center;margin-bottom:30px}.process-btn[data-v-721f60da]{background:#6c5ce7;color:#fff;border:none;border-radius:25px;padding:15px 40px;font-size:1.1rem;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:10px;margin-bottom:15px}.process-btn[data-v-721f60da]:hover:not(:disabled){background:#5f4bdb;transform:translateY(-2px);box-shadow:0 4px 12px #6c5ce74d}.process-btn[data-v-721f60da]:disabled{background:#bdc3c7;cursor:not-allowed;transform:none;box-shadow:none}.loading[data-v-721f60da]{display:flex;align-items:center;gap:10px}.spinner[data-v-721f60da]{width:16px;height:16px;border:2px solid transparent;border-top:2px solid white;border-radius:50%;animation:spin-721f60da 1s linear infinite}@keyframes spin-721f60da{to{transform:rotate(360deg)}}.connection-status[data-v-721f60da]{display:flex;align-items:center;justify-content:center;gap:10px;font-size:.9rem}.connected[data-v-721f60da]{color:#27ae60}.disconnected[data-v-721f60da]{color:#e74c3c}.test-btn[data-v-721f60da]{background:#95a5a6;color:#fff;border:none;border-radius:4px;padding:4px 12px;font-size:.8rem;cursor:pointer}.test-btn[data-v-721f60da]:hover{background:#7f8c8d}.filter-section[data-v-721f60da]{display:flex;justify-content:center;margin-bottom:30px}.filter-tabs[data-v-721f60da]{display:flex;background:#fff;border-radius:25px;box-shadow:0 2px 12px #0000001a;overflow:hidden}.tab[data-v-721f60da]{background:transparent;border:none;padding:12px 24px;font-size:1rem;font-weight:500;cursor:pointer;color:#7f8c8d;transition:all .3s ease}.tab.active[data-v-721f60da]{background:#74b9ff;color:#fff}.tab[data-v-721f60da]:hover:not(.active){background:#f8f9fa;color:#2c3e50}.results-section[data-v-721f60da]{background:#fff;border-radius:12px;padding:30px;box-shadow:0 4px 20px #0000001a}.results-header[data-v-721f60da]{display:flex;justify-content:space-between;align-items:center;margin-bottom:25px}.results-header h2[data-v-721f60da]{margin:0;color:#2c3e50}.results-actions[data-v-721f60da]{display:flex;gap:10px}.export-btn[data-v-721f60da],.clear-btn[data-v-721f60da]{background:#74b9ff;color:#fff;border:none;border-radius:6px;padding:8px 16px;cursor:pointer;font-size:.9rem}.clear-btn[data-v-721f60da]{background:#e17055}.export-btn[data-v-721f60da]:hover{background:#0984e3}.clear-btn[data-v-721f60da]:hover{background:#d63031}.statistics[data-v-721f60da]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:20px;margin-bottom:30px}.stat-card[data-v-721f60da]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:20px;border-radius:10px;text-align:center}.stat-value[data-v-721f60da]{font-size:2rem;font-weight:700;margin-bottom:5px}.stat-label[data-v-721f60da]{font-size:.9rem;opacity:.9}.json-results[data-v-721f60da]{margin-top:30px}.json-results h3[data-v-721f60da]{color:#2c3e50;margin-bottom:15px}.json-display[data-v-721f60da]{background:#2c3e50;color:#ecf0f1;padding:20px;border-radius:8px;overflow-x:auto;font-family:Monaco,Consolas,monospace;font-size:.9rem;line-height:1.4;max-height:400px;overflow-y:auto}
