.tportal-demo{height:100svh;display:flex;flex-direction:column;overflow:hidden;color:var(--on);background:var(--ground);font:400 14px/20px var(--font)}.tportal-demo a,.tportal-demo button,.tportal-demo input,.tportal-demo select{font:inherit;color:inherit}.tportal-demo h1,.tportal-demo h2,.tportal-demo h3,.tportal-demo h4,.tportal-demo p{margin:0}.tportal-demo svg{width:20px;height:20px;flex:none}.tportal-demo [role=button]:focus-visible,.tportal-demo a:focus-visible,.tportal-demo button:focus-visible{outline:2px solid var(--primary);outline-offset:3px}.tportal-demo .sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.tportal-demo h1{font-size:24px;line-height:32px;font-weight:400;letter-spacing:-.2px}.tportal-demo h3{font-size:14px;line-height:20px;font-weight:500;display:flex;align-items:baseline;gap:8px}.tportal-demo h4{font-size:13px;line-height:20px;font-weight:500;margin-top:10px}.tportal-demo .title-m{font-size:16px;line-height:24px;font-weight:500}.tportal-demo .title-s{font-size:14px;line-height:20px;font-weight:500}.tportal-demo .eyebrow{font-size:12px;line-height:16px;color:var(--on-var);text-transform:none;letter-spacing:0;font-weight:400;display:block;margin-bottom:2px}.tportal-demo .meta,.tportal-demo .status{font-size:12px;line-height:16px;color:var(--on-var);font-variant-numeric:tabular-nums}.tportal-demo .muted{color:var(--on-var)}.tportal-demo .faint{color:var(--on-faint)}.tportal-demo .mono{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:12px;font-weight:400;color:var(--on-var)}.tportal-demo .empty{font-size:14px;color:var(--on-var);padding:8px 0;max-width:65ch}.tportal-demo .kbd{font-family:var(--mono);font-size:11px;color:var(--on-faint);border-radius:4px;padding:0 5px;line-height:16px;box-shadow:var(--in-xs)}.tportal-demo .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.tportal-demo .spacer{flex:1}.tportal-demo .link{color:var(--primary);font-size:12px}.tportal-demo .link:hover{text-decoration:underline}.tportal-demo .btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;height:38px;padding:0 18px;border-radius:19px;font-size:14px;font-weight:500;color:var(--primary);background:var(--ground);box-shadow:var(--up-s);border:0;white-space:nowrap;transition:box-shadow var(--t),transform var(--t),color var(--t)}.tportal-demo .btn svg{width:16px;height:16px}.tportal-demo .btn:hover{transform:translateY(-1px)}.tportal-demo .btn:active{box-shadow:var(--in-s);transform:none}.tportal-demo .btn.small{height:36px;padding:0 14px;font-size:13.5px}.tportal-demo .btn.outlined{color:var(--on)}.tportal-demo .btn.filled{color:#fff;background:var(--primary-grad);box-shadow:6px 6px 14px var(--sh-d),-4px -4px 12px var(--sh-l)}.tportal-demo .btn.filled:active{box-shadow:inset 4px 4px 8px rgba(0,0,0,.28)}.tportal-demo .icon-btn{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;color:var(--on-var);background:var(--ground);box-shadow:var(--up-s);transition:box-shadow var(--t),color var(--t),transform var(--t)}.tportal-demo .icon-btn svg{width:18px;height:18px}.tportal-demo .icon-btn:hover{color:var(--on);transform:translateY(-1px)}.tportal-demo .icon-btn:active,.tportal-demo .icon-btn[aria-expanded=true]{box-shadow:var(--in-s);transform:none}.tportal-demo .icon-btn.sm{width:30px;height:30px;box-shadow:var(--up-xs)}.tportal-demo .icon-btn.sm svg{width:15px;height:15px}.tportal-demo .icon-btn:disabled{color:var(--on-faint);cursor:default;box-shadow:var(--in-xs);transform:none}.tportal-demo .seg{display:inline-flex;height:40px;padding:4px;border-radius:20px;background:var(--ground);box-shadow:var(--in-s)}.tportal-demo .seg button{padding:0 16px;font-size:14px;font-weight:500;color:var(--on-var);border-radius:16px;transition:color var(--t),box-shadow var(--t)}.tportal-demo .seg button.on{color:var(--primary);box-shadow:var(--up-xs),inset 0 0 0 1px var(--ring)}.tportal-demo .chips{display:flex;flex-wrap:wrap;gap:10px}.tportal-demo .chip{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 16px;border-radius:18px;font-size:14px;font-weight:500;color:var(--on-var);background:var(--ground);box-shadow:var(--up-xs);transition:box-shadow var(--t),color var(--t)}.tportal-demo .chip svg{width:15px;height:15px}.tportal-demo .chip:hover{color:var(--on)}.tportal-demo .chip.on{box-shadow:var(--in-s);color:var(--primary)}.tportal-demo .pill{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 9px;border-radius:11px;font-size:11.5px;font-weight:500;color:var(--on-var);box-shadow:var(--in-xs);white-space:nowrap}.tportal-demo .pill svg{width:13px;height:13px}.tportal-demo .pill.ok{color:var(--ok)}.tportal-demo .pill.primary{color:var(--primary)}.tportal-demo .cdot{width:10px;height:10px;border-radius:50%;background:var(--c,var(--primary));flex:none;display:inline-block}.tportal-demo .cdot.lg{width:12px;height:12px}.tportal-demo .tag{display:inline-flex;align-items:center;gap:6px;color:var(--c,var(--on));font-weight:500;font-size:13px;white-space:nowrap}.tportal-demo .tag .cdot{width:9px;height:9px}.tportal-demo .inp,.tportal-demo select.sel{width:100%;height:44px;padding:0 16px;border:0;border-radius:14px;background:var(--ground);color:var(--on);box-shadow:var(--in-s);font-size:14px;transition:box-shadow var(--t)}.tportal-demo .inp::placeholder{color:var(--on-faint)}.tportal-demo .inp:focus,.tportal-demo select.sel:focus{outline:none;box-shadow:var(--in-s),0 0 0 2px var(--primary)}.tportal-demo select.sel{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--on-var) 50%),linear-gradient(135deg,var(--on-var) 50%,transparent 50%);background-position:calc(100% - 20px) 50%,calc(100% - 15px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:36px}.tportal-demo .field{display:flex;flex-direction:column;gap:8px}.tportal-demo .field label{font-size:12px;font-weight:500;color:var(--on-var)}.tportal-demo .tick{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:var(--ground);box-shadow:var(--up-xs);color:transparent;flex:none;transition:box-shadow var(--t),background var(--t),color var(--t)}.tportal-demo .tick svg{width:15px;height:15px;stroke-width:3}.tportal-demo .tick:hover{box-shadow:var(--in-xs)}.tportal-demo .tick.on{color:#fff;background:var(--primary-grad);box-shadow:2px 2px 5px var(--sh-d)}.tportal-demo .bar{height:8px;border-radius:4px;box-shadow:var(--in-xs);overflow:hidden;margin-top:4px}.tportal-demo .bar span{display:block;height:100%;border-radius:4px;background:var(--primary-grad);transition:width var(--t)}.tportal-demo .menu{position:absolute;z-index:30;min-width:200px;padding:6px;border-radius:16px;background:var(--ground);box-shadow:var(--up),0 16px 40px var(--sh-d);display:flex;flex-direction:column;animation:demo-enter .16s var(--emph)}.tportal-demo .menu a,.tportal-demo .menu button{display:flex;align-items:center;gap:10px;height:36px;padding:0 12px;border-radius:10px;font-size:13.5px;color:var(--on);text-align:left;text-decoration:none;transition:box-shadow var(--t)}.tportal-demo .menu a:hover,.tportal-demo .menu button:hover{box-shadow:var(--in-xs)}.tportal-demo .menu .danger{color:var(--err)}.tportal-demo .menu .kbd,.tportal-demo .menu .status{margin-left:auto}.tportal-demo .menu .sep{height:1px;background:var(--divider);margin:6px 0}.demo-loading{min-height:100svh;display:grid;place-content:center;justify-items:center;gap:16px;color:var(--on-var);background:var(--ground);font-family:var(--font)}.demo-loading .brandbtn{width:56px;height:56px;animation:demo-breathe 1.5s ease-in-out infinite}.demo-loading .brandmark{width:36px;height:40px}.demo-app{height:calc(100svh - 58px);min-height:0;flex:0 0 auto;display:grid;grid-template-columns:276px minmax(0,1fr);overflow:hidden;transition:grid-template-columns var(--t)}.rail-collapsed .demo-app{grid-template-columns:96px minmax(0,1fr)}.demo-rail{position:relative;height:calc(100svh - 58px);padding:22px 18px 18px;display:flex;flex-direction:column;gap:6px;overflow:hidden}.demo-rail>*{flex-shrink:0}.demo-rail .brand{display:flex;align-items:center;gap:12px;padding:0 6px 10px;font-size:21px;letter-spacing:-.2px;color:var(--on)}.demo-rail .brand b{font-weight:700}.demo-rail .brandbtn{width:38px;height:38px;flex:none;padding:5px;border-radius:50%;background:var(--ground);box-shadow:var(--up-s);display:grid;place-items:center;transition:box-shadow var(--t)}.demo-rail .brandbtn:active,.demo-rail .brandbtn[aria-pressed=true]{box-shadow:var(--in-s)}.demo-rail .brandmark{width:26px;height:28px}.demo-rail .search-row{display:flex;align-items:center;gap:12px;height:40px;margin:0 4px 6px;padding:0 16px;border-radius:14px;font-size:13.5px;color:var(--on-var);background:var(--ground);box-shadow:var(--in-s);text-align:left;transition:color var(--t)}.demo-rail .search-row:hover{color:var(--on)}.demo-rail .search-row svg{width:18px;height:18px;color:var(--on-faint)}.demo-rail .search-row .lbl{flex:1}.demo-rail .fab-slot{padding:6px 4px 10px}.demo-rail .fab{display:inline-flex;align-items:center;gap:12px;height:54px;padding:0 20px 0 18px;border-radius:18px;background:var(--ground);color:var(--on-primary-c);font-size:14px;font-weight:500;box-shadow:var(--up);transition:box-shadow var(--t),transform var(--t)}.demo-rail .fab:hover{transform:translateY(-1px)}.demo-rail .fab:active{box-shadow:var(--in-s);transform:none}.demo-rail .nav{display:flex;flex-direction:column;gap:8px;padding:0 4px}.demo-rail .nav button{position:relative;display:flex;align-items:center;gap:12px;width:100%;height:40px;padding:0 16px;border-radius:14px;font-size:14px;color:var(--on-var);text-align:left;background:var(--ground);box-shadow:var(--up-s);transition:box-shadow var(--t),color var(--t),transform var(--t)}.demo-rail .nav button svg{color:var(--on-faint);transition:color var(--t)}.demo-rail .nav button:hover{color:var(--on);transform:translateY(-1px)}.demo-rail .nav button.active svg,.demo-rail .nav button:hover svg{color:var(--primary)}.demo-rail .nav button:active{box-shadow:var(--in-xs);transform:none}.demo-rail .nav button.active{box-shadow:var(--in-s);color:var(--primary);font-weight:500;transform:none}.demo-rail .nav .lbl{flex:1}.demo-rail .nav .badge{font-size:11px;font-weight:500;min-width:22px;height:22px;padding:0 7px;border-radius:11px;box-shadow:var(--in-xs);color:var(--on-var);display:inline-flex;align-items:center;justify-content:center}.demo-rail .nav button.active .badge{color:var(--primary)}.demo-rail .nav .kbd{opacity:0;transition:opacity var(--t)}.demo-rail:focus-within .nav .kbd,.demo-rail:hover .nav .kbd{opacity:1}.demo-rail .rail-sec{padding:4px 4px 0;min-height:0;display:flex;flex-direction:column;flex-shrink:1}.demo-rail .sec-label{font-size:11px;font-weight:500;letter-spacing:.5px;text-transform:uppercase;color:var(--on-faint);padding:8px 16px 4px}.demo-rail .courses{display:flex;flex-direction:column;gap:1px;overflow-y:auto}.demo-rail .courses button{display:flex;align-items:center;gap:10px;height:27px;padding:0 16px;border-radius:15px;font-size:13px;color:var(--on);text-align:left;transition:box-shadow var(--t),color var(--t)}.demo-rail .courses button:hover{box-shadow:var(--in-xs)}.demo-rail .courses button.on{box-shadow:var(--in-s);color:var(--primary)}.demo-rail .courses .cn{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.demo-rail .courses .cn b{font-weight:500}.demo-rail .courses .nd{width:6px;height:6px;border-radius:50%;background:var(--primary);box-shadow:0 0 6px var(--primary);flex:none}.demo-rail .rail-foot{margin-top:auto;display:flex;flex-direction:column-reverse;gap:8px;padding:0 4px}.demo-site-return{display:flex;align-items:center;gap:9px;min-height:40px;padding:0 14px;border-radius:14px;color:var(--primary);background:var(--ground);box-shadow:var(--up-s);font-size:13px;font-weight:600;text-decoration:none;transition:box-shadow var(--t),transform var(--t)}.demo-site-return:hover{box-shadow:var(--up);transform:translateY(-1px)}.demo-site-return:active{box-shadow:var(--in-xs);transform:none}.demo-site-return svg{width:16px;height:16px}.demo-rail .acct-wrap{position:relative}.demo-rail .acct{display:flex;align-items:center;gap:10px;width:100%;height:52px;padding:0 10px 0 8px;border-radius:16px;background:var(--ground);box-shadow:var(--up-s);text-align:left;transition:box-shadow var(--t)}.demo-rail .acct:hover{box-shadow:var(--up)}.demo-rail .acct.open,.demo-rail .acct:active{box-shadow:var(--in-s)}.demo-rail .av{width:34px;height:34px;border-radius:50%;flex:none;display:grid;place-items:center;font-size:13px;font-weight:500;color:#fff;background:var(--primary-grad);box-shadow:2px 2px 6px var(--sh-d)}.demo-rail .acct-txt{flex:1;min-width:0;display:flex;flex-direction:column;line-height:16px}.demo-rail .acct-name{font-size:13.5px;font-weight:500;color:var(--on)}.demo-rail .acct-name,.demo-rail .acct-sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.demo-rail .acct-sub{font-size:11.5px;color:var(--on-var)}.demo-rail .acct .chev-up{color:var(--on-faint);width:16px;height:16px}.demo-rail .acct-menu{position:absolute;left:0;bottom:60px;width:264px;padding:10px}.demo-rail .acct-menu .hd{padding:6px 10px 10px;border-bottom:1px solid var(--divider);margin-bottom:6px}.demo-rail .acct-menu .hd b{display:block;font-weight:500}.demo-rail .acct-menu .hd .em{font-size:12px;color:var(--on-var);display:flex;align-items:center;gap:8px}.demo-rail .acct-menu .hd .plan{margin-left:auto;font-size:11px;font-weight:500;padding:1px 8px;border-radius:9px;box-shadow:var(--in-xs);color:var(--on-var)}.demo-rail .rail-label{display:flex;align-items:center;justify-content:space-between;height:40px;padding:0 16px;border-radius:14px;font-size:13.5px;color:var(--on-var);background:var(--ground);box-shadow:var(--up-s);transition:box-shadow var(--t),color var(--t)}.demo-rail .rail-label:hover{color:var(--on)}.demo-rail .rail-label[aria-expanded=true]{box-shadow:var(--in-s)}.demo-rail .rail-label .chev{width:16px;height:16px;transition:transform var(--t)}.demo-rail .rail-label .chev.open{transform:rotate(-90deg)}.demo-rail .launch{display:flex;flex-direction:column;gap:6px;padding:0 0 4px}.demo-rail .launch button{display:flex;align-items:center;gap:12px;height:36px;padding:0 16px;border-radius:12px;font-size:13.5px;color:var(--on);background:var(--ground);box-shadow:var(--up-xs);text-align:left;animation:demo-rise .22s var(--emph) both}.demo-rail .launch button:first-child{animation-delay:50ms}.demo-rail .launch button svg{width:16px;height:16px;color:var(--on-faint)}.demo-rail .launch button:active{box-shadow:var(--in-xs)}.rail-collapsed .demo-rail{padding-inline:14px;align-items:center}.rail-collapsed .demo-rail .acct .chev-up,.rail-collapsed .demo-rail .acct-txt,.rail-collapsed .demo-rail .brand b,.rail-collapsed .demo-rail .cn,.rail-collapsed .demo-rail .kbd,.rail-collapsed .demo-rail .launch,.rail-collapsed .demo-rail .lbl,.rail-collapsed .demo-rail .rail-label,.rail-collapsed .demo-rail .sec-label{display:none}.rail-collapsed .demo-rail .acct,.rail-collapsed .demo-rail .nav button,.rail-collapsed .demo-rail .search-row{width:48px;height:48px;padding:0;margin:0;border-radius:50%;justify-content:center}.rail-collapsed .demo-rail .fab{width:52px;height:52px;padding:0;border-radius:50%;justify-content:center}.rail-collapsed .demo-rail .nav .badge{position:absolute;top:-4px;right:-4px}.rail-collapsed .demo-rail .courses button{width:48px;height:48px;padding:0;border-radius:50%;justify-content:center}.rail-collapsed .demo-rail .acct-menu{width:280px}.main{height:calc(100svh - 58px);padding:18px 18px 18px 4px;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:18px;position:relative}.panel-off .main{grid-template-columns:minmax(0,1fr)}.panel-off .panel,.panel-off .scrim{display:none}.pane{height:100%;background:var(--ground);border-radius:28px;box-shadow:var(--up);overflow-y:auto;overflow-x:hidden;padding:24px 32px 48px;animation:demo-enter .3s var(--emph)}.pane::-webkit-scrollbar{width:10px}.pane::-webkit-scrollbar-thumb{background:var(--sc-high);border-radius:5px;border:3px solid var(--ground)}.pane.flush{padding:20px 22px 22px;overflow:hidden}.pane.flush,.panel{display:flex;flex-direction:column}.panel{height:100%;min-height:0;background:var(--ground);border-radius:28px;box-shadow:var(--up);animation:demo-enter .3s var(--emph);padding:12px 8px 20px 18px}.panel-bar{display:flex;justify-content:flex-end;padding:0 4px 2px 0;min-height:30px}.panel .side{flex:1;min-height:0;overflow-y:auto;padding-right:12px;display:flex;flex-direction:column;gap:14px}.panel .side::-webkit-scrollbar{width:8px}.panel .side::-webkit-scrollbar-thumb{background:var(--sc-high);border-radius:4px}.panel .back{display:inline-flex;align-items:center;gap:4px;height:32px;padding:0 10px 0 6px;border-radius:10px;color:var(--primary);font-size:14px;font-weight:500;align-self:flex-start;transition:box-shadow var(--t)}.panel .back:hover{box-shadow:var(--in-xs)}.panel .back svg{width:16px;height:16px}.panel .kv{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:13px}.panel .kv b{font-weight:500;color:var(--on-var)}.panel .actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px;align-items:center}.scrim{display:none}.page{max-width:760px;margin:0 auto;display:flex;flex-direction:column;gap:26px}.page.wide{max-width:1040px}.page-head{display:flex;align-items:center;gap:10px;min-height:40px}.page-head>div:first-child{flex:1;min-width:0}.page-head .actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.card{background:var(--ground);border-radius:22px;padding:18px 20px;display:flex;flex-direction:column;gap:10px;box-shadow:var(--up)}.card.plain{background:transparent;padding:0;box-shadow:none}.card p{color:var(--on-var);max-width:65ch}.card p b{color:var(--on);font-weight:500}.card details summary{cursor:pointer;list-style:none}.card details summary::-webkit-details-marker{display:none}.card .group-h{margin-top:10px}.dl-group,.list{display:flex;flex-direction:column}.dl-group{gap:8px}.week-h{font-size:13px;line-height:20px;font-weight:500;color:var(--on-var);padding:0 8px;display:flex;align-items:baseline;gap:8px}.week-h.now{color:var(--primary)}.week-h .mono{color:inherit;opacity:.8}.dl-group .list{gap:10px}.dl-row{position:relative;display:grid;grid-template-columns:auto 92px 76px 1fr auto;gap:12px;align-items:center;min-height:52px;padding:8px 16px;border-radius:16px;font-size:14px;background:var(--ground);box-shadow:var(--up-xs);transition:box-shadow var(--t),transform var(--t);text-align:left}.dl-row.click{cursor:pointer}.dl-row.click:hover{transform:translateY(-1px);box-shadow:var(--up-s)}.dl-row.click:active,.dl-row.sel,.dl-row.sel:hover{box-shadow:var(--in-s);transform:none}.dl-row .tick{margin-left:-6px}.dl-row.done{opacity:.55}.dl-row.done .dl-what{text-decoration:line-through;color:var(--on-var)}.dl-row .dl-date{font-weight:500;white-space:nowrap}.dl-row.due72 .dl-rel{color:var(--warn);font-weight:500}.dl-row.overdue .dl-date,.dl-row.overdue .dl-rel,.dl-row.today .dl-date{color:var(--err)}.dl-what{min-width:0}.dl-what .time{color:var(--on-var);margin-left:8px;font-size:13px}.dl-end{display:flex;align-items:center;gap:8px;justify-content:flex-end}.dl-rel{font-size:13px;color:var(--on-var);white-space:nowrap;font-variant-numeric:tabular-nums}.dl-rel.due72{color:var(--warn);font-weight:500}.chev{width:16px;height:16px;color:var(--on-faint);transition:transform var(--t),color var(--t)}.dl-row.click:hover .chev,.mat.click:hover .chev{color:var(--primary);transform:translateX(2px)}.dl-form{gap:14px}.dl-form .quick-prev{font-size:13px;color:var(--on-var);min-height:16px}.dl-form .quick-prev b{color:var(--on);font-weight:500}.dl-form .form{display:grid;grid-template-columns:1fr 1fr;gap:16px}.dl-form .row.full{grid-column:1/-1}.mat{display:flex;align-items:center;gap:10px;min-height:40px;padding:4px 0;font-size:13.5px;border-top:1px solid var(--divider)}.mat:first-of-type{border-top:0}.card.plain .mat{padding:6px 0}.mat.click{cursor:pointer}.mat .nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat .nm b{font-weight:500}.mat .ext{font-family:var(--mono);font-size:10px;text-transform:uppercase;color:var(--on-var);min-width:36px;height:22px;padding:0 6px;border-radius:7px;box-shadow:var(--in-xs);display:inline-flex;align-items:center;justify-content:center}.mat .status{white-space:nowrap}.prep{flex-direction:column;gap:8px}.prep,.rd{display:flex}.rd{align-items:center;gap:12px;min-height:44px;padding:4px 12px 4px 6px;border-radius:14px;box-shadow:var(--in-s)}.rd .tick{width:28px;height:28px}.rd .tick svg{width:13px;height:13px}.rd.done .rd-text{text-decoration:line-through;color:var(--on-var)}.anns{display:flex;flex-direction:column}.ann{border-top:1px solid var(--divider)}.ann:first-child{border-top:0}.ann summary{min-height:40px;display:flex;align-items:center;justify-content:space-between;gap:12px;font-weight:500}.ann .outline{color:var(--on-var);margin:4px 0 10px}.ann .btn{margin-bottom:10px}.tb{display:flex;flex-direction:column;gap:2px;padding:4px 0}.tb-title{font-weight:500;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tb-meta{font-size:12px;color:var(--on-var)}.grading{display:flex;flex-direction:column}.g-row{display:flex;justify-content:space-between;gap:16px;min-height:32px;align-items:center;border-top:1px solid var(--divider)}.g-row:first-child{border-top:0}.linklist{display:flex;flex-wrap:wrap;gap:8px}.cls-main{gap:16px}.asg,.cls-main,.up-list{display:flex;flex-direction:column}.asg{padding:14px 0;border-top:1px solid var(--divider);gap:8px}.asg:first-child{border-top:0;padding-top:4px}.asg-title{font-size:15px;font-weight:500}.meta-row{font-size:13px}.meta-row b{font-weight:500}.meta-row .due{color:var(--warn)}.asg-more ol{margin:4px 0 0;padding-left:20px;color:var(--on-var);display:flex;flex-direction:column;gap:4px}.cal{flex:1;min-height:0;display:flex;flex-direction:column}.cal-head{display:flex;align-items:center;gap:10px;padding:0 4px 14px}.cal-head h1{margin-left:8px}.allday{display:grid;grid-template-columns:60px repeat(var(--cols),minmax(0,1fr));min-height:40px;margin:0 0 6px}.allday .cell{display:flex;flex-direction:column;gap:3px;padding:2px 3px}.pillx{height:22px;padding:0 10px;border-radius:11px;font-size:11.5px;font-weight:500;color:var(--warn);background:var(--ground);box-shadow:var(--up-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.pillx.click:hover{box-shadow:var(--up-s)}.grid-wrap{flex:1;min-height:0;overflow:auto;border-radius:22px;box-shadow:var(--in);padding:0 4px 4px;position:relative}.grid{display:grid;grid-template-columns:60px repeat(var(--cols),minmax(0,1fr))}.dayh{position:sticky;top:0;z-index:4;height:64px;background:var(--ground);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;border-bottom:1px solid var(--divider)}.dayh .wd{font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-transform:uppercase;color:var(--on-var)}.dayh .dn{font-size:22px;line-height:28px;font-variant-numeric:tabular-nums}.dayh.today .dn{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:#fff;background:var(--primary-grad);box-shadow:2px 2px 6px var(--sh-d);font-size:17px;font-weight:500}.timecol{position:relative}.timecol .tl{position:absolute;right:8px;transform:translateY(-8px);font-size:11px;color:var(--on-faint);font-variant-numeric:tabular-nums}.daycol{position:relative;border-left:1px solid var(--divider);background-image:linear-gradient(var(--divider) 1px,transparent 1px);background-size:100% 48px}.blk{position:absolute;z-index:2;left:3px;width:calc(100% - 6px);padding:5px 8px;border-radius:12px;overflow:hidden;display:flex;flex-direction:column;align-items:flex-start;gap:1px;color:#fff;text-align:left;font-size:11.5px;line-height:15px;background:linear-gradient(160deg,color-mix(in srgb,var(--c,#33691E) 82%,#fff),color-mix(in srgb,var(--c,#33691E) 85%,#000));box-shadow:var(--up-xs),inset 1px 1px 0 rgba(255,255,255,.35);transition:transform var(--t),box-shadow var(--t)}.blk .code{font-weight:600;font-size:12px}.blk .room{opacity:.9}.blk:hover{transform:translateY(-1px);box-shadow:var(--up-s),inset 1px 1px 0 rgba(255,255,255,.35)}.blk.sel{box-shadow:var(--up-s),inset 0 0 0 2px #fff}.blk.event{--c:#33691E}.nowline{z-index:3;right:0;height:2px;pointer-events:none}.nowline,.nowline:before{position:absolute;left:-4px;background:var(--now)}.nowline:before{content:"";top:-3px;width:8px;height:8px;border-radius:50%}.calendar-mobile-hint{display:none}.month{flex:1;min-height:0;grid-template-columns:repeat(7,1fr);grid-template-rows:32px repeat(6,minmax(0,1fr));border-radius:22px;box-shadow:var(--in);padding:4px;overflow:auto}.mh,.month{display:grid}.mh{place-items:center;color:var(--on-var);font-size:11px;font-weight:500;letter-spacing:.5px;text-transform:uppercase}.md{min-width:0;padding:5px;border-left:1px solid var(--divider);border-top:1px solid var(--divider);cursor:pointer;display:flex;flex-direction:column;gap:3px;transition:box-shadow var(--t)}.md:nth-child(7n+1){border-left:0}.md:hover{box-shadow:var(--in-xs);border-radius:12px}.md .n{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-variant-numeric:tabular-nums;align-self:center}.md.today .n{color:#fff;background:var(--primary-grad);font-weight:700;box-shadow:2px 2px 5px var(--sh-d)}.md.other .n{color:var(--on-faint)}.md .chips{display:flex;flex-direction:column;gap:2px}.chipc{font-size:10px;font-weight:600;color:var(--c);padding:1px 6px;border-radius:7px;box-shadow:var(--in-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mini,.mini-h{padding:0 2px 4px}.mini-h{display:flex;align-items:center;justify-content:space-between;font-size:13px;font-weight:500}.mini-h .icon-btn{width:28px;height:28px}.mini-h .icon-btn svg{width:16px;height:16px}.mini-g{display:grid;grid-template-columns:repeat(7,1fr);gap:2px 0;font-size:11px;text-align:center}.mini-g .wd{color:var(--on-var);font-weight:500;padding:0 0 4px}.mini-g .d{position:relative;height:26px;line-height:26px;border-radius:50%;color:var(--on);cursor:pointer;transition:box-shadow var(--t);font-variant-numeric:tabular-nums}.mini-g .d:hover{box-shadow:var(--in-xs)}.mini-g .d.out{color:var(--on-faint)}.mini-g .d.today{background:var(--primary-grad);color:#fff;font-weight:700}.mini-g .d.sel:not(.today){box-shadow:var(--in-xs);color:var(--primary)}.mini-g .d.due:after{content:"";position:absolute;left:50%;bottom:2px;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--now)}.mini-g .d.today.due:after{background:#fff}.ev,.ev-list{gap:16px}.ev{position:relative;display:grid;grid-template-columns:120px minmax(0,1fr);padding:18px 20px;border-radius:22px;box-shadow:var(--up);cursor:pointer;transition:box-shadow var(--t),transform var(--t);text-align:left}.ev:hover{transform:translateY(-1px)}.ev.sel{box-shadow:var(--in-s);transform:none}.ev-when{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--on-var)}.ev-date{font-weight:500;color:var(--on);font-size:14px}.ev-body{display:flex;flex-direction:column;gap:6px;min-width:0}.ev-title{font-size:16px;line-height:24px;font-weight:500}.ev-meta,.ev-title{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ev-meta{font-size:13px;color:var(--on-var)}.fit{color:var(--primary);letter-spacing:1px;font-size:11px}.ev-sum{color:var(--on)}.ev-why{color:var(--on-var)}.ev-detail{display:flex;flex-direction:column;gap:8px;padding:8px 0 2px}.ev-actions{position:relative;display:flex;align-items:center;gap:8px;margin-top:6px}.ev-actions .menu{left:48px;top:40px}.ev-actions .pill.ok{height:36px;padding:0 16px;border-radius:18px;font-size:14px;box-shadow:var(--in-s)}.toasts{position:fixed;left:22px;bottom:76px;z-index:40;display:flex;flex-direction:column;gap:8px;pointer-events:none}.toast{padding:10px 16px;border-radius:14px;background:var(--ground);box-shadow:var(--up),0 10px 30px var(--sh-d);font-size:13.5px;animation:demo-rise .22s var(--emph)}.rail-collapsed .toasts{left:110px}.pal-scrim{position:fixed;inset:0;z-index:35;display:flex;justify-content:center;align-items:flex-start;padding:12vh 20px 20px;background:color-mix(in srgb,var(--sh-d) 45%,transparent);backdrop-filter:blur(3px)}.pal-box{width:min(560px,100%);border-radius:22px;background:var(--ground);box-shadow:var(--up),0 24px 60px var(--sh-d);padding:10px;animation:demo-enter .16s var(--emph)}.pal-in{display:flex;align-items:center;gap:12px;height:48px;padding:0 16px;border-radius:14px;box-shadow:var(--in-s)}.pal-in svg{width:18px;height:18px;color:var(--on-faint)}.pal-in input{flex:1;background:none;border:0;outline:none;font-size:15px}.pal-in input::placeholder{color:var(--on-faint)}.pal-list{display:flex;flex-direction:column;gap:2px;padding-top:8px}.pal-list button{display:flex;justify-content:space-between;align-items:center;gap:12px;height:40px;padding:0 14px;border-radius:12px;text-align:left;transition:box-shadow var(--t)}.pal-list button:first-child,.pal-list button:hover{box-shadow:var(--in-xs)}.pal-list .empty{padding:8px 14px}.deck-viewer-backdrop{position:fixed;z-index:50;inset:0;padding:24px;display:grid;place-items:center;background:color-mix(in srgb,var(--sh-d) 60%,transparent);backdrop-filter:blur(6px);animation:deck-backdrop-in .16s ease-out}.deck-viewer{width:min(1160px,calc(100vw - 48px));height:min(860px,calc(100svh - 48px));min-height:560px;border-radius:28px;display:grid;grid-template-rows:72px minmax(0,1fr) 58px 126px;overflow:hidden;color:var(--on);background:var(--ground);box-shadow:var(--up),0 30px 90px var(--sh-d);animation:deck-viewer-in .18s var(--emph)}.deck-viewer-head{min-width:0;padding:0 18px 0 24px;display:flex;align-items:center;gap:12px}.deck-viewer-head>div{min-width:0;flex:1;display:grid}.deck-viewer-head span,.deck-viewer-head strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.deck-viewer-head strong{font-size:16px;font-weight:500}.deck-viewer-head span{color:var(--on-var);font-size:12px}.deck-stage{min-height:0;margin:0 22px;padding:22px 30px;display:grid;place-items:center;overflow:hidden;border-radius:22px;box-shadow:var(--in)}.deck-stage img{width:auto;height:auto;max-width:100%;max-height:100%;aspect-ratio:16/9;object-fit:contain;border-radius:10px;background:#fff;box-shadow:var(--up-s)}.deck-controls{padding:8px 22px;display:flex;align-items:center;justify-content:center;gap:12px}.deck-counter{min-width:76px;height:36px;padding:0 16px;border-radius:18px;display:grid;place-items:center;color:var(--primary);box-shadow:var(--in-s);font-size:13px;font-weight:500;font-variant-numeric:tabular-nums}.deck-thumbnails{padding:12px 22px 18px;display:flex;align-items:flex-start;justify-content:center;gap:14px;overflow-x:auto;scrollbar-width:thin}.deck-thumbnails button{position:relative;width:144px;flex:0 0 144px;padding:4px;border-radius:12px;overflow:hidden;background:var(--ground);box-shadow:var(--up-xs);transition:box-shadow var(--t),transform var(--t)}.deck-thumbnails button img{width:100%;height:auto;display:block;border-radius:8px}.deck-thumbnails button:hover{transform:translateY(-2px);box-shadow:var(--up-s)}.deck-thumbnails button.active{box-shadow:var(--in-s),inset 0 0 0 1px var(--ring);transform:none}.deck-thumbnails button>span{position:absolute;right:9px;bottom:9px;width:20px;height:20px;border-radius:10px;display:grid;place-items:center;color:#fff;background:var(--primary-grad);font-size:10px;font-weight:600}.demo-promo{min-height:58px;flex:0 0 58px;padding:14px 24px;display:flex;align-items:center;justify-content:center;gap:5px;color:var(--on-var);font-size:13px;text-align:center}.demo-promo a{color:var(--primary);font-weight:500}.demo-promo a:hover{text-decoration:underline}.demo-mobile-header,.demo-mobile-nav{display:none}@keyframes demo-enter{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes demo-rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes demo-breathe{50%{transform:scale(1.05)}}@keyframes deck-backdrop-in{0%{opacity:0}to{opacity:1}}@keyframes deck-viewer-in{0%{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:none}}@media (max-width:1100px){.main{grid-template-columns:minmax(0,1fr)}.panel{top:18px;right:18px;bottom:18px;width:340px;z-index:25;box-shadow:var(--up),0 24px 60px var(--sh-d)}.panel,.scrim{position:fixed}.scrim{display:block;inset:0;z-index:24;background:color-mix(in srgb,var(--sh-d) 45%,transparent);animation:deck-backdrop-in .16s var(--emph)}.tportal-demo:not(.panel-peek) .panel,.tportal-demo:not(.panel-peek) .scrim{display:none}}@media (max-width:980px){.demo-app,.rail-collapsed .demo-app{height:calc(100svh - 54px);grid-template-columns:1fr;grid-template-rows:58px minmax(0,1fr) 78px;grid-template-areas:"header" "workspace" "nav"}.demo-rail{display:none}.demo-mobile-header{grid-area:header;padding:0 18px;display:flex;align-items:center;justify-content:space-between;color:var(--on-var);font-size:12px}.demo-mobile-brand{display:flex;align-items:center;gap:10px;color:var(--on);font-size:18px;text-decoration:none}.demo-mobile-brand strong{font-weight:700}.demo-mobile-brand .brandbtn{width:34px;height:34px;padding:4px;border-radius:50%;display:grid;place-items:center;box-shadow:var(--up-s)}.demo-mobile-brand .brandmark{width:22px;height:24px}.demo-mobile-return{display:inline-flex;align-items:center;gap:4px;min-height:36px;padding:0 11px;border-radius:12px;color:var(--primary);background:var(--ground);box-shadow:var(--up-s);font-size:12px;font-weight:600;text-decoration:none}.demo-mobile-return svg{width:14px;height:14px}.demo-site-return{display:none}.main{grid-area:workspace;height:auto;min-height:0;padding:0 12px 10px}.pane{border-radius:22px;padding:20px 18px 36px}.pane.flush{padding:16px 14px 14px}.demo-mobile-nav{grid-area:nav;z-index:5;padding:10px max(12px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.demo-mobile-nav button{min-height:56px;padding:4px;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--on-var);background:var(--ground);box-shadow:var(--up-xs);font-size:11px;transition:box-shadow var(--t),color var(--t)}.demo-mobile-nav button svg{color:var(--on-faint);transition:color var(--t)}.demo-mobile-nav button.active{color:var(--primary);box-shadow:var(--in-s);font-weight:500}.demo-mobile-nav button.active svg{color:var(--primary)}.panel{top:12px;right:12px;bottom:90px;width:min(340px,calc(100% - 24px))}.toasts{left:16px;bottom:150px}.demo-promo{min-height:54px;flex-basis:54px}}@media (max-width:800px){.panel{top:0;right:0;bottom:0;left:0;width:auto;border-radius:0}}@media (max-width:640px){.demo-app,.rail-collapsed .demo-app{grid-template-rows:54px minmax(0,1fr) 74px}.demo-mobile-header{padding:0 14px}.demo-mobile-nav{gap:8px;padding-top:8px}.demo-mobile-nav button{min-height:52px;border-radius:14px}.main{padding:0 8px 8px}.pane{border-radius:20px}.tportal-demo h1{font-size:20px;line-height:28px}.page-head{flex-wrap:wrap}.page-head .actions .status{display:none}.cal-head{flex-wrap:wrap;gap:8px}.cal-head h1{margin-left:4px}.cal-head .seg{order:2;width:100%}.cal-head .seg button{flex:1}.grid-wrap{scroll-behavior:smooth;scrollbar-width:thin;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}.allday,.grid{min-width:620px}.calendar-mobile-hint{position:sticky;z-index:8;left:12px;top:8px;width:max-content;margin:0 0 -28px 72px;padding:5px 12px;border-radius:999px;display:block;color:var(--on-var);background:var(--ground);box-shadow:var(--up-xs);font-size:10px;pointer-events:none}.allday{grid-template-columns:52px repeat(var(--cols),1fr);overflow-x:auto}.month{min-width:0}.dl-row{grid-template-columns:auto minmax(0,1fr) auto;gap:10px;padding:10px 14px}.dl-row .dl-date,.dl-row .tag{display:none}.dl-form .form,.ev{grid-template-columns:1fr}.ev{gap:8px;padding:16px}.ev-when{flex-direction:row;align-items:center;gap:8px}.deck-viewer-backdrop{padding:6px}.deck-viewer{width:calc(100vw - 12px);height:calc(100svh - 12px);min-height:0;border-radius:20px;grid-template-rows:64px minmax(0,1fr) 56px 98px}.deck-viewer-head{padding:0 10px 0 15px;gap:9px}.deck-stage{margin:0 10px;padding:10px 8px}.deck-thumbnails{padding:10px 12px 13px;justify-content:flex-start;gap:8px;scroll-snap-type:x proximity}.deck-thumbnails button{width:108px;flex-basis:108px;scroll-snap-align:start}.demo-promo{padding:9px 14px;display:block;line-height:1.4}}@media (prefers-reduced-motion:reduce){.deck-viewer,.deck-viewer-backdrop,.demo-loading .brandbtn,.launch button,.menu,.pal-box,.pane,.panel,.toast{animation:none}}