*{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#071733;color:#111}header{background:linear-gradient(90deg,#071733,#0b2b60);color:#fff;display:flex;justify-content:space-between;align-items:center;padding:12px 18px;border-bottom:5px solid #b31942}header b{font-size:22px;letter-spacing:1px}header span{display:block;color:#ddd;font-size:13px}nav{display:flex;gap:8px;align-items:center;flex-wrap:wrap}button,a{border:0;background:#fff;color:#071733;padding:9px 12px;border-radius:6px;text-decoration:none;font-weight:bold;cursor:pointer}button.active,button:hover,a:hover{background:#b31942;color:#fff}.toolbar{display:flex;align-items:center;justify-content:center;gap:12px;background:#fff;padding:10px}.toolbar h2{min-width:300px;text-align:center;margin:0}.toolbar input{padding:10px;border:1px solid #ccc;border-radius:6px;min-width:300px}main{display:grid;grid-template-columns:220px 1fr;gap:12px;padding:12px}aside{background:#fff;border-radius:10px;padding:12px;height:calc(100vh - 125px);overflow:auto}#calendar{background:#fff;border-radius:10px;min-height:calc(100vh - 125px);padding:10px;overflow:auto}.tech{display:block;margin:8px 0}.tech span,.legend span{display:inline-block;width:14px;height:14px;border-radius:3px;margin-right:6px;vertical-align:middle}.legend{margin:8px 0}.scheduled{background:#b31942}.dispatched{background:#1f5eff}.in_progress{background:#198754}.waiting_parts{background:#f2b705}.complete{background:#555}.weekgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;min-height:600px}.daycol,.dayview,.mday{border:1px solid #ddd;background:#f9fbff;border-radius:8px;padding:8px;min-height:120px}.daycol h3,.dayview h3{margin:0 0 8px;color:#071733}.dayview{min-height:600px}.monthgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.mday{height:145px;overflow:auto}.mday.out{opacity:.35}.yeargrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.monthcard{border:1px solid #ccc;border-radius:12px;padding:25px;text-align:center;cursor:pointer;background:#f8f8f8}.monthcard:hover{background:#e9f0ff}.job{background:#fff;border:1px solid #ccc;border-left:8px solid #b31942;border-radius:7px;margin:6px 0;padding:7px;cursor:grab;box-shadow:0 1px 3px #0002}.job b{display:block}.job small{display:block;color:#333;font-size:11px}.job span{font-size:12px}.job.dispatched{background:#edf3ff}.job.in_progress{background:#ecfff3}.job.waiting_parts{background:#fff8d9}.job.complete{background:#eee}.modal{position:fixed;top:5%;left:50%;transform:translateX(-50%);width:min(960px,95vw);max-height:90vh;overflow:auto;background:#fff;z-index:5;border-radius:12px;padding:18px;box-shadow:0 10px 40px #0008}.modal.small{width:min(520px,95vw)}#shade{position:fixed;inset:0;background:#0008;z-index:4}.hidden{display:none}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}label{font-weight:bold;display:block;margin:8px 0}input,select,textarea{width:100%;padding:9px;border:1px solid #aaa;border-radius:5px}textarea{min-height:75px}.actions{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}.danger{background:#b31942;color:#fff}.hist{border-left:4px solid #1f5eff;padding:6px;margin:5px 0;background:#f5f7ff}.login{display:grid;place-items:center;min-height:100vh;background:linear-gradient(130deg,#071733,#b31942)}.loginbox{background:#fff;padding:35px;border-radius:14px;width:min(430px,92vw);text-align:center;box-shadow:0 10px 45px #0008}.loginbox h1{color:#071733}.loginbox h2{color:#b31942}.loginbox input,.loginbox button{margin:8px 0}.loginbox button{width:100%;background:#071733;color:#fff}.alert{background:#ffe0e0;color:#900;padding:10px;border-radius:6px}.admin{background:#fff;margin:12px;border-radius:10px;padding:15px}.card{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;align-items:end}table{width:100%;border-collapse:collapse;background:#fff;margin:12px 0}td,th{border:1px solid #ddd;padding:8px;text-align:left}tr:hover{background:#f4f7ff}@media(max-width:900px){main{grid-template-columns:1fr}aside{height:auto}.weekgrid,.monthgrid{grid-template-columns:1fr}.grid,.card,.yeargrid{grid-template-columns:1fr}.toolbar{flex-wrap:wrap}.toolbar input{min-width:100%}header{display:block}nav{margin-top:10px}.mday{height:auto;min-height:100px}}
