.card{background:var(--color-bg-surface);border:1px solid var(--border-color);border-radius:var(--r-xl);box-shadow:var(--shadow-sm);transition:border-color var(--t-base),box-shadow var(--t-base),transform var(--t-fast)}.card:hover{border-color:var(--border-hover);box-shadow:var(--shadow-md)}.card-p{padding:var(--sp-4)}.card-header{padding:var(--sp-4) var(--sp-4) var(--sp-3);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}.card-body{padding:var(--sp-4)}.card-footer{padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--border-color);display:flex;gap:var(--sp-3);justify-content:flex-end}@media (min-width:640px){.card-p{padding:var(--sp-6)}.card-header{padding:var(--sp-5) var(--sp-6) var(--sp-4)}.card-body{padding:var(--sp-5) var(--sp-6)}.card-footer{padding:var(--sp-4) var(--sp-6)}}.stat-card{background:var(--color-bg-surface);border:1px solid var(--border-color);border-radius:var(--r-xl);padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2);position:relative;overflow:hidden;box-shadow:var(--shadow-sm);transition:all var(--t-base)}.stat-card:after{content:"";position:absolute;bottom:0;left:0;right:0;height:3px;background:var(--accent-color,var(--color-primary));opacity:0;transition:opacity var(--t-base)}.stat-card:hover:after{opacity:1}.stat-card:hover{border-color:var(--border-hover);transform:var(--hover-lift);box-shadow:var(--shadow-md)}.stat-label{font-size:var(--fs-xs);font-weight:var(--fw-semibold);text-transform:uppercase;letter-spacing:var(--ls-wider);color:var(--text-secondary)}.stat-value{font-size:24px;font-weight:var(--fw-extrabold);letter-spacing:var(--ls-tight);line-height:var(--lh-tight);color:var(--text-primary)}.stat-sub{font-size:var(--fs-sm);color:var(--text-muted);margin-top:2px}@media (min-width:640px){.stat-card{padding:var(--sp-6)}.stat-value{font-size:26px}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);padding:10px 16px;border-radius:var(--r-md);font-size:var(--fs-base);font-weight:var(--fw-semibold);cursor:pointer;border:none;outline:none;text-decoration:none;transition:all var(--t-fast);white-space:nowrap;line-height:1;min-height:var(--touch-target-min);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}.btn:focus-visible{box-shadow:var(--focus-ring)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none!important}.btn-primary{background:var(--color-primary);color:var(--text-on-primary);box-shadow:0 2px 8px #0ea5e940}.btn-primary:not(:disabled):hover{background:var(--color-primary-hover);box-shadow:0 4px 16px #0ea5e959;transform:var(--hover-lift)}.btn-primary:not(:disabled):active{transform:var(--active-press);box-shadow:0 2px 8px #0ea5e940}.btn-secondary{background:var(--color-bg-surface);color:var(--text-primary);border:1px solid var(--border-color)}.btn-secondary:not(:disabled):hover{background:var(--color-bg-base);border-color:var(--border-hover)}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:not(:disabled):hover{background:var(--glass-bg);color:var(--text-primary)}.btn-danger{background:var(--color-rose-light);color:var(--color-rose);border:1px solid rgba(239,68,68,.2)}.btn-danger:not(:disabled):hover{background:#ef444426}.btn-teal{background:var(--color-teal-light);color:var(--color-teal);border:1px solid rgba(14,165,233,.2)}.btn-teal:not(:disabled):hover{background:#0ea5e926}.btn-success{background:var(--color-emerald-light);color:var(--color-emerald);border:1px solid rgba(16,185,129,.2)}.btn-success:not(:disabled):hover{background:#10b98126}.btn-sm{padding:6px 12px;font-size:var(--fs-sm);border-radius:var(--r-sm);min-height:36px}.btn-xs{padding:4px 8px;font-size:var(--fs-xs);border-radius:var(--r-sm);min-height:28px}.btn-lg{padding:12px 24px;font-size:var(--fs-md);border-radius:var(--r-md);min-height:var(--touch-target-comfortable);font-weight:var(--fw-bold)}.btn-icon{padding:8px;border-radius:var(--r-md);min-width:var(--touch-target-min);min-height:var(--touch-target-min)}.btn-icon-sm{padding:6px;border-radius:var(--r-sm);min-width:36px;min-height:36px}.btn-block{width:100%;justify-content:center}.fab{position:fixed;bottom:calc(var(--bottom-nav-height) + var(--sp-4) + env(safe-area-inset-bottom,0px));right:var(--sp-4);width:56px;height:56px;border-radius:var(--r-full);background:var(--color-primary);color:var(--text-on-primary);font-size:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;border:none;box-shadow:var(--shadow-lg),0 0 24px #0ea5e94d;transition:transform var(--t-fast),box-shadow var(--t-fast);z-index:var(--z-fab);-webkit-tap-highlight-color:transparent}.fab:hover{transform:scale(1.06);box-shadow:var(--shadow-lg),0 0 32px #0ea5e966}.fab:active{transform:scale(.95)}@media (min-width:769px){.fab{bottom:var(--sp-8);right:var(--sp-8)}}.form-group{display:flex;flex-direction:column;gap:6px}.form-label{font-size:var(--fs-xs);font-weight:var(--fw-semibold);color:var(--text-secondary);text-transform:uppercase;letter-spacing:var(--ls-wider)}.form-input,.form-select,.form-textarea{background:var(--color-bg-surface);border:1px solid var(--border-color);border-radius:var(--r-md);padding:12px 14px;color:var(--text-primary);font-size:16px;font-family:inherit;outline:none;transition:border-color var(--t-fast),box-shadow var(--t-fast);width:100%;min-height:var(--touch-target-min);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-input:hover,.form-select:hover{border-color:var(--border-hover)}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--border-focus);box-shadow:var(--focus-ring)}.form-input::placeholder{color:var(--text-dim)}.form-select{cursor:pointer;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2394A3B8' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;padding-right:36px}.form-textarea{resize:vertical;min-height:88px}.form-hint{font-size:var(--fs-sm);color:var(--text-muted)}.form-error{font-size:var(--fs-sm);color:var(--color-rose)}.form-row{display:flex;flex-direction:column;gap:var(--sp-4)}@media (min-width:640px){.form-input,.form-select,.form-textarea{font-size:var(--fs-base);padding:10px 14px}.form-row{flex-direction:row}.form-row>*{flex:1}}.search-wrap{position:relative}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none;font-size:var(--fs-base)}.search-input{padding-left:40px!important}.badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:var(--r-full);font-size:var(--fs-xs);font-weight:var(--fw-bold);letter-spacing:var(--ls-wide);white-space:nowrap}.badge-success{background:var(--color-emerald-light);color:var(--color-emerald)}.badge-warning{background:var(--color-amber-light);color:var(--color-amber)}.badge-error{background:var(--color-rose-light);color:var(--color-rose)}.badge-info{background:var(--color-primary-light);color:var(--color-primary)}.badge-teal{background:var(--color-teal-light);color:var(--color-teal)}.badge-neutral{background:#0f172a0d;color:var(--text-secondary);border:1px solid var(--border-color)}.badge-purple{background:var(--color-purple-light);color:var(--color-purple)}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--r-lg)}.table{width:100%;border-collapse:collapse}.table th{background:var(--color-bg-base);color:var(--text-muted);font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:var(--ls-widest);font-weight:var(--fw-bold);padding:var(--sp-3) var(--sp-4);text-align:left;border-bottom:1px solid var(--border-color)}.table td{padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border-color);color:var(--text-primary);font-size:var(--fs-base)}.table tbody tr{transition:background var(--t-fast)}.table tbody tr:hover td{background:var(--color-bg-base)}.table tbody tr:last-child td{border-bottom:none}.patient-card{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-4);background:var(--color-bg-surface);border:1px solid var(--border-color);border-radius:var(--r-xl);cursor:pointer;transition:all var(--t-fast);text-decoration:none;color:inherit;box-shadow:var(--shadow-xs);min-height:var(--touch-target-comfortable);-webkit-tap-highlight-color:transparent}.patient-card:hover{border-color:var(--color-primary);transform:var(--hover-lift);box-shadow:var(--shadow-md)}.patient-card:active{transform:var(--active-press)}.patient-avatar{width:44px;height:44px;border-radius:var(--r-full);background:var(--color-primary-light);display:flex;align-items:center;justify-content:center;font-size:var(--fs-md);font-weight:var(--fw-bold);color:var(--color-primary);flex-shrink:0}.alert-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:var(--r-full);font-size:var(--fs-xs);font-weight:var(--fw-semibold);background:var(--color-rose-light);color:var(--color-rose);border:1px solid rgba(239,68,68,.2)}@media (min-width:640px){.patient-card{gap:var(--sp-4);padding:var(--sp-4) var(--sp-5)}.patient-avatar{width:48px;height:48px;font-size:var(--fs-lg)}}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;display:flex;align-items:flex-end;justify-content:center;z-index:var(--z-modal);padding:0;animation:fadeIn .15s ease;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-panel{background:var(--color-bg-surface);border:none;border-radius:var(--r-2xl) var(--r-2xl) 0 0;width:100%;max-height:92vh;overflow-y:auto;box-shadow:var(--shadow-xl);animation:slideInUp .25s ease-out;-webkit-overflow-scrolling:touch}.modal-handle{width:36px;height:4px;background:var(--text-dim);border-radius:var(--r-full);margin:var(--sp-3) auto var(--sp-1)}.modal-header{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4)}.modal-title{font-size:var(--fs-lg);font-weight:var(--fw-bold);color:var(--text-primary)}.modal-body{padding:var(--sp-5)}.modal-footer{padding:var(--sp-4) var(--sp-5) calc(var(--sp-4) + env(safe-area-inset-bottom,0px));border-top:1px solid var(--border-color);display:flex;gap:var(--sp-3);justify-content:stretch}.modal-footer .btn{flex:1}@media (min-width:640px){.modal-overlay{align-items:center;padding:var(--sp-4)}.modal-panel{max-width:520px;border-radius:var(--r-2xl);animation:scaleIn .15s ease}.modal-handle{display:none}.modal-header,.modal-body{padding:var(--sp-6)}.modal-footer{padding:var(--sp-4) var(--sp-6);justify-content:flex-end}.modal-footer .btn{flex:initial}}.toast-container{position:fixed;top:calc(var(--topbar-height) + var(--sp-3));left:var(--sp-3);right:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-2);z-index:var(--z-toast);pointer-events:none}.toast{background:var(--color-bg-surface);border:1px solid var(--border-color);border-radius:var(--r-lg);padding:12px 16px;display:flex;align-items:center;gap:var(--sp-3);box-shadow:var(--shadow-lg);animation:slideDown .2s ease-out;pointer-events:all}.toast-icon{font-size:var(--fs-lg);flex-shrink:0}.toast-msg{font-size:var(--fs-base);font-weight:var(--fw-medium);flex:1;color:var(--text-primary)}.toast.success{border-left:3px solid var(--color-emerald)}.toast.error{border-left:3px solid var(--color-rose)}.toast.warning{border-left:3px solid var(--color-amber)}.toast.info{border-left:3px solid var(--color-primary)}@media (min-width:640px){.toast-container{top:auto;left:auto;bottom:var(--sp-6);right:var(--sp-6);max-width:400px}.toast{animation:slideUp .2s ease-out;min-width:300px}}.progress{height:8px;background:var(--color-bg-base);border:1px solid var(--border-color);border-radius:var(--r-full);overflow:hidden}.progress-fill{height:100%;border-radius:var(--r-full);transition:width var(--t-slow);background:var(--gradient-brand)}.progress-fill.danger{background:var(--color-rose)}.progress-fill.warning{background:var(--color-amber)}.progress-fill.success{background:var(--color-emerald)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--sp-12) var(--sp-6);gap:var(--sp-3)}.empty-state-icon{font-size:48px;line-height:1;opacity:.8}.empty-state-title{font-size:var(--fs-lg);font-weight:var(--fw-semibold);color:var(--text-primary)}.empty-state-sub{font-size:var(--fs-base);color:var(--text-secondary);max-width:320px;line-height:var(--lh-relaxed)}.avatar{border-radius:var(--r-full);display:flex;align-items:center;justify-content:center;font-weight:var(--fw-bold);flex-shrink:0;background:var(--color-primary-light);color:var(--color-primary)}.avatar-sm{width:32px;height:32px;font-size:var(--fs-sm)}.avatar-md{width:44px;height:44px;font-size:var(--fs-md)}.avatar-lg{width:56px;height:56px;font-size:var(--fs-xl)}.link{color:var(--color-primary);cursor:pointer;font-size:var(--fs-base);font-weight:var(--fw-medium);text-decoration:none;transition:color var(--t-fast);display:inline-flex;align-items:center;gap:var(--sp-1)}.link:hover{color:var(--color-primary-hover)}.link-sm{font-size:var(--fs-sm)}.section-title{font-size:var(--fs-base);font-weight:var(--fw-bold);color:var(--text-primary);display:flex;align-items:center;gap:var(--sp-2)}.section-title-lg{font-size:var(--fs-xl);font-weight:var(--fw-bold)}.spinner{width:20px;height:20px;border:2px solid var(--border-color);border-top-color:var(--color-primary);border-radius:var(--r-full);animation:spin .6s linear infinite;flex-shrink:0}.spinner-sm{width:14px;height:14px}.spinner-lg{width:32px;height:32px;border-width:3px}.divider{height:1px;background:var(--border-color);margin:var(--sp-4) 0}.divider-sm{margin:var(--sp-2) 0}.page-header{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-3);margin-bottom:var(--sp-6)}.page-title{font-size:var(--fs-2xl);font-weight:var(--fw-extrabold);letter-spacing:var(--ls-tight);color:var(--text-primary)}.page-sub{font-size:var(--fs-base);color:var(--text-secondary);margin-top:2px}@media (min-width:640px){.page-header{flex-direction:row;align-items:center;justify-content:space-between;margin-bottom:var(--sp-8)}}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border-color);margin-bottom:var(--sp-6);overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{padding:10px 16px;cursor:pointer;color:var(--text-secondary);font-size:var(--fs-base);font-weight:var(--fw-medium);border-bottom:2px solid transparent;margin-bottom:-1px;transition:all var(--t-fast);border-radius:var(--r-sm) var(--r-sm) 0 0;white-space:nowrap;flex-shrink:0;min-height:var(--touch-target-min);display:flex;align-items:center;-webkit-tap-highlight-color:transparent}.tab:hover{color:var(--text-primary);background:var(--color-bg-base)}.tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:var(--fw-semibold)}.skeleton{background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0,#f1f5f9 75%);background-size:200% 100%;animation:shimmer 1.4s infinite;border-radius:var(--r-md)}.grid-2,.grid-3{display:grid;grid-template-columns:1fr;gap:var(--sp-4)}.grid-4{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--sp-4)}@media (min-width:640px){.grid-2,.grid-3{grid-template-columns:repeat(2,1fr)}}@media (min-width:960px){.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--sp-1)}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.gap-6{gap:var(--sp-6)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.min-w-0{min-width:0}.w-full{width:100%}.text-center{text-align:center}.text-right{text-align:right}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.mt-1{margin-top:var(--sp-1)}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}.mt-4{margin-top:var(--sp-4)}.mt-6{margin-top:var(--sp-6)}.mt-8{margin-top:var(--sp-8)}.mb-1{margin-bottom:var(--sp-1)}.mb-2{margin-bottom:var(--sp-2)}.mb-3{margin-bottom:var(--sp-3)}.mb-4{margin-bottom:var(--sp-4)}.mb-6{margin-bottom:var(--sp-6)}.mb-8{margin-bottom:var(--sp-8)}.p-3{padding:var(--sp-3)}.p-4{padding:var(--sp-4)}.p-6{padding:var(--sp-6)}.m-0{margin:0}.p-0{padding:0}.gallery-thumb{overflow:hidden;cursor:pointer;aspect-ratio:1;border-radius:var(--r-xl)}.gallery-thumb-img{width:100%;height:100%;object-fit:cover;transition:opacity .3s;opacity:0}.gallery-thumb-skel{aspect-ratio:1;border-radius:var(--r-xl)}.text-muted{color:var(--text-muted)}.text-secondary{color:var(--text-secondary)}.text-primary-color{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-error{color:var(--color-error)}.fw-500{font-weight:var(--fw-medium)}.fw-600{font-weight:var(--fw-semibold)}.fw-700{font-weight:var(--fw-bold)}.fw-800{font-weight:var(--fw-extrabold)}.fs-xs{font-size:var(--fs-xs)}.fs-sm,.fs-12{font-size:var(--fs-sm)}.fs-13,.fs-base{font-size:var(--fs-base)}.fs-lg{font-size:var(--fs-lg)}.fs-xl{font-size:var(--fs-xl)}.offline-banner{background:var(--color-amber-light);border-bottom:1px solid rgba(245,158,11,.25);color:var(--color-amber);padding:8px var(--sp-4);text-align:center;font-size:var(--fs-base);font-weight:var(--fw-medium)}.margin-high{color:var(--color-emerald);font-weight:var(--fw-bold)}.margin-mid{color:var(--color-amber);font-weight:var(--fw-bold)}.margin-low{color:var(--color-rose);font-weight:var(--fw-bold)}.bottom-nav-item{flex:1;display:flex;flex-direction:column;align-items:center;padding:var(--sp-2) var(--sp-1);color:#cbd5e1;text-decoration:none;font-size:var(--fs-2xs);gap:3px;transition:color var(--t-fast);min-height:var(--touch-target-comfortable);justify-content:center;-webkit-tap-highlight-color:transparent;position:relative}.bottom-nav-item.active{color:var(--color-primary)}.bottom-nav-item.active:after{content:"";position:absolute;top:4px;width:4px;height:4px;border-radius:var(--r-full);background:var(--color-primary)}.bottom-nav-item span:first-child{font-size:20px}*:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible{outline:none}
