.layout{min-height:100vh}.nav-bar{position:fixed;top:0;left:0;right:0;z-index:1000;background:#1a1a2e;box-shadow:0 2px 8px #0000004d}.nav-container{max-width:1400px;margin:0 auto;padding:0 20px;display:flex;align-items:center;justify-content:space-between;height:56px}.nav-brand{font-size:20px;font-weight:700;color:#fff;text-decoration:none;letter-spacing:.5px}.nav-brand:hover{color:#90caf9}.nav-links{display:flex;list-style:none;margin:0;padding:0;gap:4px}.nav-link{display:block;padding:8px 16px;color:#b0bec5;text-decoration:none;font-size:15px;font-weight:500;border-radius:6px;transition:color .2s,background-color .2s}.nav-link:hover{color:#fff;background-color:#ffffff1a}.nav-link.active{color:#fff;background-color:#1976d2}.nav-hamburger{display:none;flex-direction:column;justify-content:center;gap:5px;background:none;border:none;cursor:pointer;padding:4px;width:32px;height:32px}.nav-hamburger span{display:block;width:24px;height:2px;background:#fff;border-radius:1px;transition:transform .3s,opacity .3s}.nav-hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.nav-hamburger.open span:nth-child(2){opacity:0}.nav-hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.main-content{padding-top:56px}@media (max-width: 768px){.nav-hamburger{display:flex}.nav-links{display:none;position:absolute;top:56px;left:0;right:0;flex-direction:column;background:#1a1a2e;padding:8px 16px 16px;gap:2px;box-shadow:0 4px 8px #0000004d}.nav-links--open{display:flex}.nav-link{padding:12px 16px;font-size:16px}}.nav-logout{background:transparent;border:1.5px solid rgba(255,255,255,.6);color:#fff;padding:.35rem .85rem;border-radius:6px;cursor:pointer;font-size:.85rem;white-space:nowrap;margin-left:.5rem;transition:background .2s}.nav-logout:hover{background:#ffffff26}.admin-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px;padding:20px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a}.admin-header h1{margin:0;font-size:28px;color:#333}.header-info{display:flex;align-items:center;gap:15px}.header-info span{color:#666;font-size:14px}.error-card{background:#ffebee;color:#c62828;padding:15px;border-left:4px solid #f44336}.teams-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));gap:20px;margin-bottom:30px}.team-card{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;overflow:hidden;transition:transform .2s,box-shadow .2s}.team-card:hover{transform:translateY(-2px);box-shadow:0 4px 16px #00000026}.team-header{display:flex;justify-content:space-between;align-items:center;padding:20px;background:#f5f5f5;border-bottom:1px solid #e0e0e0}.team-header h3{margin:0;font-size:18px;color:#333}.team-body{padding:20px}.team-info{margin-bottom:20px}.team-info p{margin:8px 0;font-size:14px;color:#555}.team-info strong{color:#333;margin-right:8px}.button-group{display:flex;gap:10px;flex-wrap:wrap}.button-group .btn{flex:1;min-width:150px}.status-badge{padding:6px 14px;border-radius:14px;font-size:12px;font-weight:600;color:#fff;text-transform:uppercase}.logs-section{margin-top:30px}.logs-section h2{margin-bottom:20px;font-size:22px;color:#333}.logs-container{max-height:600px;overflow-y:auto;background:#f9f9f9;border-radius:5px;padding:15px;font-family:Courier New,monospace;font-size:13px}.log-entry{display:flex;gap:10px;padding:8px;border-bottom:1px solid #e0e0e0;align-items:baseline}.log-entry:last-child{border-bottom:none}.log-time{color:#666;min-width:180px}.log-team{color:#1976d2;font-weight:600;min-width:200px}.log-level{font-weight:600;min-width:60px}.log-message{color:#333;flex:1}.log-info .log-level{color:#1976d2}.log-warning .log-level{color:#ff9800}.log-error .log-level{color:#f44336}.modal-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .15s ease}.modal-container{background:#fff;border-radius:10px;box-shadow:0 8px 32px #0000004d;width:90%;max-width:860px;max-height:80vh;display:flex;flex-direction:column;animation:slideUp .2s ease}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #e0e0e0;background:#f5f5f5;border-radius:10px 10px 0 0;flex-shrink:0}.modal-header h2{margin:0;font-size:20px;color:#333}.modal-close{background:none;border:none;font-size:20px;color:#666;cursor:pointer;padding:4px 8px;border-radius:4px;line-height:1;transition:background .2s,color .2s}.modal-close:hover{background:#e0e0e0;color:#333}.modal-body{padding:24px;overflow-y:auto;flex:1}.modal-empty{color:#888;text-align:center;padding:40px 0;font-size:15px}.history-table{width:100%;border-collapse:collapse;font-size:14px}.history-table th{background:#f5f5f5;padding:10px 14px;text-align:left;font-weight:600;color:#555;border-bottom:2px solid #e0e0e0;white-space:nowrap}.history-table td{padding:10px 14px;border-bottom:1px solid #f0f0f0;color:#333}.history-table tbody tr:hover{background:#fafafa}.history-memo{max-width:280px;white-space:pre-wrap;word-break:break-word;font-size:13px;color:#555}.commit-sha{font-family:monospace;font-size:12px;background:#f0f4ff;color:#3949ab;padding:2px 6px;border-radius:4px;letter-spacing:.5px}.badge-success{background:#e8f5e9;color:#388e3c}.badge-failed{background:#ffebee;color:#d32f2f}.badge-running,.badge-in_progress{background:#fff3e0;color:#f57c00}.badge-pending{background:#f5f5f5;color:#757575}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(24px);opacity:0}to{transform:translateY(0);opacity:1}}.admin-tabs{display:flex;gap:4px;margin-bottom:24px;border-bottom:2px solid #e0e0e0}.tab-btn{background:none;border:none;padding:10px 20px;font-size:15px;color:#666;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;transition:color .2s,border-color .2s}.tab-btn.active{color:#1976d2;border-bottom-color:#1976d2;font-weight:600}.tab-btn:hover:not(.active){color:#333;background:#f5f5f5}.sector-manager{margin-bottom:32px}.sector-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.sector-header h2{margin:0;font-size:22px;color:#333}.sector-create-form{margin-bottom:20px;padding:20px}.sector-create-form h3{margin:0 0 16px;font-size:16px;color:#333}.form-row{display:flex;align-items:center;gap:12px;margin-bottom:12px}.form-row label{min-width:90px;font-size:14px;color:#555;font-weight:500}.form-row input[type=text],.form-row input[type=number]{flex:1;padding:7px 10px;border:1px solid #ccc;border-radius:4px;font-size:14px}.sector-list{display:flex;flex-direction:column;gap:12px}.sector-card{padding:16px 20px}.sector-disabled{opacity:.65}.sector-info-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.sector-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.sector-name{font-size:16px;font-weight:600;color:#1a237e}.sector-desc{font-size:13px;color:#666}.sector-topn{font-size:13px;color:#888;background:#f5f5f5;padding:2px 8px;border-radius:12px}.sector-actions{display:flex;gap:6px;flex-shrink:0}.sector-edit-form{padding:4px 0}.sector-edit-actions{display:flex;gap:8px;margin-top:8px}.sector-mappings{margin-top:16px;padding-top:16px;border-top:1px solid #eee;display:grid;grid-template-columns:1fr 1fr;gap:20px}.mapping-section h4{margin:0 0 10px;font-size:14px;color:#444;font-weight:600}.mapping-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;min-height:28px}.tag{display:inline-flex;align-items:center;gap:4px;background:#e3f2fd;color:#1565c0;font-size:13px;padding:3px 8px;border-radius:14px}.tag-remove{background:none;border:none;color:#1565c0;cursor:pointer;font-size:14px;line-height:1;padding:0;opacity:.6}.tag-remove:hover{opacity:1}.tag-stock-link{display:inline-flex;align-items:center;gap:4px;cursor:pointer;text-decoration:none}.tag-stock-link:hover{text-decoration:underline;color:#0d47a1}.tag-stock-code{font-size:11px;opacity:.7}.stock-search-box{display:flex;flex-direction:column;gap:4px;margin-top:6px}.search-status{font-size:12px;color:#888;padding:2px 4px}.stock-search-results{border:1px solid #ddd;border-radius:6px;background:#fff;max-height:220px;overflow-y:auto;box-shadow:0 2px 8px #00000014}.stock-result-item{display:flex;align-items:center;gap:6px;padding:6px 10px;font-size:13px;cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background .1s}.stock-result-item:last-child{border-bottom:none}.stock-result-item:hover{background:#f5f5f5}.stock-result-single{color:#1565c0}.result-name{font-weight:500;flex:1}.result-code{font-size:11px;color:#888}.result-hint{font-size:11px;color:#42a5f5;margin-left:auto}.empty-tag{font-size:13px;color:#aaa}.mapping-add-row{display:flex;gap:6px}.mapping-add-row input{flex:1;padding:6px 10px;border:1px solid #ccc;border-radius:4px;font-size:13px}.stock-mapping-list{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;min-height:28px}.btn-sm{padding:5px 10px;font-size:13px}.btn-danger{background:#f44336;color:#fff;border:none}.btn-danger:hover{background:#d32f2f}.empty-msg{color:#888;text-align:center;padding:40px 0;font-size:15px}@media (max-width: 768px){.admin-header{flex-direction:column;align-items:flex-start;gap:15px}.teams-grid{grid-template-columns:1fr}.button-group{flex-direction:column}.button-group .btn{width:100%}.log-entry{flex-direction:column;gap:5px}.log-time,.log-team,.log-level{min-width:auto}.modal-container{width:95%;max-height:90vh}.history-table{font-size:12px}.history-table th,.history-table td{padding:8px}}.manual-history-card{margin-bottom:20px;padding:16px 20px;background:#f8f9ff;border-left:4px solid #1976d2}.manual-history-card h3{margin:0 0 12px;font-size:16px;color:#1976d2}.manual-history-form{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.manual-history-form select,.manual-history-form input{padding:6px 10px;border:1px solid #ddd;border-radius:4px;font-size:13px;background:#fff}.manual-history-form input{flex:1;min-width:200px}.btn-secondary{background:#6c757d;color:#fff;border:none}.btn-secondary:hover{background:#5a6268}.team-card .history-btn{margin-top:10px;width:100%;background:#6c757d;color:#fff;border-color:#6c757d}.team-card .history-btn:hover{background:#5a6268;border-color:#545b62;color:#fff}.llm-manager{padding:20px 0}.llm-manager-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.llm-manager-header h2{margin:0;font-size:20px;color:#333}.llm-section{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:16px 20px;margin-bottom:16px}.llm-section-title{font-size:16px;font-weight:700;color:#374151;margin:0 0 12px}.llm-empty{color:#9ca3af;font-size:14px;margin:0}.llm-table{width:100%;border-collapse:collapse;font-size:14px}.llm-table th{text-align:left;padding:8px 10px;border-bottom:2px solid #e2e8f0;color:#6b7280;font-weight:600;font-size:12px}.llm-table td{padding:10px;border-bottom:1px solid #f1f5f9;vertical-align:middle}.llm-table tr:last-child td{border-bottom:none}.llm-name{font-weight:600;color:#1e293b}.llm-model{color:#374151;font-family:monospace}.llm-url{color:#6b7280;font-size:12px;font-family:monospace;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.llm-disabled-badge{font-size:11px;background:#fee2e2;color:#991b1b;padding:1px 6px;border-radius:4px;margin-left:6px}.llm-test-result{font-size:12px;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}.llm-test-result.success{color:#16a34a}.llm-test-result.fail{color:#dc2626}.llm-actions{display:flex;gap:6px;white-space:nowrap}.btn-sm{padding:4px 10px;font-size:12px;border:1px solid #d1d5db;background:#fff;border-radius:6px;cursor:pointer;transition:background .12s}.btn-sm:hover:not(:disabled){background:#f3f4f6}.btn-sm:disabled{opacity:.5;cursor:not-allowed}.btn-sm.btn-danger{border-color:#fca5a5;color:#dc2626}.btn-sm.btn-danger:hover{background:#fef2f2}.llm-modal{max-width:500px}.llm-form{display:flex;flex-direction:column;gap:14px;margin:16px 0}.llm-form-row{display:flex;align-items:center;gap:12px}.llm-form-row label{min-width:120px;font-size:13px;color:#374151;font-weight:500}.llm-form-row input[type=text],.llm-form-row input[type=password],.llm-form-row select{flex:1;padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:13px;color:#1e293b}.llm-form-row input:focus,.llm-form-row select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 2px #3b82f626}.llm-checkbox{display:flex;align-items:center;gap:6px;font-size:13px;color:#374151;cursor:pointer;min-width:unset!important}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content{background:#fff;border-radius:12px;padding:24px;width:90%;max-width:560px;max-height:90vh;overflow-y:auto;box-shadow:0 8px 32px #0003}.modal-content h3{margin:0 0 16px;font-size:18px;color:#1e293b}.embedding-status-card{margin-top:24px}.embedding-status-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.embedding-status-header h2{margin:0;font-size:18px;color:#1e293b}.btn-sm{padding:4px 12px;font-size:13px}.embedding-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}.embedding-stat-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:12px 16px;display:flex;flex-direction:column;gap:4px}.stat-label{font-size:12px;color:#64748b;font-weight:500}.stat-value{font-size:22px;font-weight:700;color:#1e293b}.stat-good{color:#16a34a}.stat-warn{color:#d97706}.embedding-progress{display:flex;align-items:center;gap:12px;margin-bottom:8px}.progress-bar-container{flex:1;background:#e2e8f0;border-radius:999px;height:12px;overflow:hidden}.progress-bar{height:100%;border-radius:999px;transition:width .4s ease}.progress-complete{background:#16a34a}.progress-good{background:#2563eb}.progress-warn{background:#d97706}.progress-label{font-size:14px;font-weight:700;color:#1e293b;min-width:48px;text-align:right}.embedding-updated{font-size:12px;color:#94a3b8;margin:0}.training-status-card{border-left:4px solid #7c3aed}.training-status-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.training-queue-summary{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px}.tq-stat{display:flex;flex-direction:column;align-items:center;padding:10px 16px;border-radius:8px;min-width:70px;gap:4px}.tq-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.4px}.tq-value{font-size:22px;font-weight:700}.tq-total{background:#f1f5f9;color:#334155}.tq-pending{background:#fef9c3;color:#92400e}.tq-training{background:#dbeafe;color:#1d4ed8}.tq-completed{background:#dcfce7;color:#166534}.tq-failed{background:#fee2e2;color:#991b1b}.tq-interrupted{background:#fef3c7;color:#b45309}.tq-clickable{cursor:pointer;transition:opacity .15s,transform .1s}.tq-clickable:hover{opacity:.8;transform:scale(1.03)}.training-phase-table-wrap{overflow-x:auto;margin-bottom:16px}.training-phase-table{width:100%;border-collapse:collapse;font-size:14px}.training-phase-table th{padding:8px 12px;background:#f8fafc;border-bottom:2px solid #e2e8f0;text-align:right;font-weight:600;color:#475569}.training-phase-table th:first-child{text-align:left}.training-phase-table td{padding:8px 12px;border-bottom:1px solid #f1f5f9;text-align:right;color:#374151}.phase-label-cell{text-align:left!important;font-weight:500;color:#1e293b!important}.phase-training-active{color:#1d4ed8!important;font-weight:700}.phase-failed-active{color:#dc2626!important;font-weight:700}.phase-interrupted-active{color:#b45309!important;font-weight:700}.phase-completed{color:#16a34a}.phase-pending{color:#92400e}.training-current{margin-bottom:16px}.training-current h4{font-size:13px;color:#475569;font-weight:600;margin:0 0 8px}.training-current-list{display:flex;flex-direction:column;gap:6px}.training-current-item{display:flex;align-items:center;gap:10px;padding:6px 10px;background:#eff6ff;border-radius:6px;border-left:3px solid #3b82f6;font-size:13px}.tci-code{font-weight:700;color:#1e3a8a;min-width:72px}.tci-name{font-size:12px;color:#374151;font-weight:500}.tci-phase{padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}.tci-phase-quick{background:#fef3c7;color:#92400e}.tci-phase-top400{background:#dbeafe;color:#1e40af}.tci-phase-full{background:#f3e8ff;color:#6b21a8}.tci-since{color:#64748b;font-size:12px}.training-history-section{margin-bottom:12px}.training-history-toggle{background:none;border:1px solid #e2e8f0;border-radius:6px;padding:6px 14px;font-size:13px;color:#475569;cursor:pointer;width:100%;text-align:left;margin-bottom:8px}.training-history-toggle:hover{background:#f8fafc}.training-history-table-wrap{overflow-x:auto}.training-history-table{width:100%;border-collapse:collapse;font-size:13px}.training-history-table th{padding:7px 10px;background:#f8fafc;border-bottom:2px solid #e2e8f0;font-weight:600;color:#475569;white-space:nowrap}.training-history-table td{padding:7px 10px;border-bottom:1px solid #f1f5f9;color:#374151}.th-row-failed{background:#fff5f5}.th-code{font-weight:600;color:#1e293b}.th-name{display:block;font-size:11px;color:#6b7280;font-weight:400;margin-top:1px}.th-status-badge{padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}.th-status-completed{background:#dcfce7;color:#166534}.th-status-failed{background:#fee2e2;color:#991b1b}.th-status-interrupted{background:#fef9c3;color:#92400e}.th-num{text-align:right;font-variant-numeric:tabular-nums}.th-date{white-space:nowrap;font-size:12px;color:#64748b}.training-empty{font-size:14px;color:#94a3b8;text-align:center;padding:16px 0;margin:0}.training-updated{font-size:12px;color:#94a3b8;margin:4px 0 0}.investor-trading-status-card{border-left:4px solid #0891b2;margin-top:24px}.investor-trading-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.investor-trading-header h2{margin:0;font-size:18px;color:#1e293b}.stat-value-sm{font-size:14px;font-weight:600;color:#1e293b;word-break:keep-all}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f0f4f8}.login-card{background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001a;padding:2.5rem 2rem;width:100%;max-width:380px}.login-title{font-size:1.75rem;font-weight:700;text-align:center;color:#1a1a2e;margin:0 0 .25rem}.login-subtitle{text-align:center;color:#666;margin:0 0 1.75rem;font-size:.9rem}.login-form{display:flex;flex-direction:column;gap:1rem}.login-field{display:flex;flex-direction:column;gap:.35rem}.login-field label{font-size:.85rem;font-weight:600;color:#333}.login-field input{padding:.65rem .9rem;border:1.5px solid #ddd;border-radius:8px;font-size:.95rem;outline:none;transition:border-color .2s}.login-field input:focus{border-color:#4f8ef7}.login-error{color:#e53e3e;font-size:.85rem;margin:0}.login-btn{margin-top:.5rem;padding:.75rem;background:#4f8ef7;color:#fff;border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:background .2s}.login-btn:hover:not(:disabled){background:#2d6fd4}.login-btn:disabled{opacity:.65;cursor:not-allowed}.recommendations-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding:20px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;flex-wrap:wrap;gap:16px}.recommendations-header h1{margin:0;font-size:24px;color:#333}.recommendations-controls{display:flex;align-items:center;gap:16px}.filter-label{display:flex;align-items:center;gap:8px;font-size:14px;color:#555}.filter-input{width:70px;padding:6px 10px;border:1px solid #ddd;border-radius:4px;font-size:14px}.filter-input:focus{outline:none;border-color:#1976d2;box-shadow:0 0 0 2px #1976d233}.search-input-wrapper{position:relative;display:flex;align-items:center}.search-input{width:200px;padding-right:28px}.search-clear-btn{position:absolute;right:6px;background:none;border:none;cursor:pointer;font-size:12px;color:#999;line-height:1;padding:0 2px;display:flex;align-items:center}.search-clear-btn:hover{color:#555}.result-count{font-size:14px;color:#888;white-space:nowrap}.btn-refresh{padding:6px 12px;border:1px solid #d1d5db;background:#fff;color:#374151;border-radius:6px;cursor:pointer;font-size:13px;transition:background .15s;white-space:nowrap}.btn-refresh:hover{background:#f3f4f6}.quick-actions{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap}.quick-action-btn{padding:10px 18px;border:none;border-radius:8px;cursor:pointer;font-size:.9rem;font-weight:600;transition:opacity .15s,background .15s;white-space:nowrap}.quick-action-btn:disabled{opacity:.5;cursor:not-allowed}.quick-action-generate{background:#6366f1;color:#fff}.quick-action-generate:hover:not(:disabled){background:#4f46e5}.quick-action-pattern{background:#10b981;color:#fff}.quick-action-pattern:hover{background:#059669}.quick-action-sell{background:#f59e0b;color:#fff}.quick-action-sell:hover{background:#d97706}.generate-msg{padding:10px 16px;border-radius:8px;font-size:.9rem;margin-bottom:16px}.generate-msg--ok{background:#ecfdf5;color:#065f46;border:1px solid #6ee7b7}.generate-msg--err{background:#fef2f2;color:#991b1b;border:1px solid #fca5a5}.recommendations-table-wrapper{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;overflow-x:auto}.recommendations-table{width:100%;border-collapse:collapse;min-width:1050px}.recommendations-table thead{background:#f5f5f5}.recommendations-table th{padding:14px 12px;text-align:left;font-size:13px;font-weight:600;color:#555;border-bottom:2px solid #e0e0e0;white-space:nowrap;-webkit-user-select:none;user-select:none}.recommendations-table th.sortable{cursor:pointer}.recommendations-table th.sortable:hover{background:#eee;color:#1976d2}.recommendations-table td{padding:12px;font-size:14px;color:#333;border-bottom:1px solid #f0f0f0}.recommendations-table .center{text-align:center}.recommendations-table .clickable-row{cursor:pointer;transition:background-color .15s}.recommendations-table .clickable-row:hover{background-color:#f5f9ff}.recommendations-table .empty-row{text-align:center;padding:40px;color:#999}.score-high{background-color:#4caf501f;color:#2e7d32;font-weight:600}.score-medium{background-color:#1976d214;color:#1565c0;font-weight:500}.score-low{background-color:#ff98001a;color:#e65100}.score-very-low{background-color:#f4433614;color:#c62828}.negative,.stock-up{color:#c62828;font-weight:600}.price-change-arrow{font-size:12px;white-space:nowrap}.stock-name-link{color:#1565c0;text-decoration:underline;cursor:pointer;font-weight:500}.stock-name-link:hover{color:#0d47a1}.stock-name-cell{display:flex;flex-direction:column;gap:2px}.stock-code-sub{font-size:11px;color:#999}.reason-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.reason-tag{background:#f0f4ff;border:1px solid #c5cae9;color:#3949ab;font-size:12px;padding:3px 10px;border-radius:12px}.reason-modal-trading{display:flex;flex-wrap:wrap;gap:12px;padding:10px 12px;background:#f0f7ff;border-radius:6px;font-size:13px;font-weight:600}.reason-modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:4px}.btn-secondary{background:#f5f5f5;color:#555;border:1px solid #ddd;padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.btn-secondary:hover{background:#e9e9e9}.trade-buy{color:#1565c0;font-weight:600}.trade-target{color:#2e7d32;font-weight:600}.trade-date{color:#6a1b9a;font-size:13px;white-space:nowrap}.dday-cell{white-space:nowrap}.dday-badge{display:inline-block;padding:2px 7px;border-radius:10px;font-size:11px;font-weight:700;letter-spacing:.5px;margin-right:4px;vertical-align:middle}.dday-today{background:#ff1744;color:#fff;animation:dday-pulse 1.2s ease-in-out infinite}@keyframes dday-pulse{0%,to{opacity:1}50%{opacity:.65}}.dday-urgent{background:#ff5722;color:#fff}.dday-near{background:#ff9800;color:#fff}.dday-far{background:#1976d2;color:#fff}@media (prefers-reduced-motion: reduce){.dday-today{animation:none}}.dday-passed{background:#9e9e9e;color:#fff}.dday-date{font-size:12px;color:#666;vertical-align:middle}@media (max-width: 768px){.recommendations-header{flex-direction:column;align-items:flex-start}.recommendations-controls{width:100%;justify-content:space-between;flex-wrap:wrap;gap:8px}.recommendations-table{min-width:580px}.recommendations-table th,.recommendations-table td{padding:8px;font-size:13px}.quick-actions{flex-wrap:wrap;gap:8px}}.rec-cards{display:flex;flex-direction:column;gap:8px}.rec-card{background:#fff;border-radius:8px;padding:12px 16px;box-shadow:0 1px 4px #0000001a;cursor:pointer;transition:box-shadow .15s}.rec-card:hover{box-shadow:0 2px 8px #00000026}.rec-card__header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.rec-card__name{font-weight:600;font-size:15px;color:#1a1a2e;flex:1}.rec-card__code{font-family:monospace;font-size:12px;color:#1976d2}.rec-card__market{font-size:11px;color:#888;background:#f0f0f0;padding:2px 6px;border-radius:4px}.rec-card__body{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;font-size:13px}.rec-card__label{color:#888;font-size:11px;margin-bottom:2px}.rec-card__value{font-weight:600;color:#333}.rec-card__footer{margin-top:10px;display:flex;justify-content:flex-end}.rec-cards .empty-row{text-align:center;color:#888;padding:32px 0;font-size:14px}.stocks-view-tabs{display:flex;gap:4px;margin-bottom:12px;border-bottom:2px solid #e0e0e0;padding-bottom:0}.view-tab-btn{padding:10px 20px;border:none;background:transparent;color:#666;font-size:14px;font-weight:500;cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;transition:all .2s;border-radius:4px 4px 0 0;white-space:nowrap}.view-tab-btn:hover{color:#1976d2;background:#1976d20d}.view-tab-btn--active{color:#1976d2;border-bottom-color:#1976d2;font-weight:600}.sector-select-wrapper{display:flex;align-items:center;gap:8px}.sector-select{padding:10px 14px;border:1px solid #ddd;border-radius:6px;font-size:14px;color:#333;background:#fff;min-width:240px;cursor:pointer}.sector-select:focus{outline:none;border-color:#1976d2;box-shadow:0 0 0 2px #1976d233}.sector-loading{font-size:13px;color:#999}.sector-empty-hint{background:#f9f9f9;border:1px dashed #ddd;border-radius:8px;padding:40px;text-align:center;color:#999;font-size:14px;margin-top:8px}.ranking-summary{margin-top:8px;font-size:13px;color:#888}.search-result-count{margin-bottom:8px;font-size:13px;color:#888;text-align:right}.rank-col{width:52px}.rank-badge{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;font-size:13px;font-weight:600;background:#f0f0f0;color:#555}.rank-top-1{background:gold;color:#7a5c00}.rank-top-2{background:silver;color:#4a4a4a}.rank-top-3{background:#cd7f32;color:#fff}.market-cap-cell{font-size:13px;color:#555;white-space:nowrap}.listing-badge{display:inline-block;padding:2px 7px;border-radius:4px;font-size:11px;font-weight:600}.status-normal{background:#e8f5e9;color:#2e7d32}.status-delisted{background:#ffebee;color:#c62828}.status-supervised{background:#fff8e1;color:#e65100}.status-caution{background:#fff3e0;color:#f57c00}.status-warning{background:#fce4ec;color:#ad1457}.autocomplete-wrapper{position:relative;flex:1;min-width:250px}.suggestions-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 4px 16px #0000001f;list-style:none;margin:0;padding:4px 0;z-index:1000;max-height:320px;overflow-y:auto}.suggestion-item{display:flex;align-items:center;gap:8px;padding:10px 14px;cursor:pointer;transition:background .1s}.suggestion-item:hover,.suggestion-active{background:#f0f7ff}.suggestion-code{font-size:12px;color:#888;font-family:monospace;min-width:56px}.suggestion-name{flex:1;font-size:14px;color:#333;font-weight:500}.suggestion-market{font-size:11px;padding:2px 6px}.stocks-header{margin-bottom:20px;padding:20px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a}.stocks-header h1{margin:0 0 16px;font-size:24px;color:#333}.stocks-controls{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.search-form{display:flex;gap:8px;flex:1;min-width:250px}.search-input{flex:1;padding:10px 14px;border:1px solid #ddd;border-radius:6px;font-size:14px;max-width:400px}.search-input:focus{outline:none;border-color:#1976d2;box-shadow:0 0 0 2px #1976d233}.market-filter{display:flex;gap:4px;background:#f5f5f5;padding:3px;border-radius:6px}.market-btn{padding:8px 16px;border:none;border-radius:4px;background:transparent;color:#666;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s}.market-btn:hover{color:#333;background:#0000000d}.market-btn--active{background:#1976d2;color:#fff}.market-btn--active:hover{background:#1565c0;color:#fff}.stocks-table-wrapper{background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;overflow-x:auto}.stocks-table{width:100%;border-collapse:collapse;min-width:650px}.stocks-table thead{background:#f5f5f5}.stocks-table th{padding:14px 12px;text-align:left;font-size:13px;font-weight:600;color:#555;border-bottom:2px solid #e0e0e0;white-space:nowrap}.stocks-table th.right{text-align:right}.stocks-table td{padding:12px;font-size:14px;color:#333;border-bottom:1px solid #f0f0f0}.stocks-table .right{text-align:right}.stocks-table .center{text-align:center}.stocks-table .clickable-row{cursor:pointer;transition:background-color .15s}.stocks-table .clickable-row:hover{background-color:#f5f9ff}.stocks-table .empty-row{text-align:center;padding:40px;color:#999}.code-cell{font-family:Courier New,monospace;font-weight:500;color:#1976d2}.name-cell{font-weight:500}.positive{color:#2e7d32;font-weight:600}.negative{color:#c62828;font-weight:600}@media (max-width: 768px){.stocks-controls{flex-direction:column;align-items:stretch}.search-form{min-width:auto}.search-input{max-width:none}.market-filter{justify-content:center}}.stocks-cards{display:flex;flex-direction:column;gap:8px}.stocks-cards-empty{text-align:center;padding:40px;color:#999;font-size:14px;background:#fff;border-radius:8px;box-shadow:0 1px 4px #0000001a}.stock-card{background:#fff;border-radius:8px;padding:12px 16px;box-shadow:0 1px 4px #0000001a;cursor:pointer;transition:background-color .15s}.stock-card:active{background-color:#f5f9ff}.stock-card__header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.stock-card__name{font-weight:600;font-size:15px;flex:1;color:#333}.stock-card__code{font-family:monospace;font-size:12px;color:#1976d2}.stock-card__body{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:13px}.stock-card__label{color:#888;font-size:11px;margin-bottom:2px}.stock-card__value{font-weight:600;color:#333}.stock-detail-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px;padding:24px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #0000001a;flex-wrap:wrap;gap:16px}.detail-search-wrapper{position:relative;width:100%;flex-basis:100%}.detail-search-input-wrap{display:flex;align-items:center;border:1px solid #ddd;border-radius:8px;padding:8px 12px;gap:8px;background:#f9f9f9;transition:border-color .2s}.detail-search-input-wrap:focus-within{border-color:#1976d2;background:#fff}.detail-search-icon{font-size:14px;color:#888;flex-shrink:0}.detail-search-input{border:none;outline:none;background:transparent;font-size:14px;color:#333;width:100%}.detail-search-input::placeholder{color:#aaa}.detail-suggestions-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid #ddd;border-radius:8px;box-shadow:0 4px 16px #0000001f;list-style:none;margin:0;padding:4px 0;z-index:100;max-height:260px;overflow-y:auto}.detail-suggestion-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;font-size:14px;transition:background .15s}.detail-suggestion-item:hover,.detail-suggestion-active{background:#f0f6ff}.detail-suggestion-item .suggestion-code{font-family:Courier New,monospace;font-size:13px;color:#666;min-width:60px}.detail-suggestion-item .suggestion-name{flex:1;color:#222;font-weight:500}.stock-title-area{display:flex;align-items:flex-start;gap:16px}.stock-name-row{display:flex;align-items:center;gap:10px}.stock-detail-header .stock-name-row h1{margin:0}.watchlist-toggle-btn{font-size:22px;background:none;border:none;cursor:pointer;color:#ccc;padding:0;line-height:1;margin-bottom:6px;transition:color .2s,transform .15s}.watchlist-toggle-btn:hover{color:#f5a623;transform:scale(1.15)}.watchlist-toggle-btn.watched{color:#f5a623}.back-btn{padding:8px 14px;border:1px solid #ddd;border-radius:6px;background:#fff;color:#555;font-size:14px;cursor:pointer;transition:all .2s;white-space:nowrap;margin-top:4px}.back-btn:hover{border-color:#1976d2;color:#1976d2}.stock-detail-header h1{margin:0 0 8px;font-size:28px;color:#333}.stock-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.stock-code{font-family:Courier New,monospace;font-size:15px;color:#666;font-weight:500}.stock-sector{font-size:14px;color:#888}.stock-price-area{text-align:right}.price-top-row{display:flex;align-items:center;justify-content:flex-end;gap:10px}.current-price{display:block;font-size:32px;font-weight:700;color:#333}.rt-status{display:flex;align-items:center;gap:5px;margin-bottom:2px}.rt-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.rt-dot--connected{background-color:#4caf50;animation:rt-pulse 2s ease-in-out infinite}.rt-dot--connecting{background-color:#ff9800;animation:rt-pulse .8s ease-in-out infinite}.rt-dot--closed{background-color:#9e9e9e}.rt-dot--disconnected{background-color:#f44336}.rt-label{font-size:11px;color:#888;font-weight:500;letter-spacing:.3px}@keyframes rt-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.85)}}.price-change-row{display:flex;align-items:center;gap:6px;margin-top:4px;font-size:16px;font-weight:600;justify-content:flex-end}.price-change-row.positive{color:#2e7d32}.price-change-row.negative{color:#c62828}.change-amount{font-size:18px}.change-rate{font-size:16px}.change-label{font-size:12px;font-weight:400;color:#888;margin-left:2px}.market-tag{display:inline-block;padding:3px 10px;border-radius:10px;font-size:12px;font-weight:600}.market-tag--kospi{background:#e3f2fd;color:#1565c0}.market-tag--kosdaq{background:#fce4ec;color:#c62828}.chart-card h2{margin-bottom:16px;font-size:18px;color:#333;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.trading-chart-toggle{display:flex;gap:4px;margin-left:auto}.chart-container{width:100%;min-height:350px}.detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:20px;margin-bottom:20px}.detail-grid .card h2{margin-bottom:16px;font-size:18px;color:#333;padding-bottom:12px;border-bottom:1px solid #eee}.info-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.info-item{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;background:#f9f9f9;border-radius:6px}.info-label{font-size:13px;color:#666}.info-value{font-size:14px;font-weight:600;color:#333}.prediction-card h2{margin-bottom:16px;font-size:18px;color:#333;padding-bottom:12px;border-bottom:1px solid #eee}.prediction-content{display:flex;align-items:center;gap:40px;flex-wrap:wrap}.prediction-main{text-align:center;min-width:140px}.prediction-label{font-size:14px;color:#666;margin-bottom:8px}.prediction-value{font-size:42px;font-weight:700}.prediction-high{color:#2e7d32}.prediction-medium{color:#ff9800}.prediction-low{color:#c62828}.prediction-details p{margin:6px 0;font-size:14px;color:#555}.prediction-details strong{color:#333;margin-right:8px}.prediction-horizon-note{font-size:12px;color:#888;margin-left:4px}.attention-heatmap{margin-top:20px;padding-top:16px;border-top:1px solid #eee;width:100%}.attention-heatmap-subtitle{font-size:11px;color:#999;margin-bottom:8px}.attention-bar:hover:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 4px);left:50%;transform:translate(-50%);background:#000000bf;color:#fff;font-size:10px;padding:3px 6px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:10}.recommendation-history{overflow-x:auto}.history-table{width:100%;border-collapse:collapse}.history-table th{padding:12px;text-align:left;font-size:13px;font-weight:600;color:#555;background:#f5f5f5;border-bottom:2px solid #e0e0e0}.history-table td{padding:10px 12px;font-size:14px;color:#333;border-bottom:1px solid #f0f0f0}.history-table .center{text-align:center}.history-table .positive{color:#2e7d32;font-weight:600}.history-table .negative{color:#c62828;font-weight:600}@media (max-width: 768px){.stock-detail-header{flex-direction:column}.stock-detail-header h1{font-size:22px}.stock-price-area{text-align:left}.price-change-row{justify-content:flex-start}.current-price{font-size:24px}.detail-grid,.info-grid{grid-template-columns:1fr}.prediction-content{flex-direction:column;align-items:flex-start;gap:20px}.prediction-value{font-size:32px}}.info-label-clickable{cursor:pointer;border-bottom:1px dashed #94a3b8;display:inline-flex;align-items:center;gap:3px;transition:color .12s}.info-label-clickable:hover{color:#3b82f6;border-bottom-color:#3b82f6}.info-label-icon{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:#e0e7ff;color:#3730a3;font-size:9px;font-weight:800;line-height:1;flex-shrink:0}.term-popup-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900}.term-popup{position:absolute;top:calc(100% + 6px);left:0;z-index:910;background:#fff;border:1px solid #e2e8f0;border-radius:10px;box-shadow:0 8px 24px #00000026;padding:14px 16px;width:280px;font-size:13px;line-height:1.6}.term-popup-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.term-popup-title{font-weight:700;font-size:14px;color:#1e293b}.term-popup-close{background:none;border:none;cursor:pointer;color:#94a3b8;font-size:14px;padding:0;line-height:1}.term-popup-close:hover{color:#475569}.term-popup-full{font-size:11px;color:#64748b;margin-bottom:6px;font-style:italic}.term-popup-desc{color:#374151;font-size:13px;margin-bottom:8px}.term-popup-tip{background:#f0fdf4;border-left:3px solid #22c55e;padding:6px 8px;border-radius:0 6px 6px 0;font-size:12px;color:#166534;display:flex;gap:4px}.term-popup-tip-icon{flex-shrink:0}.trading-guide-card{border-left:4px solid #1976d2}.trading-guide-content{display:flex;align-items:center;gap:32px;flex-wrap:wrap}.trade-item{display:flex;flex-direction:column;gap:4px}.trade-label{font-size:12px;color:#888;text-transform:uppercase;letter-spacing:.5px}.trade-buy-item .trade-value{font-size:20px;font-weight:700;color:#1565c0}.trade-sell-item .trade-value{font-size:20px;font-weight:700;color:#2e7d32}.trade-return{font-size:18px;font-weight:600;color:#e65100;background:#fff3e0;padding:6px 14px;border-radius:20px;border:1px solid #ffcc80}.trade-date-item .trade-value{font-size:15px;font-weight:600;color:#6a1b9a}.trade-formula{display:block;font-size:11px;color:#aaa;margin-top:2px}.sector-eval-subtitle{font-size:14px;font-weight:400;color:#888;margin-left:6px}.sector-eval-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:12px}.sector-scores{display:flex;gap:28px}.sector-score-item{display:flex;flex-direction:column;align-items:center;gap:4px}.sector-score-label{font-size:12px;color:#888;font-weight:500}.sector-score-value{font-size:30px;font-weight:700;color:#333}.score-high{color:#26a69a}.score-mid{color:#f57c00}.score-low{color:#ef5350}.sector-rec-badge{padding:8px 22px;border-radius:20px;font-size:16px;font-weight:700}.sector-rec-buy{background:#e8f5e9;color:#2e7d32;border:1px solid #66bb6a}.sector-rec-neutral{background:#fff8e1;color:#f57c00;border:1px solid #ffb74d}.sector-rec-caution{background:#fbe9e7;color:#c62828;border:1px solid #ef9a9a}.sector-eval-reason{font-size:14px;color:#555;background:#f5f9ff;border-left:3px solid #1976d2;padding:10px 14px;border-radius:0 6px 6px 0;margin-bottom:16px;line-height:1.6}.sector-metrics{display:flex;flex-direction:column;gap:10px}.sector-metric-row{display:grid;grid-template-columns:120px 64px 1fr 52px;align-items:center;gap:10px}.sector-metric-label{font-size:13px;color:#555;font-weight:500}.sector-metric-val{font-size:13px;color:#333;text-align:right}.percentile-bar-wrap{height:8px;background:#e8e8e8;border-radius:4px;overflow:hidden}.percentile-bar{height:100%;border-radius:4px;transition:width .4s ease}.percentile-bar-good{background:#26a69a}.percentile-bar-bad{background:#ef5350}.sector-metric-pct{font-size:12px;color:#888;text-align:right}.sector-no-metrics{font-size:14px;color:#aaa;text-align:center;padding:12px 0}.chart-low{color:#3498db}.crypto-sub-chart-label{display:flex;align-items:center;gap:8px;font-size:11px;color:#aaa;margin-top:8px;margin-bottom:2px}.vol-mode-toggle{display:flex;gap:4px;margin-left:auto}.chart-tooltip{background:#141414e0;color:#fff;border-radius:6px;padding:8px 12px;font-size:12px;min-width:155px;line-height:1.7;box-shadow:0 2px 10px #00000059;z-index:10}.chart-tooltip .ct-date{font-size:11px;color:#bbb;font-weight:600;margin-bottom:4px;border-bottom:1px solid rgba(255,255,255,.12);padding-bottom:3px}.chart-tooltip .ct-row{display:flex;justify-content:space-between;gap:14px}.chart-tooltip .ct-row span:first-child{color:#999}.chart-tooltip .ct-high{color:#ef5350}.chart-tooltip .ct-low{color:#26a69a}@media (max-width: 600px){.sector-metric-row{grid-template-columns:90px 54px 1fr 44px;gap:6px}.sector-scores{gap:16px}.sector-score-value{font-size:24px}}.pred-history{margin-top:16px;padding-top:14px;border-top:1px solid #2a2a2a}.pred-history-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.pred-history-title{font-size:13px;color:#aaa;font-weight:600;letter-spacing:.3px}.pred-history-rate{font-size:13px;font-weight:700;padding:2px 8px;border-radius:10px}.rate-good{background:#2e7d3233;color:#66bb6a}.rate-ok{background:#ff980033;color:#ffa726}.rate-bad{background:#c6282833;color:#ef5350}.pred-history-dots{display:flex;flex-wrap:wrap;gap:5px;align-items:center}.pred-dot{width:14px;height:14px;border-radius:50%;cursor:default;transition:transform .15s;border:2px solid transparent}.pred-dot:hover{transform:scale(1.4)}.dot-hit.dot-up{background:#42a553;border-color:#2e7d32}.dot-hit.dot-down{background:#1976d2;border-color:#0d47a1}.dot-miss{background:#444;border-color:#616161}.dot-pending{background:#bdbdbd;border-color:#9e9e9e}.pred-history-legend{display:flex;gap:12px;margin-top:8px;flex-wrap:wrap;align-items:center}.legend-item{display:flex;align-items:center;gap:5px;font-size:11px;color:#888}.legend-dot{display:inline-block;width:10px;height:10px;border-radius:50%;border:1.5px solid transparent}.pred-history-oldest{margin-left:auto;font-size:11px;color:#666;font-style:italic}@media (max-width: 768px){.stock-detail-page{padding:8px}.stock-tabs{overflow-x:auto;-webkit-overflow-scrolling:touch;flex-wrap:nowrap;padding-bottom:4px}.stock-tab-btn{white-space:nowrap;flex-shrink:0}.chart-container,.price-chart-wrapper{height:260px!important}.financial-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}}.watchlist-header{display:flex;align-items:center;gap:12px;margin-bottom:20px}.watchlist-header h1{margin:0;font-size:24px;color:#333}.watchlist-count{font-size:14px;color:#888;background:#f0f0f0;padding:2px 10px;border-radius:12px}.watchlist-warning{display:flex;align-items:center;gap:8px;background:#fffbe6;border:1px solid #ffe58f;border-radius:6px;padding:10px 16px;margin-bottom:14px;font-size:14px;color:#7a5700;font-weight:500}.watchlist-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;min-height:36px}.watchlist-toolbar-left,.watchlist-toolbar-right{display:flex;align-items:center;gap:8px}.watchlist-sort-label{font-size:13px;color:#666}.watchlist-sort-select{font-size:13px;padding:5px 10px;border:1px solid #ddd;border-radius:4px;background:#fff;color:#333;cursor:pointer;outline:none;transition:border-color .15s}.watchlist-sort-select:hover,.watchlist-sort-select:focus{border-color:#4a90e2}.watchlist-bulk-remove-btn{background:#fff5f5;border:1px solid #e53935;border-radius:4px;padding:5px 14px;cursor:pointer;color:#e53935;font-size:13px;font-weight:600;transition:all .15s}.watchlist-bulk-remove-btn:hover{background:#e53935;color:#fff}.watchlist-empty{text-align:center;padding:60px 24px}.watchlist-empty-icon{font-size:48px;color:#f5a623;margin-bottom:16px}.watchlist-empty p{margin:8px 0;color:#555;font-size:16px}.watchlist-empty-sub{color:#999!important;font-size:14px!important;margin-bottom:24px!important}.watchlist-table{width:100%;border-collapse:collapse;font-size:14px}.watchlist-table thead th{padding:10px 12px;text-align:left;background:#f8f8f8;border-bottom:2px solid #eee;color:#555;font-weight:600;white-space:nowrap}.watchlist-table thead th.right{text-align:right}.watchlist-table thead th.center{text-align:center}.watchlist-table th.checkbox-col,.watchlist-table td.checkbox-col{width:40px;min-width:40px;text-align:center;padding:10px 8px}.watchlist-table td.checkbox-col input[type=checkbox],.watchlist-table th.checkbox-col input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:#4a90e2}.watchlist-table tbody tr{border-bottom:1px solid #f0f0f0;transition:background .15s}.watchlist-table tbody tr.clickable-row{cursor:pointer}.watchlist-table tbody tr.clickable-row:hover{background:#f5f8ff}.watchlist-table tbody tr.selected-row{background:#eef4ff}.watchlist-table tbody tr.selected-row:hover{background:#ddeaff}.watchlist-table td{padding:12px;color:#333}.watchlist-table td.right{text-align:right}.watchlist-table td.center{text-align:center}.watchlist-table .code-cell{font-family:Courier New,monospace;font-size:13px;color:#666}.watchlist-table .name-cell{font-weight:500}.watchlist-table .positive{color:#e74c3c;font-weight:600}.watchlist-table .negative{color:#3498db;font-weight:600}.watchlist-remove-btn{background:none;border:1px solid #ddd;border-radius:4px;padding:4px 8px;cursor:pointer;color:#999;font-size:12px;transition:all .15s}.watchlist-remove-btn:hover{border-color:#e53935;color:#e53935;background:#fff5f5}@media (max-width: 768px){.watchlist-header{flex-wrap:wrap;margin-bottom:12px}.watchlist-toolbar{flex-direction:column;align-items:flex-start;gap:8px;margin-bottom:8px}.watchlist-toolbar-right{align-self:stretch;justify-content:flex-end}.watchlist-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.watchlist-table td,.watchlist-table thead th{padding:8px;font-size:13px}}.watchlist-cards{display:flex;flex-direction:column;gap:8px}.watchlist-card{background:#fff;border-radius:8px;padding:12px 16px;box-shadow:0 1px 4px #0000001a;cursor:pointer;transition:background-color .15s}.watchlist-card:active{background-color:#f5f9ff}.watchlist-card__header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.watchlist-card__name{font-weight:600;font-size:15px;flex:1;color:#333}.watchlist-card__code{font-family:monospace;font-size:12px;color:#1976d2}.watchlist-card__body{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:13px}.watchlist-card__label{color:#888;font-size:11px;margin-bottom:2px}.watchlist-card__value{font-weight:600;color:#333}.yt-page{max-width:1100px;margin:0 auto;padding:2rem 1rem}.yt-header{margin-bottom:1.5rem}.yt-title{font-size:1.75rem;font-weight:700;color:#1e293b;margin:0 0 .4rem}.yt-subtitle{color:#64748b;font-size:.95rem;margin:0}.yt-panel{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:1.5rem;margin-bottom:1.5rem;display:flex;flex-direction:column;gap:1.2rem;box-shadow:0 1px 4px #0000000f}.yt-field{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.yt-field-label{font-weight:600;color:#374151;min-width:80px;font-size:.9rem}.yt-select{padding:.5rem .75rem;border:1px solid #d1d5db;border-radius:8px;font-size:.9rem;color:#1e293b;background:#fff;min-width:300px;cursor:pointer}.yt-select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f626}.yt-provider-info{font-size:.82rem;color:#6b7280;background:#f3f4f6;padding:.25rem .6rem;border-radius:6px}.yt-no-provider{font-size:.9rem;color:#ef4444}.yt-admin-link{color:#3b82f6;text-decoration:underline}.yt-url-field{flex-wrap:nowrap}.yt-url-row{display:flex;flex:1;gap:.5rem}.yt-input{flex:1;padding:.55rem .85rem;border:1px solid #d1d5db;border-radius:8px;font-size:.9rem;color:#1e293b;min-width:0}.yt-input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f626}.yt-input:disabled{background:#f9fafb;color:#9ca3af}.yt-analyze-btn{padding:.55rem 1.4rem;background:#3b82f6;color:#fff;border:none;border-radius:8px;font-size:.9rem;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .15s}.yt-analyze-btn:hover:not(:disabled){background:#2563eb}.yt-analyze-btn:disabled{background:#93c5fd;cursor:not-allowed}.yt-loading-text{color:#6b7280;font-size:.9rem}.yt-error{background:#fef2f2;border:1px solid #fca5a5;border-radius:10px;padding:1rem 1.25rem;color:#991b1b;margin-bottom:1.25rem;font-size:.9rem}.yt-error-icon{margin-right:.4rem}.yt-loading{text-align:center;padding:2.5rem 1rem;color:#6b7280;font-size:.92rem}.yt-result{display:flex;flex-direction:column;gap:1.5rem}.yt-result-meta{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:1.25rem 1.5rem}.yt-result-title{font-size:1.2rem;font-weight:700;color:#1e293b;margin:0 0 .6rem}.yt-result-info{display:flex;gap:1.5rem;flex-wrap:wrap;font-size:.82rem;color:#6b7280}.yt-section{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:1.25rem 1.5rem}.yt-section-title{font-size:1rem;font-weight:700;color:#1e293b;margin:0 0 1rem;display:flex;align-items:center;gap:.5rem}.yt-count{background:#e0e7ff;color:#3730a3;font-size:.78rem;font-weight:600;padding:.15rem .5rem;border-radius:20px}.yt-summary{font-size:.95rem;color:#374151;line-height:1.75;white-space:pre-wrap}.yt-stocks-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem}.yt-stock-card{border:1px solid #e2e8f0;border-radius:10px;overflow:hidden;background:#fafafa;transition:box-shadow .15s,transform .1s}.yt-stock-card.clickable{cursor:pointer}.yt-stock-card.clickable:hover{box-shadow:0 4px 12px #0000001a;transform:translateY(-2px)}.yt-stock-card.no-data{opacity:.7}.yt-stock-header{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;background:#f1f5f9;border-bottom:1px solid #e2e8f0;flex-wrap:wrap}.yt-stock-name{font-weight:700;font-size:.95rem;color:#1e293b}.yt-stock-code{font-size:.78rem;color:#94a3b8;margin-left:auto}.yt-market-badge{font-size:.72rem;font-weight:600;padding:.1rem .45rem;border-radius:4px}.yt-market-badge.kospi{background:#dbeafe;color:#1d4ed8}.yt-market-badge.kosdaq{background:#d1fae5;color:#065f46}.yt-stock-body{padding:.75rem 1rem;display:flex;flex-direction:column;gap:.45rem}.yt-stock-body.no-data-msg{color:#9ca3af;font-size:.85rem;text-align:center;padding:1.25rem}.yt-stock-row{display:flex;align-items:center;gap:.5rem}.yt-label{font-size:.8rem;color:#6b7280;min-width:70px}.yt-value{font-size:.88rem;font-weight:600;color:#1e293b}.yt-change{font-size:.8rem;font-weight:600}.yt-change.pos{color:#ef4444}.yt-change.neg{color:#3b82f6}.yt-confidence{font-size:.78rem;color:#6b7280}.direction-badge{font-size:.8rem;font-weight:700;padding:.15rem .5rem;border-radius:6px}.direction-badge.up{background:#fee2e2;color:#dc2626}.direction-badge.down{background:#dbeafe;color:#2563eb}.direction-badge.hold{background:#f3f4f6;color:#6b7280}.direction-badge.unknown{background:#f3f4f6;color:#9ca3af}.yt-score{font-size:.9rem;font-weight:700;padding:.1rem .5rem;border-radius:6px}.yt-score.high{background:#d1fae5;color:#065f46}.yt-score.mid{background:#fef9c3;color:#854d0e}.yt-score.low{background:#fee2e2;color:#991b1b}.yt-no-stocks{color:#9ca3af;text-align:center;padding:2rem}.yt-no-db-badge{font-size:.7rem;font-weight:600;padding:.1rem .4rem;border-radius:4px;background:#fef3c7;color:#92400e;margin-left:auto}.yt-analysis-text{font-size:.82rem;color:#6b7280;line-height:1.6;margin-top:.35rem;padding-top:.35rem;border-top:1px solid #f1f5f9;white-space:pre-wrap}@media (max-width: 640px){.yt-url-field{flex-wrap:wrap}.yt-select{min-width:100%}.yt-url-row{flex-wrap:wrap}.yt-analyze-btn{width:100%;text-align:center}.yt-stocks-grid{grid-template-columns:1fr}}.yt-tabs{display:flex;gap:.25rem;border-bottom:2px solid var(--border-color, #e5e7eb);margin-bottom:1.5rem}.yt-tab-btn{padding:.5rem 1.25rem;border:none;background:transparent;cursor:pointer;font-size:.95rem;color:var(--text-secondary, #6b7280);border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .15s,border-color .15s}.yt-tab-btn:hover{color:var(--text-primary, #111827)}.yt-tab-btn.active{color:var(--accent, #3b82f6);border-bottom-color:var(--accent, #3b82f6);font-weight:600}.yt-tab-content{animation:yt-fadein .15s ease}@keyframes yt-fadein{0%{opacity:0;transform:translateY(4px)}to{opacity:1}}.yt-section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.yt-btn-primary{padding:.4rem .9rem;background:var(--accent, #3b82f6);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:.875rem}.yt-btn-primary:hover{opacity:.9}.yt-btn-primary:disabled{opacity:.5;cursor:not-allowed}.yt-btn-sm{padding:.25rem .6rem;font-size:.8rem;border:1px solid var(--border-color, #e5e7eb);border-radius:4px;background:transparent;cursor:pointer;margin-right:.25rem}.yt-btn-danger{border-color:#ef4444;color:#ef4444}.yt-btn-danger:hover{background:#fef2f2}.yt-link-btn{background:none;border:none;cursor:pointer;color:var(--accent, #3b82f6);text-decoration:underline;font-size:inherit}.yt-channel-form{background:var(--surface, #f9fafb);border:1px solid var(--border-color, #e5e7eb);border-radius:8px;padding:1rem;margin-bottom:1.25rem}.yt-form-row{display:flex;gap:.5rem;margin-bottom:.5rem;flex-wrap:wrap}.yt-input-wide{flex:1;min-width:200px}.yt-channel-table,.yt-signal-table{width:100%;border-collapse:collapse;font-size:.875rem}.yt-channel-table th,.yt-signal-table th{background:var(--surface, #f9fafb);padding:.6rem .75rem;text-align:left;border-bottom:1px solid var(--border-color, #e5e7eb);font-weight:600;white-space:nowrap}.yt-channel-table td,.yt-signal-table td{padding:.6rem .75rem;border-bottom:1px solid var(--border-color, #e5e7eb);vertical-align:middle}.yt-row-inactive{opacity:.5}.yt-status-badge{padding:.2rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600}.yt-status-badge.active{background:#d1fae5;color:#065f46}.yt-status-badge.inactive{background:#f3f4f6;color:#6b7280}.yt-td-video{max-width:200px}.yt-td-memo{max-width:160px;color:var(--text-secondary, #6b7280);font-size:.8rem}.yt-filter-row{display:flex;gap:.5rem;align-items:center;margin-bottom:1rem;flex-wrap:wrap}.yt-select-sm,.yt-input-sm{padding:.35rem .6rem;border:1px solid var(--border-color, #e5e7eb);border-radius:6px;font-size:.875rem;background:var(--bg, #fff)}.yt-empty{text-align:center;padding:2rem;color:var(--text-secondary, #6b7280)}.yt-analyze-progress{background:#f0f9ff;border:1px solid #bae6fd;border-radius:10px;padding:1.2rem 1.5rem;margin:1rem 0}.yt-progress-steps{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.yt-progress-step{display:flex;align-items:center;gap:.4rem;padding:.4rem .8rem;border-radius:20px;font-size:.875rem;color:#94a3b8;background:#f8fafc;border:1px solid #e2e8f0;transition:all .3s ease}.yt-progress-step.active{color:#0369a1;background:#e0f2fe;border-color:#7dd3fc;font-weight:600}.yt-progress-step.done{color:#065f46;background:#d1fae5;border-color:#6ee7b7}.yt-progress-arrow{color:#94a3b8;font-size:.875rem}.yt-progress-hint{margin:.75rem 0 0;font-size:.8rem;color:#64748b}.yt-analyze-btn.loading{opacity:.75;cursor:not-allowed}.yt-resolve-row{align-items:center;flex-wrap:wrap;gap:8px}.yt-resolve-msg{font-size:.82rem;padding:3px 8px;border-radius:4px}.yt-resolve-msg.ok{color:#16a34a;background:#f0fdf4;border:1px solid #bbf7d0}.yt-resolve-msg.err{color:#dc2626;background:#fef2f2;border:1px solid #fecaca}.yt-channel-id-cell{font-size:.78rem;color:#64748b;font-family:monospace;white-space:nowrap}.yt-error-close{background:none;border:none;cursor:pointer;margin-left:8px;color:#92400e;font-size:.9rem;padding:0 2px}.yt-error-close:hover{color:#78350f}.yt-form-title{font-size:.9rem;font-weight:600;color:#374151;margin-bottom:.75rem;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.yt-sentiment-sm{font-size:.8rem;font-weight:600}.yt-sentiment-sm.pos{color:#16a34a}.yt-sentiment-sm.neg{color:#dc2626}.yt-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px}.yt-modal{background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 20px 60px #00000026;max-width:720px;width:100%;max-height:82vh;overflow-y:auto;padding:24px}.yt-modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.yt-modal-title a{font-size:1rem;font-weight:700;color:#2563eb;text-decoration:none;line-height:1.45;word-break:break-word}.yt-modal-title a:hover{text-decoration:underline}.yt-modal-close{background:none;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;font-size:.9rem;cursor:pointer;padding:3px 8px;flex-shrink:0;line-height:1}.yt-modal-close:hover{background:#f1f5f9}.yt-modal-meta{display:flex;gap:12px;font-size:.83rem;color:#64748b;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid #f1f5f9}.yt-modal-signals{display:flex;flex-direction:column;gap:12px}.yt-modal-signal-item{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:14px 16px}.yt-modal-signal-header{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px}.yt-stock-name-badge{font-weight:700;font-size:.9rem;color:#1e293b}.yt-stock-name-badge.yt-stock-link{background:none;border:none;cursor:pointer;color:var(--accent, #3b82f6);text-decoration:underline;padding:0}.yt-sentiment-badge{font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:10px}.yt-sentiment-badge.pos{background:#dcfce7;color:#15803d}.yt-sentiment-badge.neg{background:#fee2e2;color:#b91c1c}.yt-conf-badge,.yt-target-badge{font-size:.75rem;padding:2px 8px;border-radius:10px;background:#f1f5f9;color:#475569}.yt-modal-memo{font-size:.875rem;color:#374151;line-height:1.65;white-space:pre-wrap;word-break:break-word}.yt-modal-empty{color:#94a3b8;font-size:.88rem;padding:16px 0;text-align:center}.yt-inline-confirm{display:inline-flex;align-items:center;gap:4px}.yt-confirm-text{font-size:.78rem;color:#dc2626;white-space:nowrap}.yt-video-table{width:100%;border-collapse:collapse;font-size:.88rem}.yt-video-table th,.yt-video-table td{padding:8px 12px;text-align:left;border-bottom:1px solid #f1f5f9}.yt-video-table th{background:#f8fafc;font-weight:600;color:#475569;font-size:.82rem;white-space:nowrap}.yt-video-table tbody tr:hover{background:#f8fafc}.yt-td-video-title{max-width:380px}.yt-td-video-title a{color:#1d4ed8;text-decoration:none}.yt-td-video-title a:hover{text-decoration:underline}.yt-unknown-channel{color:#94a3b8;font-style:italic;font-size:.82rem}.yt-signal-count{display:inline-block;padding:2px 8px;border-radius:10px;background:#f1f5f9;color:#64748b;font-size:.8rem;font-weight:600}.yt-signal-count.has-signals{background:#dcfce7;color:#15803d}.yt-signal-count.has-signals.clickable{cursor:pointer}.yt-signal-count.has-signals.clickable:hover{background:#bbf7d0;color:#166534}.yt-row-clickable{cursor:pointer}.yt-row-clickable:hover{background:#f8fafc}.yt-modal-summary{margin-bottom:16px;padding:12px;background:#f8f9fa;border-radius:6px;border-left:3px solid #6c757d}.yt-modal-summary-title{font-size:12px;font-weight:600;color:#6c757d;margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}.yt-modal-summary-text{font-size:13px;line-height:1.6;color:#333;white-space:pre-wrap}.yt-th-sort{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.yt-th-sort:hover{background:#f1f5f9}.yt-th-sort.active{color:#2563eb}.yt-sort-arrow{font-size:.75rem;opacity:.6}.yt-th-sort.active .yt-sort-arrow{opacity:1}.yt-title-btn{background:none;border:none;padding:0;color:#2563eb;cursor:pointer;font-size:inherit;text-align:left;text-decoration:underline;text-underline-offset:2px}.yt-title-btn:hover{color:#1d4ed8}.yt-title-text{color:#374151}.yt-yt-icon{margin-left:6px;font-size:.75rem;color:#ef4444;text-decoration:none;opacity:.7;vertical-align:middle}.yt-yt-icon:hover{opacity:1}.yt-td-date{white-space:nowrap;font-size:.82rem;color:#64748b}.yt-modal-dates{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.yt-modal-date-item{display:flex;align-items:center;gap:4px;font-size:.82rem;color:#64748b}.yt-modal-date-label{font-weight:600;color:#94a3b8;font-size:.75rem}.yt-modal-watch-link{margin-left:auto;font-size:.85rem;color:#2563eb;text-decoration:none;font-weight:600;white-space:nowrap}.yt-modal-watch-link:hover{text-decoration:underline;color:#1d4ed8}@media (max-width: 768px){.yt-page{padding:1rem .5rem}.yt-select{min-width:unset;width:100%}.yt-url-field{flex-wrap:wrap}.yt-url-row{flex-direction:column}.yt-field{flex-direction:column;align-items:flex-start}.yt-field-label{min-width:unset}.yt-panel{padding:1rem}.yt-tabs{flex-wrap:wrap;gap:4px}}.sac-wrap{position:relative;width:100%}.sac-input{width:100%;padding:8px 32px 8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:.9rem;color:#111827;background:#fff;outline:none;transition:border-color .15s;box-sizing:border-box}.sac-input:focus{border-color:#6366f1;box-shadow:0 0 0 2px #6366f11f}.sac-spinner{position:absolute;right:10px;top:50%;transform:translateY(-50%);width:14px;height:14px;border:2px solid #e5e7eb;border-top-color:#6366f1;border-radius:50%;animation:sacSpin .6s linear infinite;pointer-events:none}@keyframes sacSpin{to{transform:translateY(-50%) rotate(360deg)}}.sac-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 4px 16px #0000001f;z-index:200;list-style:none;margin:0;padding:4px 0;max-height:240px;overflow-y:auto}.sac-item{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;transition:background .1s}.sac-item:hover{background:#f9fafb}.sac-name{font-size:.9rem;color:#111827;font-weight:500;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sac-code{font-size:.78rem;color:#9ca3af;font-family:monospace;white-space:nowrap}.sac-market{font-size:.72rem;font-weight:600;padding:2px 6px;border-radius:4px;white-space:nowrap}.sac-market.kospi{background:#dbeafe;color:#1d4ed8}.sac-market.kosdaq{background:#d1fae5;color:#065f46}.pattern-page{max-width:1100px;margin:0 auto;padding:24px 16px 48px}.pattern-header{margin-bottom:28px}.pattern-header h1{font-size:1.6rem;font-weight:700;color:#111827;margin:0 0 8px}.pattern-desc{color:#6b7280;font-size:.95rem;margin:0;line-height:1.6}.pattern-form{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:24px;margin-bottom:32px}.form-section{margin-bottom:24px}.form-section h2{font-size:1.05rem;font-weight:600;color:#111827;margin:0 0 6px}.form-hint{font-size:.85rem;color:#9ca3af;margin:0 0 16px}.stock-inputs{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}.stock-input-row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}.stock-input-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:140px}.stock-input-field label{font-size:.78rem;font-weight:500;color:#374151}.stock-input-field input{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:.9rem;color:#111827;background:#fff;outline:none;transition:border-color .15s}.stock-input-field input:focus{border-color:#6366f1;box-shadow:0 0 0 2px #6366f11f}.btn-remove{padding:8px 12px;border:1px solid #fca5a5;background:#fff;color:#ef4444;border-radius:6px;cursor:pointer;font-size:.85rem;transition:background .15s;align-self:flex-end}.btn-remove:hover:not(:disabled){background:#fee2e2}.btn-remove:disabled{opacity:.3;cursor:not-allowed}.btn-add-row{padding:8px 16px;border:1.5px dashed #6366f1;background:#fff;color:#6366f1;border-radius:8px;cursor:pointer;font-size:.88rem;font-weight:500;transition:background .15s}.btn-add-row:hover{background:#eef2ff}.form-options{display:flex;gap:24px;flex-wrap:wrap}.option-field{display:flex;flex-direction:column;gap:4px}.option-field label{font-size:.82rem;font-weight:500;color:#374151}.option-field .hint{color:#9ca3af;font-size:.78rem}.option-field select,.option-field input[type=date]{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:.9rem;color:#111827;background:#fff;outline:none}.option-field select:focus,.option-field input[type=date]:focus{border-color:#6366f1}.error-msg{padding:10px 14px;background:#fef2f2;border:1px solid #fca5a5;border-radius:8px;color:#dc2626;font-size:.9rem;margin-bottom:16px}.btn-analyze{display:block;width:100%;padding:12px;background:#6366f1;color:#fff;border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:background .15s}.btn-analyze:hover:not(:disabled){background:#4f46e5}.btn-analyze:disabled{opacity:.6;cursor:not-allowed}.loading-wrap{display:flex;flex-direction:column;align-items:center;gap:12px;padding:40px;color:#6b7280;font-size:.95rem}.result-section{display:flex;flex-direction:column;gap:24px}.status-msg{padding:12px 16px;border-radius:8px;font-size:.92rem;font-weight:500}.status-ok{background:#ecfdf5;color:#065f46;border:1px solid #6ee7b7}.status-partial{background:#fffbeb;color:#92400e;border:1px solid #fcd34d}.status-error{background:#fef2f2;color:#991b1b;border:1px solid #fca5a5}.pattern-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:20px}.pattern-card-header{display:flex;align-items:center;gap:12px;margin-bottom:8px}.pattern-card-header h3{font-size:1rem;font-weight:600;color:#111827;margin:0}.pattern-count{font-size:.8rem;background:#eef2ff;color:#4338ca;padding:2px 8px;border-radius:999px;font-weight:500}.pattern-description{color:#6b7280;font-size:.9rem;margin:0 0 14px;line-height:1.5}.pattern-badges{display:flex;flex-wrap:wrap;gap:6px}.pattern-badge{display:inline-block;padding:3px 10px;border-radius:999px;color:#fff;font-size:.78rem;font-weight:500}.matches-section{background:#fff;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden}.matches-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f3f4f6}.matches-header h2{font-size:1rem;font-weight:600;color:#111827;margin:0}.scan-info{font-size:.82rem;color:#9ca3af}.match-table-wrap{overflow-x:auto}.match-table{width:100%;border-collapse:collapse;font-size:.9rem}.match-table thead tr{background:#f9fafb}.match-table th{padding:10px 14px;text-align:left;font-size:.8rem;font-weight:600;color:#6b7280;border-bottom:1px solid #e5e7eb}.match-table td{padding:12px 14px;border-bottom:1px solid #f3f4f6;color:#374151;vertical-align:middle}.match-row.clickable{cursor:pointer;transition:background .1s}.match-row.clickable:hover{background:#f9fafb}.match-table .rank{font-weight:700;color:#6366f1;white-space:nowrap}.stock-name .code{display:inline-block;font-size:.75rem;color:#9ca3af;margin-right:6px}.market-badge{display:inline-block;padding:2px 7px;border-radius:4px;font-size:.75rem;font-weight:600}.market-badge.kospi{background:#dbeafe;color:#1d4ed8}.market-badge.kosdaq{background:#d1fae5;color:#065f46}.score-bar-wrap{display:flex;align-items:center;gap:8px;min-width:120px}.score-bar{height:6px;background:#6366f1;border-radius:3px;transition:width .3s;flex-shrink:0;max-width:80px}.score-text{font-size:.85rem;font-weight:600;color:#374151;white-space:nowrap}.matched-patterns{display:flex;flex-wrap:wrap;gap:4px}.matched-badge{display:inline-block;padding:2px 7px;border-radius:999px;background:#f3f4f6;color:#374151;font-size:.75rem}.no-data{padding:32px;text-align:center;color:#9ca3af;font-size:.95rem}.analyzed-section{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:20px}.analyzed-section h3{font-size:1rem;font-weight:600;color:#111827;margin:0 0 14px}.analyzed-cards{display:flex;flex-direction:column;gap:10px}.analyzed-card{padding:14px 16px;border:1px solid #e5e7eb;border-radius:8px;background:#fafafa}.analyzed-card.not-found{background:#fef2f2;border-color:#fca5a5}.analyzed-header{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:10px}.analyzed-name{font-weight:600;color:#111827;font-size:.95rem}.analyzed-name-link{background:none;border:none;padding:0;font-weight:600;color:#6366f1;font-size:.95rem;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.analyzed-name-link:hover{color:#4f46e5}.analyzed-date{font-size:.82rem;color:#9ca3af}.analyzed-amount{font-size:.85rem;color:#6366f1;font-weight:500}.not-found-badge{display:inline-block;padding:2px 8px;background:#fca5a5;color:#7f1d1d;border-radius:999px;font-size:.75rem;font-weight:600}.analyzed-badges{display:flex;flex-wrap:wrap;gap:6px}.pattern-tabs{display:flex;border-bottom:2px solid #e5e7eb;margin-bottom:28px}.pattern-tab-btn{padding:10px 24px;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;font-size:.95rem;font-weight:500;color:#6b7280;cursor:pointer;transition:color .15s,border-color .15s}.pattern-tab-btn.active{color:#6366f1;border-bottom-color:#6366f1;font-weight:600}.pattern-tab-btn:hover:not(.active){color:#374151}.mp-tab-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:24px}.mp-tab-header h2{font-size:1.1rem;font-weight:700;color:#111827;margin:0 0 6px}.mp-tab-desc{color:#6b7280;font-size:.9rem;margin:0;line-height:1.5}.mp-btn-add-pick{padding:10px 20px;background:#6366f1;color:#fff;border:none;border-radius:8px;font-size:.9rem;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .15s;flex-shrink:0}.mp-btn-add-pick:hover{background:#4f46e5}.mp-add-form{background:#fff;border:1.5px solid #6366f1;border-radius:12px;padding:20px;margin-bottom:24px}.mp-add-fields{display:flex;flex-direction:column;gap:10px;margin-bottom:14px}.mp-add-row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}.mp-form-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:120px}.mp-form-field--stock{flex:2;min-width:240px}.mp-form-field--notes{flex:2}.mp-form-field label{font-size:.78rem;font-weight:500;color:#374151}.mp-hint{color:#9ca3af;font-size:.75rem}.mp-form-field input{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:.9rem;color:#111827;outline:none;transition:border-color .15s}.mp-form-field input:focus{border-color:#6366f1;box-shadow:0 0 0 2px #6366f11a}.mp-btn-confirm-add{padding:9px 24px;background:#6366f1;color:#fff;border:none;border-radius:7px;font-size:.9rem;font-weight:600;cursor:pointer}.mp-btn-confirm-add:hover{background:#4f46e5}.mp-empty{text-align:center;padding:60px 20px;color:#9ca3af;font-size:.95rem;line-height:1.8}.mp-cards{display:flex;flex-direction:column;gap:20px}.mp-error-msg{padding:8px 12px;background:#fef2f2;border:1px solid #fca5a5;color:#dc2626;border-radius:6px;font-size:.85rem;margin-bottom:6px}.mp-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;overflow:hidden}.mp-card-header{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:#f9fafb;border-bottom:1px solid #e5e7eb}.mp-card-title{display:flex;align-items:center;gap:8px}.mp-stock-link{display:inline-flex;align-items:center;gap:6px;background:none;border:none;padding:0;cursor:pointer;text-align:left}.mp-stock-link:hover .mp-stock-name{color:#6366f1;text-decoration:underline;text-underline-offset:2px}.mp-stock-name{font-size:1.05rem;font-weight:700;color:#111827}.mp-stock-code{font-size:.8rem;color:#9ca3af}.mp-btn-remove{padding:4px 10px;border:1px solid #fca5a5;background:#fff;color:#ef4444;border-radius:5px;cursor:pointer;font-size:.8rem;transition:background .1s}.mp-btn-remove:hover{background:#fee2e2}.mp-buy-section{padding:14px 18px}.mp-info-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}.mp-info-label{font-size:.78rem;color:#9ca3af;font-weight:500}.mp-info-value{font-size:.9rem;color:#374151;font-weight:500}.mp-price-buy{color:#6366f1}.mp-price-sell{color:#f59e0b}.mp-profit-rate{font-size:.92rem;font-weight:700}.mp-notes{font-size:.85rem;color:#6b7280;margin:0 0 10px;font-style:italic}.mp-btn-analyze{padding:9px 18px;border:none;border-radius:7px;font-size:.88rem;font-weight:600;cursor:pointer;transition:background .15s;display:inline-flex;align-items:center;gap:6px}.mp-btn-analyze:disabled{opacity:.5;cursor:not-allowed}.mp-btn-analyze-buy{background:#6366f1;color:#fff}.mp-btn-analyze-buy:hover:not(:disabled){background:#4f46e5}.mp-btn-analyze-sell{background:#f59e0b;color:#fff}.mp-btn-analyze-sell:hover:not(:disabled){background:#d97706}.mp-btn-reanalyze{padding:5px 12px;border:1px solid #d1d5db;background:#fff;color:#6b7280;border-radius:6px;cursor:pointer;font-size:.8rem;margin-top:4px;transition:background .15s}.mp-btn-reanalyze:hover:not(:disabled){background:#f3f4f6}.mp-divider{height:1px;background:#f3f4f6;margin:0 18px}.mp-sell-section{padding:12px 18px}.mp-btn-add-sell{padding:7px 14px;border:1.5px dashed #f59e0b;background:#fff;color:#d97706;border-radius:7px;cursor:pointer;font-size:.85rem;font-weight:500;transition:background .15s}.mp-btn-add-sell:hover{background:#fffbeb}.mp-sell-form{margin-top:10px}.mp-sell-form-fields{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:10px}.mp-btn-save-sell{padding:8px 18px;background:#f59e0b;color:#fff;border:none;border-radius:7px;font-size:.88rem;font-weight:600;cursor:pointer;transition:background .15s}.mp-btn-save-sell:hover{background:#d97706}.mp-analysis-section{margin:0 18px 14px;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.mp-analysis-buy{border-left:3px solid #6366f1}.mp-analysis-sell{border-left:3px solid #f59e0b}.mp-analysis-header{display:flex;align-items:center;gap:8px;padding:10px 14px;background:#f9fafb;cursor:pointer;-webkit-user-select:none;user-select:none}.mp-analysis-header:hover{background:#f3f4f6}.mp-analysis-title{font-size:.85rem;font-weight:600;color:#374151;flex:1}.mp-active-count{font-size:.75rem;background:#eef2ff;color:#4338ca;padding:2px 7px;border-radius:999px}.mp-sell-type-badge{display:inline-block;padding:2px 8px;border-radius:999px;color:#fff;font-size:.72rem;font-weight:600}.mp-toggle{font-size:.75rem;color:#9ca3af}.mp-badge-row{display:flex;flex-wrap:wrap;gap:5px;padding:10px 14px 6px}.mp-badge{display:inline-block;padding:3px 9px;border-radius:999px;color:#fff;font-size:.75rem;font-weight:500}.mp-similar-wrap{padding:0 14px 10px}.mp-similar-title{font-size:.82rem;font-weight:600;color:#374151;margin-bottom:8px}.mp-similar-table{width:100%;border-collapse:collapse;font-size:.82rem}.mp-similar-table thead tr{background:#f9fafb}.mp-similar-table th{padding:7px 10px;text-align:left;font-size:.75rem;font-weight:600;color:#6b7280;border-bottom:1px solid #e5e7eb}.mp-similar-table td{padding:8px 10px;border-bottom:1px solid #f9fafb;color:#374151;vertical-align:middle}.mp-similar-row{cursor:pointer;transition:background .1s}.mp-similar-row:hover{background:#f9fafb}.mp-rank{font-weight:700;color:#6366f1;white-space:nowrap}.mp-sname{min-width:100px}.mp-code{font-size:.72rem;color:#9ca3af;margin-right:5px}.mp-market{display:inline-block;padding:2px 6px;border-radius:4px;font-size:.72rem;font-weight:600}.mp-market.kospi{background:#dbeafe;color:#1d4ed8}.mp-market.kosdaq{background:#d1fae5;color:#065f46}.mp-score-wrap{display:flex;align-items:center;gap:6px;min-width:100px}.mp-score-bar{height:5px;background:#6366f1;border-radius:3px;max-width:60px;flex-shrink:0}.mp-score-text{font-size:.8rem;font-weight:600;color:#374151;white-space:nowrap}.mp-matched{display:flex;flex-wrap:wrap;gap:3px}.mp-matched-badge{display:inline-block;padding:1px 6px;background:#f3f4f6;color:#374151;border-radius:999px;font-size:.7rem}.mp-no-similar{padding:10px 14px;color:#9ca3af;font-size:.85rem;margin:0}.mp-sell-desc{padding:8px 14px 4px;font-size:.85rem;color:#6b7280;margin:0}.mp-signal-list{padding:6px 14px 10px;display:flex;flex-direction:column;gap:5px}.mp-signal-item{display:flex;align-items:center;gap:8px}.mp-signal-dots{font-size:.8rem;letter-spacing:1px;min-width:40px;font-family:monospace}.mp-signal-label{font-size:.85rem;color:#374151}.mp-analyzed-at{padding:2px 14px 8px;font-size:.72rem;color:#d1d5db;margin:0}.pt-empty{text-align:center;padding:60px 20px;color:#9ca3af;font-size:.95rem;line-height:2}.pt-link-btn{background:none;border:none;color:#6366f1;font-size:inherit;font-weight:600;cursor:pointer;text-decoration:underline;padding:0}.pt-picks-header{display:flex;align-items:center;gap:10px;margin-bottom:6px}.pt-picks-header h2{font-size:1.05rem;font-weight:600;color:#111827;margin:0}.pt-picks-count{font-size:.8rem;background:#eef2ff;color:#4338ca;padding:2px 8px;border-radius:999px;font-weight:500}.pt-select-wrap{margin-bottom:10px}.pt-select-all{display:inline-flex;align-items:center;gap:6px;font-size:.9rem;font-weight:500;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none}.pt-pick-checkboxes{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:220px;overflow-y:auto;padding:8px 12px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px}.pt-pick-item{display:flex;align-items:center;gap:8px;font-size:.88rem;color:#374151;cursor:pointer;-webkit-user-select:none;user-select:none}.pt-pick-name{flex:1;font-weight:500;color:#111827}.pt-pick-date{font-size:.78rem;color:#9ca3af;white-space:nowrap}.mp-expert-tag{display:inline-block;padding:2px 8px;background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;border-radius:999px;font-size:.72rem;font-weight:500;white-space:nowrap}.mp-price-target{color:#7c3aed}.mp-target-return{font-size:.82rem;color:#10b981;font-weight:600}.mp-required{color:#ef4444;font-size:.82rem;margin-left:1px}.sell-tab-desc{color:#6b7280;font-size:.92rem;margin-bottom:20px;line-height:1.6}.sell-tab-desc p{margin:0}.sell-inputs{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}.sell-input-row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}.sell-input-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:130px}.sell-input-field--profit{max-width:160px}.sell-input-field--ratio{max-width:140px}.sell-input-field label{font-size:.78rem;font-weight:500;color:#374151}.sell-input-field .hint{color:#9ca3af;font-size:.75rem}.sell-price-loading{color:#6b7280;font-size:.72rem;font-weight:400}.sell-price-error{color:#d97706;font-size:.72rem;font-weight:400}.sell-input-field input{padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font-size:.9rem;color:#111827;background:#fff;outline:none;transition:border-color .15s}.sell-input-field input:focus{border-color:#6366f1;box-shadow:0 0 0 2px #6366f11f}.btn-add-row--sell{border-color:#f59e0b;color:#d97706}.btn-add-row--sell:hover{background:#fffbeb}.btn-analyze--sell{background:#f59e0b}.btn-analyze--sell:hover:not(:disabled){background:#d97706}.sell-summary-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:20px}.sell-card-header{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}.sell-card-header h3{font-size:1rem;font-weight:600;color:#111827;margin:0}.sell-pattern-count{font-size:.8rem;background:#fffbeb;color:#92400e;padding:2px 8px;border-radius:999px;font-weight:500}.sell-type-badge{display:inline-block;padding:2px 8px;border-radius:999px;color:#fff;font-size:.75rem;font-weight:600}.profit-stats{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.avg-profit{font-size:1rem;font-weight:700}.profit-count-info{font-size:.85rem;color:#6b7280}.profit-cnt{color:#10b981;font-weight:600}.loss-cnt{color:#ef4444;font-weight:600}.profit-rate{font-size:.85rem;font-weight:600}.signal-list{margin-top:12px}.signal-list h4{font-size:.88rem;font-weight:600;color:#374151;margin:0 0 8px}.signal-item{display:flex;align-items:center;gap:8px;margin-bottom:5px}.signal-dots{font-size:.8rem;letter-spacing:1px;min-width:40px;font-family:monospace}.signal-label{font-size:.85rem;color:#374151}@media (max-width: 640px){.stock-input-row{flex-direction:column;align-items:stretch}.btn-remove{align-self:flex-end}.form-options{flex-direction:column}.matches-header{flex-direction:column;align-items:flex-start;gap:4px}.mp-tab-header{flex-direction:column;align-items:stretch}.mp-btn-add-pick{width:100%;text-align:center}.mp-add-row{flex-direction:column}.mp-form-field--stock,.mp-form-field--notes{min-width:100%}.mp-similar-table{min-width:500px}.mp-similar-wrap{overflow-x:auto}.sell-input-row{flex-direction:column;align-items:stretch}.sell-input-field--profit,.sell-input-field--ratio{max-width:100%}.sell-card-header{flex-direction:column;align-items:flex-start}}.etf-page{padding:20px;max-width:1400px;margin:0 auto}.etf-header{margin-bottom:16px}.etf-header h1{margin:0 0 4px;font-size:24px;color:#333}.etf-subtitle{margin:0;font-size:14px;color:#777}.etf-filters{display:flex;align-items:center;flex-wrap:wrap;gap:16px;padding:16px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;margin-bottom:16px}.filter-group{display:flex;align-items:center;gap:8px;font-size:14px;color:#555}.filter-group select{padding:6px 10px;border:1px solid #ddd;border-radius:4px;font-size:14px;background:#fafafa}.filter-group select:focus{outline:none;border-color:#1976d2}.checkbox-label{display:flex;align-items:center;gap:6px;font-size:14px;color:#555;cursor:pointer}.etf-count{font-size:14px;color:#666;margin-bottom:8px}.etf-error{padding:16px;background:#fff3f3;border:1px solid #f5c6cb;border-radius:6px;color:#c62828}.etf-table-wrap{overflow-x:auto;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014}.etf-table{width:100%;border-collapse:collapse;font-size:14px}.etf-table th{background:#f5f7fa;padding:12px 10px;text-align:center;font-weight:600;color:#444;border-bottom:2px solid #e0e0e0;white-space:nowrap}.etf-table td{padding:10px;text-align:center;border-bottom:1px solid #f0f0f0;vertical-align:middle}.etf-table tbody tr:hover{background:#f9f9ff}td.rank{font-weight:600;color:#888;width:50px}td.code{font-family:monospace;color:#1976d2;font-weight:500}td.name{text-align:left;max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.theme-badge{display:inline-block;padding:2px 8px;background:#e8eaf6;color:#3949ab;border-radius:12px;font-size:12px;font-weight:500;white-space:nowrap}td.price{font-weight:500}td.trading-value{color:#555}.return-up{color:#c62828;font-weight:600}.return-down{color:#1565c0;font-weight:600}td.score{font-weight:700}td.score.score-high{color:#c62828}td.score.score-medium{color:#e65100}td.score.score-low{color:#555}td.score.score-negative{color:#1565c0}.etf-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;text-align:center;color:#aaa}.etf-empty-icon{font-size:48px;margin-bottom:12px}.etf-empty-text{font-size:16px;font-weight:600;color:#888;margin-bottom:8px}.etf-empty-filter{font-size:13px;color:#3949ab;background:#e8eaf6;padding:4px 12px;border-radius:12px;margin-bottom:8px}.etf-empty-hint{font-size:13px;color:#bbb}.etf-table th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.etf-table th.sortable:hover{background:#eaeef5}.sort-icon{display:inline-block;margin-left:4px;font-size:11px;color:#1976d2}.sort-icon.sort-icon-inactive{color:#ccc}.etf-note{margin-top:12px;font-size:12px;color:#999;line-height:1.8}@media (max-width: 768px){.etf-page{padding:8px}.etf-filters{gap:10px;padding:12px}td.name{max-width:140px}.etf-table th,.etf-table td{padding:8px;font-size:13px}}.crypto-page{padding:20px;max-width:1200px;margin:0 auto}.crypto-header{margin-bottom:16px}.crypto-header h1{margin:0 0 4px;font-size:24px;color:#333}.crypto-subtitle{margin:0;font-size:14px;color:#777}.horizon-tabs{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px}.horizon-tab{padding:8px 20px;border:1px solid #ddd;border-radius:20px;background:#fff;font-size:14px;color:#555;cursor:pointer;transition:all .2s;font-weight:500}.horizon-tab:hover{border-color:#1976d2;color:#1976d2;background:#e3f0fd}.horizon-tab.active{border-color:#1976d2;border-width:2px;background:#1976d2;color:#fff;font-weight:700;box-shadow:0 2px 6px #1976d24d}.crypto-view-tabs{display:flex;gap:4px}.crypto-view-tab{padding:6px 16px;border:1px solid #ddd;border-radius:4px;background:#fff;font-size:13px;color:#555;cursor:pointer;transition:all .15s;font-weight:500}.crypto-view-tab:hover{border-color:#1976d2;color:#1976d2}.crypto-view-tab.active{border-color:#1976d2;background:#1976d2;color:#fff;font-weight:600}.crypto-controls{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}.crypto-search-wrapper{position:relative;display:flex;align-items:center;flex-direction:row}.crypto-autocomplete-list{position:absolute;top:calc(100% + 4px);left:0;width:100%;min-width:200px;background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 4px 12px #0000001f;list-style:none;margin:0;padding:4px 0;z-index:100;max-height:280px;overflow-y:auto}.crypto-autocomplete-item{padding:8px 14px;font-size:14px;font-family:SF Mono,Fira Code,monospace;font-weight:600;color:#333;cursor:pointer;transition:background .1s}.crypto-autocomplete-item:hover,.crypto-autocomplete-item.active{background:#e3f0fd;color:#1976d2}.crypto-search-input{width:220px;padding:8px 32px 8px 12px;border:1px solid #ddd;border-radius:4px;font-size:14px;background:#fafafa;transition:border-color .2s}.crypto-search-input:focus{outline:none;border-color:#1976d2;box-shadow:0 0 0 2px #1976d233;background:#fff}.crypto-search-clear{position:absolute;right:8px;background:none;border:none;cursor:pointer;font-size:12px;color:#999;padding:0 2px;line-height:1}.crypto-search-clear:hover{color:#555}.crypto-count{font-size:14px;color:#666}.crypto-error{padding:16px;background:#fff3f3;border:1px solid #f5c6cb;border-radius:6px;color:#c62828;margin-bottom:16px}.crypto-table-wrap{overflow-x:auto;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;margin-bottom:16px}.crypto-table{width:100%;border-collapse:collapse;font-size:14px}.crypto-table th{background:#f5f7fa;padding:12px 14px;text-align:center;font-weight:600;color:#444;border-bottom:2px solid #e0e0e0;white-space:nowrap}.crypto-table td{padding:11px 14px;text-align:center;border-bottom:1px solid #f0f0f0;vertical-align:middle}.crypto-table tbody tr.clickable-row{cursor:pointer;transition:background .15s}.crypto-table tbody tr.clickable-row:hover{background:#f0f6ff}.crypto-rank{font-weight:600;color:#888;width:50px}.crypto-symbol{font-family:SF Mono,Fira Code,monospace;font-weight:700;color:#1976d2;font-size:15px;text-align:left}.crypto-direction-up{display:inline-block;padding:3px 10px;border-radius:12px;background:#e8f5e9;color:#2e7d32;font-weight:700;font-size:13px}.crypto-direction-down{display:inline-block;padding:3px 10px;border-radius:12px;background:#fce4e4;color:#c62828;font-weight:700;font-size:13px}.crypto-direction-hold{display:inline-block;padding:3px 10px;border-radius:12px;background:#f5f5f5;color:#888;font-weight:600;font-size:13px}.crypto-confidence-wrap{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:100px}.crypto-confidence-text{font-weight:600;font-size:13px;color:#333}.crypto-confidence-bar-bg{width:100%;height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden}.crypto-confidence-bar{height:100%;background:linear-gradient(90deg,#42a5f5,#1976d2);border-radius:3px;transition:width .4s ease}.positive{color:#c62828;font-weight:600}.negative{color:#1565c0;font-weight:600}.crypto-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;text-align:center}.crypto-empty-icon{font-size:48px;margin-bottom:12px}.crypto-empty-text{font-size:16px;font-weight:600;color:#888;margin-bottom:8px}.crypto-empty-hint{font-size:13px;color:#bbb}.crypto-note{margin-top:12px;font-size:12px;color:#999;line-height:1.8}.reason-cell{text-align:center}.reason-detail-btn{background:none;border:1px solid #1976d2;color:#1976d2;font-size:12px;padding:3px 10px;border-radius:4px;cursor:pointer;white-space:nowrap}.reason-detail-btn:hover{background:#e3f2fd}.reason-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:1000;display:flex;align-items:center;justify-content:center;padding:16px}.reason-modal{background:#fff;border-radius:10px;box-shadow:0 8px 32px #0003;width:100%;max-width:480px;padding:24px;display:flex;flex-direction:column;gap:16px}.reason-modal-header{display:flex;justify-content:space-between;align-items:flex-start}.reason-modal-title{font-size:17px;font-weight:700;color:#222}.reason-modal-code{font-size:13px;color:#888;font-weight:400}.reason-modal-close{background:none;border:none;font-size:18px;cursor:pointer;color:#666;padding:0 4px;line-height:1}.reason-modal-close:hover{color:#333}.reason-modal-scores{display:flex;gap:8px;flex-wrap:wrap}.modal-score-item{display:flex;flex-direction:column;align-items:center;background:#f8f9fa;border-radius:6px;padding:8px 12px;min-width:64px;flex:1}.modal-score-label{font-size:11px;color:#888;margin-bottom:4px}.modal-score-value{font-size:16px;font-weight:700}.reason-modal-body{display:flex;flex-direction:column;gap:8px}.reason-modal-label{font-size:12px;color:#888;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.reason-modal-text{font-size:15px;color:#333;line-height:1.6;white-space:pre-wrap;word-break:break-word}.stock-up{color:#c62828;font-weight:600}.stock-down{color:#1565c0;font-weight:600}@media (max-width: 768px){.crypto-page{padding:8px}.crypto-controls{gap:8px}.crypto-table th,.crypto-table td{padding:8px 10px;font-size:13px}.horizon-tabs,.crypto-view-tabs{flex-wrap:wrap;gap:4px}}.crypto-detail-page{padding:20px;max-width:1100px;margin:0 auto}.crypto-detail-header{display:flex;align-items:center;gap:20px;padding:20px 24px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;margin-bottom:20px;flex-wrap:wrap}.crypto-back-btn{padding:7px 16px;border:1px solid #1976d2;border-radius:4px;background:#fff;color:#1976d2;font-size:14px;cursor:pointer;font-weight:500;transition:all .2s;white-space:nowrap}.crypto-back-btn:hover{background:#1976d2;color:#fff}.crypto-detail-title{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap}.crypto-detail-symbol{margin:0;font-size:28px;font-weight:800;color:#1976d2;font-family:SF Mono,Fira Code,monospace}.crypto-detail-kor-name{font-size:16px;font-weight:400;color:#888}.crypto-detail-price{font-size:20px;font-weight:600;color:#333}.crypto-detail-search-wrapper{position:relative;margin-left:auto}.crypto-detail-search-input{width:200px;padding:7px 12px;border:1px solid #ddd;border-radius:4px;font-size:14px;background:#fafafa;transition:border-color .2s}.crypto-detail-search-input:focus{outline:none;border-color:#1976d2;box-shadow:0 0 0 2px #1976d233;background:#fff}.crypto-detail-autocomplete-list{position:absolute;top:calc(100% + 4px);right:0;min-width:200px;background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 4px 12px #0000001f;list-style:none;margin:0;padding:4px 0;z-index:100;max-height:280px;overflow-y:auto}.crypto-detail-autocomplete-item{padding:8px 14px;font-size:14px;font-family:SF Mono,Fira Code,monospace;font-weight:600;color:#333;cursor:pointer;transition:background .1s}.crypto-detail-autocomplete-item:hover,.crypto-detail-autocomplete-item.active{background:#e3f0fd;color:#1976d2}.crypto-section-title{font-size:17px;font-weight:700;color:#333;margin:0 0 12px}.crypto-chart-section{padding:20px 24px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;margin-bottom:20px}.crypto-chart-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}.crypto-period-tabs{display:flex;gap:4px}.crypto-period-tab{padding:5px 12px;border:1px solid #ddd;border-radius:4px;background:#fff;font-size:13px;color:#555;cursor:pointer;transition:all .15s}.crypto-period-tab:hover{border-color:#1976d2;color:#1976d2}.crypto-period-tab.active{border-color:#1976d2;background:#1976d2;color:#fff;font-weight:600}.crypto-chart-options{display:flex;gap:4px;margin-left:auto;flex-wrap:wrap}.crypto-chart-opt-btn{padding:5px 12px;border:1px solid #ddd;border-radius:4px;background:#fff;font-size:13px;color:#666;cursor:pointer;transition:all .15s}.crypto-chart-opt-btn:hover{border-color:#1976d2;color:#1976d2}.crypto-chart-opt-btn.active{border-color:#1976d2;background:#e3f0fd;color:#1976d2;font-weight:600}.crypto-chart-wrap{width:100%}.crypto-volume-wrap{width:100%;margin-top:4px;border-top:1px solid #f0f0f0;padding-top:4px}.crypto-sub-chart-label{font-size:11px;color:#aaa;margin-bottom:2px}.crypto-chart-container{width:100%;height:280px}.crypto-no-prices{padding:32px;text-align:center;color:#aaa;font-size:14px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;margin-bottom:20px}.crypto-predictions-section{padding:20px 24px;background:#fff;border-radius:8px;box-shadow:0 2px 8px #00000014;margin-bottom:20px}.crypto-prediction-cards{display:flex;gap:12px;flex-wrap:wrap}.crypto-prediction-card{flex:1;min-width:110px;max-width:180px;border:1px solid #e0e0e0;border-radius:10px;padding:16px 12px;text-align:center;background:#fafafa;transition:box-shadow .2s}.crypto-prediction-card:hover{box-shadow:0 4px 12px #0000001f}.crypto-prediction-card.up{background:#e8f5e9;border-color:#a5d6a7}.crypto-prediction-card.down{background:#fce4e4;border-color:#ef9a9a}.crypto-pred-horizon{font-size:13px;font-weight:700;color:#555;margin-bottom:10px}.crypto-pred-direction{font-size:16px;font-weight:800;color:#888;margin-bottom:6px}.crypto-pred-direction.up{color:#2e7d32}.crypto-pred-direction.down{color:#c62828}.crypto-pred-confidence{font-size:20px;font-weight:700;color:#333;margin-bottom:4px}.crypto-pred-return{font-size:13px;font-weight:600;color:#888}.crypto-pred-return.up{color:#c62828}.crypto-pred-return.down{color:#1565c0}.crypto-pred-target-price{font-size:12px;font-weight:600;color:#555;margin-top:4px;padding-top:4px;border-top:1px solid #e0e0e0}.crypto-pred-none{font-size:12px;color:#ccc;padding:12px 0}.crypto-detail-error{padding:16px;background:#fff3f3;border:1px solid #f5c6cb;border-radius:6px;color:#c62828}.crypto-no-predictions{font-size:14px;color:#aaa;padding:20px 0;text-align:center}.crypto-detail-note{font-size:12px;color:#999;line-height:1.8;margin-top:4px}.chart-info-bar{display:flex;flex-wrap:wrap;gap:16px;padding:8px 16px;background:#f8f9fa;border-bottom:1px solid #e9ecef;font-size:12px;color:#333}.chart-info-item{display:flex;align-items:center;gap:4px}.chart-info-label{color:#888;font-size:11px}.chart-info-high{color:#e74c3c;font-weight:600}.chart-info-low{color:#3498db;font-weight:600}.attention-heatmap{margin-top:16px;padding-top:14px;border-top:1px solid #eee;width:100%}.attention-heatmap-title{font-size:13px;font-weight:600;color:#555;margin-bottom:10px}.attention-bars{display:flex;align-items:flex-end;gap:2px;height:60px;width:100%}.attention-bar{flex:1;border-radius:2px 2px 0 0;min-height:2px;transition:opacity .15s;cursor:default;position:relative}.attention-bar:hover:after{content:attr(data-index);position:absolute;bottom:calc(100% + 4px);left:50%;transform:translate(-50%);background:#000000bf;color:#fff;font-size:10px;padding:3px 6px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:10}.attention-axis{display:flex;justify-content:space-between;margin-top:4px}.attention-axis-label{font-size:10px;color:#aaa}.fg-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}.fg-current{display:flex;align-items:baseline;gap:8px}.fg-value{font-size:2rem;font-weight:700;line-height:1}.fg-class{font-size:.9rem;opacity:.9}.fg-date{font-size:.75rem;color:#9ca3af}.fg-sparkline{width:100%;height:64px;display:block;margin-bottom:8px}.fg-legend{display:flex;flex-wrap:wrap;gap:10px;font-size:.72rem;color:#d1d5db}.consensus-badge{display:inline-block;padding:2px 8px;border-radius:10px;background:#e8eaf6;color:#3949ab;font-size:11px;font-weight:600;letter-spacing:.3px}.consensus-direction{font-size:22px;font-weight:800;padding:8px 16px;border-radius:8px;text-align:center}.consensus-direction.up{color:#2e7d32;background:#e8f5e9}.consensus-direction.down{color:#c62828;background:#ffebee}.consensus-direction.hold{color:#1565c0;background:#e3f2fd}@media (max-width: 768px){.crypto-detail-page{padding:8px}.crypto-detail-header{padding:12px 16px;gap:12px}.crypto-detail-symbol{font-size:22px}.fg-value{font-size:1.5rem}}.pt-container{max-width:1200px;margin:0 auto;padding:24px 16px}.pt-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:8px}.pt-title{font-size:1.5rem;font-weight:700;margin:0}.pt-header-right{display:flex;align-items:center;gap:12px}.pt-date{font-size:.85rem;color:#666}.pt-refresh{padding:6px 14px;background:#3b82f6;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:.85rem}.pt-refresh:hover{background:#2563eb}.pt-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;margin-bottom:24px}.pt-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:14px 16px;box-shadow:0 1px 3px #0000000f}.pt-card__label{font-size:.78rem;color:#6b7280;margin-bottom:6px}.pt-card__value{font-size:1.1rem;font-weight:600}.pt-tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:2px solid #e5e7eb}.pt-tab{padding:8px 18px;border:none;background:none;cursor:pointer;font-size:.9rem;color:#6b7280;border-bottom:2px solid transparent;margin-bottom:-2px}.pt-tab.active{color:#3b82f6;border-bottom-color:#3b82f6;font-weight:600}.pt-table-wrap{overflow-x:auto}.pt-table{width:100%;border-collapse:collapse;font-size:.88rem}.pt-table th{background:#f9fafb;padding:10px 12px;text-align:left;font-weight:600;color:#374151;border-bottom:1px solid #e5e7eb;white-space:nowrap}.pt-table td{padding:10px 12px;border-bottom:1px solid #f3f4f6;vertical-align:middle}.pt-table tr:hover td{background:#f9fafb}.pt-stock{min-width:110px}.pt-name{display:block;font-weight:500}.pt-code{display:block;font-size:.78rem;color:#9ca3af}.pt-datetime{white-space:nowrap;font-size:.82rem;color:#6b7280}.positive{color:#ef4444}.negative{color:#3b82f6}.pt-side--buy{color:#ef4444;font-weight:600}.pt-side--sell{color:#3b82f6;font-weight:600}.pt-status{display:inline-block;padding:2px 8px;border-radius:12px;font-size:.78rem;font-weight:500}.pt-status--open{background:#dbeafe;color:#1d4ed8}.pt-status--filled{background:#dcfce7;color:#15803d}.pt-status--closed{background:#f3f4f6;color:#6b7280}.pt-status--cancelled{background:#fef9c3;color:#92400e}.pt-status--pending{background:#fef3c7;color:#b45309}.pt-empty{text-align:center;padding:40px;color:#9ca3af;font-size:.9rem}.pt-error{text-align:center;padding:40px;color:#ef4444}@media (max-width: 640px){.pt-cards{grid-template-columns:repeat(2,1fr)}.pt-card__value{font-size:.95rem}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f5f5f5}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.container{max-width:1400px;margin:0 auto;padding:20px}.card{background:#fff;border-radius:8px;padding:20px;box-shadow:0 2px 8px #0000001a;margin-bottom:20px}.btn{padding:10px 20px;border:none;border-radius:5px;cursor:pointer;font-size:14px;font-weight:500;transition:all .2s}.btn-primary{background:#1976d2;color:#fff}.btn-primary:hover{background:#1565c0}.btn-success{background:#4caf50;color:#fff}.btn-success:hover{background:#45a049}.btn-warning{background:#ff9800;color:#fff}.btn-warning:hover{background:#fb8c00}.btn-info{background:#0288d1;color:#fff}.btn-info:hover{background:#0277bd}.btn:disabled{opacity:.6;cursor:not-allowed}.status-badge{display:inline-block;padding:4px 12px;border-radius:12px;font-size:12px;font-weight:600}.status-ready{background:#e3f2fd;color:#1976d2}.status-running{background:#e8f5e9;color:#4caf50}.status-in_progress{background:#fff3e0;color:#ff9800}.status-error{background:#ffebee;color:#f44336}.status-waiting{background:#f5f5f5;color:#757575}.status-completed{background:#e8f5e9;color:#4caf50}.chart-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 0;margin-bottom:4px}.chart-period-group,.chart-type-group,.chart-overlay-group{display:flex;gap:4px;flex-wrap:wrap}.chart-type-group{border-left:1px solid #e0e0e0;padding-left:8px}.chart-overlay-group{border-left:1px solid #e0e0e0;padding-left:8px;margin-left:auto}.chart-ctrl-btn{padding:5px 12px;border:1px solid #ddd;border-radius:4px;background:#fff;font-size:13px;color:#555;cursor:pointer;transition:all .15s;font-weight:500;white-space:nowrap}.chart-ctrl-btn:hover:not(:disabled){border-color:#1976d2;color:#1976d2}.chart-ctrl-btn.active{border-color:#1976d2;background:#e3f0fd;color:#1976d2;font-weight:600}.chart-ctrl-btn:disabled{opacity:.4;cursor:not-allowed}@media (max-width: 768px){.container{padding:8px}.card{padding:12px;margin-bottom:12px}.chart-controls{gap:4px;padding:6px 0}.chart-type-group,.chart-overlay-group{border-left:none;padding-left:0}.chart-overlay-group{margin-left:0}.chart-ctrl-btn{padding:4px 8px;font-size:12px}.btn{padding:8px 14px;font-size:13px}}
