/* Coque des applications mobiles (usager, terminal, contrôle) */
body{min-height:100dvh;display:flex;flex-direction:column}
.app{flex:1;width:100%;max-width:520px;margin:0 auto;padding:16px 16px calc(96px + env(safe-area-inset-bottom,0px));padding-top:calc(14px + env(safe-area-inset-top,0px))}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.topbar .brand{display:flex;align-items:center;gap:8px;font-weight:800;color:var(--deep)}
.topbar .brand img{height:34px;border-radius:6px}
.iconbtn{position:relative;border:1px solid var(--line);background:var(--surface);border-radius:12px;width:42px;height:42px;display:grid;place-items:center;color:var(--ink)}
.iconbtn .dot{position:absolute;top:6px;right:6px;width:9px;height:9px;border-radius:50%;background:var(--bad)}
.back{display:inline-flex;align-items:center;gap:4px;border:0;background:none;color:var(--blue);font-weight:600;padding:4px 0;margin-bottom:10px}
.sub{color:var(--muted);margin:4px 0 16px}
.nav{position:fixed;left:0;right:0;bottom:0;background:var(--surface);border-top:1px solid var(--line);display:flex;justify-content:center;padding-bottom:env(safe-area-inset-bottom,0px);z-index:20}
.nav > div{display:flex;width:100%;max-width:520px}
.nav button{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;border:0;background:none;padding:9px 4px 10px;font-size:11.5px;color:var(--muted);font-weight:600}
.nav button.on{color:var(--blue)}
.hello{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.hello small{display:block;color:var(--muted)}
.hello b{font-size:20px}
.avatar{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:var(--blue-soft);color:var(--blue);font-weight:700}
.wcard{position:relative;overflow:hidden;border-radius:20px;padding:18px;color:#fff;background:linear-gradient(135deg,#0B4A8B,#1673C9);margin-bottom:14px;box-shadow:var(--shadow)}
.wcard .lbl{opacity:.85;font-size:13px}
.wcard .bal{font-size:34px;font-weight:800;letter-spacing:-.02em;margin:4px 0 10px}
.wcard .bal small{font-size:15px;font-weight:600;opacity:.85}
.wcard .meta{display:flex;justify-content:space-between;font-size:12.5px;opacity:.85;font-family:var(--mono)}
.qa{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
.qa button{border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:12px 4px;display:flex;flex-direction:column;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--ink)}
.qa button span{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--blue-soft);color:var(--blue)}
.qa button.y span{background:var(--taxi);color:var(--taxi-ink)}
.active-tk{display:flex;gap:12px;align-items:center;width:100%;text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:12px 14px;margin-bottom:6px}
.active-tk .q{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:var(--taxi);color:var(--taxi-ink)}
.ops,.modes{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:14px}
.modes{grid-template-columns:repeat(4,1fr)}
.opc,.modes button{border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:12px;display:flex;flex-direction:column;align-items:flex-start;gap:6px;text-align:left}
.modes button{align-items:center;text-align:center;padding:10px 4px;font-size:13px;gap:4px}
.opc[aria-pressed="true"],.modes button[aria-pressed="true"]{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-soft)}
.sw{border-radius:8px;padding:4px 8px;font-weight:800;font-size:12px}
.ticket{background:var(--surface);border:1px solid var(--line);border-radius:20px;overflow:hidden;box-shadow:var(--shadow)}
.ticket .th{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;background:var(--deep);color:#fff}
.ticket .th.repl{background:var(--warn)}
.ticket .th small{display:block;opacity:.85}
.ticket .qr{display:grid;place-items:center;padding:18px;background:#fff}
.ticket .qr svg{width:min(260px,80vw);height:auto}
.ticket .code{text-align:center;font-family:var(--mono);font-size:24px;font-weight:700;letter-spacing:.12em;padding:6px 0 12px;color:#05275F;background:#fff}
.ticket .rows{padding:10px 16px 14px;border-top:2px dashed var(--line)}
.ticket .rows > div{display:flex;justify-content:space-between;padding:5px 0;font-size:14px}
.ticket .rows span{color:var(--muted)}
.ticket.used .qr{opacity:.25;filter:grayscale(1)}
.banner-net{background:var(--warn-soft);color:var(--warn);border-radius:10px;padding:8px 12px;font-size:13px;margin-bottom:12px;display:flex;gap:8px;align-items:center}
