@font-face{font-family:'Plus Jakarta Sans';font-weight:400;src:url(fonts/plus-jakarta-sans-400.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Plus Jakarta Sans';font-weight:500;src:url(fonts/plus-jakarta-sans-500.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Plus Jakarta Sans';font-weight:600;src:url(fonts/plus-jakarta-sans-600.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Plus Jakarta Sans';font-weight:700;src:url(fonts/plus-jakarta-sans-700.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Space Grotesk';font-weight:500;src:url(fonts/space-grotesk-500.woff2) format('woff2');font-display:swap}
@font-face{font-family:'Space Grotesk';font-weight:700;src:url(fonts/space-grotesk-700.woff2) format('woff2');font-display:swap}

:root{
  --green:#1d4849; --green-d:#143334; --cream:#f6f3ee; --paper:#ffffff; --line:#ddd7cc; --ink:#1b2626; --muted:#5b6b6b;
  --ok:#1f7a4d; --ok-bg:#e1f1e8; --warn:#8a5a00; --warn-bg:#fbebc8; --bad:#a3261c; --bad-bg:#f8d9d5;
  --radius:8px; --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:24px; --sp-6:32px;
  --font:'Plus Jakarta Sans',system-ui,sans-serif; --head:'Space Grotesk','Plus Jakarta Sans',sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--cream);color:var(--ink);font:400 16px/1.5 var(--font);min-height:100dvh}
h1,h2,h3{font-family:var(--head);color:var(--green);margin:0 0 var(--sp-3);line-height:1.2}
h1{font-size:28px;font-weight:700}h2{font-size:20px}h3{font-size:16px;text-transform:uppercase;letter-spacing:.05em}
a{color:var(--green)}
:focus-visible{outline:3px solid #2d8c8e;outline-offset:2px}

.shell{display:grid;grid-template-columns:230px 1fr;min-height:100dvh}
.side{background:var(--green);color:var(--cream);padding:var(--sp-4) var(--sp-3);position:sticky;top:0;height:100dvh;overflow:auto}
.side .brand{display:block;padding:var(--sp-2) var(--sp-3) var(--sp-4)}
.side .brand img{height:28px;display:block}
.side nav{display:flex;flex-direction:column;gap:2px}
.side a{color:var(--cream);text-decoration:none;padding:10px 12px;border-radius:6px;font-weight:600;font-size:15px;opacity:.85;min-height:44px;display:flex;align-items:center}
.side a:hover{background:#ffffff14;opacity:1}
.side a.on{background:#ffffff26;opacity:1}
.side a.soon{opacity:.4;cursor:default}
.side hr{border:0;border-top:1px solid #ffffff30;margin:var(--sp-3) 0;width:100%}
.main{padding:var(--sp-5) var(--sp-6);max-width:1100px;width:100%}
.top{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-4)}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:10px 16px;border-radius:6px;border:1.5px solid var(--green);background:var(--green);color:#fff;font:600 15px var(--font);text-decoration:none;cursor:pointer}
.btn:hover{background:var(--green-d)}
.btn.s{background:transparent;color:var(--green)}.btn.s:hover{background:#1d484912}
.btn.danger{background:transparent;color:var(--bad);border-color:var(--bad)}
.btn.sm{min-height:36px;padding:6px 12px;font-size:14px}
.btn:disabled{opacity:.5;cursor:not-allowed}

.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-4)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4)}
.stack>*+*{margin-top:var(--sp-4)}
.flash{background:var(--ok-bg);color:var(--ok);border:1px solid #b5dcc6;padding:10px 14px;border-radius:6px;margin-bottom:var(--sp-4);font-weight:600}
.flash.warn{background:var(--warn-bg);color:var(--warn);border-color:#ecd08a}
.flash.error{background:var(--bad-bg);color:var(--bad);border-color:#efb7b0}
.errbox{background:var(--bad-bg);color:var(--bad);border:1px solid #efb7b0;padding:10px 14px;border-radius:6px;margin-bottom:var(--sp-4)}
.errbox ul{margin:6px 0 0 18px;padding:0}
.muted{color:var(--muted)}

table.t{width:100%;border-collapse:collapse;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
table.t th{background:var(--green);color:#fff;text-align:left;font:600 13px var(--head);text-transform:uppercase;letter-spacing:.05em;padding:10px 12px}
table.t td{padding:10px 12px;border-top:1px solid #ece7dd;vertical-align:middle}
table.t td.num,table.t th.num{text-align:right;font-variant-numeric:tabular-nums}
.pill{display:inline-block;font-size:12px;font-weight:700;padding:2px 10px;border-radius:99px}
.pill.paid{background:var(--ok-bg);color:var(--ok)}.pill.unpaid{background:var(--bad-bg);color:var(--bad)}.pill.partial{background:var(--warn-bg);color:var(--warn)}
.actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.empty{padding:var(--sp-6);text-align:center;color:var(--muted)}

/* forms */
.f{display:flex;flex-direction:column;gap:4px;margin-bottom:var(--sp-3)}
.f label{font-weight:600;font-size:14px}
.f input,.f select,.f textarea{font:400 16px var(--font);padding:10px 12px;border:1.5px solid #b9b2a4;border-radius:6px;background:#fff;color:var(--ink);min-height:44px;width:100%}
.f textarea{min-height:90px;resize:vertical}
.f input:focus,.f select:focus,.f textarea:focus{border-color:var(--green)}
.f .hint{font-size:13px;color:var(--muted)}
.f .err{font-size:13px;color:var(--bad);font-weight:600}
.f.bad input,.f.bad select,.f.bad textarea{border-color:var(--bad)}
.warnline{font-size:13px;color:var(--warn);font-weight:600}
.row3{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3)}
.item{border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-3);background:#fcfbf8;margin-bottom:var(--sp-3)}
.item .grid-i{display:grid;grid-template-columns:1fr 160px;gap:var(--sp-3)}
.totalbar{display:flex;justify-content:flex-end;align-items:baseline;gap:var(--sp-3);font-family:var(--head);color:var(--green);font-size:26px;font-weight:700;margin:var(--sp-3) 0}
.stickybar{position:sticky;bottom:0;background:var(--cream);border-top:1px solid var(--line);padding:var(--sp-3) 0;display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-4)}

/* social */
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--sp-4)}
.gcard{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;text-decoration:none;color:var(--ink);display:block}
.gcard:hover{border-color:var(--green)}
.gcard img,.gcard .noimg{width:100%;height:auto;aspect-ratio:1/1;display:block;background:#ece7dd}
.gcard .noimg{display:flex;align-items:center;justify-content:center;color:var(--muted);font-weight:600}
.gbody{padding:var(--sp-3)}
.postgrid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:var(--sp-4);align-items:start}
.bigimg{width:100%;height:auto;aspect-ratio:1/1;display:block;border-radius:6px}
@media (max-width:1000px){.postgrid{grid-template-columns:1fr}}
/* blog */
.editor{background:#fff;min-height:420px;font:400 16px/1.65 var(--font)}
.editor.ql-container{border-radius:0 0 6px 6px}
.ql-toolbar.ql-snow{border-radius:6px 6px 0 0;border-color:#b9b2a4;background:#fcfbf8}
.ql-container.ql-snow{border-color:#b9b2a4}
.ql-editor{min-height:420px;font-size:16px}
.ql-editor h2{font-family:var(--head);color:var(--green);font-size:24px}
.ql-editor h3{font-family:var(--head);color:var(--green);font-size:19px}
.preview h2{margin-top:28px;font-size:24px}.preview h3{margin-top:20px;font-size:19px;text-transform:none;letter-spacing:0}
.preview p,.preview li{line-height:1.7}.preview figure{margin:0 0 20px}.preview img{max-width:100%;height:auto;border-radius:6px}
@media (max-width:1000px){.postgrid[style]{grid-template-columns:1fr!important}}
@media (max-width:860px){
  .shell{grid-template-columns:1fr}
  .side{position:static;height:auto;padding:var(--sp-2)}
  .side nav{flex-direction:row;flex-wrap:wrap}
  .side hr{display:none}
  .main{padding:var(--sp-4)}
  .grid2,.row3{grid-template-columns:1fr}
  .item .grid-i{grid-template-columns:1fr}
  table.t.resp thead{display:none}
  table.t.resp tr{display:block;border-top:1px solid var(--line);padding:8px 0}
  table.t.resp td{display:flex;justify-content:space-between;border:0;padding:4px 12px}
  table.t.resp td::before{content:attr(data-l);font-weight:600;color:var(--muted)}
  .actions{justify-content:flex-start}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* sign-in */
.authbody{display:flex;justify-content:center;align-items:flex-start;padding:var(--sp-6) var(--sp-4)}
.authwrap{width:100%;max-width:420px}
.authlogo{display:block;margin:var(--sp-5) auto var(--sp-5);height:auto;max-width:70%}
.whoami{margin-top:auto;border-top:1px solid #ffffff30;padding:var(--sp-3) var(--sp-2);display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:14px}
.whoami a{display:inline;min-height:0;padding:0;opacity:.8;text-decoration:underline}
.whoami .lo{color:var(--cream);border-color:#ffffff80}
.side{display:flex;flex-direction:column}

dialog{border:1px solid var(--line);border-radius:12px;padding:var(--sp-5);max-width:520px;width:calc(100% - 32px);background:var(--paper);color:var(--ink)}
dialog::backdrop{background:#0f1a1a80}

/* calendar */
.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--paper)}
.calh{background:var(--green);color:#fff;font:600 12px var(--head);text-transform:uppercase;letter-spacing:.05em;padding:8px;text-align:center}
.calc{min-height:104px;padding:6px;border-top:1px solid #ece7dd;border-left:1px solid #ece7dd;display:flex;flex-direction:column;gap:3px}
.calc.off{background:#faf8f4}
.calc.today{background:#eef6f3}
.calc .dn{font:600 13px var(--head);color:var(--muted)}
.calc.today .dn{color:var(--green)}
.chip{display:block;font-size:12px;line-height:1.3;padding:3px 6px;border-radius:5px;text-decoration:none;color:var(--ink);background:#ece7dd;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chip.paid{background:var(--ok-bg);color:var(--ok)}.chip.partial{background:var(--warn-bg);color:var(--warn)}.chip.unpaid{background:var(--bad-bg);color:var(--bad)}
.chip.run{background:transparent;border:1px dashed #9aa8a8;color:var(--muted)}
@media (max-width:860px){.calc{min-height:70px;padding:3px}.chip{font-size:11px}.chip b{display:none}}
