:root{--ink:#16181d;--muted:#5d6270;--faint:#8a8f9c;--line:#e6e3dc;--grid:#eeece7;--canvas:#faf8f4;--card:#fff;--beige:#f5edde;--beige-deep:#e9dcc3;--bar:#141414;--gold:#be830e;--alert:#b3261e;--alert-wash:#fdeeec;--radius:12px;--hour:4.25rem;--lecture:#cfc8ec;--computer-lab:#7fd3f7;--tutorial:#aee6a8;--workshop:#ffbac6}body{color:var(--ink);background:var(--canvas);margin:0;font-family:Public Sans,system-ui,sans-serif;font-size:.95rem;line-height:1.5}.page{max-width:84rem;margin:0 auto;padding:.5rem 1rem 4rem}a{color:#0a58d6}button{font:inherit;cursor:pointer}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.empty{color:var(--muted)}.top-bar{background:var(--bar);color:#fff}.top-inner{justify-content:space-between;align-items:center;gap:1rem;max-width:84rem;min-height:3.25rem;margin:0 auto;padding:0 1rem;display:flex}.brand{letter-spacing:.02em;align-items:center;gap:.55rem;margin:0;font-weight:700;display:flex}.brand span:not(.mark){color:#d9d9d9;font-weight:400}.brand .mark{background:var(--gold);border-radius:2px;width:.7rem;height:1.3rem}.top-bar nav{gap:.25rem;display:flex}.top-bar nav a{color:#e8e8e8;border-radius:999px;padding:.4rem .8rem;font-size:.9rem;text-decoration:none}.top-bar nav a:hover,.top-bar nav a:focus-visible{color:#fff;background:#2e2e2e}.top-bar nav a[aria-current]{background:var(--beige);color:#000;font-weight:600}.prototype-note{box-sizing:border-box;max-width:84rem;color:var(--muted);margin:0 auto;padding:.6rem 1rem 0;font-size:.82rem}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 1px 2px #1414140a,0 4px 16px #14141408}.card-head{border-bottom:1px solid var(--line);padding:.85rem 1.1rem}.card-head h2{margin:0;font-size:1.02rem;font-weight:600}.card-body{padding:1rem 1.1rem 1.1rem}.btn{background:var(--beige);color:#000;border:1px solid var(--beige-deep);border-radius:8px;padding:.4rem .9rem;font-weight:500;transition:background .12s,color .12s}.btn:hover:not(:disabled),.btn:focus-visible{color:#fff;background:#3a3a3a;border-color:#3a3a3a}.btn.primary{background:var(--bar);border-color:var(--bar);color:#fff}.btn.primary:hover:not(:disabled),.btn.primary:focus-visible{background:#3a3a3a}.btn.danger{border-color:var(--alert);color:var(--alert);background:#fff}.btn.danger:hover,.btn.danger:focus-visible{background:var(--alert);border-color:var(--alert);color:#fff}.btn:disabled{opacity:.5;cursor:default}.btn.small{border-radius:6px;padding:.15rem .7rem;font-size:.8rem}.icon-btn{width:1.7rem;height:1.7rem;color:var(--faint);background:0 0;border:0;border-radius:50%;padding:0;font-size:1.2rem;line-height:1}.icon-btn:hover,.icon-btn:focus-visible{background:var(--alert-wash);color:var(--alert)}.intro h1{letter-spacing:-.01em;margin:.75rem 0 .25rem;font-size:1.75rem}.intro p{color:var(--muted);max-width:46rem;margin:0 0 1.25rem}.layout{grid-template-columns:minmax(0,1fr);align-items:start;gap:1rem;display:grid}@media (width>=62rem){.layout{grid-template-columns:22rem minmax(0,1fr)}}.add label{margin-bottom:.3rem;font-size:.82rem;font-weight:600;display:block}.add-row{gap:.5rem;display:flex}.add select{min-width:0;font:inherit;border:1px solid var(--line);background:#fff;border-radius:8px;flex:1;padding:.45rem .6rem}.selected{gap:.75rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.subject{border:1px solid var(--line);border-radius:10px;padding:.65rem .75rem .75rem}.subject-head{align-items:center;gap:.5rem;display:flex}.subject-head p{flex:1;margin:0;line-height:1.3}.subject-head .code{font-weight:700;display:block}.subject-head .name{color:var(--muted);font-size:.82rem}.badge{background:var(--beige);border-radius:999px;padding:0 .55rem;font-size:.75rem;font-weight:600}.activity{border-left:3px solid var(--kind);margin-top:.7rem;padding-left:.6rem}.activity h3{margin:0 0 .3rem;font-size:.85rem;font-weight:600}.activity h3 span{color:var(--muted);font-weight:400}.tag{background:var(--ink);color:#fff;border-radius:999px;margin-left:.35rem;padding:.05rem .5rem;font-size:.7rem;font-style:normal;font-weight:600}.tag.fixed{background:var(--beige);color:#000}.tag.open{color:var(--muted);border:1px solid var(--line);background:0 0}.options{margin:0;padding:0;list-style:none}.option{border-radius:8px;justify-content:space-between;align-items:center;gap:.5rem;padding:.3rem .5rem;font-size:.82rem;display:flex}.options li+li .option{border-top:1px solid var(--grid);border-radius:0}.option small{color:var(--muted);font-size:.75rem;display:block}.option small.warn{color:var(--alert)}.option.is-clashing>span{color:var(--faint)}.option.is-pinned{background:color-mix(in srgb, var(--kind) 45%, white)}.option.is-pinned small{color:#333}.option .btn{flex:none}details summary{color:var(--muted);cursor:pointer;margin-top:.3rem;font-size:.8rem}.danger-zone{border-top:1px dashed var(--line);margin-top:1.25rem;padding-top:.75rem}.danger-zone p{color:var(--muted);margin:.5rem 0;font-size:.82rem}.toolbar{flex-wrap:wrap;align-items:center;gap:.5rem 1rem;display:flex}.status{color:var(--muted);margin:0;font-size:.85rem}.status strong{color:var(--ink)}.toolbar-actions{flex-wrap:wrap;gap:.5rem;margin-left:auto;display:flex}a.btn{text-decoration:none;display:inline-block}.free-days{flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin-bottom:.9rem;font-size:.85rem;display:flex}.free-days>span:first-child{font-weight:600}.day-toggles{gap:.3rem;display:flex}.toggle{border:1px solid var(--line);background:#fff;border-radius:999px;padding:.25rem .7rem;font-size:.8rem;font-weight:500}.toggle:hover,.toggle:focus-visible{border-color:var(--ink)}.toggle[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:#fff}.free-days .hint{color:var(--faint);font-size:.78rem}.suggestion{border:1px solid var(--beige-deep);background:#fbf7ef;border-radius:10px;margin-bottom:.9rem;padding:.75rem 1rem}.suggestion h3{margin:0 0 .25rem;font-size:1rem}.suggestion p{color:var(--muted);margin:0 0 .4rem;font-size:.86rem}.suggestion ul{columns:2 16rem;margin:0 0 .6rem;padding-inline-start:1.2rem;font-size:.85rem}.suggestion-actions{gap:.5rem;display:flex}.free-day-note{background:#fff7e6;border:1px solid #f0d9a8;border-radius:10px;margin-bottom:.9rem;padding:.55rem 1rem}.free-day-note h3{color:#7a4d00;margin:0;font-size:.9rem}.free-day-note ul{margin:.15rem 0 0;padding-inline-start:1.2rem;font-size:.86rem}.legend{color:var(--muted);flex-wrap:wrap;gap:1rem;margin:0 0 .75rem;font-size:.78rem;display:flex}.key:before{content:"";vertical-align:-.15rem;border-radius:3px;width:.9rem;height:.9rem;margin-right:.35rem;display:inline-block}.key.pinned:before{background:var(--computer-lab)}.key.option:before{background:color-mix(in srgb, var(--computer-lab) 22%, white);border:1px dashed #9aa0aa}.key.clashing:before{background:repeating-linear-gradient(45deg,#f1f1f1 0 3px,#d8d8d8 3px 5px)}.key.suggested:before{background:var(--computer-lab);outline:2px dashed var(--ink);outline-offset:-2px}.key.avoided:before{background:color-mix(in srgb, var(--computer-lab) 22%, white);opacity:.45;border:1px dashed #bbb}.clashes{background:var(--alert-wash);border:1px solid #f3c7c2;border-radius:10px;margin-bottom:.9rem;padding:.6rem 1rem}.clashes h3{color:var(--alert);margin:0;font-size:.92rem}.clashes ul{margin:.2rem 0 0;padding-inline-start:1.2rem;font-size:.88rem}.week-empty{text-align:center;padding:3rem 1rem}.scroller{border:1px solid var(--line);border-radius:10px;overflow-x:auto}.week{grid-template-columns:4.2rem repeat(5,minmax(7rem,1fr));min-width:40rem;display:grid}.times{padding-top:2.2rem}.times span{height:var(--hour);color:var(--faint);text-align:right;padding-right:.5rem;font-size:.7rem;display:block;transform:translateY(-.55em)}.day{border-left:1px solid var(--grid)}.day h3{text-transform:uppercase;letter-spacing:.06em;height:2.2rem;color:var(--muted);text-align:center;border-bottom:1px solid var(--line);background:#fcfbf8;margin:0;font-size:.78rem;font-weight:600;line-height:2.2rem}.day.free .slots{background-color:#f7f5f0}.free-tag{background:var(--ink);color:#fff;letter-spacing:.04em;border-radius:999px;margin-left:.35rem;padding:0 .4rem;font-size:.62rem}.slots{height:calc(var(--hours) * var(--hour));background:repeating-linear-gradient(to bottom, var(--grid) 0 1px, transparent 1px var(--hour));position:relative}.block{box-sizing:border-box;padding:2px;position:absolute}.block button{text-align:left;color:#111;border:0;border-radius:7px;flex-direction:column;align-items:flex-start;width:100%;height:100%;padding:.25rem .4rem;font-size:.7rem;line-height:1.25;display:flex;overflow:hidden}.block .line{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.block .code{font-weight:700}.block .where{white-space:normal;opacity:.75}.block.pinned button{background:var(--kind);z-index:2;position:relative;box-shadow:inset 3px 0 #00000059,0 1px 3px #0000001f}.block.option button{background:color-mix(in srgb, var(--kind) 22%, white);outline:1px dashed color-mix(in srgb, var(--kind) 60%, #555);outline-offset:-1px;color:#3a3d45}.block.suggested button{background:var(--kind);outline:2px dashed var(--ink);outline-offset:-2px;z-index:2;position:relative}.block.avoided button{background:color-mix(in srgb, var(--kind) 12%, white);outline-offset:-1px;color:#9a9da5;outline:1px dashed #c9c9c9}.block button:disabled{cursor:default}.block.clashing button{color:#777;background:repeating-linear-gradient(45deg,#f6f6f6 0 3px,#e3e3e3 3px 5px)}.block button:hover:not(:disabled),.block button:focus-visible{outline:2px solid var(--ink);outline-offset:1px;z-index:3;position:relative}.block.pinned.in-clash button{box-shadow:0 0 0 2px var(--alert)}.kind-lecture{--kind:var(--lecture)}.kind-computer-lab{--kind:var(--computer-lab)}.kind-tutorial{--kind:var(--tutorial)}.kind-workshop{--kind:var(--workshop)}.prose{max-width:46rem;margin:1rem auto 0;padding:.5rem 2rem 2rem}.prose h1{letter-spacing:-.01em;font-size:1.75rem}.prose h2{border-top:1px solid var(--line);margin-top:2rem;padding-top:1rem;font-size:1.15rem}.prose li{margin-bottom:.4rem}.prose ol>li::marker{font-weight:700}@media (width<=40rem){.prose{padding:.25rem 1.1rem 1.5rem}}.free-day-note li{flex-wrap:wrap;align-items:center;gap:.25rem .75rem;display:flex}.free-day-note .struck{color:var(--faint);text-decoration:line-through}.free-day-note.settled{border-color:var(--line);background:#f6f6f3}.free-day-note.settled h3{color:var(--muted)}.record{align-items:center;gap:.4rem;font-size:.82rem;display:flex}.record label{cursor:pointer;align-items:center;gap:.3rem;display:flex}.record input[type=checkbox]{accent-color:var(--ink);width:.95rem;height:.95rem}.tag.recorded{color:var(--muted);border:1px dotted var(--faint);background:0 0}.block.skipped button{background:color-mix(in srgb, var(--kind) 30%, white);box-shadow:none;outline-offset:-1px;color:#6b6f78;z-index:1;outline:1px dotted #999}.key.recorded:before{background:color-mix(in srgb, var(--lecture) 30%, white);outline-offset:-1px;outline:1px dotted #999}
