*{box-sizing:border-box}body{margin:0;font-family:Arial,sans-serif;background:#f4f6f9;color:#172033}a{text-decoration:none;color:inherit}.auth{min-height:100vh;display:grid;place-items:center;padding:20px}.card{background:#fff;border:1px solid #e5e9f0;border-radius:16px;padding:24px;max-width:520px;width:100%;box-shadow:0 8px 28px #0000000c}h1{margin-top:0}.muted{color:#687386}.brand{font-weight:800;font-size:20px}.top{background:#fff;border-bottom:1px solid #e5e9f0;padding:14px 20px;display:flex;justify-content:space-between;align-items:center;gap:12px}.wrap{max-width:1100px;margin:auto;padding:20px}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.stat{font-size:28px;font-weight:800}.btn{display:inline-flex;justify-content:center;align-items:center;min-height:44px;background:#172033;color:#fff;border:0;border-radius:10px;padding:11px 16px;font-weight:700;cursor:pointer}.btn.secondary{background:#eef1f5;color:#172033}.btn.danger{background:#a82424}.actions{display:flex;gap:10px;flex-wrap:wrap}label{display:block;font-weight:700;margin:14px 0 5px}input,select{width:100%;padding:12px;border:1px solid #cfd6df;border-radius:9px;font-size:16px;background:#fff}table{width:100%;border-collapse:collapse;background:#fff}th,td{text-align:left;padding:12px;border-bottom:1px solid #e7eaf0}th{background:#f8f9fb}.tablebox{overflow:auto;border-radius:12px;border:1px solid #e5e9f0}.alert{padding:11px;border-radius:9px;margin:12px 0}.err{background:#feecec;color:#8c1d1d}.ok{background:#eaf8ef;color:#176b36}.badge{display:inline-block;padding:5px 9px;border-radius:20px;background:#eef1f5;font-size:12px;font-weight:700}.hero{padding:22px 0}.hero h1{margin-bottom:6px}@media(max-width:700px){.grid{grid-template-columns:1fr}.top{align-items:flex-start}.wrap{padding:14px}.card{padding:18px}th,td{white-space:nowrap}}
.btn:disabled{opacity:.5;cursor:not-allowed}.btn-block{display:flex;width:100%;margin-top:14px}.attendance-times{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:16px 0}.attendance-times>div,.gps-box>div{background:#f8f9fb;border:1px solid #e5e9f0;border-radius:12px;padding:14px}.attendance-times span,.attendance-times strong,.gps-box span,.gps-box strong{display:block}.attendance-times strong,.gps-box strong{margin-top:5px}.capture-wrap{max-width:620px}.gps-box{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:14px 0}.camera-box{background:#111;border-radius:16px;overflow:hidden;aspect-ratio:1/1;display:grid;place-items:center}.camera-box video,.camera-box img{width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}.camera-box img{transform:none}.capture-actions{margin:14px 0}.submit-attendance{margin-top:14px}.small{font-size:13px;line-height:1.5}@media(max-width:500px){.attendance-times,.gps-box{grid-template-columns:1fr 1fr}.capture-actions .btn{flex:1}.camera-box{border-radius:12px}}


/* Phase 1B Mobile Camera Fix - prevents live camera/selfie overflowing the screen */
.capture-wrap,
.capture-wrap .card,
.camera-box {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    box-sizing: border-box;
}

.capture-wrap .card {
    overflow: hidden;
}

.camera-box {
    position: relative;
    display: block;
    overflow: hidden;
    aspect-ratio: 1 / 1;
    background: #111;
}

.camera-box video,
.camera-box img,
.camera-box canvas {
    display: block;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: 100% !important;
    max-height: none !important;
    object-fit: cover;
    box-sizing: border-box;
}

.camera-box video {
    transform: scaleX(-1);
}

.camera-box img {
    transform: none;
}

.camera-box canvas[hidden] {
    display: none !important;
}

@media (max-width: 700px) {
    .capture-wrap {
        width: 100%;
        max-width: 100%;
        padding: 12px;
        margin: 0;
    }

    .capture-wrap .card {
        width: 100%;
        max-width: 100%;
        padding: 14px;
    }

    .camera-box {
        width: 100%;
        max-width: 100%;
        aspect-ratio: 1 / 1;
        border-radius: 12px;
    }

    .capture-actions {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
        gap: 8px;
    }

    .capture-actions .btn {
        width: 100%;
        min-width: 0;
        padding-left: 8px;
        padding-right: 8px;
        font-size: 12px;
    }
}

@media (max-width: 390px) {
    .capture-actions {
        grid-template-columns: 1fr;
    }
}


/* Phase 1E - Employee monthly attendance calendar */
.employee-dashboard .card + .card{margin-top:18px}
.calendar-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:16px}
.calendar-heading h2{margin:0 0 4px}
.calendar-nav{display:flex;gap:7px}
.calendar-nav-btn{width:38px;height:38px;border:1px solid #dfe4eb;border-radius:9px;background:#fff;display:grid;place-items:center;font-size:26px;font-weight:700;line-height:1}
.calendar-nav-btn.disabled{opacity:.35;cursor:not-allowed}
.attendance-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
.attendance-summary>div{border:1px solid #e5e9f0;border-radius:12px;padding:12px;text-align:center;background:#f8f9fb}
.attendance-summary strong{display:block;font-size:23px;margin-bottom:3px}
.attendance-summary span{font-size:12px;font-weight:700}
.summary-present strong{color:#176b36}
.summary-absent strong{color:#a82424}
.summary-missed strong{color:#9a6500}
.calendar-legend{display:flex;gap:14px;flex-wrap:wrap;margin:0 0 13px;font-size:12px;font-weight:700;color:#596579}
.calendar-legend span{display:flex;align-items:center;gap:5px}
.legend-dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.legend-dot.present{background:#2f9e5b}.legend-dot.absent{background:#d94a4a}.legend-dot.missed{background:#e0a323}
.attendance-calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.calendar-weekday{text-align:center;font-size:11px;font-weight:800;color:#687386;padding:5px 0}
.calendar-day{min-width:0;min-height:82px;border:1px solid #e5e9f0;border-radius:10px;padding:8px 6px;background:#f8f9fb;display:flex;flex-direction:column;align-items:flex-start}
.calendar-day.empty{border:0;background:transparent}
.calendar-day.present{background:#edf9f1;border-color:#bfe8cc}
.calendar-day.absent{background:#fff0f0;border-color:#f0c7c7}
.calendar-day.missed{background:#fff8e8;border-color:#edd9a3}
.calendar-day.today-pending{background:#eef4ff;border-color:#cbd9f3}
.calendar-day.upcoming{background:#f8f9fb;color:#9aa2ae}
.calendar-day.is-today{box-shadow:inset 0 0 0 2px #172033}
.day-number{font-size:14px;font-weight:800;line-height:1}
.day-status{font-size:10px;font-weight:800;margin-top:8px;line-height:1.15}
.day-time{font-size:9px;color:#687386;margin-top:4px;white-space:nowrap}
.calendar-note{margin:14px 0 0}
@media(max-width:500px){
  .attendance-calendar{gap:4px}
  .calendar-day{min-height:67px;padding:6px 4px;border-radius:8px}
  .calendar-weekday{font-size:9px}
  .day-number{font-size:12px}
  .day-status{font-size:8px;margin-top:6px}
  .day-time{font-size:7px}
  .attendance-summary{gap:6px}
  .attendance-summary>div{padding:9px 5px}
  .attendance-summary strong{font-size:19px}
  .attendance-summary span{font-size:10px}
}


/* Phase 1F - Employee full month calendar (reference layout) */
.reference-calendar{
    margin-top:18px;
    padding:20px;
    overflow:hidden;
}
.ref-calendar-title h2{
    margin:0;
    font-size:30px;
    line-height:1.1;
    color:#34261f;
}
.ref-calendar-title span{
    display:block;
    width:138px;
    height:4px;
    margin-top:10px;
    background:#ff8b32;
}
.ref-calendar-toolbar{
    position:relative;
    display:grid;
    grid-template-columns:1fr auto 1fr;
    align-items:center;
    min-height:92px;
    gap:12px;
}
.toolbar-left{justify-self:start}
.toolbar-center{
    justify-self:center;
    display:flex;
    align-items:center;
    gap:0;
}
.today-button{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-height:42px;
    padding:0 17px;
    border-radius:13px;
    background:#e2e2e4;
    color:#666;
    font-size:18px;
    text-decoration:none;
}
.arrow-button{
    width:58px;
    height:42px;
    display:grid;
    place-items:center;
    border:1px solid #ececef;
    background:#f7f7f8;
    color:#20242a;
    font-size:34px;
    line-height:1;
    text-decoration:none;
}
.arrow-button:first-child{border-radius:12px 0 0 12px}
.arrow-button:nth-child(2){border-radius:0 12px 12px 0}
.arrow-button.disabled{opacity:.35;cursor:default}
.calendar-month-title{
    min-width:200px;
    text-align:center;
    padding:0 18px;
    color:#09264d;
    font-size:20px;
    white-space:nowrap;
}
.ref-calendar-scroll{
    width:100%;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
}
.ref-calendar-grid{
    width:100%;
    min-width:760px;
    display:grid;
    grid-template-columns:repeat(7,minmax(0,1fr));
    border-top:1px solid #d7d9dc;
    border-left:1px solid #d7d9dc;
}
.ref-weekday{
    height:36px;
    display:flex;
    align-items:center;
    justify-content:center;
    border-right:1px solid #d7d9dc;
    border-bottom:1px solid #d7d9dc;
    font-size:18px;
    font-weight:800;
    color:#09264d;
}
.ref-weekday:first-child{color:#38271f}
.ref-day{
    position:relative;
    min-height:100px;
    padding:10px 4px;
    border-right:1px solid #d7d9dc;
    border-bottom:1px solid #d7d9dc;
    background:#fff;
    box-sizing:border-box;
}
.ref-day.empty{background:#fbfbfc}
.ref-day.today{background:#fff9dc}
.ref-day-number{
    text-align:right;
    padding-right:2px;
    color:#08264d;
    font-size:18px;
    line-height:1;
}
.ref-day.today .ref-day-number{color:#4b331f}
.ref-status{
    width:100%;
    margin-top:14px;
    padding:6px 3px;
    border-radius:6px;
    color:#fff;
    font-size:17px;
    line-height:1.1;
    text-align:left;
    box-sizing:border-box;
    white-space:nowrap;
    overflow:hidden;
    text-overflow:ellipsis;
}
.ref-status.present{background:#4caf50}
.ref-status.absent{background:#dc4c4c}
.ref-status.missed{background:#e3a52c;color:#3b2b08}
.ref-calendar-summary{
    display:flex;
    flex-wrap:wrap;
    gap:18px;
    align-items:center;
    margin-top:15px;
    color:#586477;
    font-size:13px;
}
.ref-calendar-summary span{
    display:flex;
    align-items:center;
    gap:5px;
}
@media(max-width:700px){
    .reference-calendar{padding:12px}
    .ref-calendar-title h2{font-size:24px}
    .ref-calendar-title span{width:105px;height:3px;margin-top:7px}
    .ref-calendar-toolbar{
        grid-template-columns:auto 1fr;
        min-height:76px;
    }
    .toolbar-left{grid-column:1}
    .toolbar-center{
        grid-column:2;
        justify-self:end;
    }
    .toolbar-right{display:none}
    .today-button{
        min-height:36px;
        padding:0 12px;
        border-radius:10px;
        font-size:14px;
    }
    .arrow-button{
        width:34px;
        height:36px;
        font-size:25px;
    }
    .calendar-month-title{
        min-width:0;
        padding:0 8px;
        font-size:15px;
    }
    .ref-calendar-grid{
        min-width:700px;
    }
    .ref-weekday{
        height:34px;
        font-size:14px;
    }
    .ref-day{
        min-height:86px;
        padding:7px 3px;
    }
    .ref-day-number{font-size:14px}
    .ref-status{
        margin-top:11px;
        padding:6px 3px;
        font-size:13px;
    }
}
