:root{color-scheme:light;--ink: #14152b;--bg: #f2f1ea;--panel-bg: #ffffff;--border: var(--ink);--text: var(--ink);--text-muted: #55566f;--blue: #3b5fe0;--blue-ink: #1f3aa8;--blue-tint: #e3ebff;--purple: #7c3aed;--purple-ink: #5b21b6;--purple-tint: #ece3ff;--pink: #ec4899;--pink-ink: #be185d;--pink-tint: #ffe3f1;--accent: var(--blue);--accent-hover: var(--blue-ink);--danger: #ad0f34;--danger-bg: #ffd0da;--ok-bg: #cdf7dc;--ok-text: #0b7a3d;--full-bg: #ffd0da;--full-text: #ad0f34;--at-risk-bg: #ffe9a8;--at-risk-text: #785400;--shadow-sm: 3px 3px 0 var(--ink);--shadow: 4px 4px 0 var(--ink);--shadow-lg: 6px 6px 0 var(--ink);--radius: 0px;--font: "Space Mono", "SFMono-Regular", Menlo, Consolas, monospace;font-family:var(--font)}*{box-sizing:border-box}body{margin:0;padding:0;color:var(--text);background-color:var(--bg);background-image:radial-gradient(rgba(20,21,43,.14) 1.5px,transparent 1.5px);background-size:22px 22px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{background:var(--pink);color:#fff}#app{max-width:1100px;margin:0 auto;padding:2.5rem 1.5rem 4rem}.app-header{margin-bottom:2.25rem}.logo-mark{width:2.75rem;height:2.75rem;margin-bottom:.6rem;padding:3px;background:#fff;border:3px solid var(--ink);box-shadow:var(--shadow-sm)}.logo-mark svg{width:100%;height:100%;display:block}.logo-mark circle{fill:var(--blue);stroke:var(--ink);stroke-width:3}.logo-mark ellipse{fill:none;stroke:var(--pink);stroke-width:4}.app-header h1{font-family:var(--font);font-weight:700;font-size:1.9rem;text-transform:uppercase;letter-spacing:-.01em;margin:0 0 .5rem;color:var(--ink)}.subtitle{color:var(--text-muted);margin:0;font-size:.88rem}.app-header:after{content:"";display:block;height:8px;margin-top:1.25rem;border:3px solid var(--ink);background:linear-gradient(to right,var(--blue) 0 33.33%,var(--purple) 33.33% 66.66%,var(--pink) 66.66% 100%)}.app-nav{margin-top:1rem;display:flex;gap:.65rem;flex-wrap:wrap}.app-nav a{font-family:var(--font);font-weight:700;font-size:.78rem;text-transform:uppercase;letter-spacing:.02em;text-decoration:none;color:var(--ink);background:#fff;border:3px solid var(--ink);padding:.5rem 1rem;box-shadow:var(--shadow-sm);display:inline-block;transition:transform .1s ease,box-shadow .1s ease,background .1s ease,color .1s ease}.app-nav a:hover{background:var(--blue);color:#fff;transform:translate(-2px,-2px);box-shadow:var(--shadow);text-decoration:none}.app-nav a:active{transform:translate(0);box-shadow:none}.app-nav .tutorial-trigger{font:inherit;font-family:var(--font);font-weight:700;font-size:.78rem;text-transform:uppercase;letter-spacing:.02em;color:#fff;background:var(--pink);border:3px solid var(--ink);padding:.5rem 1rem;box-shadow:var(--shadow-sm);cursor:pointer;transition:transform .1s ease,box-shadow .1s ease}.app-nav .tutorial-trigger:hover{transform:translate(-2px,-2px);box-shadow:var(--shadow)}.app-nav .tutorial-trigger:active{transform:translate(0);box-shadow:none}.panel{background:var(--panel-bg);border:3px solid var(--ink);border-radius:var(--radius);padding:1.6rem 1.75rem;margin-bottom:1.75rem;box-shadow:var(--shadow-lg)}.panel h2{margin:0 0 1.1rem;padding-bottom:.6rem;border-bottom:3px solid var(--ink);font-family:var(--font);font-weight:700;font-size:1.05rem;text-transform:uppercase;letter-spacing:.02em;color:var(--ink);display:flex;align-items:center;gap:.55rem}.panel h2:before{content:"";width:.8rem;height:.8rem;background:var(--purple);border:2px solid var(--ink);flex-shrink:0}.course-form .form-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem 1.25rem;margin-bottom:1rem}.course-form label{display:flex;flex-direction:column;gap:.35rem;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted)}.course-form label.span-2{grid-column:span 2}.course-form input{font:inherit;font-family:var(--font);font-weight:700;color:var(--ink);padding:.5rem .65rem;border:3px solid var(--border);border-radius:var(--radius);background:#fff}.course-form input:focus{outline:3px solid var(--pink);outline-offset:2px}.btn-primary{font:inherit;font-family:var(--font);font-weight:700;text-transform:uppercase;letter-spacing:.02em;background:var(--blue);color:#fff;border:3px solid var(--ink);border-radius:var(--radius);padding:.6rem 1.4rem;cursor:pointer;box-shadow:var(--shadow);transition:transform .1s ease,box-shadow .1s ease}.btn-primary:hover{transform:translate(-2px,-2px);box-shadow:var(--shadow-lg)}.btn-primary:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}.error-message{background:var(--danger-bg);color:var(--ink);border:3px solid var(--danger);border-radius:var(--radius);padding:.6rem .85rem;font-size:.82rem;font-weight:700;margin-bottom:1rem}.note-message{background:var(--at-risk-bg);color:var(--ink);border:3px solid var(--at-risk-text);border-radius:var(--radius);padding:.6rem .85rem;font-size:.82rem;font-weight:700;margin-bottom:1rem}.hint{color:var(--text-muted);font-size:.8rem;margin:0 0 .9rem}.hint code{font-family:var(--font);background:var(--blue);color:#fff;border:2px solid var(--ink);padding:.12rem .4rem;font-size:.74rem;font-weight:700}#csv-file-input{font:inherit}.sample-loader{display:flex;align-items:center;gap:.75rem;margin-top:.9rem;flex-wrap:wrap}.sample-loader .hint{margin:0}.sample-buttons{display:flex;gap:.5rem;flex-wrap:wrap}.btn-secondary{font:inherit;font-family:var(--font);font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.02em;color:var(--purple-ink);background:#fff;border:3px solid var(--ink);border-radius:var(--radius);padding:.4rem .9rem;cursor:pointer;box-shadow:var(--shadow-sm);transition:transform .1s ease,box-shadow .1s ease,background .1s ease,color .1s ease}.btn-secondary:hover{background:var(--purple);color:#fff;transform:translate(-1px,-1px);box-shadow:var(--shadow)}.btn-secondary:active{transform:translate(0);box-shadow:none}.btn-secondary:disabled{opacity:.4;cursor:not-allowed;transform:none;box-shadow:var(--shadow-sm);background:#fff;color:var(--purple-ink)}.btn-danger{font:inherit;font-family:var(--font);font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.02em;color:var(--danger);background:#fff;border:3px solid var(--ink);border-radius:var(--radius);padding:.4rem .9rem;cursor:pointer;box-shadow:var(--shadow-sm);transition:transform .1s ease,box-shadow .1s ease,background .1s ease,color .1s ease}.btn-danger:hover:not(:disabled){background:var(--danger);color:#fff;transform:translate(-1px,-1px);box-shadow:var(--shadow)}.btn-danger:active:not(:disabled){transform:translate(0);box-shadow:none}.btn-danger:disabled{color:var(--text-muted);background:#f1f1ea;border-color:var(--ink);cursor:not-allowed;box-shadow:none}.import-summary{margin-top:1rem;padding:.8rem 1.1rem;border:3px solid var(--ink);border-radius:var(--radius);background:var(--purple-tint);color:var(--ink);font-size:.85rem}.import-summary--error{background:var(--danger-bg);color:var(--ink);border-color:var(--danger)}.import-summary p{margin:0 0 .4rem}.import-errors{margin:0;padding-left:1.1rem;color:var(--danger);font-size:.8rem;max-height:200px;overflow-y:auto}.import-errors li{margin-bottom:.2rem}.panel-list-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:1.25rem}.panel-list-header h2{margin:0}.empty-state{color:var(--text-muted);text-align:center;padding:2.75rem 1rem;font-size:.9rem}.course-group{border:3px solid var(--ink);border-radius:var(--radius);margin-bottom:1.25rem;overflow:hidden;box-shadow:var(--shadow)}.course-group:last-child{margin-bottom:0}.course-group-header{display:flex;align-items:baseline;gap:.6rem;background:var(--blue);color:#fff;padding:.75rem 1.1rem;border-bottom:3px solid var(--ink)}.course-group-header h3{margin:0;font-family:var(--font);font-size:.98rem;font-weight:700;text-transform:uppercase;color:#fff}.course-group-name{color:#dfe6ff;font-size:.85rem}.course-group-count{margin-left:auto;color:#fff;font-size:.74rem;font-weight:700}.section-table{width:100%;border-collapse:collapse;font-size:.85rem}.section-table th,.section-table td{text-align:left;padding:.55rem 1.1rem;border-bottom:2px solid var(--ink);white-space:nowrap}.section-table th{color:var(--text-muted);font-weight:800;font-size:.72rem;text-transform:uppercase;letter-spacing:.03em}.section-table tbody tr:last-child td{border-bottom:none}.section-table tbody tr:hover{background:var(--purple-tint)}.badge{display:inline-flex;align-items:center;padding:.2rem .55rem;border:2px solid var(--ink);border-radius:var(--radius);font-size:.68rem;font-weight:800;letter-spacing:.02em;text-transform:uppercase}.badge-ok{background:var(--ok-bg);color:var(--ok-text)}.badge-full{background:var(--full-bg);color:var(--full-text)}.badge-at-risk{background:var(--at-risk-bg);color:var(--at-risk-text)}.delete-btn,.delete-course-btn{font:inherit;font-family:var(--font);font-size:.75rem;font-weight:700;text-transform:uppercase;color:var(--danger);background:#fff;border:2px solid var(--ink);border-radius:var(--radius);padding:.25rem .6rem;cursor:pointer;transition:background .1s ease,color .1s ease}.delete-btn:hover,.delete-course-btn:hover{background:var(--danger);color:#fff}@media (max-width: 900px){.course-form .form-grid{grid-template-columns:repeat(2,1fr)}.course-form label.span-2{grid-column:span 2}}@media (max-width: 560px){.course-form .form-grid{grid-template-columns:1fr}.course-form label.span-2{grid-column:span 1}.section-table{display:block;overflow-x:auto}}.course-checkbox-list{display:flex;flex-direction:column;gap:.5rem}.course-checkbox{display:flex;align-items:center;gap:.65rem;padding:.55rem .8rem;border:3px solid var(--ink);border-radius:var(--radius);font-size:.88rem;cursor:pointer;background:#fff;transition:background .1s ease}.course-checkbox:hover{background:var(--purple-tint)}.course-checkbox input{width:1rem;height:1rem;flex-shrink:0;accent-color:var(--purple)}.course-checkbox-code{font-family:var(--font);font-weight:700;min-width:6.5rem;color:var(--blue-ink)}.course-checkbox-name{color:var(--text-muted);flex:1}.course-checkbox-count{color:var(--text-muted);font-size:.76rem}.constraints-form .form-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem 1.25rem;margin-bottom:1rem}.constraints-form label{display:flex;flex-direction:column;gap:.35rem;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted)}.constraints-form label.checkbox-label{flex-direction:row;align-items:center;gap:.5rem;justify-content:flex-start}.constraints-form label.checkbox-label input{width:1rem;height:1rem;accent-color:var(--purple)}.constraints-form input[type=time],.constraints-form input[type=number]{font:inherit;font-family:var(--font);font-weight:700;color:var(--ink);padding:.5rem .65rem;border:3px solid var(--border);border-radius:var(--radius);background:#fff}.constraints-form input:focus{outline:3px solid var(--pink);outline-offset:2px}.results-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.75rem;margin-bottom:1rem}.results-nav{display:flex;align-items:center;gap:.75rem;font-size:.85rem;font-weight:700}.results-nav span{color:var(--text-muted);min-width:9rem;text-align:center}.btn-secondary:disabled{opacity:.4;cursor:not-allowed}.results-actions{display:flex;align-items:center;gap:.75rem}.save-confirm{color:var(--ok-text);font-size:.8rem;font-weight:700;text-transform:uppercase}.results-meta{display:flex;gap:1.25rem;flex-wrap:wrap;margin-bottom:1.25rem;font-size:.85rem;color:var(--text-muted)}.meta-item strong{color:var(--text)}#schedule-grid{overflow-x:auto}.schedule-grid-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:.78rem;background:#fff;border:3px solid var(--ink)}.schedule-grid-table th{background:#fff;border:2px solid var(--ink);padding:.5rem .4rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;color:var(--ink);font-weight:800}.schedule-grid-table thead th:not(.grid-time-col){background:var(--blue);color:#fff}.schedule-grid-table .grid-time-col{width:5.5rem;white-space:nowrap;font-size:.68rem;color:var(--text-muted);text-align:right;padding:.15rem .5rem;font-weight:700}.schedule-grid-table td.grid-slot{border:2px solid var(--ink);height:1.6rem;padding:0}.schedule-grid-table td.grid-slot--event{vertical-align:top;padding:2px}.grid-event{height:100%;width:100%;border:2px solid var(--ink);border-left-width:6px;border-left-style:solid;border-radius:var(--radius);padding:.3rem .4rem;overflow:hidden;box-shadow:2px 2px 0 var(--ink)}.grid-event-code{font-weight:700;font-size:.74rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.grid-event-time{font-size:.64rem;opacity:.85;white-space:nowrap}.grid-empty-state{color:var(--text-muted);text-align:center;padding:2.75rem 1rem;font-size:.9rem}@media (max-width: 900px){.constraints-form .form-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 560px){.constraints-form .form-grid{grid-template-columns:1fr}.schedule-grid-table{font-size:.68rem}}.saved-item{display:flex;align-items:center;gap:.75rem;padding:.6rem .85rem;border:3px solid var(--ink);border-radius:var(--radius);font-size:.88rem;background:#fff;transition:background .1s ease}.saved-item:hover{background:var(--purple-tint)}.saved-item--active{background:var(--blue-tint);box-shadow:var(--shadow-sm)}.saved-item-main{display:flex;align-items:center;gap:.65rem;flex:1;min-width:0;font:inherit;text-align:left;background:none;border:none;padding:0;cursor:pointer;color:inherit}.saved-item-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.results-header h2{margin:0;font-size:1.05rem;font-family:var(--font);font-weight:700;text-transform:uppercase}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#14152ba6;display:flex;align-items:center;justify-content:center;padding:1.5rem;z-index:100}.modal-backdrop[hidden]{display:none}.modal{background:#fff;border:3px solid var(--ink);box-shadow:var(--shadow-lg);max-width:32rem;width:100%;max-height:85vh;overflow-y:auto}.modal-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.1rem 1.4rem;border-bottom:3px solid var(--ink);background:var(--blue)}.modal-header h2{margin:0;font-family:var(--font);font-weight:700;font-size:1.02rem;text-transform:uppercase;letter-spacing:.02em;color:#fff}.modal-close{font-family:var(--font);font-weight:700;font-size:1.1rem;line-height:1;color:var(--ink);background:#fff;border:2px solid var(--ink);width:1.9rem;height:1.9rem;flex-shrink:0;cursor:pointer;display:flex;align-items:center;justify-content:center}.modal-close:hover{background:var(--pink);color:#fff}.modal-body{padding:1.4rem}.tutorial-step{display:flex;gap:.9rem;margin-bottom:1.1rem}.tutorial-step:last-of-type{margin-bottom:0}.tutorial-step-num{flex-shrink:0;width:1.8rem;height:1.8rem;border:2px solid var(--ink);color:#fff;font-weight:700;font-size:.85rem;display:flex;align-items:center;justify-content:center}.tutorial-step:nth-child(1) .tutorial-step-num{background:var(--blue)}.tutorial-step:nth-child(2) .tutorial-step-num{background:var(--purple)}.tutorial-step:nth-child(3) .tutorial-step-num{background:var(--pink)}.tutorial-step h3{margin:0 0 .3rem;font-family:var(--font);font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.01em;color:var(--ink)}.tutorial-step p{margin:0;font-size:.84rem;color:var(--text-muted);line-height:1.5}.modal-note{margin:1.1rem 0 0;padding:.6rem .75rem;border:2px solid var(--ink);background:var(--blue-tint);color:var(--ink);font-size:.78rem;line-height:1.5}.modal-footer{padding:1rem 1.4rem 1.4rem;display:flex;justify-content:flex-end}@media (max-width: 560px){.modal-header h2{font-size:.92rem}}.grid-event{-webkit-print-color-adjust:exact;print-color-adjust:exact}@media print{body{background-image:none}body *{visibility:hidden}#schedule-grid,#schedule-grid *{visibility:visible}#schedule-grid{position:absolute;top:0;left:0;width:100%}.schedule-grid-table td.grid-slot{border-color:#ccc}}
