/* SwapBook Mini App — "night ledger", the same kit as the landing swapbook.online
   (tokens and faces come from the design contour: ~/claude/design/swapbook-landing).
   Cyan = our side of a deal, magenta = their side, the gradient = something closed
   or the one main action on a screen. The app always uses this theme, not Telegram's. */

@font-face{font-family:"Besley";src:url(fonts/besley-display.woff2) format("woff2");font-weight:700 800;font-style:normal;font-display:swap}
@font-face{font-family:"Libre Franklin";src:url(fonts/franklin-text.woff2) format("woff2");font-weight:400 800;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url(fonts/plexmono-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"IBM Plex Mono";src:url(fonts/plexmono-500.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Montserrat";src:url(fonts/montserrat-wordmark.woff2) format("woff2");font-weight:800;font-style:normal;font-display:swap}

:root{
  --ground:#050b17; --panel:#0a1226; --raised:#131c36; --field:#0d1730;
  --ink:#f3f5fb; --ink-2:#bdc6e0; --ink-3:#8590b4;
  --rule:rgba(189,198,224,.15); --rule-2:rgba(189,198,224,.28);
  --we:#45e6fa; --mid:#8f8bff; --they:#f266fb;
  --grad:linear-gradient(90deg,#45e6fa 0%,#7f9bff 42%,#b06cff 70%,#f266fb 100%);
  --display:"Besley",Georgia,"Times New Roman",serif;
  --text:"Libre Franklin",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --tabs-h:58px;
}
*,*::before,*::after{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{background:var(--ground);-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  margin:0;color:var(--ink);font:400 16px/1.4 var(--text);overflow-wrap:anywhere;
  background:
    radial-gradient(120% 100% at 0% 0%,rgba(13,56,97,.42),rgba(13,56,97,0) 62%),
    radial-gradient(110% 90% at 100% 0%,rgba(58,20,92,.38),rgba(58,20,92,0) 64%);
  background-repeat:no-repeat;background-size:100% 420px;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none;padding:0;touch-action:manipulation}
a{color:var(--we)}
[hidden]{display:none !important}
:focus-visible{outline:2px solid var(--ink);outline-offset:2px}

#view{padding:10px 14px calc(var(--tabs-h) + 26px + env(safe-area-inset-bottom));max-width:640px;margin:0 auto}
#tabs{position:fixed;left:0;right:0;bottom:0;display:flex;background:var(--ground);border-top:1px solid var(--rule);
      padding-bottom:env(safe-area-inset-bottom);z-index:5}
#tabs button{flex:1;min-height:var(--tabs-h);color:var(--ink-3);font:600 13px/1 var(--text);position:relative}
#tabs button.on{color:var(--ink)}
#tabs button.on::before{content:"";position:absolute;left:22%;right:22%;top:-1px;height:2px;background:var(--grad)}
#tabs button.plus{color:var(--we);font-weight:800}

/* ---- type ---- */
.brand{font:800 15px/1 "Montserrat",var(--text);letter-spacing:-.01em;color:var(--ink)}
.brand b{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
h1{font:800 22px/1.15 var(--display);letter-spacing:-.01em;margin:0}
h2{font:500 11px/1.3 var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);margin:24px 0 8px}
h2 .n{color:var(--ink-2)}
p{margin:10px 0 0}
.muted{color:var(--ink-3)} .dim{color:var(--ink-2)} .small{font-size:13px}
.mono{font-family:var(--mono)}
.we{color:var(--we)} .they{color:var(--they)}
.empty{color:var(--ink-3);text-align:center;padding:34px 12px}
.notice{text-align:center;padding:72px 20px}

.top{display:flex;align-items:center;justify-content:space-between;min-height:28px;margin-bottom:6px}
.top .mono{font-size:12px;color:var(--ink-3)}
.bar{display:flex;align-items:center;gap:8px;min-height:46px}
.bar h1{flex:1;text-align:center}
.bar .nav{width:44px;height:44px;border-radius:10px;background:var(--panel);border:1px solid var(--rule);font-size:20px;flex:none}
.bar .spacer{width:44px;flex:none}

.chips{display:flex;gap:8px;overflow-x:auto;padding:6px 0;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{display:inline-flex;align-items:center;min-height:36px;padding:0 13px;border-radius:8px;background:var(--panel);
      border:1px solid var(--rule);font-size:14px;white-space:nowrap;color:var(--ink-2)}
.chip.on{background:var(--raised);border-color:var(--we);color:var(--ink)}
.center{display:flex;justify-content:center;margin-top:6px}

/* ---- summary strip: counts for the day ---- */
.tally{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:8px}
.tally div{background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:9px 10px}
.tally b{display:block;font:500 20px/1.1 var(--mono)}
.tally span{font-size:12px;color:var(--ink-3)}
.tally .late b{color:var(--they)}

/* ---- ledger rows: a coloured edge says whose side it is ---- */
.rows{background:var(--panel);border:1px solid var(--rule);border-radius:12px;overflow:hidden}
.row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:10px 12px 10px 13px;min-height:58px;position:relative;cursor:pointer}
.row + .row{border-top:1px solid var(--rule)}
.row::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;border-radius:0 2px 2px 0;background:var(--rule-2)}
.row.ours::before{background:var(--we)} .row.theirs::before{background:var(--they)}
.row .t{width:50px;flex:none;font:500 15px/1.2 var(--mono)}
.row .t small{display:block;font-size:11px;color:var(--ink-3);margin-top:2px}
.row .w{flex:1;min-width:0}
.row .w small{display:block;color:var(--ink-3);font-size:13px;margin-top:1px}
.quick{display:flex;gap:6px;flex:none}
.quick button{width:42px;height:42px;border-radius:9px;background:rgba(189,198,224,.13);font-size:17px;font-weight:700}
.quick button:active{background:rgba(189,198,224,.24)}
.quick .y{color:var(--we)} .quick .n{color:var(--they)}

/* ---- stamps: verdicts are marked on the page, not shown as pills ---- */
.stamp{--under:var(--panel);flex:none;display:inline-block;padding:5px 8px 4px;border:2px solid currentColor;border-radius:5px;
       font:800 10.5px/1 var(--text);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;transform:rotate(-4deg)}
.stamp > span{display:block;margin-right:-.14em}
.stamp.done{border-color:transparent;background:linear-gradient(var(--under),var(--under)) padding-box,var(--grad) border-box}
.stamp.done > span{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.stamp.short{color:var(--mid);transform:rotate(2.5deg)}
.stamp.no_show{color:var(--they);border-style:dashed;transform:rotate(-2deg)}
.stamp.scheduled{color:var(--ink-3);border:1px dashed var(--rule-2);transform:none;font-weight:600}
.stamp.cancelled{color:var(--ink-3);border-width:1px;transform:none;font-weight:600}

/* ---- calendar ---- */
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-top:8px}
.cal .dow{text-align:center;font:500 11px/1 var(--mono);color:var(--ink-3);padding:6px 0}
.cal .day{aspect-ratio:1/1.08;border-radius:9px;background:var(--panel);border:1px solid var(--rule);display:flex;flex-direction:column;
          align-items:center;justify-content:center;gap:3px;font:500 14px/1 var(--mono);color:var(--ink-2)}
.cal .day.out{background:none;border:0}
.cal .day.today{border-color:var(--we);color:var(--ink)}
.cal .day b{font:500 12px/1 var(--mono);color:var(--we);min-height:12px}
.cal .day.late b{color:var(--they)}
.cal .day.clear b{color:var(--ink-3)}
.legend{display:flex;gap:14px;flex-wrap:wrap;margin-top:12px;font-size:12px;color:var(--ink-3)}
.legend i{font-style:normal;font-family:var(--mono)}

/* ---- forms ---- */
.field{display:block;margin:12px 0 0}
.field > span{display:block;font-size:13px;color:var(--ink-3);margin-bottom:5px}
input,select,textarea{width:100%;min-height:46px;padding:10px 12px;border-radius:9px;border:1px solid var(--rule-2);
                      background:var(--field);appearance:none;-webkit-appearance:none;color-scheme:dark}
textarea{min-height:72px;resize:vertical}
input::placeholder,textarea::placeholder{color:var(--ink-3)}
input:focus,select:focus,textarea:focus{outline:0;border-color:var(--we)}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.inline{display:flex;gap:8px;align-items:flex-end}
.inline .field{flex:1;margin-top:0}
.inline .btn{width:auto;padding:0 16px;margin-top:0;min-height:46px}
.seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px;background:var(--panel);border:1px solid var(--rule);padding:4px;border-radius:11px}
.seg button{min-height:40px;border-radius:8px;font-weight:600;color:var(--ink-3)}
.seg button.on{background:var(--raised);color:var(--ink)}
.check{display:flex;align-items:center;gap:10px;min-height:44px;margin-top:8px}
.check input{width:22px;min-height:22px;height:22px;padding:0;appearance:auto;-webkit-appearance:checkbox;accent-color:var(--we)}
.group{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:2px 12px 14px;margin-top:14px;position:relative}
.group.ours{border-left:3px solid var(--we)} .group.theirs{border-left:3px solid var(--they)}
.group > h2{margin:12px 0 0}
details{margin-top:14px}
summary{color:var(--we);min-height:44px;display:flex;align-items:center;cursor:pointer}

.btn{display:flex;align-items:center;justify-content:center;width:100%;min-height:52px;border-radius:9px;
     background:var(--grad);color:#050b17;font:800 16px/1.1 var(--text);margin-top:18px;
     box-shadow:0 10px 30px -14px rgba(143,139,255,.8)}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.5}
.btn.ghost{background:rgba(189,198,224,.13);color:var(--ink);font-weight:600;box-shadow:none}
.btn.danger{background:none;color:var(--they);font-weight:600;box-shadow:none}
.acts{display:flex;gap:8px;margin-top:12px}
.acts .btn{margin-top:0;min-height:46px;font-size:15px}
.acts .no{background:rgba(189,198,224,.13);color:var(--they);box-shadow:none;font-weight:600}
.links{display:flex;gap:18px;flex-wrap:wrap;margin-top:8px}
.links button,.links a{color:var(--we);min-height:40px;font-size:15px;display:inline-flex;align-items:center;text-decoration:none}

/* ---- sheet: a deal is two entries of one ledger line ---- */
#sheet{position:fixed;inset:0;background:var(--ground);z-index:10;overflow-y:auto;padding:10px 14px calc(30px + env(safe-area-inset-bottom))}
#sheet > div{max-width:640px;margin:0 auto}
.pair{font:500 15px/1.4 var(--mono);margin-top:6px}
.side{background:var(--panel);border:1px solid var(--rule);border-radius:12px;padding:13px 12px;margin-top:12px}
.side.ours{border-left:3px solid var(--we)} .side.theirs{border-left:3px solid var(--they)}
.side .head{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:28px}
.side .head strong{font:500 11px/1 var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3)}
.side.ours .head strong{color:var(--we)} .side.theirs .head strong{color:var(--they)}
.side .what{font:800 20px/1.2 var(--display);margin-top:4px}
.side .when{font:500 14px/1.4 var(--mono);color:var(--ink-2);margin-top:2px}
.gap{color:var(--mid)}
.editor{margin-top:6px;padding-top:6px;border-top:1px solid var(--rule)}

.proofs{display:grid;gap:8px;margin-top:8px}
.proof{background:var(--panel);border:1px solid var(--rule);border-radius:10px;padding:10px 12px}
.proof .meta{font:400 12px/1.4 var(--mono);color:var(--ink-3)}
.proof img{display:block;max-width:100%;max-height:420px;border-radius:6px;margin-top:8px}

/* ---- More: stats and settings ---- */
.stat{padding:10px 12px}
.stat + .stat{border-top:1px solid var(--rule)}
.grid6{display:grid;grid-template-columns:44px repeat(5,1fr);gap:2px 4px;font:400 13px/1.7 var(--mono);color:var(--ink-2);margin-top:4px}
.grid6 .h{color:var(--ink-3);font-size:10.5px;text-transform:uppercase;letter-spacing:.04em}
.grid6 span{text-align:right}
.grid6 span:nth-child(6n+1){text-align:left}
.item{display:flex;align-items:center;gap:10px;padding:10px 12px;min-height:56px}
.item + .item{border-top:1px solid var(--rule)}
.item .w{flex:1;min-width:0}
.item .w small{display:block;color:var(--ink-3);font-size:13px}
.item input{width:64px;min-height:40px;text-align:center;padding:6px}
.item button{color:var(--they);font-size:14px;min-height:40px;padding:0 4px}
.linkbox{font:400 13px/1.5 var(--mono);background:var(--field);border:1px solid var(--rule-2);border-radius:9px;padding:10px 12px;margin-top:10px;user-select:all;-webkit-user-select:all}

#toast{position:fixed;left:14px;right:14px;bottom:calc(var(--tabs-h) + 16px + env(safe-area-inset-bottom));z-index:20;
       background:var(--ink);color:var(--ground);padding:12px 14px;border-radius:10px;text-align:center;font-size:15px;font-weight:600}

/* ---- practice mechanics: take-down, kit, tags, page rules ---- */
.quick .wide{width:auto;padding:0 12px;font:700 13px/1 var(--text);color:var(--we)}
.tag{display:inline-block;margin-left:8px;padding:2px 6px;border:1px solid var(--they);border-radius:4px;color:var(--they);
     font:500 10px/1.3 var(--mono);text-transform:uppercase;letter-spacing:.06em;vertical-align:middle}
.chip.off{opacity:.55}
.kit{margin-top:10px;padding-top:8px;border-top:1px solid var(--rule)}
.kit .meta{font:400 11px/1.4 var(--mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em}
.copyrow{display:flex;align-items:flex-start;gap:10px;margin-top:6px}
.copyrow span{flex:1;min-width:0;font-size:14px;color:var(--ink-2)}
.copyrow .mono{font-size:13px}
.copyrow button{flex:none;color:var(--we);font-size:14px;min-height:32px}
.pagebox{padding:12px}
.pagebox + .pagebox{border-top:1px solid var(--rule)}
.pagebox .name{font-weight:600}
.pagebox .field{margin-top:8px}
.links .they{color:var(--they)}

/* Booking page (public) and requests */
body.public #view{padding-bottom:calc(40px + env(safe-area-inset-bottom))}
body.public #toast{bottom:calc(16px + env(safe-area-inset-bottom))}
.req{padding:12px}
.req + .req{border-top:1px solid var(--rule)}
.req .who{font-weight:600}
.req .what{font:500 14px/1.4 var(--mono);color:var(--ink-2);margin-top:2px}
.req .warn{color:var(--they);font-size:13px;margin-top:6px}
.req .quote{color:var(--ink-2);font-size:14px;margin-top:6px;white-space:pre-wrap;overflow-wrap:anywhere}
.item button.we{color:var(--we)}
.peer{font-size:13px;color:var(--we);margin-top:6px}
.peer.bad{color:var(--they)}
