:root{
  --ink:#2b2722; --ink-soft:#5a5247; --paper:#f7f3ec; --paper-2:#fffdf8;
  --jade:#5b8c7b; --jade-d:#3f6b5c; --clay:#c0683f; --gold:#b08948;
  --line:#e3dccd; --shadow:0 2px 14px rgba(60,50,35,.08);
  --rose:#c97a6d;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:"Noto Serif SC","Songti SC",serif;
  background:var(--paper);color:var(--ink);line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--jade-d);text-decoration:none}
.topbar{
  background:var(--paper-2);border-bottom:1px solid var(--line);
  padding:.7rem 1rem;display:flex;align-items:center;justify-content:space-between;
  position:sticky;top:0;z-index:50;box-shadow:var(--shadow);
}
.brand{font-size:1.15rem;font-weight:700;letter-spacing:.05em;color:var(--jade-d)}
.brand small{color:var(--ink-soft);font-weight:400;font-size:.7rem;margin-left:.4rem}
.nav{display:flex;gap:.3rem;flex-wrap:wrap;align-items:center}
.nav a{
  padding:.35rem .75rem;border-radius:8px;font-size:.9rem;color:var(--ink-soft);
}
.nav a:hover,.nav a.active{background:var(--jade);color:#fff}
.who{font-size:.82rem;color:var(--ink-soft)}
.wrap{max-width:1000px;margin:1.2rem auto;padding:0 1rem}
.card{
  background:var(--paper-2);border:1px solid var(--line);border-radius:14px;
  padding:1.2rem;box-shadow:var(--shadow);margin-bottom:1.1rem;
}
.card h2{font-size:1.1rem;color:var(--jade-d);margin-bottom:.8rem;
  border-left:3px solid var(--gold);padding-left:.6rem}
.btn{
  display:inline-block;border:none;cursor:pointer;border-radius:9px;
  padding:.55rem 1.1rem;font-family:inherit;font-size:.92rem;
  background:var(--jade);color:#fff;transition:.15s;
}
.btn:hover{background:var(--jade-d)}
.btn.clay{background:var(--clay)}.btn.clay:hover{filter:brightness(.92)}
.btn.ghost{background:transparent;color:var(--jade-d);border:1px solid var(--jade)}
.btn.sm{padding:.3rem .7rem;font-size:.82rem}
input,select,textarea{
  font-family:inherit;font-size:.92rem;padding:.5rem .65rem;
  border:1px solid var(--line);border-radius:8px;background:#fff;width:100%;
}
label{font-size:.85rem;color:var(--ink-soft);display:block;margin:.5rem 0 .2rem}
.row{display:flex;gap:.7rem;flex-wrap:wrap}
.row>div{flex:1;min-width:130px}
table{width:100%;border-collapse:collapse;font-size:.9rem}
th,td{padding:.5rem .6rem;text-align:left;border-bottom:1px solid var(--line)}
th{color:var(--jade-d);font-weight:600;background:#f0ebe0}
.flash{padding:.6rem 1rem;border-radius:9px;margin-bottom:.8rem;font-size:.9rem}
.flash.error{background:#fbe9e7;color:#a13b29}
.flash.ok{background:#e7f1ed;color:var(--jade-d)}
.tag{display:inline-block;padding:.1rem .5rem;border-radius:20px;font-size:.75rem}
.tag.leave{background:#fbe2e2;color:#b0463b}
.tag.ot{background:#fcefdc;color:#a06a20}
.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.8rem}
.tile{background:var(--paper-2);border:1px solid var(--line);border-radius:12px;
  padding:1rem;text-align:center;box-shadow:var(--shadow)}
.tile .big{font-size:1.8rem;color:var(--clay);font-weight:700}
.tile .lbl{font-size:.82rem;color:var(--ink-soft);margin-top:.2rem}
.seg{display:flex;gap:.3rem;background:#ece5d7;padding:.25rem;border-radius:10px;width:fit-content}
.seg button{border:none;background:none;padding:.4rem .9rem;border-radius:7px;
  cursor:pointer;font-family:inherit;font-size:.9rem;color:var(--ink-soft)}
.seg button.on{background:var(--paper-2);color:var(--jade-d);box-shadow:var(--shadow)}
@media(max-width:640px){
  .nav a{padding:.3rem .55rem;font-size:.82rem}
  .brand small{display:none}
  .wrap{margin:.8rem auto}
}
/* FullCalendar 微调 */
.fc{--fc-border-color:var(--line);font-size:.85rem}
.fc .fc-toolbar-title{font-size:1.1rem!important;color:var(--jade-d)}
.fc .fc-button{background:var(--jade)!important;border:none!important;font-family:inherit!important}
.fc .fc-button:hover{background:var(--jade-d)!important}
