/* ============================================================
   TOKENS — JMU purple #450084 as the ink, JMU gold #CBB677 for travel.
   ============================================================ */
:root{
  --paper:#F5F3F8;
  --card:#FFFFFF;
  --card-2:#EFECF5;
  --rest-bg:#E4DEF0;
  --sink:#E5E1EE;
  --ink:#1B1424;
  --ink-2:#4A4159;
  --ink-3:#807891;
  --rule:#DDD7E7;
  --rule-firm:#C2B9D2;

  --jmu:#450084;
  --jmu-ink:#3A006E;
  --jmu-soft:#EBE1F5;
  --jmu-mid:#B599CE;
  --on-jmu:#FFFFFF;

  --gold-ink:#6E5C22;
  --gold:#CBB677;
  --gold-soft:#F5F0E2;
  --toast-accent:#CBB677;

  --b-travel:#6E5C22;
  --b-people:#2F5F75;
  --b-work:#4A4159;
  --b-cup:#8E2A31;
  --b-out:#4F6717;
  --b-win:#450084;

  --dot:rgba(69,0,132,.14);
  --lift:0 1px 1px rgba(27,20,36,.04), 0 6px 18px rgba(27,20,36,.06);
  --lift-high:0 2px 8px rgba(27,20,36,.10), 0 28px 54px rgba(27,20,36,.16);

  --sans:"Instrument Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
  --mono:"DM Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --pen:"Ephesis","Segoe Script","Brush Script MT",cursive;
  --hand:"Caveat","Segoe Print","Bradley Hand",cursive;
  --r:9px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --paper:#131019;
    --card:#1C1726;
    --card-2:#17131F;
    --rest-bg:#0E0A15;
    --sink:#272134;
    --ink:#EDE9F2;
    --ink-2:#B3AAC3;
    --ink-3:#7F7691;
    --rule:#2F2841;
    --rule-firm:#473D5F;
    --jmu:#BB9FDB;
    --jmu-ink:#D3BEE9;
    --jmu-soft:#2B1B41;
    --jmu-mid:#8E6FB4;
    --on-jmu:#1A0B2B;
    --gold-ink:#D6C186;
    --gold:#CBB677;
    --gold-soft:#302818;
    --toast-accent:#4A2F08;
    --b-travel:#D6C186;
    --b-people:#77B2CC;
    --b-work:#B3AAC3;
    --b-cup:#DE8A8F;
    --b-out:#A8C765;
    --b-win:#BB9FDB;
    --dot:rgba(181,153,206,.17);
    --lift:0 1px 1px rgba(0,0,0,.34), 0 6px 18px rgba(0,0,0,.34);
    --lift-high:0 2px 8px rgba(0,0,0,.44), 0 28px 54px rgba(0,0,0,.52);
  }
}
:root[data-theme="dark"]{
  --paper:#131019;
  --card:#1C1726;
  --card-2:#17131F;
  --rest-bg:#0E0A15;
  --sink:#272134;
  --ink:#EDE9F2;
  --ink-2:#B3AAC3;
  --ink-3:#7F7691;
  --rule:#2F2841;
  --rule-firm:#473D5F;
  --jmu:#BB9FDB;
  --jmu-ink:#D3BEE9;
  --jmu-soft:#2B1B41;
  --jmu-mid:#8E6FB4;
  --on-jmu:#1A0B2B;
  --gold-ink:#D6C186;
  --gold:#CBB677;
  --gold-soft:#302818;
  --toast-accent:#4A2F08;
  --b-travel:#D6C186;
  --b-people:#77B2CC;
  --b-work:#B3AAC3;
  --b-cup:#DE8A8F;
  --b-out:#A8C765;
  --b-win:#BB9FDB;
  --dot:rgba(181,153,206,.17);
  --lift:0 1px 1px rgba(0,0,0,.34), 0 6px 18px rgba(0,0,0,.34);
  --lift-high:0 2px 8px rgba(0,0,0,.44), 0 28px 54px rgba(0,0,0,.52);
}

/* ============================================================
   BASE — dot paper
   ============================================================ */
*{box-sizing:border-box}
[hidden]{display:none !important}
body{
  margin:0;
  color:var(--ink);
  background-color:var(--paper);
  background-image:radial-gradient(circle at center,var(--dot) 1.1px,transparent 1.2px);
  background-size:22px 22px;
  background-position:11px 11px;
  font-family:var(--sans);
  font-size:15px;
  line-height:1.45;
  -webkit-font-smoothing:antialiased;
}
body.drawer-open{overflow:hidden}
button,input,textarea,select{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--jmu);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion: reduce){*,*::before,*::after{transition:none !important;animation:none !important}}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.icon{width:1em;height:1em;fill:currentColor;flex:none}

/* ============================================================
   HEADER
   ============================================================ */
.app{max-width:1600px;margin:0 auto;padding:24px 24px 80px}
.topbar{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:18px}
.identity{display:flex;flex-direction:column;gap:0;min-width:0}
.eyebrow{display:flex;align-items:baseline;gap:8px;margin:0 0 2px;color:var(--jmu)}
.brand-wordmark{font-family:var(--hand);font-size:22px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--jmu)}
.brand-subtitle,.app-version{font-family:var(--mono);font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.app-version{margin-left:0}
.monthname{
  font-family:var(--pen);font-weight:400;font-size:clamp(44px,5.6vw,68px);
  line-height:.95;margin:0;color:var(--ink);text-wrap:balance;
}
.monthname .yr{color:var(--jmu-mid)}
.controls{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.btn{
  display:inline-flex;align-items:center;gap:7px;
  background:var(--card);color:var(--ink-2);
  border:1px solid var(--rule);border-radius:7px;padding:7px 12px;cursor:pointer;
  font-size:13.5px;font-weight:500;transition:border-color .15s,color .15s,background .15s;
}
.btn:hover{border-color:var(--rule-firm);color:var(--ink)}
.btn.step{padding:7px 10px;font-size:16px;line-height:1}
.btn.primary{background:var(--jmu);border-color:var(--jmu);color:var(--on-jmu)}
.btn.primary:hover{opacity:.9;color:var(--on-jmu);border-color:var(--jmu)}
.btn.sm{padding:5px 9px;font-size:12.5px}
.btn.tiny{padding:3px 7px;font-size:11.5px}
#viewzonebtn{
  background:var(--jmu-soft);border-color:var(--jmu);color:var(--jmu-ink);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--jmu) 18%,transparent);
}
#viewzonebtn::after{content:"⌄";font-size:11px;line-height:1;color:var(--ink-3)}
#viewzonebtn[aria-expanded="true"]::after{content:"⌃"}

.savepill{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);display:inline-flex;align-items:center;gap:6px;padding:0 4px}
.savepill .dot{width:6px;height:6px;border-radius:50%;background:var(--ink-3);flex:none}
.savepill[data-state="saved"] .dot{background:var(--jmu)}
.savepill[data-state="saving"] .dot,.savepill[data-state="local"] .dot{background:var(--gold)}

/* ============================================================
   MONTH GRID
   ============================================================ */
.scroller{overflow-x:auto;padding-bottom:4px}
.board{min-width:1000px}
.weekhead{display:grid;grid-template-columns:repeat(5,1fr) 14px repeat(2,1fr);gap:8px;margin-bottom:8px;padding:0 2px}
.wd{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.wd.rest{color:var(--jmu)}

.week{margin-bottom:8px}
.week-days{display:grid;grid-template-columns:repeat(5,1fr) 14px repeat(2,1fr);gap:8px;grid-template-rows:180px}

.day{
  position:relative;background:var(--card);border:1px solid var(--rule);border-radius:var(--r);
  padding:9px 10px 10px;height:180px;min-height:180px;max-height:180px;overflow:hidden;
  display:flex;flex-direction:column;gap:6px;cursor:pointer;text-align:left;
  transition:border-color .15s,box-shadow .15s,transform .12s;
}
.day-open{
  position:absolute;inset:0;z-index:2;width:100%;height:100%;padding:0;
  border:0;border-radius:inherit;background:transparent;cursor:pointer;
}
.day-open:focus-visible{outline:3px solid var(--jmu);outline-offset:-3px}
.day > :not(.day-open){position:relative;z-index:1;pointer-events:none}
.day .pri .tick{position:relative;z-index:3;pointer-events:auto}
.day:hover{border-color:var(--jmu-mid);box-shadow:var(--lift);transform:translateY(-1px)}
.day.rest{background:var(--rest-bg)}
.day.outside{opacity:.4}
/* Every custom colour ships a light-theme and a dark-theme variant; the
   base assignment lives here, the theme blocks only swap which one wins. */
.day.hasgoal{--band:var(--band-l)}
.day.hasgoal::before{
  content:"";position:absolute;inset:0 0 auto 0;height:3px;
  background:var(--band);border-radius:var(--r) var(--r) 0 0;pointer-events:none;
}
.bar{--tc:var(--tl)}
.goalchip{--goal:var(--gl)}
.goalpick button{--gc:var(--gl)}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .day.hasgoal{--band:var(--band-d)}
  :root:not([data-theme="light"]) .bar{--tc:var(--td)}
  :root:not([data-theme="light"]) .goalchip{--goal:var(--gd)}
  :root:not([data-theme="light"]) .goalpick button{--gc:var(--gd)}
}
:root[data-theme="dark"] .day.hasgoal{--band:var(--band-d)}
:root[data-theme="dark"] .bar{--tc:var(--td)}
:root[data-theme="dark"] .goalchip{--goal:var(--gd)}
:root[data-theme="dark"] .goalpick button{--gc:var(--gd)}
.day.today{border-color:var(--jmu)}
.day.today::after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 1px var(--jmu);pointer-events:none}

.day-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex:none}
.daynum{font-family:var(--mono);font-weight:500;font-size:19px;line-height:1;color:var(--ink-2)}
.day.today .daynum{color:var(--jmu)}
.day.outside .daynum{color:var(--ink-3)}
.stack{display:flex;flex-direction:column;gap:3px;min-width:0}
.todaytag{font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--jmu)}
.dtype{
  font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;
  padding:1px 5px;border-radius:4px;align-self:flex-start;
}
.dtype.work{background:var(--jmu-soft);color:var(--jmu-ink)}
.dtype.holiday{background:var(--gold-soft);color:var(--gold-ink)}
.dtype.off{background:var(--sink);color:var(--ink-3)}
.dtype.tt{background:transparent;color:var(--ink-3);box-shadow:inset 0 0 0 1px var(--rule-firm)}

.chips{display:flex;flex-direction:column;align-items:flex-end;gap:3px;max-width:78%;min-width:0}
.goalchip{
  display:inline-flex;align-items:center;gap:5px;max-width:100%;
  font-family:var(--mono);font-size:9.5px;letter-spacing:.07em;text-transform:uppercase;
  color:var(--goal);padding:2px 6px;border-radius:4px;overflow:hidden;
  border:1px solid var(--goal);
}
.goalchip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.place{
  display:inline-flex;align-items:center;gap:5px;max-width:100%;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3);padding:3px 6px;border-radius:5px;background:var(--sink);overflow:hidden;
}
.place span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.place.moving{background:var(--gold-soft);color:var(--gold-ink)}
.legchip{
  display:inline-flex;align-items:center;gap:5px;max-width:100%;
  font-family:var(--mono);font-size:9.5px;color:var(--gold-ink);
  padding:2px 6px;border-radius:5px;border:1px solid var(--gold);overflow:hidden;
}
.legchip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.route,.legrow{
  display:flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10.5px;
  color:var(--gold-ink);background:var(--gold-soft);border-radius:5px;padding:3px 7px;
}
.route span,.legrow .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.legrow .lt{flex:none;opacity:.85}
.journeys{display:flex;flex-direction:column;gap:3px}

.fixed{display:flex;flex-direction:column;gap:3px;min-width:0}
.fx{display:flex;gap:6px;align-items:flex-start;min-width:0;font-size:12.5px;color:var(--ink-2);line-height:1.3}
.fx .t{font-family:var(--mono);font-size:10px;line-height:1.15;color:var(--ink-3);flex:none;min-width:36px;max-width:68px;white-space:normal}
.fx .b{width:6px;height:6px;flex:none;margin-top:5px;border-radius:2px}
.fx.class .b{background:var(--jmu)}
.fx.meeting .b{border:1.5px solid var(--jmu);border-radius:50%;background:transparent}
.fx.other .b{background:var(--ink-3);border-radius:50%}
.fx .n{
  flex:1;min-width:0;white-space:normal;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;
}
.event-location{color:var(--ink-3)}
.rep{color:var(--ink-3);flex:none;width:9px;height:9px;opacity:.8}

.hair{height:1px;background:var(--rule);margin:1px 0}
.pris{display:flex;flex-direction:column;gap:4px;min-width:0}
.pri{display:flex;gap:6px;align-items:flex-start;font-size:13px;font-weight:500;line-height:1.3}
.pri .tick{width:13px;height:13px;flex:none;margin-top:2px;border-radius:3px;padding:0;border:1.5px solid var(--jmu);background:transparent;cursor:pointer;display:grid;place-items:center}
.pri .tick .icon{width:8px;height:8px;color:var(--on-jmu);opacity:0}
.pri.done .tick{background:var(--jmu)}
.pri.done .tick .icon{opacity:1}
.pri.done{color:var(--ink-3);font-weight:400}
.pri.done .p{text-decoration:line-through}
.pri .p{
  flex:1;min-width:0;white-space:normal;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;
}
.whisper{font-size:11.5px;color:var(--ink-3);line-height:1.35;margin-top:auto;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

.ribbon{display:flex;flex-direction:column;gap:3px;margin-top:3px}
.ribbon:empty{display:none}
.lane{display:grid;grid-template-columns:repeat(5,1fr) 14px repeat(2,1fr);gap:8px}
.bar{
  display:flex;align-items:center;gap:6px;height:21px;padding:0 8px;border-radius:5px;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;
  overflow:hidden;cursor:pointer;border:1px solid var(--tc);color:var(--tc);
  background:color-mix(in srgb,var(--tc) 11%,transparent);appearance:none;text-align:left;min-width:0;
}
.bar span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar.cont-l{border-top-left-radius:0;border-bottom-left-radius:0;border-left-style:dashed}
.bar.cont-r{border-top-right-radius:0;border-bottom-right-radius:0;border-right-style:dashed}

/* ============================================================
   NOTEBOOK TABS
   ============================================================ */
.tabs-shell{display:flex;gap:4px;align-items:flex-end;margin:30px 0 0;padding-left:6px;flex-wrap:wrap}
.tabs{display:flex;gap:4px;align-items:flex-end;flex-wrap:wrap}
.tab{
  position:relative;background:var(--card-2);border:1px solid var(--rule);border-bottom:none;
  border-radius:8px 8px 0 0;padding:9px 14px 10px;cursor:pointer;margin-bottom:-1px;
  font-family:var(--mono);font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);
  transition:color .15s,background .15s;
}
.tab:hover{color:var(--ink-2)}
.tab[aria-selected="true"]{background:var(--card);color:var(--jmu);border-color:var(--rule-firm);box-shadow:inset 0 3px 0 var(--jmu);padding-top:11px}
.tab .ct{color:var(--ink-3);margin-left:6px}
.tab[aria-selected="true"] .ct{color:var(--gold-ink)}
.tab.add{font-size:14px;padding:9px 12px 10px;color:var(--ink-3)}
.tab{touch-action:pan-y;user-select:none}
.tab.dragging{opacity:.45}
.tab.drop-l{box-shadow:inset 3px 0 0 var(--gold)}
.tab.drop-r{box-shadow:inset -3px 0 0 var(--gold)}
.tab[aria-selected="true"].drop-l{box-shadow:inset 0 3px 0 var(--jmu),inset 3px 0 0 var(--gold)}
.tab[aria-selected="true"].drop-r{box-shadow:inset 0 3px 0 var(--jmu),inset -3px 0 0 var(--gold)}

.panel{background:var(--card);border:1px solid var(--rule-firm);border-radius:0 9px 9px 9px;padding:22px 22px 24px;min-height:240px}
.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:14px;flex-wrap:wrap}
.panel-title{font-family:var(--hand);font-weight:600;font-size:27px;line-height:1.05;margin:0;color:var(--ink)}
.panel-title-in{font-family:var(--hand);font-weight:600;font-size:27px;line-height:1.05;border:0;background:transparent;padding:0;color:var(--ink);min-width:120px}
.panel-title-in:focus{outline:none;border-bottom:1px solid var(--jmu)}
.panel-sub{font-size:12.5px;color:var(--ink-3);max-width:54ch}
.panel-acts{display:flex;gap:6px;align-items:center}

.notes-area{
  width:100%;min-height:230px;resize:vertical;border:0;background:transparent;padding:2px 0;
  font-family:var(--hand);font-size:19px;line-height:30px;color:var(--ink);
  background-image:repeating-linear-gradient(to bottom,transparent 0 29px,var(--rule) 29px 30px);
}
.notes-area:focus{outline:none}

.list{display:flex;flex-direction:column;gap:7px}
.entry{display:flex;align-items:flex-start;gap:10px;background:var(--card);border:1px solid var(--rule);border-radius:8px;padding:9px 11px}
.entry.done{opacity:.5}
.entry .grow{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.entry .who{font-weight:600;font-size:14px}
.entry .meta{font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--ink-3);text-transform:uppercase}
.entry .meta.warm{color:var(--gold-ink)}
.entry input.bare{border:0;background:transparent;width:100%;font-size:14px;padding:0}
.entry input.bare:focus{outline:none}
.entry.done input.bare{text-decoration:line-through;color:var(--ink-3)}
.entry .acts{display:flex;gap:4px;align-items:center;flex:none}

.tick2{width:18px;height:18px;flex:none;border-radius:5px;border:1.5px solid var(--jmu);background:transparent;cursor:pointer;display:grid;place-items:center;padding:0;margin-top:1px}
.tick2[aria-checked="true"]{background:var(--jmu)}
.tick2 .icon{width:10px;height:10px;color:var(--on-jmu);opacity:0}
.tick2[aria-checked="true"] .icon{opacity:1}
.x{border:0;background:transparent;cursor:pointer;color:var(--ink-3);font-size:17px;line-height:1;padding:2px 5px;flex:none;border-radius:4px}
.x:hover{color:var(--b-cup)}

.addrow{display:flex;gap:6px;margin-top:12px}
.addrow .in{flex:1}

.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:10px}
.cardx{background:var(--card);border:1px solid var(--rule);border-radius:9px;padding:12px 13px;display:flex;flex-direction:column;gap:8px;position:relative}
.cardx .no{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);letter-spacing:.06em}
.cardx .txt{font-size:14px;line-height:1.4;flex:1}
.cardx .foot{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cardx .dt{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:20px;font-family:var(--mono);font-size:10px;letter-spacing:.09em;text-transform:uppercase;border:1px solid currentColor}
.badge.travel{color:var(--b-travel)}
.badge.people{color:var(--b-people)}
.badge.work{color:var(--b-work)}
.badge.cup{color:var(--b-cup)}
.badge.out{color:var(--b-out)}
.badge.win{color:var(--b-win)}
.badge .pip{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}
.empty{font-family:var(--hand);font-size:21px;color:var(--ink-3);line-height:1.4;padding:10px 0 4px;text-wrap:balance;max-width:44ch}

/* ============================================================
   DRAWER
   ============================================================ */
.scrim{position:fixed;inset:0;background:rgba(20,12,30,.36);opacity:0;pointer-events:none;transition:opacity .2s;z-index:40}
.scrim.on{opacity:1;pointer-events:auto}
.drawer{
  position:fixed;top:0;right:0;bottom:0;width:min(500px,100vw);
  background:var(--paper);border-left:1px solid var(--rule-firm);box-shadow:var(--lift-high);z-index:50;
  transform:translateX(102%);transition:transform .22s cubic-bezier(.32,.72,0,1);
  display:flex;flex-direction:column;
}
.drawer.on{transform:none}
.drawer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:18px 20px 12px;border-bottom:1px solid var(--rule)}
.drawer-head > div{min-width:0}
.drawer-title{font-family:var(--pen);font-weight:400;font-size:38px;line-height:.95;margin:0}
.drawer-sub{font-family:var(--mono);font-size:11px;line-height:1.35;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-top:6px;overflow-wrap:anywhere}
.drawer-tabs{display:flex;padding:8px 20px 0;border-bottom:1px solid var(--rule);background:var(--paper);gap:4px}
.drawer-tab{
  flex:1;min-width:0;min-height:42px;border:0;border-radius:8px 8px 0 0;padding:8px 12px;
  background:transparent;color:var(--ink-3);cursor:pointer;font-family:var(--mono);
  font-size:11px;letter-spacing:.08em;text-transform:uppercase;
}
.drawer-tab[aria-selected="true"]{
  background:var(--card);color:var(--jmu);box-shadow:inset 0 3px 0 var(--jmu),0 -1px 0 var(--rule),1px 0 0 var(--rule),-1px 0 0 var(--rule);
}
.drawer-body{padding:18px 20px 48px;overflow-y:auto;display:flex;flex-direction:column;gap:20px}
.day-tabpanel{min-width:0;display:flex;flex-direction:column;gap:16px}

.day-view{--day-accent:var(--jmu)}
.day-hero{
  position:relative;overflow:hidden;padding:20px;border:1px solid var(--rule-firm);border-radius:14px;
  background:linear-gradient(145deg,var(--card),color-mix(in srgb,var(--jmu-soft) 70%,var(--card)));
  box-shadow:var(--lift);display:flex;flex-direction:column;gap:14px;
}
.day-hero::before{content:"";position:absolute;inset:0 auto 0 0;width:5px;background:var(--day-accent)}
.day-hero-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.day-hero-date{display:flex;align-items:flex-end;gap:11px;min-width:0}
.day-hero-number{font-family:var(--pen);font-size:70px;line-height:.72;color:var(--jmu);flex:none}
.day-hero-words{display:flex;flex-direction:column;min-width:0}
.day-hero-weekday{font-family:var(--hand);font-weight:600;font-size:26px;line-height:1.05}
.day-hero-month{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}
.day-view-zone{display:inline-flex;align-items:center;gap:5px;max-width:48%;min-width:0;padding:4px 7px;border:1px solid var(--rule);border-radius:20px;background:var(--card);font-family:var(--mono);font-size:9.5px;line-height:1.2;color:var(--ink-3);text-align:right;overflow-wrap:anywhere}
.day-statuses,.day-goals{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.day-status{
  display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border-radius:20px;
  background:var(--sink);color:var(--ink-2);font-family:var(--mono);font-size:9.5px;letter-spacing:.05em;text-transform:uppercase;
}
.day-status.travel{background:var(--gold-soft);color:var(--gold-ink)}
.day-status.official{background:var(--jmu-soft);color:var(--jmu-ink)}
.day-goal{display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border:1px solid var(--goal);border-radius:20px;color:var(--goal);font-size:11.5px}
.day-goal::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--goal);flex:none}
.day-goal span{white-space:normal;overflow-wrap:anywhere;text-overflow:clip}
.day-place{display:flex;align-items:flex-start;gap:8px;color:var(--ink-2);font-size:13.5px;overflow-wrap:anywhere}
.day-place .icon{width:14px;height:14px;margin-top:3px;color:var(--gold-ink)}

.day-card{background:var(--card);border:1px solid var(--rule);border-radius:12px;padding:14px 15px;box-shadow:var(--lift);min-width:0}
.day-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 11px}
.day-section-head h3{font-family:var(--hand);font-size:22px;line-height:1.05;margin:0}
.day-section-head span{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.day-agenda{display:flex;flex-direction:column}
.day-agenda-item{
  display:grid;grid-template-columns:minmax(76px,100px) 9px minmax(0,1fr);gap:9px;align-items:start;
  padding:10px 0;border-top:1px solid var(--rule);min-width:0;
}
.day-agenda-item:first-child{border-top:0;padding-top:2px}
.day-time{font-family:var(--mono);font-size:10.5px;line-height:1.45;color:var(--ink-3);white-space:normal;overflow-wrap:anywhere}
.day-event-dot{width:7px;height:7px;border-radius:2px;margin-top:5px;background:var(--ink-3)}
.day-agenda-item.class .day-event-dot{background:var(--jmu)}
.day-agenda-item.meeting .day-event-dot{background:transparent;border:1.5px solid var(--jmu);border-radius:50%}
.day-event-body{display:flex;min-width:0;flex-direction:column;gap:3px}
.day-event-name{font-size:14px;font-weight:600;line-height:1.35;white-space:normal;overflow-wrap:anywhere}
.day-meta{font-size:11.5px;line-height:1.4;color:var(--ink-3);white-space:normal;overflow-wrap:anywhere}
.day-priorities{display:flex;flex-direction:column;gap:8px}
.day-priority{display:flex;align-items:flex-start;gap:10px;width:100%;border:0;background:transparent;padding:3px 0;text-align:left;cursor:pointer;color:var(--ink)}
.day-priority .mark{width:18px;height:18px;display:grid;place-items:center;border:1.5px solid var(--jmu);border-radius:5px;flex:none;margin-top:1px}
.day-priority .mark .icon{width:10px;height:10px;color:var(--on-jmu);opacity:0}
.day-priority.done{color:var(--ink-3)}
.day-priority.done .mark{background:var(--jmu)}
.day-priority.done .mark .icon{opacity:1}
.day-priority.done .day-priority-text{text-decoration:line-through}
.day-priority-text{min-width:0;white-space:normal;overflow-wrap:anywhere;font-size:14px;line-height:1.4}
.day-route{display:flex;flex-direction:column;gap:9px}
.day-route-summary{display:flex;align-items:flex-start;gap:8px;font-weight:600;overflow-wrap:anywhere}
.day-leg{display:grid;grid-template-columns:24px minmax(0,1fr);gap:9px;padding-top:9px;border-top:1px solid var(--rule)}
.day-leg > .icon{width:15px;height:15px;margin-top:3px;color:var(--gold-ink)}
.day-leg-main{display:flex;flex-direction:column;gap:3px;min-width:0}
.day-leg-main strong,.day-leg-main span{overflow-wrap:anywhere}
.day-note{margin:0;font-family:var(--hand);font-size:19px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
.day-moments{display:flex;flex-direction:column;gap:7px}
.day-moment{display:flex;align-items:flex-start;gap:8px;font-size:13.5px;overflow-wrap:anywhere}
.day-moment .icon{width:13px;height:13px;color:var(--gold-ink);margin-top:3px}
.day-empty{text-align:center;padding:28px 18px;background:linear-gradient(145deg,var(--card),var(--card-2))}
.day-empty .empty{margin:0 auto 14px;padding:0}
.day-edit-cta{justify-content:center;width:100%;min-height:44px}

.field{display:flex;flex-direction:column;gap:8px}
.label{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);display:flex;align-items:center;justify-content:space-between;gap:8px}
.label .hint{font-family:var(--sans);letter-spacing:0;text-transform:none;font-size:11.5px;color:var(--ink-3)}
.helper{font-size:11.5px;color:var(--ink-3);line-height:1.4}

.in{background:var(--card);border:1px solid var(--rule);border-radius:7px;padding:9px 11px;width:100%;font-size:14px;transition:border-color .15s}
.in:focus{border-color:var(--jmu);outline:none}
.in.sm{padding:6px 8px;font-size:13px}
textarea.in{min-height:88px;resize:vertical;line-height:1.5}
select.in{cursor:pointer}

.seg{display:flex;background:var(--sink);border-radius:7px;padding:3px;gap:3px}
.seg button{flex:1;background:transparent;border:0;border-radius:5px;padding:6px 4px;cursor:pointer;font-family:var(--mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);transition:background .15s,color .15s}
.seg button:hover{color:var(--ink-2)}
.seg button[aria-pressed="true"]{background:var(--card);color:var(--ink);box-shadow:var(--lift)}
.seg button.moving[aria-pressed="true"]{color:var(--gold-ink)}

.goalpick{display:flex;flex-wrap:wrap;gap:6px}
.goalpick button{
  display:inline-flex;align-items:center;gap:6px;border:1px solid var(--rule);background:var(--card);
  border-radius:20px;padding:5px 11px;cursor:pointer;font-size:12.5px;color:var(--ink-2);
}
.goalpick button .pip{width:9px;height:9px;border-radius:50%;background:var(--gc);flex:none}
.goalpick button[aria-pressed="true"]{border-color:var(--gc);color:var(--gc);background:color-mix(in srgb,var(--gc) 10%,transparent)}
.custom-purpose{padding:11px;border:1px solid color-mix(in srgb,var(--gold-ink) 34%,var(--rule));border-radius:9px;background:color-mix(in srgb,var(--gold) 8%,var(--card))}
.custom-purpose-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:7px;align-items:center}
.custom-purpose-row .btn{min-height:38px}
.focus-colours{border:1px solid var(--rule);border-radius:9px;padding:10px 11px}
.focus-colours summary{cursor:pointer;font-size:13px;font-weight:600;min-height:24px}
.focus-colours[open]{display:grid;gap:12px}
.focus-colours .field{margin-top:12px}
.swatches label:focus-within{outline:2px solid var(--ink);outline-offset:3px}
.swatches button:disabled,.swatches label:has(input:disabled){opacity:.45;cursor:default}

.rows{display:flex;flex-direction:column;gap:6px}
.row{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--rule);border-radius:7px;padding:6px 8px;flex-wrap:wrap}
.row.serie{border-left:3px solid var(--jmu-mid)}
.event-row{align-items:center}
.event-row .event-time24{
  border:0;background:transparent;width:78px;flex:none;padding:4px 2px;
  font-family:var(--mono);font-size:13px;color:var(--ink-2);
}
.event-time-read{font-family:var(--mono);font-size:11.5px;color:var(--ink-3);flex:none}
.event-recurring-name{display:flex;align-items:center;gap:7px;flex:1;min-width:60px;font-size:14px}
.occurrence-badge,.exception-badge{
  display:inline-flex;align-items:center;width:max-content;border-radius:999px;padding:2px 6px;
  background:var(--jmu-soft);color:var(--jmu-ink);font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;
}
.changed-occurrence{box-shadow:inset 3px 0 0 var(--jmu-mid)}
.event-location-edit,.event-location-line,.event-context,.event-error{flex:1 0 100%}
.event-row > .event-zone{flex:1 0 100%}
.event-location-line{display:flex;align-items:center;gap:6px;color:var(--ink-3);font-size:12.5px}
.event-location-line .icon{width:12px;height:12px}
.event-context{padding-top:3px;border-top:1px dashed var(--rule)}
.row input[type="time"]{border:0;background:transparent;width:74px;flex:none;font-family:var(--mono);font-size:13px;color:var(--ink-2)}
.row input[type="time"]::-webkit-calendar-picker-indicator{display:none}
.row .txt{border:0;background:transparent;flex:1;min-width:80px;font-size:14px}
.row .txt:focus,.row input[type="time"]:focus{outline:none}
.row.done .txt{color:var(--ink-3);text-decoration:line-through}
.kind{border:0;background:var(--sink);border-radius:5px;padding:3px 6px;cursor:pointer;font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);flex:none}
.kind[data-k="class"]{background:var(--jmu-soft);color:var(--jmu-ink)}
.kind[data-k="meeting"]{background:transparent;box-shadow:inset 0 0 0 1px var(--jmu-mid);color:var(--jmu-ink)}
.mini{border:0;background:transparent;cursor:pointer;color:var(--ink-3);padding:3px 5px;border-radius:5px;font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;flex:none}
.mini:hover{background:var(--sink);color:var(--ink-2)}

.chk{width:17px;height:17px;flex:none;border-radius:5px;border:1.5px solid var(--jmu);background:transparent;cursor:pointer;display:grid;place-items:center;padding:0}
.chk[aria-checked="true"]{background:var(--jmu)}
.chk .icon{width:10px;height:10px;color:var(--on-jmu);opacity:0}
.chk[aria-checked="true"] .icon{opacity:1}

.subform{width:100%;display:flex;flex-direction:column;gap:7px;padding:9px 2px 3px;border-top:1px dashed var(--rule);margin-top:3px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:7px}
.wk7{display:flex;gap:4px;flex-wrap:wrap}
.wk7 button{flex:1;min-width:34px;border:1px solid var(--rule);background:var(--card);border-radius:5px;padding:5px 4px;cursor:pointer;font-family:var(--mono);font-size:10px;color:var(--ink-3)}
.wk7 button[aria-pressed="true"]{background:var(--jmu);border-color:var(--jmu);color:var(--on-jmu)}

.note-from-trip{font-size:12.5px;color:var(--ink-3);display:flex;align-items:center;gap:7px;padding:8px 10px;background:var(--card-2);border-radius:7px}
.note-from-trip b{color:var(--ink-2);font-weight:600}

.journey{background:var(--card);border:1px solid var(--rule);border-radius:8px;padding:9px 10px;display:flex;flex-direction:column;gap:7px}
.jhead{display:flex;align-items:center;gap:7px}
.modes{display:flex;gap:3px;flex:none}
.modes button{border:1px solid var(--rule);background:var(--card);border-radius:5px;padding:4px 6px;cursor:pointer;color:var(--ink-3);display:grid;place-items:center}
.modes button .icon{width:13px;height:13px}
.modes button[aria-pressed="true"]{background:var(--gold-soft);border-color:var(--gold);color:var(--gold-ink)}
.jno{font-family:var(--mono);font-size:12.5px;color:var(--gold-ink);border:0;background:transparent;flex:1;min-width:0;padding:0}
.jno:focus{outline:none}
.journey input[data-l="from"],.journey input[data-l="to"]{text-transform:uppercase;font-family:var(--mono)}

.trip-card{background:var(--card);border:1px solid var(--rule);border-radius:9px;padding:11px 12px;display:flex;flex-direction:column;gap:9px}
.trip-top{display:flex;align-items:center;gap:8px}
.swatch{width:13px;height:13px;border-radius:3px;flex:none;border:1px solid var(--rule-firm)}
.trip-name{font-weight:600;font-size:14.5px;flex:1;min-width:0;border:0;background:transparent;padding:0}
.trip-name:focus{outline:none}
.trip-dates{font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.dates2{display:grid;grid-template-columns:1fr 1fr;gap:7px}

.event-composer{
  display:flex;flex-direction:column;gap:10px;padding:12px;
  background:var(--card-2);border:1px dashed var(--rule-firm);border-radius:9px;
}
.event-composer-main,.event-add-actions{grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr)}
.event-add-actions .btn{justify-content:center}
.time24{font-family:var(--mono);letter-spacing:.03em}
.event-zone{display:flex;flex-direction:column;gap:7px;padding-top:8px;border-top:1px dashed var(--rule)}
.zone-switch{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:var(--ink-2)}
.zone-switch input{width:17px;height:17px;margin:0;accent-color:var(--jmu);flex:none}
.timezone-input{font-family:var(--mono);min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.china-preview{color:var(--jmu-ink);font-family:var(--mono);font-size:10.5px}

.repeat-add{width:100%;justify-content:center}
#f-addseries{border-style:dashed;margin-top:2px}
.recurring-list{gap:12px}
.recurring-card{gap:12px}
.recurring-card[data-draft="true"]{border-color:var(--jmu-mid);box-shadow:inset 3px 0 0 var(--jmu)}
.recurring-head{display:flex;align-items:flex-start;gap:9px}
.recurring-head > span:last-child{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px}
.repeat-mark{
  width:30px;height:30px;border-radius:8px;display:grid;place-items:center;flex:none;
  background:var(--jmu-soft);color:var(--jmu-ink);
}
.repeat-mark .rep{width:16px;height:16px;color:currentColor;opacity:1}
.series-field{display:flex;min-width:0;flex-direction:column;gap:5px}
.series-field em{font-style:normal;color:var(--ink-3)}
.recurring-name{font-weight:600}
.recurring-basics,.recurring-dates{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.repeat-days{margin:0;padding:0;border:0}
.repeat-days legend{padding:0 0 5px}
.series-summary{padding-top:9px;border-top:1px dashed var(--rule)}
.form-error{font-weight:600;color:var(--b-cup)}
.recurring-actions .btn{justify-content:center}
.recurring-delete{align-self:flex-start;color:var(--b-cup);border-color:color-mix(in srgb,var(--b-cup) 38%,var(--rule))}
.skipped-dates,.exception-dates{border-top:1px dashed var(--rule);padding-top:9px}
.skipped-dates summary,.exception-dates summary{cursor:pointer;font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.skipped-list{display:flex;flex-wrap:wrap;gap:6px;padding-top:9px}
.exception-list{display:flex;flex-direction:column;gap:7px;padding-top:9px}
.exception-row{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;padding:8px;border-radius:7px;background:var(--card-2)}
.exception-row > span:first-child{display:flex;min-width:0;flex-direction:column;gap:5px}
.exception-summary{font-size:12.5px;line-height:1.35;color:var(--ink-2);overflow-wrap:anywhere}
.exception-actions{display:flex;flex:none;flex-wrap:wrap;justify-content:flex-end;gap:5px}
.occurrence-card{gap:12px;border-color:var(--jmu-mid);box-shadow:inset 3px 0 0 var(--jmu)}
.occurrence-origin{display:flex;flex-direction:column;gap:3px;padding:9px 10px;background:var(--card-2);border-radius:7px}
.occurrence-origin strong{font-size:13.5px;color:var(--ink-2)}
.occurrence-status{padding:9px 10px;border:1px solid color-mix(in srgb,var(--b-cup) 28%,var(--rule));border-radius:7px;color:var(--ink-2);font-size:13px}
.occurrence-datetime,.occurrence-basics{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.occurrence-actions,.occurrence-secondary{display:flex;flex-wrap:wrap;gap:7px}
.occurrence-actions .btn{flex:1;justify-content:center}
.occurrence-secondary{padding-top:9px;border-top:1px dashed var(--rule)}
.occurrence-secondary .btn{flex:1;justify-content:center}
.occurrence-cancel{color:var(--b-cup)}

.swatches{display:flex;gap:5px;flex-wrap:wrap;align-items:center}
.swatches button{width:23px;height:23px;border-radius:5px;border:2px solid transparent;cursor:pointer;padding:0}
.swatches button[aria-pressed="true"]{border-color:var(--ink)}
.swatches label{
  width:23px;height:23px;border-radius:5px;border:1px dashed var(--rule-firm);cursor:pointer;
  display:grid;place-items:center;position:relative;overflow:hidden;color:var(--ink-3);font-size:12px;
}
.swatches label input{position:absolute;inset:0;opacity:0;cursor:pointer;border:0;padding:0}

.pop{position:absolute;right:0;top:calc(100% + 8px);z-index:30;background:var(--card);border:1px solid var(--rule-firm);border-radius:9px;box-shadow:var(--lift-high);padding:14px;width:284px;display:flex;flex-direction:column;gap:12px}
.popwrap{position:relative}
.view-zone-pop{width:340px}
.view-zone-heading{display:flex;flex-direction:column;gap:3px}
.view-zone-heading strong{font-family:var(--hand);font-size:21px;line-height:1.1}
.view-zone-heading > span{font-size:11.5px;line-height:1.4;color:var(--ink-3)}
.view-zone-options{display:flex;flex-direction:column;gap:6px}
.view-zone-option{
  display:flex;align-items:flex-start;gap:10px;padding:9px 10px;border:1px solid var(--rule);
  border-radius:8px;background:var(--card);cursor:pointer;
}
.view-zone-option:has(input:checked){border-color:var(--jmu);background:var(--jmu-soft)}
.view-zone-option input{margin:4px 0 0;accent-color:var(--jmu);flex:none}
.view-zone-option span{display:flex;flex-direction:column;min-width:0}
.view-zone-option b{font-size:13.5px;font-weight:600;color:var(--ink)}
.view-zone-option small{font-size:11.5px;line-height:1.35;color:var(--ink-3);overflow-wrap:anywhere}
.opt{display:flex;align-items:flex-start;gap:9px;cursor:pointer;font-size:13.5px;line-height:1.35}
.opt input{margin:3px 0 0;accent-color:var(--jmu);flex:none}
.opt small{display:block;color:var(--ink-3);font-size:11.5px}

.legend{display:flex;gap:16px;flex-wrap:wrap;align-items:center;margin-top:22px;padding-top:14px;border-top:1px solid var(--rule);font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
.legend i{display:inline-flex;align-items:center;gap:6px;font-style:normal}
.legend .b{width:7px;height:7px;border-radius:2px;background:var(--jmu)}
.legend .b.ring{border:1.5px solid var(--jmu);border-radius:50%;background:transparent}
.legend .b.pr{border:1.5px solid var(--jmu);border-radius:3px;background:transparent;width:9px;height:9px}
.linky{border:0;background:transparent;color:var(--jmu);cursor:pointer;font:inherit;padding:0;text-decoration:underline;text-underline-offset:3px}
.linky:hover{color:var(--jmu-ink)}

.toast{
  position:fixed;left:50%;bottom:28px;transform:translate(-50%,14px);
  background:var(--jmu);color:var(--on-jmu);border-radius:10px;padding:13px 18px;
  max-width:min(470px,92vw);z-index:70;box-shadow:var(--lift-high);opacity:0;pointer-events:none;
  transition:opacity .22s,transform .22s;display:flex;align-items:center;gap:11px;
}
.toast.on{opacity:1;transform:translate(-50%,0)}
.toast .icon{width:15px;height:15px;color:var(--toast-accent);flex:none}
.toast p{margin:0;font-size:14.5px;line-height:1.35;text-wrap:balance}
.toast em{font-style:normal;font-weight:600}

/* Component focus resets must not erase the keyboard focus ring. */
.panel-title-in:focus-visible,
.notes-area:focus-visible,
.entry input.bare:focus-visible,
.in:focus-visible,
.row .txt:focus-visible,
.row input[type="time"]:focus-visible,
.event-row .event-time24:focus-visible,
.jno:focus-visible,
.trip-name:focus-visible{
  outline:3px solid var(--jmu) !important;
  outline-offset:2px !important;
}

/* Coarse pointers get a comfortable target without inflating the desktop UI. */
@media screen and (pointer:coarse){
  .btn,.tab,.x,.mini,.kind,.seg button,.goalpick button,.wk7 button,
  .modes button,.linky,.opt{min-height:44px}
  .btn.step,.tab.add,.x,.modes button,.swatches button,.swatches label{min-width:44px}
  .swatches button,.swatches label{min-height:44px}
  .in,.row input[type="time"],.event-row .event-time24,.zone-switch{min-height:44px}
  .tick2,.chk{width:32px;height:32px}
  .day .pri .tick{width:28px;height:28px}
  .linky{display:inline-flex;align-items:center}
}

/* ============================================================
   PHONE MONTH MAP — the full month stays visible without panning.
   ============================================================ */
@media screen and (max-width:720px){
  .app{padding:14px 10px calc(56px + env(safe-area-inset-bottom))}
  .btn,.tab,.x,.mini,.kind,.seg button,.goalpick button,.wk7 button,
  .modes button,.linky,.opt{min-height:44px}
  .btn.step,.tab.add,.x,.modes button,.swatches button,.swatches label{min-width:44px}
  .swatches button,.swatches label{min-height:44px}
  .topbar{align-items:stretch;gap:12px;margin-bottom:12px}
  .identity,.controls{width:100%}
  .eyebrow{gap:7px}
  .brand-wordmark{font-size:21px}
  .app-version{display:none}
  .custom-purpose-row{grid-template-columns:1fr 1fr}
  .custom-purpose-row .in{grid-column:1/-1}
  .monthname{font-size:clamp(42px,13vw,52px);white-space:nowrap}
  .controls{gap:8px}
  .savepill{flex:1 0 100%;order:-1;min-height:24px;padding:0}
  .controls > .btn,.controls > .popwrap{flex:1 1 auto}
  .popwrap > .btn{width:100%;justify-content:center}

  .scroller{overflow:visible;padding:0}
  .board{width:100%;min-width:0}
  .weekhead,.week-days,.lane{
    grid-template-columns:repeat(5,minmax(0,1fr)) 5px repeat(2,minmax(0,1fr));
    gap:3px;
  }
  .week-days{grid-template-rows:76px}
  .weekhead{margin-bottom:4px;padding:0}
  .wd{min-width:0;text-align:center;font-size:9px;letter-spacing:.04em}
  .week{margin-bottom:4px}
  .day{
    min-width:0;height:76px;min-height:76px;max-height:76px;overflow:hidden;padding:6px 4px;gap:3px;
    border-radius:7px;touch-action:manipulation;
  }
  .drawer-tabs{padding:6px 12px 0}
  .drawer-tab{min-height:44px}
  .drawer-body{padding-left:14px;padding-right:14px}
  .day-hero{padding:17px 15px}
  .day-hero-number{font-size:62px}
  .day-hero-weekday{font-size:23px}
  .day-agenda-item{grid-template-columns:minmax(66px,82px) 8px minmax(0,1fr);gap:7px}
  .view-zone-pop{width:min(340px,calc(100vw - 20px));min-width:0}
  .day:hover{border-color:var(--rule);box-shadow:none;transform:none}
  .day.today:hover{border-color:var(--jmu)}
  .day-top{gap:2px}
  .daynum{font-size:15px}
  .todaytag{display:none}
  .dtype{width:7px;height:7px;padding:0;font-size:0;letter-spacing:0}
  .dtype.work{border-radius:2px}
  .dtype.holiday,.dtype.tt{border-radius:50%}
  .dtype.tt{background:transparent}

  .chips{width:auto;max-width:46%;gap:2px}
  .goalchip{display:none}
  .day-view .day-goal{display:inline-flex}
  .place,.legchip{width:20px;height:20px;justify-content:center;padding:0}
  .place span,.legchip span{display:none}

  .fixed{flex-direction:row;gap:3px}
  .fixed .fx{display:none}
  .fixed .fx:nth-child(-n+3){display:block;line-height:0}
  .fixed .fx .t,.fixed .fx .n,.fixed .fx .rep{display:none}
  .fixed .fx .b{display:block;width:7px;height:7px;margin:0}

  .pris{flex-direction:row;gap:3px}
  .pris .pri{display:none}
  .pris .pri:nth-child(-n+3){display:block;font-size:0}
  .pris .pri .tick,.pris .pri .p,.pris .pri .rep{display:none}
  .pris .pri:nth-child(-n+3)::before{
    content:"";display:block;width:8px;height:8px;border:1px solid var(--jmu);border-radius:2px;
  }
  .pris .pri.done::before{background:var(--jmu)}

  .journeys .legrow:not(:first-child){display:none}
  .journeys .legrow,.route{width:20px;min-height:16px;justify-content:center;padding:2px}
  .journeys .n,.journeys .lt,.route span{display:none}
  .hair,.whisper{display:none}

  .ribbon{gap:2px;margin-top:2px}
  .bar{height:8px;padding:0;border-radius:3px;font-size:0;pointer-events:none}
  .bar span,.bar .icon{display:none}

  .tabs-shell{margin-top:20px;padding-left:0;flex-wrap:nowrap;overflow:hidden}
  .tabs{
    flex:1;min-width:0;flex-wrap:nowrap;overflow-x:auto;
    overscroll-behavior-inline:contain;scroll-snap-type:x proximity;scrollbar-width:none;
  }
  .tabs::-webkit-scrollbar{display:none}
  .tab{flex:none;min-height:44px;scroll-snap-align:start}
  .panel{padding:16px 14px 20px;border-radius:9px}
  .cards{grid-template-columns:1fr}
  .entry{flex-wrap:wrap}
  .entry .acts{margin-left:auto;flex-wrap:wrap}
  .addrow{flex-wrap:wrap}
  .addrow .in{flex-basis:100%}

  .legend{gap:10px}
  .legend > i:last-of-type{width:100%;margin-left:0 !important;justify-content:flex-start;flex-wrap:wrap}

  .drawer{
    top:auto;left:0;right:0;bottom:0;width:100%;height:min(88dvh,760px);
    max-height:calc(100dvh - 16px);border-left:0;border-top:1px solid var(--rule-firm);
    border-radius:18px 18px 0 0;transform:translateY(102%);
  }
  .drawer-head{padding:calc(14px + env(safe-area-inset-top)) 14px 12px}
  .drawer-body{padding:16px 14px calc(40px + env(safe-area-inset-bottom))}
  .g3,.dates2{grid-template-columns:1fr}
  .recurring-basics,.recurring-dates,.event-composer-main,.event-add-actions,.occurrence-datetime,.occurrence-basics{grid-template-columns:1fr}
  .event-composer .in{min-height:44px;font-size:16px}
  .event-row .event-time24{min-height:44px;font-size:16px}
  .event-location-edit,.event-zone{width:100%}
  .zone-switch{min-height:44px}
  .recurring-card .in,.recurring-card .in.sm,.occurrence-card .in,.occurrence-card .in.sm{min-height:44px;font-size:16px}
  .recurring-delete{width:100%;justify-content:center}
  .exception-row{flex-direction:column}
  .exception-actions{width:100%;justify-content:stretch}
  .exception-actions .btn{flex:1;justify-content:center}
  input,textarea,select{font-size:16px}

  .pop{
    position:fixed;inset:auto 10px calc(10px + env(safe-area-inset-bottom));width:auto;
    max-height:min(70dvh,520px);overflow:auto;
  }
  .toast{bottom:calc(12px + env(safe-area-inset-bottom))}
}

/* ============================================================
   PRINT — A4 landscape
   ============================================================ */
.print-root{display:none}
@media print{
  :root,:root[data-theme="dark"],:root[data-theme="light"]{
    --paper:#FFFFFF;--card:#FFFFFF;--card-2:#F5F3F8;--rest-bg:#EBE5F4;--sink:#EEEBF3;
    --ink:#171021;--ink-2:#453C55;--ink-3:#7A7290;
    --rule:#CFC8DC;--rule-firm:#AFA5C4;
    --jmu:#450084;--jmu-ink:#3A006E;--jmu-soft:#EDE4F5;--jmu-mid:#B599CE;--on-jmu:#FFFFFF;
    --gold-ink:#6E5C22;--gold:#CBB677;--gold-soft:#F5F0E2;
    --b-travel:#6E5C22;--b-people:#2F5F75;--b-work:#4A4159;--b-cup:#8E2A31;--b-out:#4F6717;--b-win:#450084;
    --dot:transparent;--lift:none;--lift-high:none;
  }
  @page{size:A4 landscape;margin:9mm}
  html,body{background:#fff;background-image:none}
  .app,.drawer,.scrim,.toast{display:none !important}
  .print-root{display:block}
  .sheet{
    /* A4 landscape = 297mm wide x 210mm tall; 9mm margins each side.
       188mm leaves slack for sub-pixel rounding. */
    width:100%;height:188mm;display:flex;flex-direction:column;
    break-after:page;page-break-after:always;break-inside:avoid;page-break-inside:avoid;
  }
  .sheet:last-child{break-after:auto;page-break-after:auto}

  .p-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:2.5mm;margin-bottom:2.5mm;border-bottom:.75pt solid var(--jmu);flex:none}
  .p-title{font-family:var(--pen);font-weight:400;font-size:26pt;line-height:.95;margin:0;color:var(--jmu)}
  .p-title .yr{color:var(--ink-3)}
  .p-meta{font-family:var(--mono);font-size:8pt;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}

  .p-wd{display:grid;grid-template-columns:repeat(5,1fr) 3mm repeat(2,1fr);gap:1.6mm;flex:none;margin-bottom:1.2mm}
  .p-wd div{font-family:var(--mono);font-size:7.5pt;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
  .p-wd div.rest{color:var(--jmu)}

  .p-weeks{flex:1;display:flex;flex-direction:column;gap:1.6mm;min-height:0}
  .p-week{flex:1;display:flex;flex-direction:column;gap:.9mm;min-height:0}
  .p-days{flex:1;display:grid;grid-template-columns:repeat(5,1fr) 3mm repeat(2,1fr);grid-template-rows:minmax(0,1fr);grid-auto-rows:minmax(0,1fr);gap:1.6mm;min-height:0;overflow:hidden}
  .p-day{border:.5pt solid var(--rule);border-radius:1.6mm;padding:1.2mm 1.5mm;display:flex;flex-direction:column;gap:.5mm;overflow:hidden;min-height:0;background:var(--card);position:relative}
  .p-day.rest{background:var(--rest-bg)}
  .p-day.outside{opacity:.4}
  .p-day.today{border:1pt solid var(--jmu)}
  .p-day.hasgoal,.w-col.hasgoal{--band:var(--band-l)}
  .p-bar{--tc:var(--tl)}
  .p-day.hasgoal::before{content:"";position:absolute;inset:0 0 auto 0;height:1.2mm;background:var(--band);border-radius:1.6mm 1.6mm 0 0}
  .p-dtop{display:flex;align-items:baseline;justify-content:space-between;gap:1.5mm;flex:none}
  .p-num{font-family:var(--mono);font-size:10.5pt;line-height:1;color:var(--ink-2)}
  .p-tag{font-family:var(--mono);font-size:6pt;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);flex:none}
  .p-place{font-family:var(--mono);font-size:6.6pt;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);max-width:70%;min-width:0;display:flex;align-items:center;gap:.8mm;justify-content:flex-end}
  .p-place span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .p-place.moving{color:var(--gold-ink)}
  .pico{width:2.1mm;height:2.1mm;fill:currentColor;flex:none}
  .p-goal{font-family:var(--mono);font-size:6.2pt;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);flex:none}
  .p-line{font-size:7.2pt;line-height:1.2;color:var(--ink-2);display:flex;gap:1.2mm;overflow:hidden;flex:none}
  .p-line .t{font-family:var(--mono);color:var(--ink-3);flex:none}
  .p-line .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .p-more{font-family:var(--mono);font-size:6.6pt;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);flex:none}
  .p-pri{font-size:7.6pt;font-weight:600;line-height:1.2;color:var(--ink);display:flex;gap:1.2mm;align-items:flex-start;flex:none}
  .p-pri .k{width:1.9mm;height:1.9mm;border:.5pt solid var(--jmu);border-radius:.5mm;flex:none;margin-top:.5mm}
  .p-pri.done{color:var(--ink-3);font-weight:400;text-decoration:line-through}
  .p-rule{flex:1 1 0;min-height:0;background-image:repeating-linear-gradient(to bottom,transparent 0 4.8mm,var(--rule) 4.8mm 4.95mm);margin-top:.6mm}
  .p-ribbon{flex:none;display:flex;flex-direction:column;gap:.5mm}
  .p-lane{display:grid;grid-template-columns:repeat(5,1fr) 3mm repeat(2,1fr);gap:1.6mm}
  .p-bar{height:3.3mm;line-height:1;border-radius:.8mm;border:.5pt solid var(--tc);color:var(--tc);background:color-mix(in srgb,var(--tc) 12%,#fff);padding:0 1.4mm;display:flex;align-items:center;gap:1mm;overflow:hidden;font-family:var(--mono);font-size:6.4pt;letter-spacing:.06em;text-transform:uppercase}
  .p-bar span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

  .w-cols{flex:1;display:grid;grid-template-columns:repeat(5,1fr) 4mm repeat(2,1fr);grid-template-rows:minmax(0,1fr);grid-auto-rows:minmax(0,1fr);gap:2mm;min-height:0;overflow:hidden}
  .w-col{border:.5pt solid var(--rule);border-radius:2mm;padding:2mm;display:flex;flex-direction:column;gap:1.2mm;min-height:0;overflow:hidden;background:var(--card)}
  .w-col.rest{background:var(--rest-bg)}
  .w-col.today{border:1pt solid var(--jmu)}
  .w-col{position:relative}
  .w-col.hasgoal::before{content:"";position:absolute;inset:0 0 auto 0;height:1.5mm;background:var(--band);border-radius:2mm 2mm 0 0}
  .w-top{display:flex;align-items:baseline;justify-content:space-between;gap:1mm;flex:none}
  .w-dow{font-family:var(--mono);font-size:7.5pt;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
  .w-num{font-family:var(--mono);font-size:14pt;line-height:1;color:var(--ink-2)}
  .w-goal{font-family:var(--mono);font-size:6.4pt;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);flex:none}
  .w-place{flex:none;font-family:var(--mono);font-size:7pt;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);border-bottom:.5pt solid var(--rule);padding-bottom:1mm;display:flex;align-items:center;gap:1mm;min-height:4mm}
  .w-place.moving{color:var(--gold-ink)}
  .w-place span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .w-sect{font-family:var(--mono);font-size:6.4pt;letter-spacing:.14em;text-transform:uppercase;color:var(--jmu);margin-top:.8mm;flex:none}
  .w-item{font-size:8pt;line-height:1.3;color:var(--ink-2);display:flex;gap:1.2mm;flex:none}
  .w-item .t{font-family:var(--mono);color:var(--ink-3);flex:none}
  .w-item .n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .w-pri{font-size:8.4pt;font-weight:600;line-height:1.3;display:flex;gap:1.4mm;align-items:flex-start;flex:none}
  .w-pri .k{width:2.2mm;height:2.2mm;border:.5pt solid var(--jmu);border-radius:.6mm;flex:none;margin-top:.6mm}
  .w-pri.done{color:var(--ink-3);font-weight:400;text-decoration:line-through}
  .w-note{font-size:7.6pt;line-height:1.35;color:var(--ink-2);white-space:pre-wrap;flex:none}
  .w-rule{flex:1 1 0;min-height:0;background-image:repeating-linear-gradient(to bottom,transparent 0 5.4mm,var(--rule) 5.4mm 5.55mm);margin-top:1mm}

  .l-cols{flex:1;display:grid;gap:5mm;min-height:0;overflow:hidden}
  .l-col{display:flex;flex-direction:column;gap:1.5mm;min-height:0;overflow:hidden}
  .l-h{font-family:var(--mono);font-size:7.5pt;letter-spacing:.14em;text-transform:uppercase;color:var(--jmu);border-bottom:.5pt solid var(--jmu);padding-bottom:1mm;flex:none}
  .l-note{font-family:var(--hand);font-size:11pt;line-height:5.2mm;white-space:pre-wrap;color:var(--ink-2);flex:none}
  .l-fill{flex:1 1 0;min-height:0;background-image:repeating-linear-gradient(to bottom,transparent 0 5.1mm,var(--rule) 5.1mm 5.25mm)}
  .l-item{font-size:8.4pt;line-height:1.35;display:flex;gap:1.4mm;align-items:flex-start;flex:none;color:var(--ink-2)}
  .l-item .k{width:2.2mm;height:2.2mm;border:.5pt solid var(--jmu);border-radius:.6mm;flex:none;margin-top:.7mm}
  .l-item.done{color:var(--ink-3);text-decoration:line-through}
  .l-item b{color:var(--ink);font-weight:600}
  .l-item .ago{font-family:var(--mono);font-size:6.8pt;color:var(--ink-3);white-space:nowrap;margin-left:auto}
}

/* Calendar tools, search and event actions */
.feature-card{display:grid;gap:12px;padding:16px;border:1px solid var(--rule);border-radius:12px;background:var(--card)}
.feature-card h3{font-size:17px;margin:0;color:var(--ink)}
.feature-results{display:grid;gap:8px;max-height:420px;overflow:auto}
.find-result{display:grid;gap:6px;width:100%;text-align:left;padding:12px;border:1px solid var(--rule);border-radius:8px;background:var(--card);color:var(--ink);cursor:pointer;overflow-wrap:anywhere}
.search-match{padding:12px;border:1px solid var(--jmu);border-radius:8px;background:var(--card);font-size:13px;overflow-wrap:anywhere}
.pack-dates{max-height:320px;overflow:auto;margin-top:10px}
.pack-dates>div,.ics-event{display:grid;gap:3px;padding:9px 0;border-bottom:1px solid var(--rule);font-size:13px;overflow-wrap:anywhere}
.timing-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px;width:100%}
.timing-fields [hidden]{display:none}
.event-row .subform{width:100%;display:grid;gap:10px}
#drawer-undo{flex-shrink:1;font-size:11px}
#event-undo[hidden],#drawer-undo[hidden]{display:none}
@media(max-width:600px){.timing-fields{grid-template-columns:1fr}.feature-card{padding:12px}.topbar .controls{gap:6px}#drawer-undo{max-width:90px;white-space:normal}}

.feature-card p{margin:0}
.event-row [hidden],.event-composer [hidden]{display:none}

/* Small notes */
.daily-quote{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;margin:0 0 18px;border:1px solid var(--rule);border-left:3px solid var(--gold);border-radius:var(--r);background:var(--card)}
.daily-quote[hidden]{display:none}
.daily-quote-copy{min-width:0}
.quote-label{display:block;font:10px var(--sans);letter-spacing:.06em;color:var(--ink-2);margin-bottom:5px}
.daily-quote q,.quote-entry q{display:block;font:20px var(--hand);color:var(--ink);overflow-wrap:anywhere}
.daily-quote cite,.quote-entry cite,.completion-quote cite{display:block;font:11px var(--sans);color:var(--ink-2);margin-top:4px}
.quote-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.quote-actions .btn[aria-pressed="true"]{background:var(--jmu-soft);border-color:var(--jmu-mid);color:var(--jmu-ink)}
.quote-shows{border:0;padding:0;margin:0}
.quote-entry{padding:16px 0;border-bottom:1px solid var(--rule)}
.quote-entry:last-child{border-bottom:0}
.quote-entry .quote-actions{margin-top:10px}
.completion-quote{display:block;margin-top:8px}
.completion-quote cite{color:inherit;opacity:.85}
@media(max-width:720px){.daily-quote{align-items:flex-start;flex-direction:column;gap:10px;padding:12px;margin-bottom:12px}.quote-actions{gap:10px}.quote-actions .btn{min-height:36px}.daily-quote q{font-size:22px}}

/* Flight information and labelled transport choices */
.journey .modes{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));flex:1;min-width:0;gap:4px}
.journey .modes button{display:flex;flex-direction:column;gap:4px;min-height:44px;padding:5px 3px;font:11px var(--sans)}
.journey .modes button .icon{width:15px;height:15px}
.journey .jhead{align-items:flex-start}
.journey-field{display:flex;flex-direction:column;gap:5px;min-width:0}
.journey-field>span{font:11px var(--sans);color:var(--ink-2)}
.journey-field .in{width:100%;min-width:0;box-sizing:border-box}
.flight-details{border-top:1px solid var(--rule);padding-top:9px}
.flight-details summary{cursor:pointer;color:var(--jmu-ink);font-size:12px;padding:4px 0}
.flight-details[open]>*:not(summary){margin-top:10px}
.flight-note{white-space:pre-wrap;overflow-wrap:anywhere}

/* Longer supplied quotes retain their full text, including dialogue breaks. */
.daily-quote q,.quote-entry q{white-space:pre-line;line-height:1.45}
.daily-quote q.quote-long,.quote-entry q.quote-long{font-size:18px;line-height:1.5}
.daily-quote>.quote-actions{flex-shrink:0}
.quote-entry[hidden]{display:none}
.quote-library-tools{display:flex;gap:12px;flex-wrap:wrap;margin-top:16px}
.quote-library-tools label{flex:1 1 160px;min-width:0}
.quote-library-tools input,.quote-library-tools select{display:block;width:100%;box-sizing:border-box;margin-top:6px}

/* Account window and installable phone/tablet edition. */
.app-version{text-transform:none}
.sync-status{font-size:12px;color:var(--ink-3);max-width:220px;line-height:1.3}
.account-dialog{box-sizing:border-box;width:min(560px,calc(100% - 24px));max-height:calc(100dvh - 32px);overflow:auto;border:1px solid var(--rule);border-radius:18px;padding:24px;background:var(--paper,#FBF7EF);color:var(--ink,#24202b);font:inherit}
.account-dialog::backdrop{background:rgba(25,14,40,.45)}
.account-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}
.account-heading h2{margin:0;font-family:'Caveat',cursive;font-size:32px}
.account-dialog .btn{margin:6px 8px 6px 0;white-space:normal;text-align:left}
.account-dialog .series-field{display:block;margin:12px 0}
.account-dialog .in{display:block;width:100%;margin-top:6px;font-size:16px}
.sync-conflict{border:1px solid var(--rule);border-radius:12px;padding:12px;margin:16px 0}
.sync-conflict label{display:block;margin:12px 0;cursor:pointer}
.sync-conflict pre{font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;max-height:220px;overflow:auto;padding:10px;background:var(--sink);border-radius:8px;margin:6px 0}
.app.sync-locked> :not(.topbar):not(#sync-lock){display:none!important}
.app.sync-locked .controls> :not(#account-button):not(#cloud-status){display:none!important}
#sync-lock{margin:24px}
@media(max-width:720px){.account-dialog{padding:18px;max-height:calc(100dvh - 16px)}.sync-status{max-width:160px}}
@media print{.account-dialog,#cloud-status,#account-button,#install-button,#sync-lock{display:none!important}}
