:root{
  --paper:#ffffff; --bg:#eef1f5; --ink:#2f3442; --muted:#7a8191; --line:#d4d7dd;
  --label:#cfe9fb;
  --c1:#dcd6fb; --c1s:#e9e6fd; --c2:#fdd5dc; --c2s:#feebee;
  --c3:#fde0cb; --c3s:#feeee3; --c4:#fbf3cf; --c4s:#f6f3e3; --c5:#e0efd2; --c5s:#eef6e6;
  --shadow:0 2px 10px rgba(40,50,70,.12);
  --tabw:30px;
  --safe-b:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:Nunito,system-ui,sans-serif;color:var(--ink);background:var(--bg);-webkit-tap-highlight-color:transparent;overscroll-behavior:none}
h1,h2,h3{font-family:Fredoka,Nunito,sans-serif;font-weight:600;margin:0}
.hidden{display:none!important}
button{font:inherit;color:inherit;cursor:pointer}
input,textarea,select{font:inherit;color:inherit}

/* login */
.screen{min-height:100%;display:grid;place-items:center;padding:24px}
.login-card{width:100%;max-width:360px;background:var(--paper);border-radius:16px;padding:28px 22px;box-shadow:var(--shadow)}
.label-tag{background:var(--label);border-radius:12px;padding:18px;text-align:center;outline:2px dashed #8a8f99;outline-offset:-8px;margin-bottom:20px}
.label-tag p{margin:6px 0 0;color:var(--muted);font-size:.9rem}
#loginForm{display:grid;gap:10px}
#loginForm input{padding:12px 14px;border:1px solid var(--line);border-radius:10px}
.err{color:#c0394b;min-height:1.2em;margin:0;font-size:.9rem}

.btn{border:0;border-radius:10px;padding:11px 14px;font-weight:700}
.btn.primary{background:#6c63d8;color:#fff}
.btn.ghost{background:transparent;color:var(--muted)}
.btn.danger{background:#fde2e6;color:#a32035}
.btn.small{padding:7px 10px;font-size:.88rem}

/* app shell */
#app{height:100%;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:8px;padding:10px 12px;padding-top:max(10px,env(safe-area-inset-top));background:var(--paper);box-shadow:var(--shadow);z-index:5}
.topbar h1{flex:1;font-size:1.15rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.icon-btn{border:0;background:transparent;font-size:1.3rem;width:38px;height:38px;border-radius:10px}
.icon-btn:active{background:var(--bg)}
.sync-dot{font-size:.8rem;color:#b9bec8}
.sync-dot.ok{color:#5aa65a}.sync-dot.busy{color:#e0a020}.sync-dot.off{color:#c0394b}

#view{flex:1;overflow:auto;padding:14px calc(var(--tabw) + 10px) calc(150px + var(--safe-b)) 12px;position:relative}

/* pestañas laterales */
.tabs{position:fixed;right:0;top:70px;bottom:calc(70px + var(--safe-b));display:flex;flex-direction:column;gap:6px;width:var(--tabw);z-index:4}
.tabs button{flex:1;border:0;border-radius:10px 0 0 10px;box-shadow:-2px 2px 6px rgba(0,0,0,.08);writing-mode:vertical-rl;font-size:.72rem;font-weight:700;color:#555b68;padding:4px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;transition:width .15s,margin .15s}
.tabs button.active{margin-left:-8px;width:calc(var(--tabw) + 8px);color:var(--ink)}

.bottombar{position:fixed;left:0;right:0;bottom:0;display:flex;background:var(--paper);box-shadow:0 -2px 10px rgba(40,50,70,.1);padding-bottom:var(--safe-b);z-index:6}
.bottombar button{flex:1;border:0;background:none;padding:8px 0 6px;font-size:1.2rem;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--muted)}
.bottombar span{font-size:.72rem;font-weight:700}
.bottombar button.active{color:var(--ink)}

/* hoja */
.sheet{background:var(--paper);border-radius:14px;box-shadow:var(--shadow);padding:18px 14px;position:relative;min-height:100%}

/* portada */
.cover .label-tag{margin:10px 6px 26px}
.cover .label-tag input{outline:none;width:100%;border:0;border-bottom:1px solid #7a8191;background:transparent;text-align:center;font-family:Fredoka;font-size:1.3rem;padding:6px}
.index-row{display:flex;align-items:stretch;margin-bottom:10px;border-radius:4px;overflow:hidden}
.index-row .num{width:40px;display:grid;place-items:center;color:#fff;font-family:Fredoka;font-size:1.3rem}
.index-row input{flex:1;border:5px solid;border-left:0;padding:8px 10px;min-width:0}
.index-row button{border:0;padding:0 12px;font-weight:700}
.cover-tip{color:var(--muted);font-size:.85rem;text-align:center;margin-top:18px}

/* lista de páginas de una sección */
.section-head{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:6px;margin-bottom:12px}
.section-head .num{font-family:Fredoka;font-size:1.3rem;color:#fff}
.section-head h2{flex:1;font-size:1.1rem}
.page-list{display:grid;gap:8px}
.page-item{display:flex;gap:10px;align-items:center;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--paper);text-align:left;width:100%}
.page-item .t{flex:1;font-weight:700}
.page-item .d{color:var(--muted);font-size:.8rem}
.empty{color:var(--muted);text-align:center;padding:30px 10px}
.fab{position:fixed;right:calc(var(--tabw) + 16px);bottom:calc(78px + var(--safe-b));width:56px;height:56px;border-radius:50%;border:0;background:#6c63d8;color:#fff;font-size:1.8rem;box-shadow:0 4px 14px rgba(108,99,216,.45);z-index:6}

/* editor de página */
.page-editor{display:flex;flex-direction:column;gap:8px}
.page-title{display:flex;align-items:center;border-radius:4px;overflow:hidden}
.page-title .num{width:36px;align-self:stretch;display:grid;place-items:center;color:#fff;font-family:Fredoka;font-size:1.2rem}
.page-title input{flex:1;border:4px solid;border-left:0;padding:7px 10px;font-weight:700;min-width:0}
.toolbar{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.toolbar .seg{display:flex;background:var(--bg);border-radius:10px;padding:3px}
.toolbar .seg button{border:0;background:none;border-radius:8px;padding:6px 10px;font-weight:700;font-size:.85rem}
.toolbar .seg button.on{background:var(--paper);box-shadow:0 1px 4px rgba(0,0,0,.12)}
.swatch{width:24px;height:24px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px var(--line)}
.swatch.on{box-shadow:0 0 0 2px var(--ink)}
.toolbar .spacer{flex:1}
.grid-paper{position:relative;flex:1;min-height:calc(100vh - 290px);border:1px solid var(--line);border-radius:6px;overflow:hidden;
  background-color:#fff;
  background-image:linear-gradient(#cfd2d8 1px,transparent 1px),linear-gradient(90deg,#cfd2d8 1px,transparent 1px);
  background-size:22px 22px}
.grid-paper textarea{position:absolute;inset:0;width:100%;height:100%;border:0;background:transparent;resize:none;padding:2px 8px;line-height:22px;font-size:16px;outline:none}
.grid-paper canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none;pointer-events:none}
.grid-paper.pen canvas{pointer-events:auto}
.grid-paper.pen textarea{pointer-events:none}

/* calendario */
.cal-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.cal-head h2{flex:1;text-align:center;font-size:1.15rem}
table.cal{width:100%;border-collapse:collapse;table-layout:fixed}
table.cal th{font-size:.72rem;color:var(--muted);padding:4px 0;border:1px solid var(--line);background:#f7f8fa}
table.cal td{border:1px solid var(--line);height:58px;vertical-align:top;padding:3px;font-size:.8rem;cursor:pointer}
table.cal td.other{color:#c3c7cf;background:#fafbfc}
table.cal td.today .n{background:#6c63d8;color:#fff;border-radius:50%;display:inline-grid;place-items:center;width:22px;height:22px}
table.cal td.sel{outline:2px solid #6c63d8;outline-offset:-2px}
.dots{display:flex;flex-wrap:wrap;gap:2px;margin-top:3px}
.dots i{width:8px;height:8px;border-radius:50%;display:block}
.day-panel{margin-top:14px}
.day-panel h3{font-size:1rem;margin-bottom:8px}

/* tareas */
.filters{display:flex;gap:6px;overflow-x:auto;padding-bottom:6px;margin-bottom:8px}
.chip{border:1px solid var(--line);background:var(--paper);border-radius:20px;padding:6px 12px;font-size:.82rem;font-weight:700;white-space:nowrap}
.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
table.tasks{width:100%;border-collapse:collapse}
table.tasks td,table.tasks th{border:1px solid var(--line);padding:8px 6px;font-size:.88rem;text-align:left;vertical-align:middle}
table.tasks th{background:#f7f8fa;font-size:.75rem;color:var(--muted)}
table.tasks td.chk{width:38px;text-align:center}
table.tasks td.chk input{width:20px;height:20px}
table.tasks tr.done .tt{text-decoration:line-through;color:var(--muted)}
.sec-pill{display:inline-block;padding:2px 7px;border-radius:10px;font-size:.72rem;font-weight:700;color:#4a4f5c}
.due{white-space:nowrap;font-size:.8rem}
.due.late{color:#c0394b;font-weight:700}
.due.soon{color:#c47a00;font-weight:700}
.legend{display:flex;flex-wrap:wrap;gap:10px;font-size:.75rem;color:var(--muted);margin-top:10px}

/* modal */
.modal{position:fixed;inset:0;background:rgba(30,35,50,.4);display:flex;align-items:flex-end;justify-content:center;z-index:20}
.modal-card{background:var(--paper);width:100%;max-width:520px;border-radius:18px 18px 0 0;padding:18px 16px calc(18px + var(--safe-b));display:grid;gap:10px;max-height:90vh;overflow:auto}
.modal-card h3{font-size:1.1rem}
.modal-card label{display:grid;gap:4px;font-size:.85rem;font-weight:700;color:var(--muted)}
.modal-card input,.modal-card select,.modal-card textarea{padding:10px 12px;border:1px solid var(--line);border-radius:10px;font-weight:400;color:var(--ink)}
.row{display:flex;gap:8px}.row>*{flex:1}
.actions{display:flex;gap:8px;justify-content:flex-end;margin-top:4px}

.toast{position:fixed;left:50%;bottom:calc(90px + var(--safe-b));transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:9px 16px;border-radius:20px;font-size:.88rem;opacity:0;pointer-events:none;transition:.2s;z-index:30;max-width:90%}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

@media (min-width:760px){
  #view{max-width:820px;margin:0 auto;width:100%}
  .tabs{right:max(0px,calc(50% - 450px))}
}
