/* Readability refinements for the APP canvas; load after the component styles. */
.app-window{font-size:14px;line-height:1.5}
.app-window button{min-height:44px!important}
.app-window :is(input,select,textarea):not(:where([type="checkbox"],[type="radio"])){font-size:16px;min-height:44px}
.app-window .app-body-practice-editor,.app-window .app-body-editor{padding:0}
.app-window .practice-editor-input input{font-size:20px}
.app-window .practice-editor-input-large input{font-size:25px}
.app-window .practice-editor-days input{font-size:18px}
.app-window .practice-editor-identity textarea{font-size:17px}

/* Metadata is secondary through color and spacing, never through tiny text. */
.app-window .ip-home-footer,
.app-window .ip-list-context small,
.app-window .ip-list-context>button,
.app-window .ip-reading-label>span,
.app-window .ip-practice-card .ip-sync-text,
.app-window .ip-practice-card .ip-channel-reminder,
.app-window .ip-source-stat>span,
.app-window>.ip-list-toolbar>button,
.app-window .app-body-count .practice-top .sub,
.app-window .sync-line,
.app-window .sync-line .text-btn,
.app-window .stat>span,
.app-window .callout small,
.app-window .record-text p,
.app-window .list-card .pill,
.app-window .group-tab>span,
.app-window .channel b,
.app-window .weekday,
.app-window .eyebrow,
.app-window .micro-note,
.app-window .storage-note,
.app-window .notice-bar,
.app-window .goal-detail,
.app-window .scenario-num,
.app-window .scenario-check,
.app-window .test-box label,
.app-window .audit,
.app-window .audit-entry time{font-size:12px;line-height:1.5}
.app-window .record-text strong{font-size:14px;line-height:1.5}
.app-window .ip-list-context,.app-window .ip-unbound-context{font-size:12px;line-height:1.5}
.app-window[data-tab="practices"] .lifecycle-tab-status{font-size:12px;line-height:14px;margin-top:1px}
.app-window[data-tab="practices"] .ip-group-tab{height:auto;min-height:54px;padding-top:4px;padding-bottom:4px}
.app-window[data-tab="practices"] .ip-unbound-context{font-size:12px}
.app-window .app-body-practices .ip-hardware-practice .ip-practice-index,
.app-window .app-body-practices .ip-hardware-practice .channel-type,
.app-window .app-body-practices .ip-hardware-practice .ip-reading-label>span,
.app-window .app-body-practices .ip-hardware-practice .ip-sync-text,
.app-window .app-body-practices .ip-hardware-practice .ip-channel-reminder,
.app-window .app-body-practices .ip-hardware-practice .ip-limit-note,
.app-window .app-body-practices .ip-list-today>span,
.app-window .app-body-practices .ip-list-cumulative .ip-source-stat>span{font-size:12px;line-height:18px}
.app-window .channel-type,.app-window .channel .channel-type{font-size:12px;line-height:18px;padding:2px 5px}
.app-window .channel-type-symbol,
.app-window .channel .channel-type-symbol,
.app-window .app-body-practices .ip-hardware-practice .channel-type-symbol{font-size:12px;line-height:18px;min-width:18px;height:18px;padding:0 2px}
.app-window .channel .channel-choice-top{flex-wrap:wrap;gap:3px}

/* Ordinary descriptions remain easy to read without enlarging card headings. */
.app-window .lifecycle-group p,
.app-window .app-body-devices .list-card p,
.app-window .lifecycle-unbound p,
.app-window .lifecycle-empty,
.app-window .lifecycle-setting p,
.app-window .lifecycle-device-choice p,
.app-window .section-head p,
.app-window .list-card p,
.app-window .scenario p,
.app-window .test-intro p,
.app-window .count-explanation,
.app-window .app-body-count .callout,
.app-window .connection-note,
.app-window .app-body-devices .connection-reason,
.app-window .empty-state{font-size:14px;line-height:1.6}
.app-window .app-body-devices .micro-note{font-size:12px;line-height:1.6}
.app-window .lifecycle-tab-status{font-size:12px;line-height:1.4}
.app-window .ip-goal-line>div{gap:4px 7px}
.app-window .ip-goal-line span{font-size:14px}
.app-window .app-body-practices .ip-practice-card{padding-top:12px;padding-bottom:12px}
.app-window .ip-practice-card .ip-practice-actions{margin-top:10px}
.app-window .ip-practice-card .ip-practice-actions>button{font-size:15px;min-height:44px;padding:5px 1px}
.app-window .app-body-count .count-controls .btn{height:44px;min-height:44px}
.app-window .practice-detail-records .record-text strong{font-size:14px}

/* A single connection row belongs to the device, not to each statistic. */
.app-window .ip-device-connection,
.app-window .detail-connection{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;min-height:44px;color:#756881;font-size:12px;line-height:1.5}
.app-window .ip-device-connection{margin:0 0 5px;padding:0 2px}
.app-window .detail-connection{grid-column:1/-1;width:100%;margin-top:2px}
.app-window .ip-device-connection>p,
.app-window .detail-connection>p,
.app-window .ip-device-connection>.connection-status,
.app-window .detail-connection>.connection-status{display:flex;align-items:center;flex-wrap:wrap;gap:5px;flex:1;min-width:0;margin:0;font-size:12px;line-height:1.5;overflow-wrap:anywhere}
.app-window .ip-device-connection>span{display:flex;align-items:center;flex-wrap:wrap;gap:5px;min-width:0;font-size:12px;line-height:1.5}
.app-window .ip-device-connection svg,
.app-window .detail-connection svg{width:16px;height:18px;flex:0 0 16px}
.app-window .ip-device-connection>button,
.app-window .detail-connection>button{display:inline-flex;align-items:center;justify-content:center;gap:4px;flex:none;min-height:44px;padding:0 5px;border:0;background:transparent;color:#7757ae;font-size:12px;line-height:1.4;white-space:nowrap}
.app-window .ip-device-connection>button:disabled,
.app-window .detail-connection>button:disabled{color:#91849f;opacity:.65}

/* APP-only practices have one total, with no empty hardware column. */
.app-window .app-only-stats{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
.app-window .app-only-stats>div{display:flex;align-items:baseline;justify-content:space-between;gap:12px;min-width:0}
.app-window .app-only-stats>div>span{font-size:14px;line-height:1.5}
.app-window .app-only-stats>div>strong{margin-top:0;text-align:right;font-size:25px;--count-size-7:23px;--count-size-8:21px;--count-size-9:19px}

/* Calendar labels and records retain a 12px minimum. */
.app-window .overview-summary .overview-summary-note,
.app-window .overview-summary .overview-unknown,
.app-window .overview-weekdays,
.app-window .overview-day>small,
.app-window .overview-calendar .overview-calendar-key,
.app-window .overview-day-heading h3>span,
.app-window .overview-day-heading>span,
.app-window .overview-source-stats>div>span,
.app-window .overview-details-heading>span,
.app-window .overview-practice-group,
.app-window .overview-practice-group em,
.app-window .overview-practice-sources,
.app-window .practice-calendar-type,
.app-window .practice-calendar-view .overview-day>small,
.app-window .practice-calendar-view .overview-day-heading h3>span,
.app-window .flat-overview-filters>button>em,
.app-window .flat-overview-ring>span{font-size:12px;line-height:1.5}
.app-window .overview-day>small{height:auto;min-height:16px}
.app-window .flat-overview-calendar .overview-weekdays{font-size:14px}
.app-window .overview-selected-day .overview-empty-day,
.app-window .practice-calendar-empty,
.app-window .practice-calendar-records .empty-state,
.app-window .practice-calendar-records>.overview-empty-day{font-size:14px;line-height:1.6}
.app-window .practice-detail-day>small,
.app-window .practice-detail-day>small.is-long,
.app-window .flat-overview-day>small,
.app-window .flat-overview-day>small.is-long,
.app-window .day .qty{font-size:12px;line-height:1.35;letter-spacing:-.2px}
.app-window .overview-practice-sources{flex-wrap:wrap!important;gap:2px 8px}
.app-window .overview-practice-sources .count-number{--count-size-7:12px;--count-size-8:12px;--count-size-9:12px}
.app-window .practice-detail-period,.app-window .flat-overview-period-totals{gap:4px 10px;flex-wrap:wrap}
.app-window .practice-detail-period>span,.app-window .flat-overview-period-totals>span{font-size:12px}
.app-window .practice-detail-period .count-number,.app-window .flat-overview-period-totals .count-number{--count-size-7:12px;--count-size-8:12px;--count-size-9:12px}
.app-window .count-7{font-size:max(12px,var(--count-size-7,1em))!important}
.app-window .count-8{font-size:max(12px,var(--count-size-8,1em))!important}
.app-window .count-9{font-size:max(12px,var(--count-size-9,1em))!important}

/* Dialogs sit outside the phone node, but are part of the same APP flow. */
#dialog .dialog-description,#dialog .lifecycle-setting p,#dialog .danger-summary p,#dialog .checks{font-size:14px;line-height:1.6}
#dialog .dialog-context,#dialog .form-hint,#dialog .reset-preview small,#dialog .lifecycle-device-choice p,#dialog .device-color-label,#dialog .audit,#dialog .audit-entry time{font-size:12px;line-height:1.5}
#dialog :is(input,select,textarea):not(:where([type="checkbox"],[type="radio"])){font-size:16px;min-height:44px}
#dialog button{min-height:44px!important}
/* Two ordinary hardware cards and their actions remain visible at 375 × 812. */
.app-window .app-body-practices .ip-hardware-practice{padding-top:10px;padding-bottom:10px}
.app-window .app-body-practices .ip-hardware-reading{margin-top:3px;padding-bottom:0}
.app-window .app-body-practices .ip-reading-footer{margin-top:0}
.app-window .app-body-practices .ip-hardware-practice .ip-raw-count{font-size:32px;line-height:36px}
.app-window .app-body-practices .ip-list-cumulative{margin-top:4px}
.app-window .app-body-practices .ip-practice-card .ip-practice-actions{margin-top:6px}
.app-window .ip-device-connection>button,.app-window .detail-connection>button{background:#eee7f9;border:1px solid #ddcfef;border-radius:10px;padding:0 10px;font-size:13px;color:#70529e}

/* Keep the full data-operation scope readable on the 375 px phone canvas. */
#dialog .lifecycle-setting .btn{font-size:14px;line-height:1.5;white-space:normal;min-height:44px;padding:12px 16px;text-align:center;overflow-wrap:anywhere}

.clock-test-notice{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;padding:4px 12px;background:#fff2d9;color:#7a522a}.clock-test-notice button{min-height:36px;font-size:12px;text-decoration:underline}

.device-battery-row{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:44px;padding:2px 0}.device-battery-info{display:flex;align-items:center;flex-wrap:wrap;gap:3px 7px;min-width:0;color:#83758f}.device-battery-label{font-size:14px;line-height:1.5;white-space:nowrap}.device-battery-info strong{display:inline-flex;align-items:center;gap:4px;font-size:14px;line-height:1.5;font-weight:400;font-variant-numeric:tabular-nums;white-space:nowrap;color:#6e5f7e}.device-battery-icon{flex:none}.device-battery-row .device-battery-icon,.hardware-battery-control .device-battery-icon{width:20px;height:12px}.device-battery-hint{font-size:12px;line-height:1.5;color:#93879f;white-space:nowrap}.device-battery-row.is-low strong,.device-battery-row.is-low .device-battery-hint{color:#b44855}.device-battery-refresh{display:inline-flex;align-items:center;justify-content:center;gap:4px;flex:none;min-height:44px;padding:0 2px;border:0;border-radius:6px;background:transparent;color:#856bb0;font:inherit;font-size:13px;white-space:nowrap;cursor:pointer}.device-battery-refresh svg{width:14px;height:14px}.device-battery-refresh:hover{color:#624894}.device-battery-refresh:focus-visible{outline:2px solid #9374c2;outline-offset:2px}#dialog .device-battery-row{margin:4px 0 6px;padding:0}.hardware-battery-control{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:14px;color:#81728e;margin:5px 0}.hardware-battery-control .btn{display:inline-flex;align-items:center;gap:5px;min-height:44px;font-size:14px;font-weight:400;padding:0 2px;border:0;background:transparent}.hardware-battery-control .btn>span{font-size:12px;color:#9584a7}.hw-battery i.hw-battery-empty{opacity:.08}

.ip-home .ip-home-card{cursor:pointer;padding-bottom:10px}.ip-home .ip-view-all-practices{display:flex;align-items:center;justify-content:center;gap:3px;width:100%;min-height:44px;margin-top:2px;padding:0 8px;border:0;background:transparent;color:#8064b5;font-size:14px;line-height:1.5;cursor:pointer}.ip-home .ip-view-all-practices .ip-icon{width:13px;height:13px}.ip-home .ip-view-all-practices:hover{color:#624593}.ip-home .ip-view-all-practices:active{opacity:.7}
