/* External stylesheet for strict CSP on both admin and employee entry points. */
dialog.gele-close-dialog{max-height:min(90dvh,calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 24px))!important;overflow:auto;scroll-padding-top:68px;overscroll-behavior:contain}
.gele-close-bar{position:sticky;top:0;left:0;z-index:30;display:flex;justify-content:flex-end;align-items:center;box-sizing:border-box;min-height:56px;margin:0 0 14px;padding:0 max(0px,env(safe-area-inset-right)) 10px 0;background:var(--gele-dialog-background,#fff);border-bottom:1px solid var(--line,#e3e8f0);isolation:isolate}
.gele-close-header{position:sticky;top:0;z-index:30;background:var(--gele-dialog-background,#fff);gap:12px;padding-top:max(0px,env(safe-area-inset-top));isolation:isolate}
.gele-close-header>div,.gele-close-header h2{min-width:0;overflow-wrap:anywhere}
.gele-close-bar>.gele-close-control,.gele-close-header>.gele-close-control{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-width:80px;min-height:44px;width:auto;height:auto;margin:0 0 0 auto;padding:10px 14px;border:1px solid #d4ddea;border-radius:9px;background:#fff;color:#344968;font:600 14px/1.3 system-ui,"PingFang SC","Microsoft YaHei",sans-serif;white-space:nowrap;cursor:pointer;touch-action:manipulation}
.gele-close-bar>.gele-close-control:hover,.gele-close-header>.gele-close-control:hover{background:#edf3ff}
.gele-close-bar>.gele-close-control:focus-visible,.gele-close-header>.gele-close-control:focus-visible{outline:3px solid #2866e6;outline-offset:2px}
.gele-close-bar>.gele-close-control:disabled,.gele-close-header>.gele-close-control:disabled{opacity:.5;cursor:wait}
@media(max-width:650px){.gele-close-bar{min-height:54px;margin-bottom:12px}.gele-close-header{padding-right:max(0px,env(safe-area-inset-right))}.gele-close-bar>.gele-close-control,.gele-close-header>.gele-close-control{min-width:80px;min-height:44px}}

/* Compact business forms, shared by admin and employee entry points.
   Explicit form families only: do not target chat composers, tables, previews,
   login/registration consent, or hidden-state behavior. Lazy styles may load later. */
.modal .form-grid,
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.space-dialog,.pa-dialog,.interview-table-dialog,.work-reports-dialog) :is(.intel-form-grid,.flow-form-grid,.sales-form-grid,.agreement-form-grid,.staff-service-fields,.space-fields,.receiving-fields,.pa-fields,.interview-registration-fields,.work-reports-fields),
dialog.daily-month-dialog form .daily-field-grid {
  min-width:0;gap:10px 14px;align-items:start;
}
.modal .form-grid>label,
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.space-dialog,.pa-dialog,.interview-table-dialog,.work-reports-dialog) :is(.intel-form-grid,.flow-form-grid,.sales-form-grid,.agreement-form-grid,.staff-service-fields,.space-fields,.receiving-fields,.pa-fields,.interview-registration-fields,.work-reports-fields)>label,
dialog.daily-month-dialog form .daily-field-grid>label {
  min-width:0;gap:5px;margin:0;font-size:14px;line-height:1.4;overflow-wrap:anywhere;
}
.modal .form-grid>label:has(textarea,input[type="file"],input[type="datetime-local"],select[multiple]),
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.space-dialog,.pa-dialog,.interview-table-dialog,.work-reports-dialog) :is(.intel-form-grid,.flow-form-grid,.sales-form-grid,.agreement-form-grid,.staff-service-fields,.space-fields,.receiving-fields,.pa-fields,.interview-registration-fields,.work-reports-fields)>label:has(textarea,input[type="file"],input[type="datetime-local"],select[multiple]),
dialog.daily-month-dialog form .daily-field-grid>label:has(textarea) {grid-column:1/-1}
/* Preserve existing wide fields and long identifier / account / reason inputs. */
.modal .form-grid>:is(.full,.wide),
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.space-dialog,.pa-dialog,.interview-table-dialog,.work-reports-dialog) :is(.intel-form-grid,.flow-form-grid,.sales-form-grid,.agreement-form-grid,.staff-service-fields,.space-fields,.pa-fields)>:is(.full,.wide,.agreement-wide,.pa-wide),
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.space-dialog,.pa-dialog,.interview-table-dialog,.work-reports-dialog) :is(.staff-service-fields,.space-fields,.receiving-fields,.pa-fields,.interview-registration-fields,.work-reports-fields)>label:has(input[name="idCard"],input[name="account"],input[name="receivingAccount"],input[name="receivingBank"],input[name="voucher"],input[name="reference"],input[name="reason"],input[name="deductionNote"],input[name="note"]) {grid-column:1/-1}
.modal .form-grid :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),select,textarea):not(table input,table select,table textarea),
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.space-dialog,.pa-dialog,.work-reports-dialog,.interview-table-dialog) form :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),select,textarea):not(table input,table select,table textarea) {
  box-sizing:border-box;min-width:0;max-width:100%;min-height:44px;padding:9px 10px;font-size:14px;line-height:1.4;
}
.modal .form-grid textarea:not(table textarea),
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.space-dialog,.pa-dialog,.work-reports-dialog,.interview-table-dialog) form textarea:not(table textarea) {min-height:76px;resize:vertical}
dialog.space-dialog .space-fields>fieldset[data-routing] {grid-column:1/-1;min-width:0;margin:0;padding:10px 12px;border:1px solid var(--line,#dce3ef);border-radius:8px}
/* Native date fields must shrink within their grid track, including iOS. */
.modal .form-grid input:is([type="date"],[type="time"],[type="month"],[type="datetime-local"]):not(table input),
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.course-registration-dialog,.space-dialog,.pa-dialog,.work-reports-dialog,.interview-table-dialog) input:is([type="date"],[type="time"],[type="month"],[type="datetime-local"]):not(table input) {
  box-sizing:border-box;display:block;width:100%;min-width:0;max-width:100%;min-inline-size:0;inline-size:100%;max-inline-size:100%;text-align:left;
}
dialog.course-registration-dialog input[type="datetime-local"]::-webkit-datetime-edit {min-width:0;padding:0}
dialog.course-registration-dialog input[type="datetime-local"]::-webkit-date-and-time-value {min-width:0;text-align:left}
.modal .form-grid :is(input,select,textarea):focus-visible,
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.course-registration-dialog,.space-dialog,.pa-dialog,.work-reports-dialog,.interview-table-dialog) form :is(input,select,textarea,button):focus-visible {outline:3px solid var(--blue,#2866e6);outline-offset:2px}
/* Avoid double padding in dialogs that already have their own outer inset. */
dialog.intel-dialog>form {padding:18px}
dialog.intel-dialog:is(.learning-dialog,.appointment-dialog)>form {padding:0;margin:12px 0 0}
dialog.intel-dialog.appointment-dialog>form {gap:10px}
dialog.intel-dialog.appointment-dialog .appointment-datetime {grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}
dialog.intel-dialog.learning-dialog:not(.staff-service-dialog)>form {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}
dialog.intel-dialog.learning-dialog:not(.staff-service-dialog)>form>label {margin:0;gap:5px;min-width:0}
dialog.intel-dialog.learning-dialog:not(.staff-service-dialog)>form>:is(p,button),
dialog.intel-dialog.learning-dialog:not(.staff-service-dialog)>form>label:has(textarea,input[type="file"]) {grid-column:1/-1}
dialog.pa-dialog .pa-fields {margin:14px 0}
dialog.work-reports-dialog .work-reports-fields {gap:0 12px}
dialog.work-reports-dialog .work-reports-form label {margin:7px 0}
dialog:is(.intel-dialog,.sales-dialog,.flow-dialog,.daily-month-dialog) form>.intel-actions {gap:8px;margin-top:14px}
.modal .modal-actions>button,
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.space-dialog,.pa-dialog,.work-reports-dialog,.interview-table-dialog) form button:not(table button) {min-height:44px;max-width:100%;white-space:normal;overflow-wrap:anywhere}
.modal .modal-actions>.primary-button,
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.space-dialog,.work-reports-dialog) form>button[type="submit"],
dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.work-reports-dialog) form :is(.intel-actions,.agreement-dialog-actions,.work-reports-actions)>.primary-button {min-width:min(100%,144px);font-weight:700}
/* Trial records are form-only; the neighboring attendance table is unaffected. */
.trial-attendance form.trial-form {grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}
.trial-attendance form.trial-form>:is(h4,p),
.trial-attendance form.trial-form>label:has(input[type="checkbox"],input[name="reason"]) {grid-column:1/-1}
.trial-attendance form.trial-form>label:not(:has(input[type="checkbox"])) {display:flex;flex-direction:column;align-items:stretch;gap:5px;min-width:0;font-size:14px}
.trial-attendance form.trial-form :is(input:not([type="checkbox"]),select) {box-sizing:border-box;min-width:0;max-width:100%;width:100%;min-height:44px;padding:9px 10px;border:1px solid var(--line,#ccd5e2);border-radius:8px;font:inherit}
.trial-attendance form.trial-form>button {min-height:44px}
/* Narrative case editors stay single-column; review warnings and consent remain visible. */
dialog.case-dialog .case-fields {gap:10px}
dialog.case-dialog .case-fields>label {display:flex;flex-direction:column;gap:5px;margin:0;font-size:14px;min-width:0}
dialog.case-dialog .case-fields :is(input,textarea) {box-sizing:border-box;min-width:0;max-width:100%;min-height:44px;padding:9px 10px;font:inherit}
dialog.case-dialog .case-fields textarea {min-height:76px;resize:vertical}
dialog.case-dialog .case-tools>button {min-height:44px}
.prejob-root form[data-prejob-enroll] :is(select,button) {min-height:44px}
/* Keep the established compact numeric-report tracks on desktop. */
#dailyReportsView form .daily-field-grid>label {min-width:0}
#dailyReportsView form .daily-field-grid :is(input:not([type="checkbox"]),select,textarea):not(table input,table select,table textarea) {box-sizing:border-box;min-width:0;max-width:100%;min-height:44px}
#dailyReportsView [data-course-form] .course-registration-field-grid,
dialog.course-registration-dialog .course-registration-field-grid {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;align-items:start}
#dailyReportsView [data-course-form] .course-registration-due,
dialog.course-registration-dialog .course-registration-due {grid-column:1/-1}
/* The learning/payment editor keeps its guarded header, scroll area and footer. */
dialog.course-registration-dialog {width:min(600px,calc(100vw - 24px));max-width:calc(100vw - 24px)}
dialog.course-registration-dialog .course-registration-head {padding:12px 16px;gap:10px}
dialog.course-registration-dialog .course-registration-head h3 {font-size:16px;line-height:1.4}
dialog.course-registration-dialog [data-course-modal-editor],
dialog.course-registration-dialog [data-course-form] {flex:1 1 auto;min-width:0;min-height:0}
dialog.course-registration-dialog .course-registration-scroll {flex:1 1 auto;min-width:0;padding:14px 16px}
dialog.course-registration-dialog label {gap:5px;font-size:14px;line-height:1.4}
dialog.course-registration-dialog :is(input,select) {box-sizing:border-box;min-width:0;max-width:100%;min-height:44px;padding:9px 10px;font-size:16px;line-height:1.4}
dialog.course-registration-dialog .course-registration-summary {margin:10px 0 6px;font-size:13px;line-height:1.5}
dialog.course-registration-dialog .course-registration-note {margin:6px 0 12px;font-size:12px;line-height:1.5}
dialog.course-registration-dialog details {margin-top:12px;padding-top:8px}
dialog.course-registration-dialog summary {min-height:44px;padding:10px 0}
dialog.course-registration-dialog .intel-actions {gap:8px;padding:12px 16px max(12px,env(safe-area-inset-bottom));align-items:stretch}
dialog.course-registration-dialog button {min-height:44px}
dialog.course-registration-dialog [data-course-save] {flex:1 1 180px;font-weight:700}
dialog.course-registration-dialog .intel-actions>[data-registration-close] {flex:0 1 96px}
dialog.course-registration-dialog .intel-actions>[data-course-reload] {flex:1 1 100%}
dialog.course-registration-dialog [data-course-error] {padding:8px 16px 0;font-size:13px;line-height:1.5}
@media(max-width:650px){
  .modal .form-grid,
  dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.space-dialog,.pa-dialog,.interview-table-dialog,.work-reports-dialog) :is(.intel-form-grid,.flow-form-grid,.sales-form-grid,.agreement-form-grid,.staff-service-fields,.space-fields,.receiving-fields,.pa-fields,.interview-registration-fields,.work-reports-fields),
  dialog.daily-month-dialog form .daily-field-grid {grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}
  .modal .form-grid :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),select,textarea):not(table input,table select,table textarea),
  dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.daily-month-dialog,.space-dialog,.pa-dialog,.work-reports-dialog,.interview-table-dialog) form :is(input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),select,textarea):not(table input,table select,table textarea),
  .trial-attendance form.trial-form :is(input:not([type="checkbox"]),select),
  dialog.case-dialog .case-fields :is(input,textarea),
  .prejob-root form[data-prejob-enroll] select,
  #dailyReportsView form .daily-field-grid :is(input:not([type="checkbox"]),select,textarea):not(table input,table select,table textarea) {font-size:16px}
  dialog.intel-dialog .intel-form-grid:has(>label>input[type="number"]):not(:has(>:not(label),>label>:not(input[type="number"]),>label>input[step="any"])),
  dialog.intel-dialog.roster-edit-dialog .roster-price-grid,
  #dailyReportsView form .daily-field-section .daily-field-grid {grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}
  dialog.intel-dialog>form {padding:14px}
  dialog.intel-dialog:is(.learning-dialog,.appointment-dialog)>form {padding:0}
  dialog.intel-dialog form>.intel-actions>button {flex:1 1 110px;min-width:0}
  dialog.course-registration-dialog .course-registration-head {padding:12px 14px}
  dialog.course-registration-dialog .course-registration-scroll {padding:12px 14px}
  dialog.course-registration-dialog .intel-actions {padding:10px 14px max(10px,env(safe-area-inset-bottom))}
  dialog.course-registration-dialog [data-course-error] {padding:8px 14px 0}
}
@media(max-width:350px){
  .modal .form-grid,
  dialog:is(.intel-dialog,.flow-dialog,.sales-dialog,.agreement-dialog,.space-dialog,.pa-dialog,.interview-table-dialog,.work-reports-dialog) :is(.intel-form-grid,.flow-form-grid,.sales-form-grid,.agreement-form-grid,.staff-service-fields,.space-fields,.receiving-fields,.pa-fields,.interview-registration-fields,.work-reports-fields),
  dialog.daily-month-dialog form .daily-field-grid,
  dialog.intel-dialog.learning-dialog:not(.staff-service-dialog)>form,
  dialog.intel-dialog.appointment-dialog .appointment-datetime,
  .trial-attendance form.trial-form,
  dialog.intel-dialog .intel-form-grid:has(>label>input[type="number"]):not(:has(>:not(label),>label>:not(input[type="number"]),>label>input[step="any"])),
  dialog.intel-dialog.roster-edit-dialog .roster-price-grid,
  #dailyReportsView form .daily-field-section .daily-field-grid,
  #dailyReportsView [data-course-form] .course-registration-field-grid,
  dialog.course-registration-dialog .course-registration-field-grid {grid-template-columns:minmax(0,1fr)}
  dialog.course-registration-dialog [data-course-save] {flex-basis:140px}
  dialog.course-registration-dialog .intel-actions>[data-registration-close] {flex-basis:72px}
}

/* Compact, explicit confirmation for consultant manual master handoff. */
dialog.course-registration-dialog .course-manual-confirm {display:flex;flex-direction:row;align-items:flex-start;gap:8px}
dialog.course-registration-dialog .course-manual-confirm input[type="checkbox"] {width:20px;height:20px;min-height:20px;flex:0 0 20px;margin:0;padding:0}
