.roadmap-page{max-width:1600px;margin:0 auto;padding:1.5rem}.roadmap-page__header{flex-direction:column;gap:1rem;margin-bottom:1.25rem;display:flex}.roadmap-page__title{color:var(--color-text-primary);margin:0 0 .25rem;font-size:1.5rem;font-weight:600}.roadmap-page__desc{color:var(--color-text-secondary);margin:0;font-size:.875rem}.roadmap-toolbar{flex-wrap:wrap;align-items:end;gap:.75rem;display:flex}.roadmap-toolbar__field{color:var(--color-text-secondary);flex-direction:column;gap:.25rem;font-size:.75rem;display:flex}.roadmap-toolbar__field select,.roadmap-toolbar__field input{background:var(--color-surface);color:var(--color-text-primary);border:1px solid var(--color-border);border-radius:4px;padding:4px 8px;font-size:.8125rem}.roadmap-toolbar__year{width:90px}.roadmap-toolbar__export{background:var(--color-primary);color:#fff;cursor:pointer;border:none;border-radius:4px;margin-left:auto;padding:6px 12px;font-size:.8125rem}.roadmap-toolbar__export:hover{background:var(--color-primary-dark)}.roadmap-body{align-items:flex-start;gap:1rem;display:flex}.roadmap-grid-wrap{border:1px solid var(--color-border);background:var(--color-surface);border-radius:8px;flex:1;padding:4px;overflow:auto}.roadmap-grid{display:block}.roadmap-col-header{fill:var(--color-surface-alt);stroke:var(--color-border);stroke-width:1px}.roadmap-col-header__label{fill:var(--color-text-primary);font-size:12px;font-weight:600}.roadmap-row__bg{fill:var(--color-surface)}.roadmap-row__bg.even{fill:var(--color-surface-alt)}.roadmap-row__label{fill:var(--color-text-primary);font-size:12px}.roadmap-col-divider{stroke:var(--color-border);stroke-width:.5px;stroke-dasharray:2 3}.roadmap-bar{cursor:pointer}.roadmap-bar__rect{transition:filter .15s}.roadmap-bar:hover .roadmap-bar__rect{filter:brightness(1.15)}.roadmap-bar__label{fill:#fff;pointer-events:none;font-size:11px;font-weight:500}.roadmap-empty{text-align:center;color:var(--color-text-secondary);padding:3rem 1rem}.roadmap-empty__title{margin:0 0 .5rem;font-size:1.125rem;font-weight:600}.roadmap-empty__hint{margin:0;font-size:.875rem}.roadmap-side-panel{background:var(--color-surface);border:1px solid var(--color-border);width:320px;box-shadow:var(--shadow-sm);border-radius:8px;flex-shrink:0;padding:1rem}.roadmap-side-panel__header{justify-content:space-between;align-items:center;margin-bottom:.75rem;display:flex}.roadmap-side-panel__header h2{color:var(--color-text-primary);margin:0;font-size:1rem}.roadmap-side-panel__close{color:var(--color-text-secondary);cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:1rem}.roadmap-side-panel__close:hover{color:var(--color-text-primary)}.roadmap-side-panel__meta{grid-template-columns:auto 1fr;gap:.25rem .75rem;margin:0 0 1rem;font-size:.8125rem;display:grid}.roadmap-side-panel__meta dt{color:var(--color-text-secondary)}.roadmap-side-panel__meta dd{color:var(--color-text-primary);margin:0}.roadmap-side-panel__subtitle{color:var(--color-text-secondary);text-transform:uppercase;margin:.5rem 0;font-size:.8125rem;font-weight:600}.roadmap-side-panel__empty{color:var(--color-text-secondary);font-size:.8125rem}.roadmap-side-panel__tasks{max-height:40vh;margin:0;padding:0;list-style:none;overflow-y:auto}.roadmap-side-panel__tasks li{margin-bottom:.25rem}.roadmap-side-panel__task-btn{width:100%;color:var(--color-text-primary);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;align-items:center;gap:.5rem;padding:6px 8px;font-size:.8125rem;display:flex}.roadmap-side-panel__task-btn:hover{background:var(--color-hover);border-color:var(--color-border)}.roadmap-task-status{background:var(--color-border);border-radius:50%;flex-shrink:0;width:8px;height:8px}.roadmap-task-status--done{background:#22c55e}.roadmap-task-status--in-progress{background:#3b82f6}.roadmap-task-status--blocked{background:#ef4444}
