.shell-2{background:var(--paper);min-height:100vh;color:var(--ink);grid-template-rows:auto 1fr auto;display:grid}.shell-2__topbar{height:var(--topbar-h);padding:0 var(--space-5);border-bottom:1px solid var(--paper-rule);background:var(--paper);z-index:20;justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.shell-2__brand{font-family:var(--font-mono);letter-spacing:.24em;text-transform:uppercase;align-items:center;gap:.7rem;font-size:.72rem;font-weight:500;display:inline-flex}.shell-2__body{flex:1;grid-template-columns:1fr;min-height:0;display:grid}@media (width>=768px){.shell-2{height:100vh;min-height:0}.shell-2__body{grid-template-columns:var(--rail-w) 1fr;overflow:hidden}}.rail{border-right:1px solid var(--paper-rule);padding:var(--space-4) 0;background:var(--paper);display:none}@media (width>=768px){.rail{flex-direction:column;display:flex;overflow:hidden}}.rail__list{margin:0;padding:0;list-style:none}.rail__link{padding:.5rem var(--space-5);font-family:var(--font-mono);color:var(--ink-soft);transition:background var(--motion-base), color var(--motion-base), border-color var(--motion-base);border-left:2px solid #0000;align-items:center;gap:.65rem;font-size:.85rem;text-decoration:none;display:flex}.rail__link:hover{background:var(--paper-hover);color:var(--ink)}.rail__link.active{border-left-color:var(--accent);background:var(--paper-hover);color:var(--ink);font-weight:500}.rail__icon{color:currentColor;opacity:.78;width:18px;height:18px;transition:opacity var(--motion-base);justify-content:center;align-items:center;display:inline-flex}.rail__link:hover .rail__icon,.rail__link.active .rail__icon{opacity:1}.rail__link.active .rail__icon{color:var(--accent)}.bottombar{height:var(--bottombar-h);border-top:1px solid var(--paper-rule);background:var(--paper);z-index:15;padding-bottom:env(safe-area-inset-bottom,0);display:flex;position:sticky;bottom:0}@media (width>=768px){.bottombar{display:none}}.bottombar__link{color:var(--ink-faint);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.14em;transition:color var(--motion-base), border-color var(--motion-base);border-top:2px solid #0000;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:.18rem;font-size:.6rem;text-decoration:none;display:flex}.bottombar__link.active{color:var(--ink);border-top-color:var(--accent)}.bottombar__icon{color:currentColor;opacity:.78;width:24px;height:24px;transition:opacity var(--motion-base), color var(--motion-base);justify-content:center;align-items:center;display:inline-flex}.bottombar__label{display:none}.bottombar__link.active .bottombar__icon{opacity:1;color:var(--accent)}.shell-2__main{padding:var(--space-5);width:100%}@media (width>=768px){.shell-2__main{padding:var(--space-6) var(--space-7);min-height:0;overflow-y:auto}}.shell-2__main-inner{width:100%}.notes{max-width:var(--reading-max)}.notes__filters{align-items:flex-end;gap:var(--space-3);margin-bottom:var(--space-5);flex-wrap:wrap;display:flex}.notes__filters .field{flex:1;min-width:140px}.notes__clear{flex:none}.notes__empty{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--ink-faint);text-align:center;margin:var(--space-6) 0 0}.notes__list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.note{border:1px solid var(--paper-rule);background:var(--paper-soft);padding:var(--space-4)}.note__head{align-items:center;gap:var(--space-3);margin-bottom:var(--space-2);display:flex}.note__date{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.08em;color:var(--ink-faint);white-space:nowrap}.note__tags{gap:var(--space-2);flex-wrap:wrap;flex:1;display:flex}.note__tag{font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.04em;border:1px solid var(--paper-rule);color:var(--ink-soft);white-space:nowrap;padding:.1rem .45rem}.note__tag--subject{border-color:var(--chip);background:color-mix(in srgb, var(--chip) 14%, var(--paper));color:var(--ink)}.note__actions{gap:var(--space-1);opacity:0;transition:opacity var(--motion-base);display:flex}.note:hover .note__actions,.note:focus-within .note__actions{opacity:1}.note__content{font-family:var(--font-mono);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--ink);white-space:pre-wrap;margin:0}.note__link{color:var(--accent);text-underline-offset:2px;word-break:break-all;text-decoration:underline}.note__link:hover{text-decoration-thickness:2px}.notes__form{gap:var(--space-4);flex-direction:column;display:flex}.notes__form-row{gap:var(--space-3);display:flex}.notes__form-row .field{flex:1}.notes__error{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--danger);margin:0}@media (width<=480px){.note__actions{opacity:1}}.planner{max-width:var(--content-max)}.planner__scroll{border:1px solid var(--paper-rule)}.grid{--grid-h:800px;--gutter:44px;grid-template-columns:var(--gutter) repeat(var(--days,5), 1fr);grid-template-rows:auto var(--grid-h);background:var(--paper);display:grid}.grid__corner{border-bottom:1px solid var(--paper-rule)}.grid__dayhead{border-bottom:1px solid var(--paper-rule);border-left:1px solid var(--paper-rule);padding:var(--space-2) 0;text-align:center;font-family:var(--font-mono);font-size:var(--text-2xs);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}.grid__times{position:relative}.grid__tick{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);position:absolute;right:.4rem;transform:translateY(-50%)}.grid__col{border-left:1px solid var(--paper-rule);cursor:copy;position:relative}.grid__rule{border-top:1px dashed var(--paper-rule);pointer-events:none;position:absolute;left:0;right:0}.block{text-align:left;border:none;border-left:3px solid var(--chip);border-top:1px solid var(--paper);border-bottom:1px solid var(--paper);background:color-mix(in srgb, var(--chip) 14%, var(--paper));width:calc(100% - 4px);color:var(--ink);cursor:pointer;transition:background var(--motion-fast);flex-direction:column;gap:.1rem;padding:.25rem .4rem;display:flex;position:absolute;left:2px;overflow:hidden}.block:hover{background:color-mix(in srgb, var(--chip) 24%, var(--paper))}.block--compact{justify-content:center;padding-top:.1rem;padding-bottom:.1rem}.block--compact .block__meta,.block--compact .block__student{display:none}.block--split{padding-left:.3rem;padding-right:.25rem}.block__label{font-family:var(--font-mono);font-size:var(--text-2xs);white-space:nowrap;text-overflow:ellipsis;font-weight:500;line-height:1.2;overflow:hidden}.block__meta,.block__student{font-family:var(--font-mono);color:var(--ink-faint);white-space:nowrap;text-overflow:ellipsis;font-size:.625rem;overflow:hidden}.planner__form{gap:var(--space-4);flex-direction:column;display:flex}.planner__form-row{gap:var(--space-3);display:flex}.planner__form-row .field{flex:1}.timeselect__trigger{text-align:left;font-family:var(--font-mono);font-size:var(--text-base)}.timeselect__pop{z-index:200;padding:var(--space-2);background:var(--paper);border:1px solid var(--ink);box-shadow:var(--shadow-lg);animation:dialog-fade var(--motion-fast);grid-auto-flow:column;gap:2px;display:grid;position:fixed}.timeselect__opt{font-family:var(--font-mono);font-size:var(--text-base);color:var(--ink-soft);border-radius:var(--radius-sm);text-align:center;cursor:pointer;transition:background var(--motion-fast), color var(--motion-fast);background:0 0;border:none;padding:.35rem .7rem}.timeselect__opt:hover{background:var(--paper-hover);color:var(--ink)}.timeselect__opt--on,.timeselect__opt--on:hover{background:var(--accent);color:var(--paper)}.planner__error{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--danger);margin:0}.planner__del{margin-right:auto}.settings{max-width:var(--reading-max)}.settings__section{margin-bottom:var(--space-6)}.settings__eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:var(--tracking-eyebrow);font-size:var(--text-2xs);color:var(--ink-faint)}.settings__head{margin-bottom:var(--space-3);justify-content:space-between;align-items:center;display:flex}.settings__account-card:hover{border-color:var(--paper-rule)}.settings__account{justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap;display:flex}.settings__account-email{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--ink-soft);word-break:break-all}.settings__list{border:1px solid var(--paper-rule);margin:0;padding:0;list-style:none}.settings__row{align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--paper-rule);display:flex}.settings__row:last-child{border-bottom:none}.settings__swatch{border-radius:var(--radius-pill);flex:none;width:12px;height:12px}.settings__row-main{font-family:var(--font-mono);font-size:var(--text-base);color:var(--ink);flex:1;min-width:0}.settings__row-meta{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);white-space:nowrap}.settings__row-actions{gap:var(--space-1);flex:none;display:flex}.settings__editor{align-items:flex-start;gap:var(--space-3);width:100%;display:flex}.settings__editor-fields{gap:var(--space-2);flex:1;min-width:0;display:flex}.settings__editor-fields .field{flex:1}.settings__error{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--danger);margin:var(--space-2) 0 0}:root{--ink:#1a1612;--ink-soft:#4a4338;--ink-faint:#897e6f;--ink-ghost:#b8ad9d;--paper:#f7f3ec;--paper-soft:#f2ece2;--paper-rule:#e3dccd;--paper-hover:#ede4d4;--accent:#fa5e43;--accent-soft:#ff8163;--accent-faint:#ffe0d6;--danger:#a83a2a;--success:#5a7a4a;--font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--font-serif:"Fraunces", "Source Serif 4", "Iowan Old Style", Georgia, "Times New Roman", serif;--base-size:14px;--text-2xs:.6875rem;--text-xs:.75rem;--text-sm:.8125rem;--text-base:.875rem;--text-md:1rem;--text-lg:1.125rem;--display-xs:1.25rem;--display-sm:1.625rem;--display-md:2.25rem;--display-lg:3rem;--leading-tight:1.15;--leading-snug:1.35;--leading-normal:1.6;--tracking-label:.18em;--tracking-eyebrow:.22em;--tracking-display:-.012em;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--radius-sm:2px;--radius-md:4px;--radius-lg:8px;--radius-pill:999px;--shadow-sm:0 1px 2px #1a16120f;--shadow-md:0 6px 16px -8px #1a16122e;--shadow-lg:0 18px 40px -16px #1a161247;--rail-w:200px;--topbar-h:56px;--bottombar-h:64px;--content-max:920px;--reading-max:720px;--motion-fast:.12s ease;--motion-base:.18s ease;--motion-slow:.32s cubic-bezier(.2, .8, .2, 1)}.btn{font:inherit;font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:.02em;border:1px solid var(--paper-rule);border-radius:var(--radius-md);background:var(--paper);color:var(--ink-soft);cursor:pointer;transition:background var(--motion-base), color var(--motion-base), border-color var(--motion-base), opacity var(--motion-base);-webkit-user-select:none;user-select:none;white-space:nowrap;justify-content:center;align-items:center;gap:.4rem;padding:.5rem .8rem;font-weight:500;display:inline-flex}.btn:hover:not(:disabled){background:var(--paper-hover);border-color:var(--ink-ghost);color:var(--ink)}.btn svg{flex-shrink:0}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:disabled{opacity:.45;cursor:not-allowed}.btn--primary{background:var(--ink);color:var(--paper)}.btn--primary:hover:not(:disabled){background:var(--accent);border-color:var(--accent);color:var(--paper)}.btn--ghost{color:var(--ink-faint);background:0 0;border-color:#0000}.btn--ghost:hover:not(:disabled){background:var(--paper-hover);border-color:var(--paper-rule);color:var(--ink)}.btn--danger{border-color:var(--danger);color:var(--danger)}.btn--danger:hover:not(:disabled){background:var(--danger);color:var(--paper)}.btn--small{font-size:var(--text-2xs);padding:.35rem .65rem}.btn--icon{flex-shrink:0;gap:0;width:2rem;height:2rem;padding:0}.btn--icon.btn--small{width:1.75rem;height:1.75rem}.btn--icon svg{width:.85rem;height:.85rem}.btn--primary.btn--icon{background:var(--accent);border-color:var(--accent)}.btn--primary.btn--icon:hover:not(:disabled){background:var(--accent);border-color:var(--accent);filter:brightness(.92)}.field{flex-direction:column;gap:.4rem;display:flex}.field__label{font-family:var(--font-mono);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:var(--tracking-label);color:var(--ink-soft);font-weight:500}.field__hint{font-size:var(--text-2xs);color:var(--ink-faint);line-height:var(--leading-snug)}.field__input,.field__textarea{font:inherit;font-family:var(--font-mono);font-size:var(--text-base);color:var(--ink);background:var(--paper);border:1px solid var(--paper-rule);transition:border-color var(--motion-base), background var(--motion-base);outline:none;width:100%;padding:.55rem .7rem;line-height:1.5}.field__input:focus,.field__textarea:focus{border-color:var(--ink)}.field__input::placeholder,.field__textarea::placeholder{color:var(--ink-ghost)}.field__textarea{resize:vertical;min-height:96px;font-family:var(--font-mono)}.field__select{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6' fill='none'><path d='M1 1l4 4 4-4' stroke='%234a4338' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/></svg>");background-position:right .7rem center;background-repeat:no-repeat;padding-right:2rem}.loader{pointer-events:none;color:var(--ink);z-index:50;place-items:center;display:grid;position:fixed;inset:0}.loader--inline{pointer-events:auto;padding:var(--space-3);z-index:auto;position:static;inset:auto}.loader__spin{transform-origin:50%;animation:.9s linear infinite loader-spin;display:inline-flex}@keyframes loader-spin{to{transform:rotate(360deg)}}.page-hero{justify-content:flex-start;align-items:center;gap:var(--space-3) var(--space-4);margin-bottom:var(--space-6);flex-wrap:wrap;display:flex}.page-title{font-family:var(--font-serif);font-size:var(--display-sm);letter-spacing:var(--tracking-display);font-weight:500;line-height:var(--leading-tight);color:var(--ink);margin:0}@media (width>=768px){.page-title{font-size:var(--display-md)}}.page-eyebrow{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:var(--tracking-eyebrow);font-size:var(--text-2xs);color:var(--ink-faint);margin-bottom:var(--space-2)}.card{border:1px solid var(--paper-rule);background:var(--paper);padding:var(--space-5);transition:border-color var(--motion-base)}.card:hover{border-color:var(--ink-ghost)}.card__header{justify-content:space-between;align-items:baseline;gap:var(--space-4);margin-bottom:var(--space-3);display:flex}.card__title{font-family:var(--font-serif);font-size:var(--display-xs);letter-spacing:var(--tracking-display);font-weight:500;line-height:var(--leading-snug)}.card__meta{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--ink-faint);letter-spacing:.05em}.card__body{font-size:var(--text-base);line-height:var(--leading-normal);color:var(--ink-soft)}.dialog-backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);padding:var(--space-4);z-index:100;animation:dialog-fade var(--motion-base);background:#1a161266;place-items:center;display:grid;position:fixed;inset:0}.dialog{background:var(--paper);border:1px solid var(--ink);padding:var(--space-6);width:100%;max-width:480px;max-height:90vh;animation:dialog-rise var(--motion-slow);overflow-y:auto}.dialog__title{font-family:var(--font-serif);font-size:var(--display-xs);letter-spacing:var(--tracking-display);margin-bottom:var(--space-3);font-weight:500}.dialog__body{margin-bottom:var(--space-5);color:var(--ink-soft);line-height:var(--leading-normal)}.dialog__actions{gap:var(--space-2);justify-content:flex-end;display:flex}@keyframes dialog-fade{0%{opacity:0}to{opacity:1}}@keyframes dialog-rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}*{scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{display:none}html,body,#root{min-height:100vh}body{font-family:var(--font-mono);font-size:var(--base-size);line-height:var(--leading-normal);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer;color:inherit;background:0 0;border:none}input,textarea{font:inherit;color:inherit;background:0 0}.landing{background:var(--paper);place-items:center;min-height:100vh;padding:2rem;display:grid;position:relative;overflow:hidden}.landing-grid{background-image:radial-gradient(circle at 1px 1px, var(--paper-rule) 1px, transparent 0);pointer-events:none;background-position:0 0;background-size:28px 28px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(#000 35%,#0000 80%);mask-image:radial-gradient(#000 35%,#0000 80%)}.landing-inner{text-align:center;flex-direction:column;align-items:center;max-width:480px;display:flex;position:relative}.landing-logo{color:var(--ink);margin-bottom:1.75rem}.landing-title{letter-spacing:.42em;text-transform:uppercase;color:var(--ink);margin-bottom:1.5rem;padding-left:.42em;font-size:.95rem;font-weight:500}.landing-rule{background:var(--ink);opacity:.7;width:56px;height:1px;margin-bottom:3.25rem}.landing-denied{font-size:var(--text-sm);letter-spacing:.06em;color:var(--danger);margin-top:-1.75rem;margin-bottom:1.75rem}.gsi-button{color:#1f1f1f;letter-spacing:.21px;cursor:pointer;background:#fff;border:1px solid #dadce0;border-radius:4px;justify-content:center;align-items:center;gap:.625rem;min-width:220px;height:40px;padding:0 12px;font-family:Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:500;transition:background-color .15s,box-shadow .15s,border-color .15s;display:inline-flex}.gsi-button:hover:not(:disabled){background:#f8faff;border-color:#c6c8cc;box-shadow:0 1px 2px #3c404326,0 1px 3px 1px #3c40431a}.gsi-button:active:not(:disabled){background:#eef3fc}.gsi-button:focus-visible{outline:none;box-shadow:0 0 0 3px #4285f459}.gsi-button:disabled{opacity:.65;cursor:not-allowed}.gsi-icon{flex-shrink:0}.gsi-label{white-space:nowrap}.landing-logo--spin{transform-origin:50%;animation:.9s linear infinite landing-logo-spin}@keyframes landing-logo-spin{to{transform:rotate(360deg)}}@media (width<=480px){.landing-title{letter-spacing:.3em;font-size:.85rem}.landing-rule{margin-bottom:2.5rem}.landing-logo{margin-bottom:1.25rem}}
