*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#f5f5f5;min-height:100vh;color:#231f20}.app{min-height:100vh;display:flex;flex-direction:column}.login-container{max-width:540px;margin:3rem auto;padding:0;background:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;border:1px solid #e1e1e1}.login-header{text-align:center;padding:2rem 2rem 1.5rem;border-bottom:1px solid #f0f0f0}.pricefx-logo{margin-bottom:1.5rem}.login-header h1{color:#231f20;margin-bottom:0;font-size:1.5rem;font-weight:400;font-family:inherit}.login-header p{color:#666;font-size:.875rem;line-height:1.5;margin-top:.5rem}.login-form{padding:2rem;display:flex;flex-direction:column;gap:1.5rem}.input-group{display:flex;flex-direction:column;gap:.5rem}.input-group label{font-weight:400;color:#231f20;font-size:.875rem;margin-bottom:.25rem}.input-group input{padding:.75rem .875rem;border:1px solid #d9d9d9;border-radius:4px;font-size:.875rem;transition:border-color .2s,box-shadow .2s;font-family:inherit}.input-group input:focus{outline:none;border-color:#0078a2;box-shadow:0 0 0 2px #0078a233}.input-group input::placeholder{color:#bfbfbf}.input-group.has-error input{border-color:#ff4d4f}.input-group small{color:#666;font-size:.75rem}.error-text{color:#ff4d4f;font-size:.75rem;margin-top:.25rem}.login-button{padding:.75rem 1.5rem;background:#0078a2;color:#fff;border:none;border-radius:4px;font-size:.875rem;font-weight:400;cursor:pointer;transition:background-color .2s;display:flex;align-items:center;justify-content:center;gap:.5rem;font-family:inherit}.login-button:hover:not(:disabled){background:#006b8f}.login-button:disabled{opacity:.6;cursor:not-allowed}.spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.login-success{max-width:440px;margin:3rem auto;padding:2rem;background:#fff;border-radius:8px;box-shadow:0 4px 12px #00000026;text-align:center;border:1px solid #e1e1e1}.success-icon{font-size:3rem;margin-bottom:1rem}.login-success h2{color:#52c41a;margin-bottom:1rem;font-weight:400}.error-message{background:#fff2f0;border:1px solid #ffccc7;color:#ff4d4f;padding:1rem;border-radius:4px;margin-top:1rem;font-size:.875rem}.help-text{margin-top:2rem;padding:1rem;background:#f6f8fa;border-radius:4px;border-left:4px solid #0078A2}.help-text h3{color:#231f20;margin-bottom:.5rem;font-size:.875rem;font-weight:500}.help-text ul{list-style:none;color:#666;font-size:.75rem}.help-text li{margin-bottom:.25rem;padding-left:1rem;position:relative}.help-text li:before{content:"✓";position:absolute;left:0;color:#52c41a;font-weight:700}.app-authenticated{min-height:100vh;background:#f5f5f5;display:flex;flex-direction:column}.app-header{background:#fff;border-bottom:1px solid #e1e1e1;padding:1rem 0;position:sticky;top:0;z-index:100}.header-content{max-width:1200px;margin:0 auto;padding:0 1rem;display:flex;justify-content:space-between;align-items:center}.header-content h1{color:#231f20;font-size:1.25rem;font-weight:500}.header-info{display:flex;align-items:center;gap:1rem;font-size:.875rem;color:#666}.logout-button{padding:.5rem 1rem;background:#ff4d4f;color:#fff;border:none;border-radius:4px;font-size:.875rem;cursor:pointer;transition:background-color .2s}.logout-button:hover{background:#ff7875}.app-main{flex:1;padding:1.5rem 0}.container{max-width:1200px;margin:0 auto;padding:0 1rem;display:flex;flex-direction:column;gap:1.5rem}.section{background:#fff;border-radius:4px;box-shadow:0 2px 8px #0000001a;overflow:hidden;border:1px solid #e1e1e1}.section-header{padding:1.25rem 1.5rem;border-bottom:1px solid #f0f0f0;display:flex;justify-content:space-between;align-items:center;background:#fafafa}.section-header h2{color:#231f20;font-size:1.125rem;font-weight:500}.section-actions{display:flex;gap:.75rem}.refresh-button{padding:.5rem 1rem;background:#595959;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer;transition:background-color .2s}.refresh-button:hover:not(:disabled){background:#434343}.download-button{padding:.5rem 1rem;background:#52c41a;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer;transition:background-color .2s}.download-button:hover{background:#73d13d}.loading{padding:2rem;text-align:center;color:#8c8c8c;font-style:italic;font-size:.875rem}.empty-state{padding:2rem;text-align:center;color:#8c8c8c;font-size:.875rem}.retry-button{margin-top:1rem;padding:.5rem 1rem;background:#0078a2;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s;font-size:.875rem}.retry-button:hover{background:#006b8f}.search-section{padding:1rem 1.5rem;border-bottom:1px solid #f0f0f0;background:#fafafa}.search-input-group{position:relative;max-width:400px}.search-input{width:100%;padding:.5rem 2rem .5rem .75rem;border:1px solid #d9d9d9;border-radius:4px;font-size:.875rem;transition:border-color .2s,box-shadow .2s}.search-input:focus{outline:none;border-color:#0078a2;box-shadow:0 0 0 2px #0078a233}.search-input::placeholder{color:#bfbfbf}.clear-search-button{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);background:none;border:none;color:#8c8c8c;cursor:pointer;font-size:.875rem;padding:.25rem;border-radius:2px;transition:color .2s,background-color .2s}.clear-search-button:hover{color:#595959;background:#0000000a}.table-container{overflow-x:auto}.data-table{width:100%;border-collapse:collapse;font-size:.875rem}.data-table th{background:#fafafa;padding:.75rem;text-align:left;font-weight:500;color:#595959;border-bottom:1px solid #f0f0f0;font-size:.75rem;text-transform:uppercase;letter-spacing:.5px}.data-table td{padding:.75rem;border-bottom:1px solid #f5f5f5}.data-table tr:hover{background:#fafafa}.name-cell{font-weight:500;color:#231f20}.description-cell{max-width:300px;color:#666}.value-cell{max-width:400px;word-break:break-word;color:#666}.json-summary{color:#0078a2;cursor:pointer;font-weight:400;font-size:.875rem;padding:.25rem 0}.json-summary:hover{color:#006b8f;text-decoration:underline}.json-content{background:#fafafa;border:1px solid #f0f0f0;border-radius:4px;padding:.75rem;margin-top:.5rem;font-size:.75rem;line-height:1.4;overflow-x:auto;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow-y:auto}.simple-value{font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.75rem;color:#231f20}.field-name{font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-weight:500;color:#231f20}.field-type{color:#0078a2;font-weight:500}.stats{padding:.75rem 1.5rem;background:#fafafa;border-bottom:1px solid #f0f0f0;color:#8c8c8c;font-size:.75rem}.table-footer{padding:.75rem 1.5rem;background:#fafafa;color:#8c8c8c;font-size:.75rem;text-align:center;border-top:1px solid #f0f0f0}.show-more-section{padding:1rem 1.5rem;background:#fafafa;border-top:1px solid #f0f0f0;text-align:center}.show-more-section p{color:#8c8c8c;font-size:.75rem;margin-bottom:.75rem}.show-more-button{padding:.5rem 1rem;background:#0078a2;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer;transition:background-color .2s;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.show-more-button:hover{background:#006b8f}.checkbox-column{width:40px;text-align:center}.checkbox-column input[type=checkbox]{margin:0;cursor:pointer}.selection-header{padding:1rem 1.5rem;border-bottom:1px solid #f0f0f0;background:#fafafa}.select-all-label{display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;color:#231f20;cursor:pointer}.select-all-label input[type=checkbox]{margin:0}.datamart-checkbox{display:flex;align-items:center;gap:.5rem;font-size:.875rem;cursor:pointer}.datamart-checkbox input[type=checkbox]{margin:0;cursor:pointer}.watcher-generator{padding:1.5rem}.form-section{background:#fff;border-radius:4px;box-shadow:0 2px 8px #0000001a;margin-bottom:1.5rem;border:1px solid #e1e1e1}.form-section h3{color:#231f20;font-size:1rem;font-weight:500;margin-bottom:1rem;padding:1.25rem 1.5rem 0}.form-description{color:#666;font-size:.875rem;margin-bottom:1.5rem;padding:0 1.5rem}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem;padding:0 1.5rem 1.5rem}.form-input{padding:.5rem .75rem;border:1px solid #d9d9d9;border-radius:4px;font-size:.875rem;transition:border-color .2s,box-shadow .2s}.form-input:focus{outline:none;border-color:#0078a2;box-shadow:0 0 0 2px #0078a233}.objective-input-group{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.objective-input{flex:1}.remove-objective-button{padding:.5rem;background:#ff4d4f;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer;transition:background-color .2s;display:flex;align-items:center;justify-content:center;width:32px;height:32px}.remove-objective-button:hover{background:#ff7875}.add-objective-button{padding:.5rem 1rem;background:transparent;color:#0078a2;border:1px dashed #0078A2;border-radius:4px;font-size:.875rem;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:.5rem;margin-bottom:1rem}.add-objective-button:hover{background:#0078a20d;border-color:#006b8f;color:#006b8f}.selection-summary{padding:1rem;background:#f6f8fa;border-radius:4px;border:1px solid #e1e1e1}.summary-item{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.summary-label{font-weight:500;color:#231f20;font-size:.875rem}.summary-count{background:#0078a2;color:#fff;padding:.25rem .5rem;border-radius:12px;font-size:.75rem;font-weight:500}.generate-button{width:100%;padding:.875rem 1.5rem;background:#0078a2;color:#fff;border:none;border-radius:4px;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s;display:flex;align-items:center;justify-content:center;gap:.5rem;margin-top:1.5rem}.generate-button:hover:not(:disabled){background:#006b8f}.generate-button:disabled{opacity:.6;cursor:not-allowed;background:#d9d9d9}.generation-results{background:#fff;border-radius:4px;box-shadow:0 2px 8px #0000001a;margin-top:1.5rem;border:1px solid #e1e1e1}.generation-results h3{color:#231f20;font-size:1rem;font-weight:500;margin-bottom:1rem;padding:1.25rem 1.5rem 0}.results-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;padding:0 1.5rem 1.5rem;margin-bottom:1.5rem}.result-stat{background:#fafafa;padding:1rem;border-radius:4px;text-align:center;border:1px solid #f0f0f0}.stat-label{font-size:.75rem;color:#8c8c8c;text-transform:uppercase;letter-spacing:.5px;margin-bottom:.5rem}.stat-value{font-size:1.5rem;font-weight:600;color:#231f20}.result-stat.success .stat-value{color:#52c41a}.result-stat.error .stat-value{color:#ff4d4f}.watcher-results{display:flex;flex-direction:column;gap:1rem;padding:0 1.5rem 1.5rem}.watcher-result{border:1px solid #f0f0f0;border-radius:4px;overflow:hidden;background:#fff}.watcher-result.success{border-left:4px solid #52c41a}.watcher-result.failed{border-left:4px solid #ff4d4f}.watcher-header{padding:1rem;background:#fafafa;border-bottom:1px solid #f0f0f0;display:flex;justify-content:space-between;align-items:center;cursor:pointer}.watcher-title h4{color:#231f20;font-size:.875rem;font-weight:500;margin:0;display:flex;align-items:center;gap:.5rem}.watcher-name{color:#666;font-size:.75rem;margin-top:.25rem}.watcher-actions{display:flex;gap:.5rem;align-items:center}.action-button{padding:.375rem .75rem;background:#f5f5f5;color:#666;border:1px solid #d9d9d9;border-radius:4px;font-size:.75rem;cursor:pointer;transition:all .2s}.action-button:hover{background:#e6f7ff;border-color:#91d5ff;color:#0078a2}.action-button.copy-button{background:#e6f7ff;color:#0078a2}.action-button.copy-button:hover{background:#bae7ff;border-color:#69c0ff}.action-button.download-button{background:#f6ffed;color:#52c41a;border-color:#b7eb8f}.action-button.download-button:hover{background:#d9f7be;border-color:#95de64}.action-button.export-button{background:#fff7e6;color:#fa8c16;border-color:#ffd591}.action-button.export-button:hover{background:#ffe7ba;border-color:#ffb347}.action-button.expand-button{background:transparent;border:none;color:#666;padding:.25rem}.action-button.expand-button:hover{color:#231f20;background:#0000000a}.status-badge{padding:.25rem .5rem;border-radius:4px;font-size:.625rem;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.status-badge.success{background:#f6ffed;color:#52c41a;border:1px solid #b7eb8f}.status-badge.failed{background:#fff2f0;color:#ff4d4f;border:1px solid #ffccc7}.watcher-details{padding:1rem;border-top:1px solid #f0f0f0}.validation-status{padding:.75rem;border-radius:4px;margin-bottom:1rem;font-size:.875rem}.validation-status.success{background:#f6ffed;border:1px solid #b7eb8f;color:#52c41a}.validation-status.warning{background:#fffbe6;border:1px solid #ffe58f;color:#fa8c16}.validation-errors{background:#fff2f0;border:1px solid #ffccc7;border-radius:4px;padding:1rem;margin-bottom:1rem}.validation-errors ul{list-style-type:none;margin:0;padding:0}.validation-errors li{color:#ff4d4f;font-size:.875rem;margin-bottom:.5rem}.watcher-json-container{background:#fafafa;border:1px solid #f0f0f0;border-radius:4px;max-height:400px;overflow-y:auto}.watcher-json{padding:1rem;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.75rem;line-height:1.4;white-space:pre-wrap;color:#231f20;word-break:break-word}.watcher-error{background:#fff2f0;border:1px solid #ffccc7;border-radius:4px;padding:1rem;color:#ff4d4f;font-size:.875rem;margin-top:1rem}.selection-section{padding:1.5rem}.selection-section h3{color:#231f20;font-size:1rem;font-weight:500;margin-bottom:1rem;padding:1.25rem 1.5rem 0;border-bottom:1px solid #f0f0f0;background:#fafafa}.datamart-list{display:flex;flex-direction:column}.datamart-item{border-bottom:1px solid #f0f0f0}.datamart-item:last-child{border-bottom:none}.datamart-header{padding:1rem 1.5rem;display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:background-color .2s}.datamart-header:hover{background:#fafafa}.datamart-info h3{color:#231f20;font-size:.875rem;font-weight:500;margin:0 0 .25rem;padding:0;border:none;background:transparent}.datamart-label{color:#666;font-size:.75rem;margin-bottom:.25rem}.datamart-description{color:#8c8c8c;font-size:.75rem}.datamart-actions{display:flex;gap:.5rem;align-items:center}.download-schema-button{padding:.375rem .75rem;background:#0078a2;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer;transition:background-color .2s}.download-schema-button:hover{background:#006b8f}.expand-icon{color:#8c8c8c;font-size:.875rem;transition:transform .2s}.datamart-details{padding:0 1.5rem 1rem;background:#fafafa}.schema-view h4{color:#231f20;font-size:.875rem;font-weight:500;margin-bottom:.75rem}.fields-table{background:#fff;border:1px solid #e1e1e1;border-radius:4px;overflow:hidden}.schema-error{background:#fff2f0;border:1px solid #ffccc7;border-radius:4px;padding:1rem;color:#ff4d4f;text-align:center;font-size:.875rem}.schema-error button{margin-top:.75rem;padding:.5rem 1rem;background:#ff4d4f;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:.75rem}.app-footer{background:#fff;border-top:1px solid #e1e1e1;padding:1rem;text-align:center;color:#8c8c8c;font-size:.75rem}@media (max-width: 768px){.header-content{flex-direction:column;gap:1rem;align-items:flex-start}.header-info{font-size:.75rem}.section-header{flex-direction:column;align-items:flex-start;gap:1rem}.section-actions{width:100%}.datamart-header{flex-direction:column;align-items:flex-start;gap:1rem}.datamart-actions{align-self:stretch}.table-container{font-size:.75rem}.data-table th,.data-table td{padding:.5rem}.form-grid{grid-template-columns:1fr}.selection-summary{margin-top:1rem}.results-summary{grid-template-columns:1fr}.objective-input-group{flex-direction:column;align-items:stretch}.remove-objective-button{align-self:flex-end;width:auto;padding:.5rem 1rem}.watcher-header{flex-direction:column;align-items:flex-start;gap:1rem}.watcher-actions{align-self:stretch}.action-button{flex:1;text-align:center}.action-button.export-button{order:-1}}@media (max-width: 480px){.login-container{margin:1rem;padding:0}.container{padding:0 .75rem}.section-header,.datamart-header{padding:1rem}.datamart-details{padding:0 1rem 1rem}}
