*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:system-ui,sans-serif;line-height:1.6;background:#f0f2f5}.app-shell{display:flex;min-height:100vh}.app-sidebar{width:220px;flex-shrink:0;background:#1a1a2e;color:#d7d6e6;display:flex;flex-direction:column}.app-sidebar__logo{padding:1.25rem 1.25rem 1rem;font-weight:800;color:#fff;font-size:1.1rem}.app-sidebar__nav{flex:1;display:flex;flex-direction:column;gap:.15rem;padding:.5rem}.app-sidebar__link{display:flex;align-items:center;gap:.65rem;padding:.6rem .75rem;border-radius:.5rem;color:inherit;text-decoration:none;font-size:.92rem}.app-sidebar__link:hover{background:#ffffff0f}.app-sidebar__link--active{background:#5646c9;color:#fff}.app-sidebar__icon{width:1.25rem;text-align:center}.app-sidebar__user{display:flex;align-items:center;gap:.6rem;padding:1rem .9rem;border-top:1px solid rgba(255,255,255,.1)}.app-sidebar__avatar{width:2rem;height:2rem;border-radius:999px;background:#5646c9;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:700;flex-shrink:0}.app-sidebar__user-info{display:flex;flex-direction:column;overflow:hidden;flex:1}.app-sidebar__user-name{font-size:.85rem;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-sidebar__user-role{font-size:.75rem;color:#9a99b3}.app-sidebar__logout{background:none;border:none;color:#9a99b3;font-size:1.1rem;cursor:pointer;padding:.25rem}.app-sidebar__logout:hover{color:#fff}.app-main{flex:1;display:flex;flex-direction:column;min-width:0}.app-topbar{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:#fff;border-bottom:1px solid #e2e4ea}.app-topbar__title{font-size:1.15rem}.app-topbar__role-badge{font-size:.75rem;font-weight:600;padding:.25rem .6rem;border-radius:999px;background:#ece9fd;color:#5646c9}.app-content{padding:1.5rem;flex:1}@media (max-width: 720px){.app-shell{flex-direction:column}.app-sidebar{width:100%;flex-direction:row;align-items:center}.app-sidebar__logo{display:none}.app-sidebar__nav{flex-direction:row;overflow-x:auto;flex:1}.app-sidebar__label,.app-sidebar__user-info{display:none}}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem}.login-card{width:100%;max-width:360px;background:#fff;border:1px solid #e2e4ea;border-radius:.75rem;padding:2rem;display:flex;flex-direction:column;gap:1rem}.login-card h1{font-size:1.4rem}.login-subtitle{color:#5c5c70;margin-top:-.5rem}.login-field{display:flex;flex-direction:column;gap:.35rem}.login-field label{font-size:.9rem;font-weight:600}.login-field input{font:inherit;padding:.55rem .7rem;border:1px solid #d7d9e0;border-radius:.5rem}.login-error{color:#c0392b;font-size:.9rem}.login-card button{font:inherit;font-weight:600;padding:.65rem;border:none;border-radius:.5rem;background:#5646c9;color:#fff;cursor:pointer}.login-card button:disabled{background:#b9b0f7;cursor:not-allowed}.login-links{display:flex;flex-direction:column;gap:.4rem;font-size:.9rem}.login-links a{color:#5646c9}.page-header{display:flex;justify-content:flex-end;margin-bottom:1.25rem}.form-error{color:#c0392b;font-size:.9rem}.form-success{color:#1c8a4b;font-size:.9rem}.btn-primary,.btn-secondary{font:inherit;font-weight:600;padding:.55rem 1rem;border-radius:.5rem;cursor:pointer;border:none}.btn-primary{background:#5646c9;color:#fff}.btn-primary:hover{background:#46379e}.btn-primary:disabled{background:#b9b0f7;cursor:not-allowed}.btn-secondary{background:#fff;color:#1a1a2e;border:1px solid #d7d9e0}.btn-secondary:hover{background:#f0f2f5}.login-field textarea,.login-field select{font:inherit;padding:.55rem .7rem;border:1px solid #d7d9e0;border-radius:.5rem;resize:vertical}.project-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem}.results-grid{grid-template-columns:repeat(3,1fr)}@media (max-width: 720px){.project-grid{grid-template-columns:1fr}}.project-card{background:#fff;border:1px solid #e2e4ea;border-radius:.75rem;padding:1.25rem;display:flex;flex-direction:column;gap:.6rem;cursor:pointer}.project-card__header{display:flex;justify-content:space-between;align-items:center}.project-card__status{font-size:.75rem;font-weight:600;padding:.2rem .55rem;border-radius:999px;background:#ece9fd;color:#5646c9}.project-card__owner{color:#5c5c70;font-size:.9rem}.project-card__tags{display:flex;flex-wrap:wrap;gap:.4rem}.tag{font-size:.75rem;padding:.2rem .5rem;border-radius:999px;background:#f0f2f5;color:#444}.project-card__stats{display:flex;gap:1rem;font-size:.85rem;color:#5c5c70}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#1a1a2e73;display:flex;align-items:center;justify-content:center;padding:1.5rem;z-index:50}.modal{background:#fff;border-radius:.75rem;padding:1.75rem;width:100%;max-width:420px;display:flex;flex-direction:column;gap:1rem;max-height:90vh;overflow-y:auto}.modal__actions{display:flex;justify-content:flex-end;gap:.6rem}.chip-group{display:flex;flex-wrap:wrap;gap:.4rem}.chip{font:inherit;font-size:.85rem;padding:.3rem .7rem;border-radius:999px;border:1px solid #d7d9e0;background:#fff;cursor:pointer}.chip--selected{background:#5646c9;color:#fff;border-color:#5646c9}.dropzone{border:2px dashed #c8c6de;border-radius:.75rem;padding:2.5rem 1.5rem;text-align:center;color:#5c5c70;cursor:pointer;margin-bottom:1rem;background:#fff}.dropzone:hover{border-color:#5646c9}.preview-table-wrapper{overflow-x:auto;margin-bottom:1.25rem;border:1px solid #e2e4ea;border-radius:.5rem}.preview-table{border-collapse:collapse;width:100%;font-size:.85rem}.preview-table th,.preview-table td{padding:.5rem .75rem;border-bottom:1px solid #e2e4ea;text-align:left;white-space:nowrap}.preview-table th{background:#f7f7fb;font-weight:600}.toggle-row{display:flex;align-items:center;gap:.5rem;margin:1rem 0;font-size:.9rem}.progress-bar{height:.5rem;background:#e2e4ea;border-radius:999px;overflow:hidden;margin:.75rem 0}.progress-bar__fill{height:100%;background:#5646c9;transition:width .2s ease}.upload-success{text-align:center;padding:3rem 1rem}.chart-builder{display:flex;flex-direction:column;gap:1.5rem}.chart-builder__panel{background:#fff;border:1px solid #e2e4ea;border-radius:.75rem;padding:1.25rem;display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;gap:1.25rem}.chart-builder__panel>.login-field{flex:1 1 190px;min-width:170px}.chart-builder__panel>.chart-builder__field-wide{flex:1 1 100%}.chart-builder__panel>.chart-builder__field-row{flex:1 1 340px}.chart-builder__panel>.chart-builder__footer{flex:1 1 100%}.chart-builder__panel hr{display:none}.chart-builder__footer{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:1rem;padding-top:.25rem;border-top:1px solid #eef0f4}.chart-builder__footer-actions{display:flex;align-items:center;gap:.75rem}.chart-builder__footer-actions .form-error{margin:0}.chart-builder__footer .modal__actions{margin-top:0}.chart-builder__preview{background:#fff;border:1px solid #e2e4ea;border-radius:.75rem;padding:1.25rem;min-height:640px;display:flex;flex-direction:column;align-items:center;justify-content:center}.chart-builder__graph{width:100%;height:72vh;min-height:520px}.chart-builder__placeholder{color:#5c5c70}.chart-builder__loading{display:flex;flex-direction:column;align-items:center;gap:.75rem;color:#5c5c70}.chart-builder__spinner{width:28px;height:28px;border:3px solid #e2e4ea;border-top-color:#5646c9;border-radius:50%;animation:chart-builder-spin .8s linear infinite}@keyframes chart-builder-spin{to{transform:rotate(360deg)}}.chart-builder__drawer{max-width:720px;max-height:80vh;overflow-y:auto}.chart-builder__canvas-row{display:flex;gap:1.5rem;align-items:flex-start;flex-wrap:wrap}.chart-builder__canvas-row>.chart-builder__preview{flex:1 1 480px;min-width:0}.enrichment-panel{flex:0 0 340px;max-height:720px;overflow-y:auto}.enrichment-panel__skeleton{display:flex;flex-direction:column;gap:.5rem}.enrichment-panel__skeleton-row{height:2.5rem;border-radius:.4rem;background:linear-gradient(90deg,#f0f2f5 25%,#e6e8ee 37%,#f0f2f5 63%);background-size:400% 100%;animation:enrichment-skeleton-pulse 1.4s ease infinite}@keyframes enrichment-skeleton-pulse{0%{background-position:100% 50%}to{background-position:0 50%}}.enrichment-panel__error{color:#b3261e}.enrichment-panel__empty{color:#5c5c70}.enrichment-panel__table{width:100%;border-collapse:collapse;font-size:.85rem}.enrichment-panel__table th{text-align:left;font-size:.75rem;color:#5c5c70;padding:.3rem .4rem;border-bottom:1px solid #e2e4ea}.enrichment-panel__table td{padding:.5rem .4rem;border-bottom:1px solid #f0f2f5;vertical-align:top}.enrichment-panel__table .badge{margin-right:.4rem}.enrichment-panel__table .chip-group{margin-top:.3rem}.enrichment-panel__table .chip{padding:.15rem .5rem;font-size:.75rem}.chart-builder__actions{display:flex;gap:.6rem;margin-top:1rem;flex-wrap:wrap;justify-content:center}.chart-builder__chip-section{margin-bottom:.5rem}.chart-builder__chip-section-label{display:block;font-size:.75rem;color:#5c5c70;margin-bottom:.25rem}.chart-builder__detail-group{margin-bottom:1rem}.chart-builder__field-row{display:flex;gap:1rem}.chart-builder__field-row>.login-field{flex:1;min-width:0}.chart-builder__advanced summary{cursor:pointer;font-weight:600;margin-bottom:.5rem}.chart-builder__export-menu{position:relative}.chart-builder__export-options{position:absolute;top:100%;left:0;margin-top:.25rem;background:#fff;border:1px solid #e2e4ea;border-radius:.5rem;box-shadow:0 4px 12px #00000014;display:flex;flex-direction:column;min-width:220px;overflow:hidden;z-index:10}.chart-builder__export-options button{text-align:left;padding:.55rem .85rem;border:none;background:none;cursor:pointer;font-size:.9rem}.chart-builder__export-options button:hover{background:#f4f4f8}.chart-builder__detail-group h3{font-size:.85rem;color:#5c5c70;margin:0 0 .4rem}.chart-builder__selection-style{border:1px solid #eef0f4;border-radius:.5rem;padding:.85rem;margin-bottom:1rem;background:#f7f7fb;display:flex;flex-direction:column;gap:.75rem}.chart-builder__swatch{width:1.5rem;height:1.5rem;border-radius:999px;border:2px solid #fff;box-shadow:0 0 0 1px #d7d9e0;cursor:pointer;padding:0}.chart-builder__swatch--selected{box-shadow:0 0 0 2px #5646c9}.chart-builder__shape-picker{display:flex;flex-wrap:wrap;gap:.4rem}.chart-builder__shape-swatch{width:2.25rem;height:2.25rem;display:flex;align-items:center;justify-content:center;border-radius:.5rem;border:1px solid #d7d9e0;background:#fff;cursor:pointer;padding:0}.chart-builder__shape-swatch--selected{border-color:#5646c9;box-shadow:0 0 0 1px #5646c9;background:#f4f2ff}.chart-builder__style-groups{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}.chart-builder__style-group-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;border:1px solid #e2e4ea;border-radius:.5rem;background:#fff;font-size:.85rem}.chart-builder__style-group-label{display:flex;align-items:center;gap:.5rem}.chart-builder__legend{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:.75rem;font-size:.8rem;color:#5c5c70}.chart-builder__legend-item{display:flex;align-items:center;gap:.35rem}.chart-builder__hex-input{width:6.5rem;font:inherit;font-size:.85rem;padding:.3rem .5rem;border-radius:.5rem;border:1px solid #d7d9e0}.chart-builder__color-field{display:flex;align-items:center;gap:.5rem}.chart-builder__color-swatch-input{width:2.25rem;height:2.25rem;padding:0;border:1px solid #d7d9e0;border-radius:.5rem;background:none;cursor:pointer}.chart-builder__color-swatch-input::-webkit-color-swatch-wrapper{padding:.15rem}.chart-builder__color-swatch-input::-webkit-color-swatch{border:none;border-radius:.35rem}.chart-builder__threshold-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}.chart-builder__threshold-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;border:1px solid #e2e4ea;border-radius:.5rem;background:#fff;font-size:.85rem}.chart-builder__threshold-row-actions{display:flex;gap:.4rem}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin:1.25rem 0}.stat-card{background:#fff;border:1px solid #e2e4ea;border-radius:.75rem;padding:1.1rem;display:flex;flex-direction:column;gap:.25rem}.stat-card__value{font-size:1.6rem;font-weight:700;color:#1a1a2e}.stat-card__label{font-size:.85rem;color:#5c5c70}.overview-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.panel{background:#fff;border:1px solid #e2e4ea;border-radius:.75rem;padding:1.1rem}.panel h2{font-size:1rem;margin-bottom:.75rem}.panel--wide{grid-column:1 / -1}.empty-state{color:#5c5c70;font-size:.9rem}.badge{font-size:.75rem;padding:.2rem .5rem;border-radius:999px;background:#f0f2f5;color:#444}.badge--shared{background:#e3f4ea;color:#1c8a4b;margin-left:.5rem}.project-status-list,.recent-uploads-list{display:flex;flex-direction:column;gap:.9rem}.project-status-row__header{display:flex;justify-content:space-between;align-items:center;font-size:.9rem}.project-status-row__meta{font-size:.8rem;color:#5c5c70}.recent-uploads-row{display:flex;flex-direction:column;gap:.2rem;padding-bottom:.6rem;border-bottom:1px solid #f0f2f5}.recent-uploads-row:last-child{border-bottom:none;padding-bottom:0}.recent-uploads-row__title{font-weight:600;font-size:.9rem}.recent-uploads-row__meta{font-size:.8rem;color:#5c5c70}.team-activity-table{border-collapse:collapse;width:100%;font-size:.9rem}.team-activity-table th,.team-activity-table td{padding:.5rem .75rem;border-bottom:1px solid #e2e4ea;text-align:left}.team-activity-table th{background:#f7f7fb;font-weight:600}.selected-genes{flex:0 0 380px;max-height:720px;display:flex;flex-direction:column;gap:.6rem}.selected-genes__headline{margin:0;font-weight:600}.selected-genes__note{margin:0;font-size:.85rem;color:#5b6172}.selected-genes__controls{display:flex;flex-wrap:wrap;gap:.5rem}.selected-genes__search{flex:1 1 140px;min-width:0;padding:.4rem .6rem;border:1px solid #d5d8e0;border-radius:6px}.selected-genes__table-wrap{overflow:auto;min-height:0;border:1px solid #e2e4ea;border-radius:6px}.selected-genes__table{width:100%;border-collapse:collapse;font-size:.85rem}.selected-genes__table th,.selected-genes__table td{padding:.35rem .5rem;text-align:left;border-bottom:1px solid #eef0f4;white-space:nowrap}.selected-genes__table thead th{position:sticky;top:0;background:#f6f7fa;z-index:1}.selected-genes__sort{all:unset;cursor:pointer;font-weight:600}.selected-genes__sort:focus-visible{outline:2px solid #2563eb}.selected-genes__row{cursor:pointer}.selected-genes__row:hover{background:#f3f6ff}.selected-genes__row--active{background:#ffeaf1}.selected-genes__status--mapped{color:#15803d}.selected-genes__status--unmapped,.selected-genes__status--ambiguous{color:#b45309}.selected-genes__status--pending{color:#6b7280}.selected-genes__unmapped-list{margin:.4rem 0 0;padding-left:1.1rem;max-height:120px;overflow:auto;font-size:.85rem}.selected-genes__compare{display:flex;flex-direction:column;gap:.3rem}.region-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:.5rem}.region-toolbar__hint{font-size:.85rem;color:#5b6172}.region-toolbar .btn-secondary[aria-pressed=true]{background:#dbeafe;border-color:#2563eb}@media (max-width: 720px){.selected-genes{flex-basis:auto;max-height:none}}.reference-dialog{width:min(720px,94vw);max-height:88vh;overflow:auto;display:flex;flex-direction:column;gap:.75rem}.reference-dialog__intro{margin:0;color:#5b6172}.reference-dialog__section{border:1px solid #e2e4ea;border-radius:8px;padding:.6rem .8rem;display:flex;flex-direction:column;gap:.4rem}.reference-dialog__section legend{font-weight:600;padding:0 .3rem}.reference-dialog__summary{margin:0;font-weight:600}.reference-dialog__warning{margin:0;padding:.5rem .7rem;background:#fef3c7;border:1px solid #f59e0b;border-radius:6px}.reference-dialog__blockers{margin:0;padding-left:1.1rem;color:#b45309;font-size:.9rem}.reference-dialog__advanced{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.6rem}.reference-dialog__advanced label{display:flex;flex-direction:column;gap:.2rem;font-size:.85rem}.reference-dialog__result{padding:.5rem .7rem;background:#ecfdf5;border:1px solid #10b981;border-radius:6px}.reference-source{border-bottom:1px solid #eef0f4;padding:.35rem 0}.reference-source--disabled{opacity:.6}.reference-source__head{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.reference-source__name{font-weight:600}.reference-source__meta{font-size:.8rem;color:#5b6172}.reference-source__badge{font-size:.72rem;padding:.05rem .4rem;border-radius:999px;background:#eef0f4}.reference-source__badge--on{background:#dcfce7;color:#166534}.reference-source__badge--off{background:#fee2e2;color:#991b1b}.reference-source__reason{margin:.2rem 0 0 1.6rem;font-size:.85rem;color:#b45309}.reference-source__body{margin:.4rem 0 0 1.6rem;display:flex;flex-direction:column;gap:.4rem}.reference-source__version{display:flex;flex-direction:column;gap:.2rem;font-size:.85rem;max-width:380px}.reference-source__collections{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:.25rem .75rem}.reference-source__collection{display:flex;align-items:center;gap:.4rem;font-size:.9rem}.chart-tabs{display:flex;gap:.25rem;border-bottom:1px solid #e2e4ea;margin-bottom:.6rem}.chart-tabs__tab{all:unset;cursor:pointer;padding:.45rem .9rem;border:1px solid transparent;border-bottom:none;border-radius:6px 6px 0 0;font-size:.9rem}.chart-tabs__tab[aria-selected=true]{background:#fff;border-color:#e2e4ea;font-weight:600;position:relative;top:1px}.chart-tabs__tab:focus-visible{outline:2px solid #2563eb}.enrichment-chart{display:flex;flex-direction:column;gap:.6rem}.enrichment-chart__breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;font-size:.9rem;color:#374151}.enrichment-chart__controls{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.enrichment-chart__views{display:flex;gap:.25rem}.enrichment-chart__views .btn-secondary[aria-pressed=true]{background:#dbeafe;border-color:#2563eb}.enrichment-chart__topn{display:flex;align-items:center;gap:.4rem;font-size:.85rem}.enrichment-chart__topn input{width:4.5rem}.enrichment-chart__focus{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.5rem .7rem;background:#fff1f5;border:1px solid #ff5c8a;border-radius:6px;font-size:.9rem}.enrichment-chart__plot{overflow-x:auto}.enrichment-chart__table td{vertical-align:top}.enrichment-chart__footer{border-top:1px solid #eef0f4;padding-top:.4rem}.reference-dialog__gsea{display:flex;flex-direction:column;gap:.4rem;margin:.2rem 0 .2rem 1.6rem}.reference-dialog__progress{position:relative;height:1.6rem;border:1px solid #d5d8e0;border-radius:6px;overflow:hidden;background:#f6f7fa}.reference-dialog__progress-bar{position:absolute;inset:0 auto 0 0;background:#bfdbfe;transition:width .4s ease}.reference-dialog__progress span{position:relative;z-index:1;display:block;padding:.2rem .6rem;font-size:.85rem}.enrichment-chart__pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.enrichment-chart__pair-panel h3{margin:0 0 .3rem;font-size:.95rem}@media (max-width: 1100px){.enrichment-chart__pair{grid-template-columns:1fr}}
