*{box-sizing:border-box}html{color-scheme:light}
body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;background:#f8fafc;color:#0f172a;font-size:14px;-webkit-font-smoothing:antialiased}
a{color:inherit}
.hidden{display:none!important}
header{position:sticky;top:0;z-index:10;background:#fff;border-bottom:1px solid #e2e8f0}
.wrap{max-width:1080px;margin:0 auto;padding:0 16px}
header .wrap{height:56px;display:flex;align-items:center;justify-content:space-between;gap:12px}
.brand{display:flex;align-items:center;gap:8px;font-weight:700;color:#105446;text-decoration:none}
.brand img{width:28px;height:28px}
nav{display:flex;align-items:center;gap:4px}
main{max-width:1080px;margin:0 auto;padding:20px 16px 60px}
.card{background:#fff;border:1px solid #e2e8f0;border-radius:16px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.p{padding:16px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:12px;padding:9px 14px;font-size:14px;font-weight:600;border:0;cursor:pointer;text-decoration:none;background:#f1f5f9;color:#1e293b;transition:.15s}
.btn:hover{background:#e2e8f0}
.btn-primary{background:#0f836a;color:#fff}.btn-primary:hover{background:#0f6957}
.btn-danger{background:#e11d48;color:#fff}.btn-danger:hover{background:#be123c}
.btn-ghost{background:transparent}.btn-ghost:hover{background:#f1f5f9}
.btn-sm{padding:5px 10px;font-size:12px;border-radius:9px}
.btn-block{width:100%}
.link{background:none;border:0;color:#0f6957;font-weight:600;cursor:pointer;padding:0;font-size:12px;text-decoration:underline}
.link.danger{color:#be123c}
.input,select,textarea{width:100%;border:1px solid #cbd5e1;background:#fff;border-radius:12px;padding:9px 12px;font-size:14px;font-family:inherit}
.input:focus,select:focus,textarea:focus{outline:2px solid #1aa383;border-color:#1aa383}
label{display:block}
.label{display:block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#64748b;margin-bottom:5px}
.hint{display:block;font-size:12px;color:#64748b;margin-top:4px}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,1fr)}.g4{grid-template-columns:repeat(2,1fr)}
.cols{display:grid;gap:20px}
@media(min-width:900px){.g4{grid-template-columns:repeat(4,1fr)}.cols-3-2{grid-template-columns:3fr 2fr}.cols-2-1{grid-template-columns:2fr 1fr}.sm2{grid-template-columns:repeat(2,1fr)}}
.stat .k{font-size:12px;color:#64748b}.stat .v{font-size:22px;font-weight:700;letter-spacing:-.01em;margin-top:2px}.stat .s{font-size:12px;color:#64748b}
.good{color:#047857}.bad{color:#be123c}.warn{color:#b45309}
h1{font-size:24px;margin:0 0 4px}h2{font-size:16px;margin:0 0 10px}
.muted{color:#64748b;font-size:13px}
table{width:100%;border-collapse:collapse;font-size:14px}
th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:#64748b;padding:8px 10px;border-bottom:1px solid #e2e8f0;background:#f8fafc}
td{padding:10px;border-bottom:1px solid #f1f5f9;vertical-align:top}
tr:last-child td{border-bottom:0}
.num{font-variant-numeric:tabular-nums}
.badge{display:inline-flex;align-items:center;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:600;white-space:nowrap}
.b-green{background:#d1fae5;color:#065f46}.b-red{background:#ffe4e6;color:#9f1239}.b-amber{background:#fef3c7;color:#92400e}.b-gray{background:#f1f5f9;color:#334155}.b-blue{background:#e0f2fe;color:#075985}
.late{background:#fff1f2}
.msg{border-radius:12px;padding:8px 12px;font-size:13px;margin-top:10px}
.msg.err{background:#fff1f2;border:1px solid #fecdd3;color:#9f1239}.msg.ok{background:#ecfdf5;border:1px solid #a7f3d0;color:#065f46}
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.cal-dow{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;font-size:11px;font-weight:700;color:#64748b;text-transform:uppercase;margin-bottom:4px}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.day{min-height:64px;border:1px solid #f1f5f9;border-radius:8px;padding:4px;font-size:11px}
.day.today{border-color:#1aa383;background:#eefbf7}
.day .n{text-align:right;font-weight:700;color:#64748b}.day.today .n{color:#0f6957}
.ev{display:block;border-radius:4px;padding:2px 4px;margin-top:2px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none;font-size:11px}
.ev.due{background:#fef3c7;color:#78350f}.ev.over{background:#ffe4e6;color:#9f1239}.ev.paid{background:#d1fae5;color:#065f46;text-decoration:line-through}
.legend{display:flex;gap:12px;font-size:11px;color:#64748b;margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:middle}
.list{list-style:none;margin:0;padding:0}.list li{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px solid #f1f5f9}.list li:last-child{border:0}
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px}
.login .card{width:100%;max-width:360px;text-align:center;padding:32px}
.login input{text-align:center;font-size:26px;letter-spacing:.4em}
.progress{height:6px;width:80px;background:#f1f5f9;border-radius:99px;margin-top:4px}.progress i{display:block;height:100%;background:#1aa383;border-radius:99px}
.sticky{position:sticky;top:76px}
.scroll{overflow-x:auto}
dl{margin:0}dl div{display:flex;justify-content:space-between;gap:12px;padding:3px 0}dt{color:#64748b}
details summary{cursor:pointer;font-weight:600}
@media(max-width:640px){.day{min-height:52px}.ev .amt{display:none}nav .txt{display:none}}
html,body{overflow-x:hidden;max-width:100vw}
@media(max-width:640px){
  header .wrap{height:auto;flex-wrap:wrap;padding:8px 12px;gap:6px}
  .brand{font-size:14px}
  nav{width:100%;justify-content:space-between;gap:2px}
  nav .btn{padding:6px 8px;font-size:12px}
  main{padding:14px 12px 50px}
  .stat .v{font-size:19px}
  td,th{padding:8px 6px}
}
.sync{font-size:11px;color:#64748b;display:flex;align-items:center;gap:4px}.sync i{width:8px;height:8px;border-radius:99px;display:inline-block;background:#94a3b8}.sync.on i{background:#10b981}.sync.off i{background:#f59e0b}.sync.err i{background:#e11d48}
.files{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-top:10px}
.file{border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;background:#f8fafc}
.file .th{height:90px;display:flex;align-items:center;justify-content:center;background:#fff;font-size:28px}
.file .th img{width:100%;height:100%;object-fit:cover}
.file .nm{font-size:11px;padding:6px 8px 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.file .ac{display:flex;justify-content:space-between;padding:0 8px 6px}
.upl{display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.upl input{display:none}
.contract{background:#fff;max-width:760px;margin:0 auto;padding:40px 48px;font-family:Georgia,"Times New Roman",serif;font-size:14px;line-height:1.55;color:#000;border:1px solid #e2e8f0;border-radius:12px}
.contract h1{text-align:center;font-size:18px;margin:0}.contract h2{text-align:center;font-size:13px;font-weight:400;margin:2px 0 20px;letter-spacing:.06em}
.contract h3{font-size:13px;margin:18px 0 6px;text-transform:uppercase}
.contract .f{display:flex;gap:8px;margin:6px 0}.contract .f b{white-space:nowrap}.contract .f span{flex:1;border-bottom:1px solid #000;padding:0 6px;min-height:18px}
.contract .sig{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:30px}
.contract .sig .f span{border-bottom:1px solid #000}
.contract .note{font-size:11px;color:#444;margin-top:24px;font-style:italic}
.contract .line{margin-top:44px;border-top:1px solid #000;padding-top:4px;font-size:12px}
@media print{header,.noprint{display:none!important}body{background:#fff}main{padding:0;max-width:none}.contract{border:0;border-radius:0;padding:0;max-width:none}}
