*{box-sizing:border-box}body{margin:0;color:#243247;background:#fff;font:14px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}button,input,select,textarea{font:inherit}button,select{cursor:pointer}button{background:white;border:1px solid #dce2eb;border-radius:8px;padding:9px 14px;color:inherit}button:hover{background:#f2f5fa}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #93c5fd;outline-offset:2px}.primary{background:var(--brand,#2563eb);color:white;border:0;padding:12px 20px}.primary:hover{filter:brightness(.94);background:var(--brand,#2563eb)}[hidden]{display:none!important}header{height:82px;display:flex;align-items:center;gap:14px;padding:0 26px;border-bottom:1px solid #e5eaf1}header h1{font-size:21px;font-weight:600;flex:1;margin:0}.brand{width:218px;display:flex;align-items:center;gap:12px;font-size:22px;letter-spacing:-.6px}.logo{display:inline-grid;place-items:center;background:#eff6ff;color:#2563eb;border-radius:12px;width:42px;height:42px;font-size:28px}.nav{display:flex;gap:6px}.nav button{border:0;font-size:25px;padding:0 10px}.layout{display:grid;grid-template-columns:248px 1fr;min-height:calc(100vh - 82px)}aside{padding:25px 22px;border-right:1px solid #e5eaf1;position:relative}aside h2{font-size:11px;text-transform:uppercase;letter-spacing:1.1px;color:#8591a3;margin-top:35px}aside p{color:#64748b}.new{box-shadow:0 3px 12px #2563eb20;width:100%;font-weight:600}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:10px}.scheduled{background:#2563eb}.in_progress{background:#d97706}.completed{background:#059669}.cancelled{background:#94a3b8}.aside-footer{margin-top:80px;font-size:12px;color:#94a3b8}main{padding:22px;overflow:auto;background:#fbfcfe}label{display:block;font-size:12px;font-weight:600;color:#526278}input,select,textarea{width:100%;display:block;border:1px solid #dce2eb;border-radius:7px;padding:10px;background:white;color:#243247;margin-top:6px}header select{width:105px;margin:0}.calendar-grid{display:grid;background:white;border:1px solid #e5eaf1;border-radius:12px;overflow:hidden;min-width:620px}.day{min-height:126px;border-right:1px solid #edf0f5;border-bottom:1px solid #edf0f5;padding:8px}.day-head{font-size:12px;color:#64748b;margin-bottom:10px;display:flex;justify-content:space-between}.today-number{background:#2563eb;color:white;border-radius:50%;padding:2px 7px}.job{display:block;text-align:left;width:100%;border:0;border-left:3px solid #2563eb;border-radius:5px;background:#eff6ff;padding:7px;margin:5px 0;color:#1e40af;font-size:12px;overflow:hidden}.job.in_progress{background:#fffbeb;border-color:#d97706;color:#92400e}.job.completed{background:#ecfdf5;border-color:#059669;color:#065f46}.job.cancelled{background:#f1f5f9;border-color:#94a3b8;color:#64748b}.job strong,.job span{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.weekday{background:#f8fafc;text-align:center;font-size:11px;text-transform:uppercase;letter-spacing:1px;padding:12px;color:#64748b}.agenda{max-width:1000px;margin:auto}.agenda h2{font-size:15px;margin-top:25px}.agenda .job{padding:15px;font-size:14px}.empty{padding:70px;text-align:center;color:#94a3b8}.week-grid .day{min-height:430px}.time-grid{display:grid;grid-template-columns:58px 1fr;background:white;border:1px solid #e5eaf1;border-radius:12px;overflow:hidden}.hour-label{height:68px;padding:6px;color:#94a3b8;font-size:11px;border-bottom:1px solid #edf0f5}.hour-slot{min-height:68px;padding:3px 12px;border-bottom:1px solid #edf0f5}.muted{opacity:.5}.login{min-height:100vh;display:grid;place-items:center;background:radial-gradient(ellipse at top,#eaf2ff,transparent 70%),#f8fafc}.login-card{width:400px;max-width:calc(100vw - 32px);background:white;padding:40px;border:1px solid #e5eaf1;border-radius:20px;box-shadow:0 18px 70px #1831530a}.login h1{font-size:30px;margin:16px 0 0}.login p{color:#64748b}.login label{margin-top:18px}.login .primary{width:100%;margin-top:24px}.login small{font-size:11px;color:#94a3b8}dialog{width:650px;max-width:calc(100vw - 24px);max-height:90vh;border:1px solid #e5eaf1;border-radius:16px;padding:26px;box-shadow:0 20px 90px #0002}dialog::backdrop{background:#16263c66}.dialog-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.dialog-title h2{margin:0;font-size:22px}.dialog-title button{border:0;font-size:22px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.full{grid-column:1/-1}textarea{min-height:70px;resize:vertical}footer{display:flex;justify-content:flex-end;gap:10px;margin-top:25px}#login-error,#job-error{color:#b91c1c}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#1e293b;color:white;padding:12px 24px;border-radius:10px;z-index:10}.notification{padding:14px 0;border-bottom:1px solid #e5eaf1}.notification button{margin-top:8px;font-size:12px}#badge{color:#2563eb}@media(max-width:900px){aside{display:none}.layout{grid-template-columns:1fr}header{flex-wrap:wrap;height:auto;padding:14px;gap:10px}.brand{width:auto}header h1{font-size:16px;min-width:150px}#logout{font-size:11px}main{padding:10px}.form-grid{grid-template-columns:1fr}.full{grid-column:auto}.calendar-grid{min-width:580px}}
.calendar-grid{grid-template-columns:repeat(7,1fr)}

.mobile-only{display:none}@media(max-width:900px){.mobile-only{display:block}}

/* Keep form text readable at its native size when a phone focuses a field. */
input, select, textarea {
  font-size: 16px;
  min-width: 0;
}
main { min-width: 0; }
@media (max-width: 900px) {
  input, select, textarea { min-height: 48px; }
  label { font-size: 14px; }
  button { min-height: 44px; }
  #logout { font-size: 14px; }
  header select { width: 112px; }
  .login-card { padding: 28px 24px; }
  dialog {
    width: calc(100vw - 24px);
    max-width: calc(100vw - 24px);
    max-height: calc(100vh - 32px);
    max-height: calc(100dvh - 32px);
    padding: 20px 18px;
    overflow-y: auto;
    overscroll-behavior: contain;
  }
  .dialog-title { gap: 12px; margin-bottom: 18px; }
  .dialog-title button { min-width: 44px; flex-shrink: 0; }
  .form-grid { gap: 14px; }
  textarea { min-height: 96px; }
  footer { flex-wrap: wrap; gap: 10px; }
  footer button { flex: 1 1 140px; }
  input[type="datetime-local"] { max-width: 100%; }
  input::-webkit-date-and-time-value { text-align: left; min-height: 1.5em; }
}
/* Addresses wrap so the full appointment location remains readable. */
.job .job-address { white-space: normal; overflow-wrap: anywhere; line-height: 1.4; margin-top: 4px; }
.status-filter{margin-top:24px}.guide-link{display:block;margin-top:16px;color:var(--brand,#2563eb)}
.check{display:flex;align-items:center;gap:10px;font-weight:400;margin:8px 0}.check input{width:20px;min-height:20px;height:20px;margin:0;flex:none}
fieldset{border:1px solid #dce2eb;border-radius:8px;margin:16px 0}#key-form label{margin-top:10px}#new-key{border:1px solid #93c5fd;background:#eff6ff;border-radius:8px;padding:14px;margin-top:20px}#key-value{font-family:monospace}#key-error{color:#b91c1c}
#menu-backdrop{position:fixed;inset:0;width:100%;height:100%;z-index:55;background:#16263c88;border:0;border-radius:0}
@media(max-width:900px){#sidebar{display:block;position:fixed;inset:0 auto 0 0;width:min(320px,calc(100vw - 36px));height:100dvh;background:white;z-index:60;overflow-y:auto;visibility:hidden;transform:translateX(-100%);padding:18px 22px}.sidebar-open{overflow:hidden}.sidebar-open #sidebar{visibility:visible;transform:translateX(0)}.sidebar-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.sidebar-heading button{font-size:24px}.aside-footer{margin-top:30px}#menu{flex-shrink:0}#toast{max-width:calc(100vw - 24px);width:max-content}}

.api-guide{max-width:1000px;margin:auto;padding:28px}.api-guide pre{white-space:pre-wrap;overflow-wrap:anywhere;font:14px/1.7 system-ui,sans-serif}.api-guide h2{margin-top:36px}
#open-team{display:block;margin:24px 0 12px}#invite-form label,#team-members label{margin-top:12px}#create-invite{margin-top:16px}#invitation-link{background:#eff6ff;border:1px solid #93c5fd;border-radius:8px;padding:14px;margin-top:20px}.team-member small{display:block;margin-top:8px}#team-error,#join-error{color:#b91c1c}#join-form label{margin:16px 0}
