:root{color-scheme:dark;--bg:#0f172a;--bg-elevated:#111827;--card:#1e293b;--card-hover:#243044;--border:#334155;--primary:#2563eb;--primary-hover:#1d4ed8;--text:#fff;--muted:#94a3b8;--muted-2:#64748b;--success:#22c55e;--warning:#f59e0b;--danger:#ef4444;--radius:16px;--radius-sm:10px;--sidebar-w:72px;--shadow:0 8px 32px rgba(0,0,0,.35);font-family:Segoe UI,Tahoma,Arial,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);line-height:1.5}a{color:var(--primary);text-decoration:none}.page-shell{min-height:100vh;display:grid;grid-template-columns:var(--sidebar-w) 1fr}.sidebar{background:var(--bg-elevated);border-left:1px solid var(--border);padding:16px 10px;gap:12px;position:-webkit-sticky;position:sticky;top:0;height:100vh}.brand-block,.sidebar{display:flex;flex-direction:column}.brand-block{align-items:center;gap:6px;padding-bottom:8px;border-bottom:1px solid var(--border)}.brand-logo{width:40px;height:40px;border-radius:12px;background:var(--primary);display:grid;place-items:center;font-weight:800;font-size:1.1rem}.brand{font-size:.7rem;font-weight:700;text-align:center}.brand-sub{font-size:.62rem;color:var(--muted);text-align:center}.menu{flex-direction:column;flex:1 1}.menu,.menu-item{display:flex;gap:4px}.menu-item{border:0;background:transparent;color:var(--muted);padding:10px 6px;border-radius:var(--radius-sm);cursor:pointer;flex-direction:column;align-items:center;font-size:.62rem;transition:background .15s,color .15s}.menu-item span:last-child{line-height:1.2;text-align:center}.menu-icon{display:flex;color:inherit}.menu-item.active,.menu-item:hover{background:rgba(37,99,235,.15);color:var(--text)}.menu-item.active .menu-icon{color:var(--primary)}.menu-item.logout{color:#fca5a5;margin-top:auto}.content{padding:24px 28px 100px;max-width:1280px}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;gap:16px}.topbar h1{margin:0;font-size:1.5rem;font-weight:700;letter-spacing:-.02em}.topbar p{margin:4px 0 0;color:var(--muted);font-size:.9rem}.status-dot{display:inline-flex;align-items:center;gap:8px;font-size:.82rem;color:var(--muted);background:var(--card);border:1px solid var(--border);border-radius:999px;padding:8px 14px}.status-dot:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--success)}.kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));grid-gap:16px;gap:16px;margin-bottom:24px}.kpi-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px;transition:border-color .15s,transform .15s,box-shadow .15s}.kpi-card-clickable{cursor:pointer;text-align:inherit;width:100%;font:inherit;color:inherit}.kpi-card-clickable:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:0 6px 20px rgba(37,99,235,.18)}.kpi-card-clickable:active{transform:translateY(0)}.kpi-card-clickable:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.kpi-card:hover{border-color:rgba(37,99,235,.4)}.kpi-card .kpi-icon{width:36px;height:36px;border-radius:10px;background:rgba(37,99,235,.15);color:var(--primary);display:grid;place-items:center;margin-bottom:12px}.kpi-card p{margin:0 0 6px;color:var(--muted);font-size:.82rem}.kpi-card h3{margin:0;font-size:1.55rem;font-weight:700;letter-spacing:-.02em}.split-panels{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px}.panel{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:16px}.panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.panel-head h2{margin:0;font-size:1rem;font-weight:600}.panel-head a,.panel-head span{font-size:.82rem;color:var(--muted);cursor:pointer;background:none;border:0;padding:0}.data-table{width:100%;border-collapse:collapse;font-size:.88rem}.data-table td,.data-table th{text-align:right;padding:12px 10px;border-bottom:1px solid var(--border)}.data-table th{color:var(--muted);font-weight:600;font-size:.78rem;text-transform:none}.data-table tbody tr:hover{background:hsla(0,0%,100%,.02)}.data-table tbody tr:last-child td{border-bottom:0}.badge{border-radius:999px;padding:4px 10px;font-size:.75rem;font-weight:500;display:inline-block}.badge.ok{background:rgba(34,197,94,.15);color:var(--success)}.badge.pending{background:rgba(245,158,11,.15);color:var(--warning)}.badge.cancelled{background:rgba(239,68,68,.12);color:#fca5a5}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:12px;gap:12px;margin-bottom:12px}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}label{display:flex;flex-direction:column;gap:6px;font-size:.82rem;color:var(--muted)}input,select,textarea{border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 12px;background:var(--bg);color:var(--text);font-size:.9rem}input:focus,select:focus,textarea:focus{outline:2px solid rgba(37,99,235,.45);border-color:var(--primary)}.btn,button{border:0;border-radius:var(--radius-sm);background:var(--primary);color:#fff;padding:10px 16px;font-weight:600;font-size:.88rem;cursor:pointer;transition:background .15s}button:hover:not(:disabled){background:var(--primary-hover)}.btn.secondary,button.secondary{background:transparent;border:1px solid var(--border);color:var(--text)}button.secondary:hover:not(:disabled){background:var(--card-hover)}button:disabled{opacity:.5;cursor:not-allowed}.icon-btn{width:36px;height:36px;padding:0;display:grid;place-items:center;background:transparent;border:1px solid var(--border);border-radius:var(--radius-sm)}.row-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.list-card{background:rgba(15,23,42,.5);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;display:flex;justify-content:space-between;gap:10px;margin-bottom:8px}.list-card p{margin:4px 0 0;color:var(--muted);font-size:.85rem}.alert{border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:16px;font-size:.88rem;display:flex;align-items:center;justify-content:space-between;gap:10px}.alert.error{background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.35);color:#fecaca}.alert.success{background:rgba(34,197,94,.1);border:1px solid rgba(34,197,94,.3);color:#bbf7d0}.empty{color:var(--muted-2);font-size:.88rem;padding:16px 0;text-align:center}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:var(--bg)}.login-card{width:min(420px,100%);background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:28px;box-shadow:var(--shadow)}.login-card h1{margin:0 0 8px;font-size:1.4rem}.login-card>p{margin:0 0 20px;color:var(--muted)}.login-remember{display:flex;align-items:center;gap:10px;margin-top:14px;font-size:.9rem;color:var(--muted);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.login-remember input{width:16px;height:16px;margin:0;accent-color:var(--primary);cursor:pointer}.hint{margin-top:16px;font-size:.8rem;color:var(--muted-2);line-height:1.6}.pwa-install-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:12px;padding:12px 16px;border-radius:var(--radius-sm);border:1px dashed var(--primary);background:rgba(37,99,235,.12);color:var(--text);font-size:.95rem;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s}.pwa-install-btn:hover:not(:disabled){background:rgba(37,99,235,.22);border-color:var(--primary-hover)}.pwa-install-btn:disabled{opacity:.7;cursor:wait}.pwa-install-btn.compact{width:auto;margin-top:0}.pwa-help-overlay{position:fixed;inset:0;z-index:2000;background:rgba(0,0,0,.65);display:grid;place-items:center;padding:20px}.pwa-help-card{width:min(420px,100%);background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.pwa-help-steps{margin:0;padding:0 20px 0 0;color:var(--muted);line-height:1.8}.pwa-help-steps li{margin-bottom:10px}.pwa-help-steps strong{color:var(--text)}.settings-block p{color:var(--muted);margin:0 0 12px}.chat-fab{position:fixed;bottom:24px;left:24px;width:56px;height:56px;border-radius:50%;background:var(--primary);box-shadow:0 8px 24px rgba(37,99,235,.45);display:grid;place-items:center;z-index:1000;padding:0}.chat-fab:hover{transform:scale(1.05)}.chat-panel{position:fixed;bottom:92px;left:24px;width:min(380px,calc(100vw - 48px));max-height:min(520px,calc(100vh - 120px));background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);display:flex;flex-direction:column;z-index:1001;overflow:hidden}.chat-panel-head{display:flex;justify-content:space-between;align-items:flex-start;padding:14px 16px;border-bottom:1px solid var(--border);background:var(--bg-elevated)}.chat-panel-head strong{display:block;font-size:.95rem}.chat-panel-head p{margin:4px 0 0;font-size:.75rem;color:var(--muted)}.chat-log{flex:1 1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px;min-height:200px;max-height:320px}.chat-bubble{border-radius:12px;padding:10px 12px;font-size:.85rem;line-height:1.5;max-width:92%;white-space:pre-wrap;word-break:break-word}.chat-bubble.user{align-self:flex-end;background:var(--primary);color:#fff}.chat-bubble.bot{align-self:flex-start;background:var(--bg);border:1px solid var(--border)}.chat-confirm{display:flex;gap:8px;padding:0 12px 8px}.chat-confirm.chat-options{flex-wrap:wrap}.chat-input-row{display:flex;gap:8px;padding:12px;border-top:1px solid var(--border)}.chat-input-row input{flex:1 1}.chat-input-row button{width:42px;padding:0;display:grid;place-items:center}.amount-open{color:var(--warning);font-weight:600}.action-btn{width:32px;height:32px;padding:0;display:grid;place-items:center;border-radius:8px;background:transparent;border:1px solid var(--border);color:var(--muted);transition:background .15s,color .15s,border-color .15s}.action-btn:hover:not(:disabled){background:var(--card-hover)}.action-btn.attend:hover:not(:disabled){background:rgba(34,197,94,.15);border-color:var(--success);color:var(--success)}.action-btn.cancel:hover:not(:disabled){background:rgba(245,158,11,.15);border-color:var(--warning);color:var(--warning)}.action-btn.edit:hover:not(:disabled){background:rgba(37,99,235,.15);border-color:var(--primary);color:var(--primary)}.action-btn.delete:hover:not(:disabled){background:rgba(239,68,68,.15);border-color:var(--danger);color:var(--danger)}.action-btn.view:hover:not(:disabled){background:rgba(56,189,248,.15);border-color:#38bdf8;color:#38bdf8}.action-btn.active{background:rgba(37,99,235,.2);border-color:var(--primary);color:var(--primary)}.action-btn:disabled{opacity:.35;cursor:not-allowed}.filter-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:rgba(37,99,235,.1);border:1px solid rgba(37,99,235,.3);border-radius:var(--radius-sm);padding:10px 14px;margin-bottom:16px;font-size:.88rem}.modal-overlay{position:fixed;inset:0;background:rgba(2,6,23,.7);display:grid;place-items:center;z-index:60;padding:16px}.modal-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:24px;width:min(460px,100%);box-shadow:0 24px 60px rgba(0,0,0,.45)}.modal-card h2{margin:0 0 16px;font-size:1.1rem}.modal-card.modal-wide{width:min(640px,100%)}.form-hint.error{color:var(--danger);font-size:.85rem;margin:0}input.input-error{border-color:var(--danger)}.modal-row{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--border)}.modal-row:last-of-type{border-bottom:0}.modal-row span:first-child{color:var(--muted)}.modal-row span:last-child{font-weight:600;text-align:left}.edit-row>td{background:var(--card-hover);padding:16px}.inline-edit{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));grid-gap:12px;gap:12px;align-items:end}.inline-edit label{display:flex;flex-direction:column;gap:6px;font-size:.82rem;color:var(--muted)}.inline-edit .inline-actions{grid-column:1/-1;display:flex;gap:8px;justify-content:flex-end}@media (min-width:1100px){:root{--sidebar-w:200px}.sidebar{padding:20px 14px}.brand-block{flex-direction:row;align-items:center;padding:0 4px 12px}.brand{font-size:.95rem;text-align:start}.brand-sub{font-size:.75rem;text-align:start}.menu-item{flex-direction:row;justify-content:flex-start;padding:10px 12px;font-size:.88rem;gap:10px}.menu-item span:last-child{text-align:start}}@media (max-width:1200px){.kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width:900px){.page-shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;flex-direction:row;flex-wrap:wrap;border-left:0;border-bottom:1px solid var(--border)}.brand-block{flex-direction:row;border-bottom:0;padding:0}.menu{flex-direction:row;flex-wrap:wrap;flex:unset}.menu-item.logout{margin-top:0}.split-panels{grid-template-columns:1fr}.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.grid,.grid-3{grid-template-columns:1fr}}@media (max-width:520px){.kpi-grid{grid-template-columns:1fr}.content{padding:16px 14px 90px}}.reminder-stack{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.reminder-banner{display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:var(--radius-sm);border:1px solid var(--border);font-weight:600;font-size:.9rem}.reminder-banner .reminder-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;animation:pulse 1.4s infinite}.reminder-banner.now{background:rgba(239,68,68,.14);border-color:rgba(239,68,68,.4);color:#fca5a5}.reminder-banner.now .reminder-dot{background:var(--danger)}.reminder-banner.soon10{background:rgba(245,158,11,.14);border-color:rgba(245,158,11,.4);color:#fcd34d}.reminder-banner.soon10 .reminder-dot{background:var(--warning)}.reminder-banner.soon30{background:rgba(37,99,235,.12);border-color:rgba(37,99,235,.35);color:#93c5fd}.reminder-banner.soon30 .reminder-dot{background:var(--primary)}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}}.today-panel{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-bottom:20px}.today-grid{display:grid;grid-template-columns:minmax(260px,1fr) minmax(260px,1.3fr);grid-gap:16px;gap:16px}@media (max-width:860px){.today-grid{grid-template-columns:1fr}}.next-card{background:linear-gradient(160deg,rgba(37,99,235,.18),rgba(30,41,59,.4));border:1px solid rgba(37,99,235,.35);border-radius:var(--radius-sm);padding:18px}.next-label{margin:0;color:var(--muted);font-size:.82rem}.patient-profile-link{background:none;border:none;padding:0;font:inherit;color:#60a5fa;cursor:pointer;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-align:inherit}.patient-profile-link:hover{color:#93c5fd}.patient-profile-link:focus-visible{outline:2px solid #2563eb;outline-offset:2px;border-radius:4px}button.patient-profile-link.next-name{display:block;margin:4px 0 10px;font-size:1.5rem;font-weight:700;text-decoration:none;color:#93c5fd}button.patient-profile-link.next-name:hover{color:#bfdbfe;text-decoration:underline}.patient-profile-link-sub{display:block;font-size:.72rem;font-weight:500;color:var(--muted);margin-top:4px;text-decoration:none}.today-appt-row-clickable{cursor:pointer;transition:background .12s ease}.today-appt-row-clickable:hover{background:rgba(37,99,235,.08)}.next-card-clickable{cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}.next-card-clickable:hover{border-color:rgba(96,165,250,.45);box-shadow:0 0 0 1px rgba(37,99,235,.2)}.next-card-clickable:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.next-name{margin:4px 0 10px;font-size:1.5rem}.next-meta{display:flex;gap:16px;flex-wrap:wrap;color:var(--muted);font-size:.9rem;margin-bottom:12px}.next-remaining{display:flex;align-items:baseline;gap:10px;padding:10px 14px;border-radius:var(--radius-sm);background:rgba(15,23,42,.5);border:1px solid var(--border)}.next-remaining span{color:var(--muted);font-size:.82rem}.next-remaining strong{font-size:1.3rem}.next-remaining.now{border-color:rgba(239,68,68,.5);color:#fca5a5}.next-remaining.soon10{border-color:rgba(245,158,11,.5);color:#fcd34d}.next-remaining.soon30{border-color:rgba(37,99,235,.5);color:#93c5fd}.postpone-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;color:var(--muted);font-size:.85rem}.chip{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:999px;padding:6px 14px;font-size:.82rem;font-weight:600}.chip:hover:not(:disabled){background:var(--primary);border-color:var(--primary)}.day-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));grid-gap:12px;gap:12px;align-content:start}.summary-chip{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px;display:flex;flex-direction:column;gap:6px}.summary-chip span{color:var(--muted);font-size:.8rem}.summary-chip strong{font-size:1.6rem}.summary-chip.total strong{color:var(--text)}.summary-chip.remaining strong{color:#93c5fd}.summary-chip.done strong{color:var(--success)}.summary-chip.cancel strong{color:#fca5a5}.summary-chip.noshow strong{color:var(--warning)}.row-remaining{display:block;font-size:.72rem;color:var(--muted);margin-top:2px}.app-root{min-height:100vh}.today-finance-summary{margin-bottom:16px;padding:14px 16px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius)}.today-finance-summary .panel-head{margin-bottom:12px}.today-finance-summary .panel-head h2{margin:0;font-size:.95rem}.today-finance-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:10px;gap:10px}.today-finance-card{background:rgba(15,23,42,.35);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;display:flex;flex-direction:column;gap:6px}.today-finance-card.income{border-color:rgba(34,197,94,.35)}.today-finance-card.paid{border-color:rgba(37,99,235,.35)}.today-finance-card.debt{border-color:rgba(245,158,11,.35)}.finance-panel .finance-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:14px}.finance-hint{margin:16px 0 0;font-size:.82rem;color:var(--muted)}.link-btn{background:none;border:none;padding:0;font:inherit;color:#60a5fa;cursor:pointer;text-decoration:underline;text-underline-offset:2px}.link-btn:hover{color:#93c5fd}.global-finance-bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:10px 20px;background:var(--bg-elevated);border-bottom:1px solid var(--border)}.gf-title{color:var(--muted);font-size:.8rem;font-weight:600;white-space:nowrap}.gf-cards{display:flex;flex:1 1;flex-wrap:wrap;gap:10px}.gf-cards .mini-card{flex:1 1 150px;min-width:130px}.gf-tools{display:flex;align-items:center;gap:8px;-webkit-margin-start:auto;margin-inline-start:auto}.segmented{display:inline-flex;background:var(--bg);border:1px solid var(--border);border-radius:999px;padding:3px;gap:2px}.segmented button{border:0;background:transparent;color:var(--muted);padding:5px 12px;border-radius:999px;font-size:.76rem;font-weight:600;cursor:pointer;transition:background .15s,color .15s}.segmented.compact button{padding:4px 11px}.segmented button:hover:not(.active){color:var(--text)}.segmented button.active{background:var(--primary);color:#fff}.money-toggle{width:32px;height:32px;flex:0 0 auto;display:grid;place-items:center;border-radius:9px;border:1px solid var(--border);background:var(--bg);color:var(--muted);cursor:pointer;transition:color .15s,border-color .15s,background .15s}.money-toggle:hover{color:var(--text);border-color:rgba(37,99,235,.5)}.money-toggle.hidden{color:var(--warning);border-color:rgba(245,158,11,.4)}.revenue-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:10px;gap:10px}.mini-card.open-payments{border-color:rgba(245,158,11,.45);background:rgba(245,158,11,.08)}.mini-card.open-payments:hover{border-color:rgba(245,158,11,.65)}.mini-card.open-payments .mini-value{color:#fbbf24}.mini-card{text-align:right;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:11px 14px;display:flex;flex-direction:column;gap:4px;cursor:pointer;transition:border-color .15s,background .15s}.mini-card:hover{border-color:rgba(37,99,235,.4)}.mini-card.active{border-color:var(--primary);background:rgba(37,99,235,.1)}.mini-label{color:var(--muted);font-size:.72rem}.mini-value{font-size:1.35rem;font-weight:700;letter-spacing:-.02em;color:var(--text);line-height:1.1}.mini-card.active .mini-value{color:#93c5fd}.mini-value.masked{letter-spacing:.15em;color:var(--muted-2)}@media (max-width:720px){.today-finance-cards{grid-template-columns:1fr}.global-finance-bar{padding:10px 14px}.gf-title,.gf-tools{width:100%}.gf-tools{-webkit-margin-start:0;margin-inline-start:0;justify-content:space-between}.gf-cards .mini-card{flex-grow:1;flex-shrink:1;flex-basis:calc(50% - 5px)}}.dental-panel .dental-alert-badge{background:#dc2626;color:#fff;font-size:.78rem;font-weight:600;padding:4px 10px;border-radius:999px;-webkit-margin-end:auto;margin-inline-end:auto;-webkit-margin-start:12px;margin-inline-start:12px}.dental-chart-image{position:relative;margin-bottom:16px;border-radius:var(--radius);overflow:hidden;background:#fff;border:1px solid var(--border)}.dental-chart-image-stage{position:relative;width:100%;line-height:0}.dental-chart-image-bg{display:block;width:100%;height:auto;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.dental-chart-image-hotspots{position:absolute;inset:0}.dental-chart-hotspot{position:absolute;transform:translate(-50%,-50%);padding:0;border:none;background:transparent;cursor:pointer;border-radius:50%;z-index:2;touch-action:manipulation;-webkit-tap-highlight-color:transparent;box-sizing:border-box}.dental-chart-hotspot.selected,.dental-chart-hotspot:hover{z-index:12}.dental-chart-hotspot:focus{outline:none}.dental-chart-hotspot:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.dental-chart-hotspot.selected,.dental-chart-hotspot:hover{background:rgba(37,99,235,.12)}.dental-chart-hotspot-ring{position:absolute;inset:-2px;border-radius:50%;border:2.5px solid var(--status-color,#2563eb);box-shadow:0 0 0 1px hsla(0,0%,100%,.85);pointer-events:none}.dental-chart-hotspot-dot{position:absolute;inset:0;border-radius:50%;border:2px solid rgba(37,99,235,.55);background:rgba(37,99,235,.14);box-shadow:0 0 0 1px hsla(0,0%,100%,.75);pointer-events:none}.dental-chart-hotspot-dot:after{content:"";position:absolute;left:50%;top:50%;width:7px;height:7px;transform:translate(-50%,-50%);border-radius:50%;background:#2563eb;box-shadow:0 0 0 2px hsla(0,0%,100%,.9)}.dental-chart-hotspot.is-normal.selected .dental-chart-hotspot-dot{border-color:#16a34a;background:rgba(34,197,94,.2)}.dental-chart-hotspot.is-normal.selected .dental-chart-hotspot-dot:after{background:#16a34a}.dental-chart-hotspot.is-normal:hover .dental-chart-hotspot-dot{border-color:#1d4ed8;background:rgba(37,99,235,.22)}.dental-chart-hotspot.selected .dental-chart-hotspot-ring{border-width:3px;box-shadow:0 0 0 2px #2563eb,0 0 8px rgba(37,99,235,.35)}.dental-chart-hotspot.extracted .dental-chart-hotspot-ring{border-style:dashed;border-color:#64748b}.dental-chart-hotspot-x{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:clamp(14px,2.5vw,22px);font-weight:800;color:#64748b;pointer-events:none;line-height:1}.dental-chart-hotspot-badge{position:absolute;top:-3px;right:-3px;width:8px;height:8px;border-radius:50%;border:1.5px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.25);pointer-events:none}.dental-chart-hotspot-status-line{white-space:nowrap;font-size:.58rem;font-weight:700;color:var(--status-color,#334155);background:hsla(0,0%,100%,.92);padding:1px 5px;border-radius:4px;border:1px solid rgba(15,23,42,.1);line-height:1.3;max-width:72px;overflow:hidden;text-overflow:ellipsis;z-index:25}.dental-chart-hotspot-status-line,.dental-chart-hotspot-tooltip{position:absolute;left:50%;transform:translateX(-50%);pointer-events:none}.dental-chart-hotspot-tooltip{z-index:30;min-width:140px;max-width:200px;padding:8px 10px;border-radius:8px;background:rgba(15,23,42,.94);color:#f8fafc;font-size:.68rem;line-height:1.45;text-align:start;box-shadow:0 8px 24px rgba(15,23,42,.35);display:flex;flex-direction:column;gap:2px}.dental-chart-hotspot.tip-above .dental-chart-hotspot-status-line,.dental-chart-hotspot.tip-above .dental-chart-hotspot-tooltip{bottom:calc(100% + 6px);top:auto}.dental-chart-hotspot.tip-below .dental-chart-hotspot-status-line,.dental-chart-hotspot.tip-below .dental-chart-hotspot-tooltip{top:calc(100% + 6px);bottom:auto}.dental-chart-hotspot.tip-above .dental-chart-hotspot-status-line{bottom:calc(100% + 2px)}.dental-chart-hotspot.tip-below .dental-chart-hotspot-status-line{top:calc(100% + 2px)}.dental-chart-hotspot-tooltip strong{font-size:.75rem;margin-bottom:2px}.dental-chart-hotspot-notes{opacity:.85;font-size:.62rem;margin-top:2px;padding-top:4px;border-top:1px solid rgba(248,250,252,.15)}.dental-chart-image-hint{margin:0;padding:8px 12px;font-size:.72rem;color:var(--muted);text-align:center;background:rgba(15,23,42,.04);border-top:1px solid var(--border)}.dental-hotspot-edit-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 12px;border-bottom:1px solid var(--border);background:rgba(15,23,42,.03)}.dental-hotspot-edit-badge{font-size:.72rem;font-weight:700;color:#2563eb;padding:4px 8px;border-radius:999px;background:rgba(37,99,235,.12)}.dental-hotspot-edit-coords,.dental-hotspot-edit-msg{margin:0;padding:6px 12px;font-size:.75rem;color:var(--muted);background:rgba(37,99,235,.06)}.dental-hotspot-edit-coords{font-family:ui-monospace,monospace;color:#1e40af}.dental-chart-image-editing{background:#000;border-color:hsla(0,0%,100%,.12)}.dental-chart-image-editing .dental-chart-image-stage{background:#000}.dental-chart-image-editing .dental-hotspot-edit-toolbar{background:#000;border-bottom-color:hsla(0,0%,100%,.12)}.dental-chart-image-editing .dental-hotspot-edit-coords,.dental-chart-image-editing .dental-hotspot-edit-msg{background:hsla(0,0%,100%,.06);color:hsla(0,0%,100%,.75)}.dental-chart-image-editing .dental-hotspot-edit-coords{color:#93c5fd}.dental-chart-image-editing .dental-chart-image-hint{background:#000;color:hsla(0,0%,100%,.65);border-top-color:hsla(0,0%,100%,.12)}.dental-chart-image-editing .dental-hotspot-edit-export{border-top-color:hsla(0,0%,100%,.12);background:#000}.dental-chart-image-editing .dental-hotspot-edit-export summary{color:hsla(0,0%,100%,.7)}.dental-chart-image-editing .dental-hotspot-edit-export pre{background:hsla(0,0%,100%,.06);color:hsla(0,0%,100%,.85)}.dental-chart-image-editing .dental-chart-image-bg{opacity:1}.dental-hotspot-edit-marker{position:absolute;transform:translate(-50%,-50%);width:clamp(28px,4.5vw,38px);height:clamp(28px,4.5vw,38px);padding:0;border-radius:50%;border:2px solid #dc2626;background:hsla(0,0%,100%,.92);color:#dc2626;font-size:clamp(.55rem,1.8vw,.68rem);font-weight:800;line-height:1;cursor:-webkit-grab;cursor:grab;touch-action:none;z-index:20;box-shadow:0 2px 8px rgba(0,0,0,.2);-moz-user-select:none;user-select:none;-webkit-user-select:none}.dental-hotspot-edit-marker.dragging{cursor:-webkit-grabbing;cursor:grabbing;border-color:#16a34a;color:#16a34a;z-index:30;box-shadow:0 0 0 3px rgba(34,197,94,.35)}.dental-hotspot-edit-export{margin:0;border-top:1px solid var(--border)}.dental-hotspot-edit-export summary{padding:8px 12px;font-size:.75rem;cursor:pointer;color:var(--muted)}.dental-hotspot-edit-export pre{margin:0;max-height:240px;overflow:auto;padding:10px 12px;font-size:.65rem;line-height:1.4;background:rgba(15,23,42,.04)}@media (max-width:480px){.dental-chart-hotspot-status-line{display:none}}.hotspot-calibrator-page{min-height:100vh;padding:16px;background:var(--bg,#0f172a)}.hotspot-calibrator{max-width:1400px;margin:0 auto}.hotspot-calibrator-head{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.hotspot-calibrator-head h1{margin:0 0 4px;font-size:1.25rem}.hotspot-calibrator-head p{margin:0;color:var(--muted);font-size:.85rem}.hotspot-calibrator-actions{display:flex;flex-wrap:wrap;gap:8px}.hotspot-calibrator-msg{margin:0 0 12px;padding:8px 12px;border-radius:8px;background:rgba(37,99,235,.12);font-size:.82rem}.hotspot-calibrator-layout{display:grid;grid-template-columns:minmax(240px,300px) 1fr;grid-gap:16px;gap:16px;align-items:start}@media (max-width:900px){.hotspot-calibrator-layout{grid-template-columns:1fr}}.hotspot-calibrator-sidebar{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--border);border-radius:var(--radius);background:rgba(15,23,42,.35)}.hotspot-calibrator-sidebar label{display:flex;flex-direction:column;gap:4px;font-size:.78rem}.hotspot-calibrator-sidebar input[type=number],.hotspot-calibrator-sidebar select{padding:6px 8px;border-radius:6px;border:1px solid var(--border);background:var(--panel,#1e293b);color:inherit}.hotspot-calibrator-meta p{margin:0 0 4px;font-size:.75rem}.hotspot-calibrator-size-btns{display:grid;grid-template-columns:1fr 1fr;grid-gap:6px;gap:6px;margin:6px 0}.hotspot-calibrator-nav{display:flex;gap:8px}.hotspot-calibrator-list{display:grid;grid-template-columns:repeat(8,1fr);grid-gap:4px;gap:4px;list-style:none;margin:0;padding:0;max-height:200px;overflow-y:auto}.hotspot-calibrator-list button{padding:4px 0;font-size:.72rem;border-radius:4px;border:1px solid var(--border);background:transparent;cursor:pointer}.hotspot-calibrator-list button.done{background:rgba(34,197,94,.15);border-color:rgba(34,197,94,.4)}.hotspot-calibrator-list button.active{background:rgba(37,99,235,.25);border-color:#2563eb;font-weight:700}.hotspot-calibrator-stage-wrap{min-width:0}.hotspot-calibrator-stage .dental-chart-image-stage{max-width:627px;margin:0 auto}.hotspot-calibrator-img{cursor:crosshair}.hotspot-calibrator-preview{pointer-events:none;border:2px solid rgba(239,68,68,.85);background:rgba(239,68,68,.12)}.hotspot-calibrator-preview.selected{border-color:#22c55e;background:rgba(34,197,94,.18);box-shadow:0 0 0 2px rgba(34,197,94,.35)}.hotspot-calibrator-preview.crosshair:after{content:"";position:absolute;left:50%;top:50%;width:2px;height:2px;background:#22c55e;border-radius:50%;box-shadow:0 0 0 3px rgba(34,197,94,.5);transform:translate(-50%,-50%)}.hotspot-calibrator-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:800;color:#ef4444;pointer-events:none}.hotspot-calibrator-hint{margin:8px 0 0;font-size:.72rem;color:var(--muted);text-align:center}.hotspot-calibrator-export{margin-top:16px}.hotspot-calibrator-export pre{max-height:320px;overflow:auto;padding:12px;border-radius:8px;background:rgba(15,23,42,.6);font-size:.68rem;line-height:1.4}.dental-chart-3d-viewport{position:relative;height:min(420px,55vh);min-height:280px;margin-bottom:16px;border-radius:var(--radius);overflow:hidden;background:linear-gradient(180deg,rgba(15,23,42,.55),rgba(30,41,59,.35));border:1px solid var(--border)}.dental-chart-3d-viewport canvas{display:block;width:100%!important;height:100%!important;touch-action:none}.dental-chart-3d-hint{position:absolute;bottom:0;left:0;right:0;margin:0;padding:8px 12px;font-size:.72rem;color:var(--muted);text-align:center;background:linear-gradient(transparent,rgba(15,23,42,.75));pointer-events:none}.dental-tooth-detail{border:1px solid var(--border);border-radius:var(--radius);padding:14px;margin-bottom:16px;background:rgba(15,23,42,.25)}.dental-meta{font-size:.85rem;color:var(--muted);margin:0 0 12px}.dental-status-grid{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}.dental-status-chip{border:2px solid var(--border);background:var(--card);color:var(--text);border-radius:8px;padding:6px 10px;font-size:.78rem;cursor:pointer}.dental-status-chip.active{background:rgba(37,99,235,.15);border-color:#2563eb}.dental-exam-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));grid-gap:10px;gap:10px;font-size:.82rem}.dental-exam-grid select{width:100%;margin-top:4px}.dental-check{display:flex;align-items:center;gap:8px;cursor:pointer}.dental-medical-summary h3{margin:0 0 10px;font-size:.92rem}.dental-medical-flags{display:flex;flex-wrap:wrap;gap:10px 16px;font-size:.82rem}.dental-tabs{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap}.dental-tabs button{border:1px solid var(--border);background:transparent;color:var(--muted);padding:6px 12px;border-radius:8px;cursor:pointer;font-size:.82rem}.dental-tabs button.active{color:var(--text);border-color:#2563eb;background:rgba(37,99,235,.12)}.dental-tab-body{min-height:80px;margin-bottom:14px}.dental-list{list-style:none;margin:0;padding:0;font-size:.85rem}.dental-list li{padding:8px 0;border-bottom:1px solid var(--border)}.dental-finance{display:flex;flex-wrap:wrap;gap:12px;align-items:center;font-size:.85rem;color:var(--muted)}@media (max-width:720px){.dental-chart-3d-viewport{height:min(320px,45vh);min-height:240px}}