:root{--bg:#fbfaf7;--panel:#fff;--text:#1d2736;--muted:#6d7888;--line:#e6dfd2;--line-strong:#ddd4c5;--accent:#c8ad7f;--accent-text:#7d6640;--brand:#1c7385;--brand-soft:#edf6f8;--status-bg:#efefed}*{box-sizing:border-box}html,body{min-height:100%}body{background:var(--bg);color:var(--text);margin:0;font-family:Instrument Sans,Segoe UI,sans-serif}button,input,label{font:inherit}a{color:inherit}.page-shell{min-height:100vh}.workspace-shell{grid-template-columns:294px minmax(0,1fr);min-height:100vh;display:grid}.side-nav{border-right:1px solid var(--line);background:#fffdfa;grid-template-rows:auto auto 1fr auto;gap:18px;padding:28px 26px;display:grid}.section-label{color:var(--brand);letter-spacing:.18em;text-transform:uppercase;margin:0 0 10px;font-size:.72rem;font-weight:700}.brand-block h1,.stage-heading h2,.topbar h2{letter-spacing:-.04em;margin:0}.brand-block h1{font-size:1.15rem;font-weight:700}.nav-meta{color:var(--muted);gap:10px;font-size:.8rem;display:flex}.steps-nav{align-content:start;gap:4px;display:grid}.entity-side-list{border-top:1px solid var(--line);align-content:start;gap:6px;padding-top:10px;display:grid}.workspace-inner-shell{grid-template-columns:260px minmax(0,1fr);gap:20px;min-width:0;display:grid}.results-side-nav{border-right:1px solid var(--line);align-content:start;gap:14px;padding-right:16px;display:grid}.results-main{align-content:start;gap:12px;min-width:0;display:grid}.entity-side-item{appearance:none;border:1px solid var(--line);color:var(--text);text-align:left;cursor:pointer;background:#fff;padding:10px 12px}.entity-side-item.active{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.step-item{appearance:none;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-left:2px solid #0000;grid-template-columns:28px minmax(0,1fr);align-items:center;gap:12px;padding:10px 12px;display:grid}.step-item.active{border-left-color:var(--brand);background:#f7f3ec}.utility-item{border-top:1px solid var(--line);margin-top:10px;padding-top:14px}.step-index{width:28px;height:28px;color:var(--muted);background:#f1efea;place-items:center;font-size:.84rem;font-weight:700;display:grid}.step-index.complete{color:#1d6a4d;background:#eaf4ef}.step-main{justify-content:space-between;align-items:center;gap:10px;min-width:0;display:flex}.step-copy{gap:2px;min-width:0;display:grid}.step-copy strong{font-size:.88rem;font-weight:600;line-height:1.15}.step-copy small{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:.76rem;overflow:hidden}.status-badge{color:var(--muted);background:var(--status-bg);flex-shrink:0;padding:4px 8px;font-size:.72rem}.status-badge.ready{color:#1d6a4d;background:#eaf4ef}.status-badge.warning{color:#9a5d02;background:#fff3e3}.status-badge.error{color:#b42318;background:#fdeceb}.side-footer{align-self:end;padding-top:8px}.bulk-upload-link,.upload-zone,.primary-button,.ghost-button{border:1px solid var(--line-strong);min-height:42px;color:var(--text);cursor:pointer;background:#fffdfa;justify-content:center;align-items:center;padding:10px 14px;text-decoration:none;display:inline-flex;position:relative}.bulk-upload-link{width:100%}.primary-button{border-color:var(--brand);background:var(--brand);color:#fff}.ghost-button:disabled,.primary-button:disabled{opacity:.45;cursor:not-allowed}.file-input{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.stage-area{min-width:0;padding:24px 34px 40px}.stage-card{gap:22px;display:grid}.topbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:16px;padding-bottom:22px;display:flex}.topbar h2{font-size:1.05rem;font-weight:600}.topbar p,.section-copy,.meta-row,.empty-preview span,td{color:var(--muted)}.topbar p{margin:8px 0 0;font-size:.92rem}.admin-pill{border:1px solid var(--line);background:#fffdfa;padding:10px 18px;font-size:.9rem}.step-switcher{flex-wrap:wrap;gap:10px;display:flex}.step-tab{appearance:none;border:1px solid var(--line);color:var(--muted);cursor:pointer;background:#fffdfa;align-items:center;gap:8px;padding:9px 14px;display:inline-flex}.step-tab-index{width:20px;height:20px;color:var(--brand);background:var(--brand-soft);place-items:center;font-size:.72rem;font-weight:700;display:inline-grid}.step-tab.active{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.step-tab:disabled{opacity:.5;cursor:not-allowed}.success-banner{color:#1d6a4d;background:#eaf4ef;border:1px solid #cfe5d8;padding:10px 14px;font-size:.86rem}.stage-heading{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.stage-heading h2{font-size:1.6rem;font-weight:700}.stage-heading .section-copy{max-width:760px;margin:10px 0 0;font-size:.95rem;line-height:1.5}.schema-block,.preview-shell{gap:12px;display:grid}.settings-head h3,.preview-head h3,.empty-preview p{font-size:.98rem;font-weight:700}.upload-zone{background:#fcfefe;border-style:dashed;border-color:#cfe0e4;min-height:132px}.upload-zone-copy{text-align:center;gap:6px;display:grid}.upload-zone-copy strong{font-size:1rem}.dataset-list,.warning-stack{gap:10px;display:grid}.dataset-row{border:1px solid var(--line);background:#fff;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.dataset-row.compact{padding:10px 14px}.dataset-copy{gap:4px;min-width:0;display:grid}.dataset-copy strong{font-size:.92rem}.dataset-copy span,.dataset-file,.helper-copy{color:var(--muted);font-size:.82rem}.uploadable{cursor:pointer;position:relative;overflow:hidden}.dataset-meta{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.inline-button{min-height:34px;padding:7px 12px}.warning-box{color:#9a5d02;background:#fff3e3;border:1px solid #f1dcc1;padding:12px 14px;font-size:.86rem}.settings-section{border:1px solid var(--line);background:#fff;gap:16px;padding:18px;display:grid}.status-panel{border:1px solid var(--line);background:#fffdfa;gap:14px;padding:14px;display:grid}.status-panel-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.status-meta-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;display:grid}.status-meta-card{border:1px solid var(--line);background:#fff;gap:6px;padding:12px;display:grid}.status-meta-card span{color:var(--muted);font-size:.78rem}.status-meta-card strong{font-size:.88rem;font-weight:600}.settings-head h3{margin:0}.settings-grid{grid-template-columns:repeat(3,max-content);align-items:end;gap:14px;display:grid}.field-compact{width:min(260px,100%)}.field-medium{width:min(220px,100%)}.break-list{justify-content:start;gap:6px;display:grid}.field,.field-stack{gap:8px;display:grid}.field span,.field-label{color:#5b6676;font-size:.8rem;font-weight:500}.field input,.field select{border:1px solid var(--line-strong);width:100%;min-height:42px;color:var(--text);background:#fff;padding:10px 12px}.field select{appearance:none}.day-toggle-row{flex-wrap:wrap;gap:8px;display:flex}.day-toggle{appearance:none;border:1px solid var(--line-strong);color:var(--muted);cursor:pointer;background:#fff;padding:9px 12px}.day-toggle.active{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}.break-section-head{align-items:flex-start;gap:16px;display:flex}.break-section-head .section-copy{margin:6px 0 0}.break-row-compact{grid-template-columns:max-content 170px max-content 170px max-content;justify-content:start;align-items:center;gap:8px;width:fit-content;max-width:100%;padding:4px 0;display:inline-grid}.break-badge{color:var(--brand);background:var(--brand-soft);align-self:center;padding:5px 10px;font-size:.78rem;font-weight:600}.break-time-field{gap:0;width:100%}.break-separator{color:var(--muted);align-self:center;font-size:.8rem;font-weight:500}.break-remove-button{justify-self:start}.break-add-button{justify-self:start;margin-top:2px}.icon-action{border:1px solid var(--line-strong);width:32px;height:32px;color:var(--text);cursor:pointer;background:#fff;place-items:center;padding:0;font-size:1rem;line-height:1;display:inline-grid}.break-empty-state{border:1px dashed var(--line-strong);background:#fffdfa;gap:4px;padding:16px;display:grid}.break-empty-state strong{font-size:.92rem;font-weight:600}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.preview-shell,.empty-preview{border:1px solid var(--line);background:#fff}.preview-shell{padding:0}.preview-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:18px 18px 0;display:flex}.preview-head h3{margin:0}.meta-row{gap:14px;font-size:.84rem;display:flex}.table-wrap{overflow-x:auto}.results-controls{align-content:start;gap:10px;display:grid}.toolbar-row{justify-content:flex-start;align-items:flex-start;gap:12px;display:flex}.search-shell{width:min(360px,100%)}.search-shell input{border:1px solid var(--line-strong);background:#fff;width:100%;min-height:44px;padding:10px 14px}.entity-subtabs{flex-wrap:wrap;gap:8px;display:flex}.entity-subtab{appearance:none;border:1px solid var(--line);color:var(--muted);cursor:pointer;background:#fff;padding:9px 12px}.entity-subtab.active{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}table{border-collapse:separate;border-spacing:0;width:100%;min-width:760px}.timetable-grid{width:max-content;min-width:100%}.timetable-grid th,.timetable-grid td{box-sizing:border-box}.timetable-grid .slot-column{width:340px;min-width:340px}.timetable-grid .day-column{z-index:3;background:#fffdfa;width:164px;min-width:164px;position:sticky;left:0}.timetable-grid tbody .day-column{z-index:2;background:#fff}.timetable-grid .day-column:after{content:"";background:#e1d6c1;width:2px;height:100%;position:absolute;top:0;right:-2px}.break-row-cell{background:#faf7f1}.cell-stack{gap:8px;display:grid}.class-pill,.break-pill{border:1px solid var(--line);background:#fff;align-items:center;padding:7px 10px;font-size:.8rem;line-height:1.4;display:inline-flex}.break-pill{color:var(--accent-text);background:#fbf5e8;border-color:#eadcc1}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;border-right:1px solid #0000;padding:14px 18px;font-size:.88rem;position:relative}th{color:#5b6676;background:#fffdfa;font-size:.82rem;font-weight:600}.timetable-grid tr>:last-child{border-right-color:#0000}tbody tr:last-child td{border-bottom:0}.empty-preview{text-align:center;place-items:center;min-height:148px;padding:20px;display:grid}.empty-preview p{margin:0 0 8px}.stage-actions{justify-content:space-between;align-items:center;gap:12px;padding-top:6px;display:flex}.service-map,.manual-record-list,.validation-column{gap:12px;display:grid}.service-card,.validation-card,.manual-record-card,.integration-card{border:1px solid var(--line);background:#fff;gap:8px;padding:14px;display:grid}.service-head,.manual-record-head,.manual-editor-head,.ingestion-head,.integration-actions{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.service-code{width:34px;height:34px;color:var(--brand);background:var(--brand-soft);place-items:center;font-size:.78rem;font-weight:700;display:inline-grid}.service-card strong,.validation-card strong,.manual-editor-head strong,.ingestion-head h3{margin:0;font-size:.98rem}.service-card span,.validation-card span,.manual-editor-head span,.ingestion-head .section-copy{color:var(--muted);font-size:.84rem}.source-overview-grid,.integration-grid,.validation-grid,.export-grid{gap:12px;display:grid}.source-overview-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.integration-grid,.validation-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.export-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.manual-entry-shell{grid-template-columns:240px minmax(0,1fr);gap:16px;display:grid}.manual-dataset-nav{align-content:start;gap:8px;display:grid}.manual-dataset-tab{appearance:none;border:1px solid var(--line);text-align:left;cursor:pointer;background:#fffdfa;gap:2px;padding:12px;display:grid}.manual-dataset-tab.active{border-color:var(--brand);background:var(--brand-soft)}.manual-dataset-tab small{color:var(--muted);font-size:.78rem}.manual-editor{gap:14px;display:grid}.manual-fields-grid,.chip-grid{gap:12px;display:grid}.manual-fields-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.chip-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.validation-column{align-content:start;gap:12px;display:grid}.validation-bar{flex-wrap:wrap;gap:16px;margin-bottom:20px;display:flex}.validation-bar-item{border:1px solid var(--line);background:#fff;flex:1;align-items:center;gap:12px;min-width:260px;padding:12px 16px;display:flex}.validation-bar-copy{gap:2px;display:grid}.validation-bar-copy strong{font-size:.88rem;font-weight:600}.validation-bar-copy span{color:var(--muted);font-size:.78rem}.rules-layout{grid-template-columns:1fr 1fr;gap:32px;display:grid}.rules-column{align-content:start;gap:16px;display:grid}.constraints-grid-vertical{gap:10px;display:grid}.rules-column h3{color:var(--text);margin:0;font-size:1rem;font-weight:700}.constraints-section{gap:12px;display:grid}.section-label-alt{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;margin:0;font-size:.72rem;font-weight:700}.mt-8{margin-top:24px}.constraints-grid,.constraints-grid-compact{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;display:grid}.constraint-button{appearance:none;border:1px solid var(--line);color:var(--muted);text-align:left;cursor:pointer;background:#fff;gap:6px;width:100%;padding:14px;transition:all .2s;display:grid}.constraint-button:hover{border-color:var(--brand);background:#fbf9f5}.constraint-button.active{border-color:var(--brand);background:var(--brand-soft);color:var(--brand);box-shadow:0 0 0 1px var(--brand)}.constraint-button strong,.constraint-badge-fixed strong{font-size:.88rem;font-weight:600;display:block}.constraint-button p,.constraint-badge-fixed p{margin:0;font-size:.78rem;line-height:1.4}.constraint-badge-fixed{color:#1d6a4d;background:#f4faf7;border:1px solid #cfe5d8;gap:4px;width:100%;padding:12px 14px;display:grid}.constraint-badge-fixed strong{color:#114e38}.constraint-badge-fixed p{opacity:.85}@media (max-width:980px){.manual-entry-shell,.integration-grid,.validation-grid,.source-overview-grid,.export-grid,.manual-fields-grid,.workspace-shell,.workspace-inner-shell{grid-template-columns:1fr}.results-side-nav{border-right:0;border-bottom:1px solid var(--line);padding-bottom:14px;padding-right:0}.side-nav{border-right:0;border-bottom:1px solid var(--line)}.stage-area{padding:20px 16px 28px}.topbar,.stage-heading,.stage-actions,.toolbar-row,.break-section-head{flex-direction:column;align-items:flex-start}.tab-row{width:100%;overflow-x:auto}.settings-grid,.break-row-compact,.status-meta-grid{grid-template-columns:1fr}.field-compact,.field-medium{width:100%}}.modal-backdrop{background:#12192638;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.preview-modal{border:1px solid var(--line);background:#fff;gap:16px;width:min(980px,100%);max-height:min(78vh,760px);padding:20px;display:grid;overflow:hidden}.preview-modal-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.preview-modal-head h3{margin:0;font-size:1rem}.uploads-stack{margin-top:12px}.upload-result{border:1px solid var(--line);background:#fff;padding:14px}@media (max-width:980px){.workspace-shell,.workspace-inner-shell{grid-template-columns:1fr}.results-side-nav{border-right:0;border-bottom:1px solid var(--line);padding-bottom:14px;padding-right:0}.side-nav{border-right:0;border-bottom:1px solid var(--line)}.stage-area{padding:20px 16px 28px}.topbar,.stage-heading,.stage-actions,.toolbar-row,.break-section-head{flex-direction:column;align-items:flex-start}.tab-row{width:100%;overflow-x:auto}.settings-grid,.break-row-compact,.status-meta-grid{grid-template-columns:1fr}.field-compact,.field-medium{width:100%}}
