/* ============================================================
   ios.css — Tempo · minimalist iOS shell
   Loaded AFTER ../app/styles.css. Re-themes via CSS variables,
   replaces top navigation with an iOS-style tab bar, and makes
   every screen phone-first with safe-area support.
   ============================================================ */

/* ---------- iOS palette (light) ---------- */
:root{
  --bg:#F2F2F7;            /* iOS grouped background */
  --panel:#FFFFFF;
  --panel2:#FFFFFF;
  --panel3:#F2F2F7;
  --border:rgba(60,60,67,.12);   /* hairline */
  --border2:rgba(60,60,67,.22);
  --text:#1C1C1E;
  --muted:#6C6C70;
  --faint:#AEAEB2;
  --accent:#0A84FF;        /* iOS blue */
  --accent2:#0060DF;
  --good:#34C759; --bad:#FF3B30; --warn:#FF9F0A; --info:#0A84FF;
  --light:#EFEBE3; --dark:#B7A98E; --hi:#DCD48F; --hi2:#C6B96A;
  --shadow-sm:0 1px 2px rgba(0,0,0,.04);
  --shadow-md:0 6px 20px -8px rgba(0,0,0,.10);
  --shadow-lg:0 16px 40px -16px rgba(0,0,0,.14);
  --serif:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Roboto,sans-serif;
  --sans:-apple-system,BlinkMacSystemFont,'SF Pro Text','Segoe UI',Roboto,sans-serif;
  --r-card:16px;           /* iOS card radius */
  --r-btn:12px;
  --tabbar-h:58px;
  --sq:min(52px, calc((100vw - 32px) / 8));
}
/* ---------- iOS palette (dark) ---------- */
html.dark-mode{
  --bg:#000000;
  --panel:#1C1C1E;
  --panel2:#2C2C2E;
  --panel3:#2C2C2E;
  --border:rgba(84,84,88,.5);
  --border2:rgba(84,84,88,.75);
  --text:#FFFFFF;
  --muted:#98989F;
  --faint:#636366;
  --accent:#0A84FF; --accent2:#409CFF;
  --good:#30D158; --bad:#FF453A; --warn:#FFD60A; --info:#64D2FF;
  --shadow-sm:none; --shadow-md:none; --shadow-lg:none;
}

/* ---------- base ---------- */
html{background:var(--bg);}
body{
  font-family:var(--sans);
  padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom, 0px) + 12px);
  -webkit-tap-highlight-color:transparent;
}
h1,h2,h3{font-family:var(--serif);font-weight:700;letter-spacing:-0.02em;}

/* ---------- top bar → iOS nav bar ---------- */
.topbar{
  position:sticky;top:0;z-index:50;
  display:flex;align-items:center;justify-content:space-between;
  padding:calc(10px + env(safe-area-inset-top, 0px)) 16px 10px;
  background:color-mix(in srgb,var(--bg) 82%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  border-bottom:0.5px solid var(--border);
  box-shadow:none;
}
.topbar .mainnav{display:none;}          /* replaced by tab bar */
.topbar .brand{
  font-family:var(--serif);font-weight:700;font-size:17px;
  color:var(--text);display:flex;align-items:center;gap:7px;
}
.topbar .brand .logo{width:20px;height:20px;}
.topbar-right{display:flex;align-items:center;gap:8px;}
.icon-btn{
  width:34px;height:34px;border-radius:50%;
  background:var(--panel3);border:none;color:var(--accent);
  font-size:16px;display:inline-flex;align-items:center;justify-content:center;
}
html.dark-mode .icon-btn{background:var(--panel2);}
.eng-pill{
  border-radius:100px;background:var(--panel3);border:none;
  font-size:11px;padding:5px 10px;
}
html.dark-mode .eng-pill{background:var(--panel2);}
@media(max-width:520px){ .eng-pill .txt{display:none;} .eng-pill{padding:5px 7px;} }

/* ---------- bottom tab bar ---------- */
.ios-tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:60;
  display:flex;align-items:stretch;
  height:calc(var(--tabbar-h) + env(safe-area-inset-bottom, 0px));
  padding-bottom:env(safe-area-inset-bottom, 0px);
  background:color-mix(in srgb,var(--panel) 85%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  border-top:0.5px solid var(--border);
}
.ios-tabbar a{
  flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;text-decoration:none;color:var(--faint);font-size:10px;font-weight:600;
  min-width:0;
}
.ios-tabbar a .ti{font-size:22px;line-height:1;}
.ios-tabbar a.active{color:var(--accent);}
@media(max-width:360px){.ios-tabbar a{font-size:9px}.ios-tabbar a .ti{font-size:20px}}
.ios-tabbar a:focus-visible,.ios-tile:focus-visible,.ios-row:focus-visible,.btn:focus-visible,.icon-btn:focus-visible{
  outline:3px solid color-mix(in srgb,var(--accent) 55%,transparent);outline-offset:3px;
}
/* keep tab bar out of the way in fullscreen game views */
:fullscreen ~ .ios-tabbar{display:none;}

/* ---------- generic containers ---------- */
.wrap{max-width:640px;margin:0 auto;padding:16px;}
.card,.setup-card{
  background:var(--panel);border:none;border-radius:var(--r-card);
  box-shadow:var(--shadow-sm);padding:16px;
}
html.dark-mode .card,html.dark-mode .setup-card{border:0.5px solid var(--border);}
.card h3,.setup-card h3{font-size:15px;font-weight:600;margin-bottom:10px;}

/* ---------- buttons ---------- */
.btn{
  border-radius:var(--r-btn);border:none;background:var(--panel3);
  color:var(--text);font-weight:600;font-size:15px;
  min-height:44px;padding:10px 16px;
  transition:opacity .15s, transform .1s;
}
html.dark-mode .btn{background:var(--panel2);}
.btn:active{transform:scale(.97);opacity:.8;}
.btn.accent{background:var(--accent);color:#fff;}
.btn.accent.big{width:100%;font-size:17px;min-height:50px;border-radius:14px;}
.btn.sm{min-height:36px;font-size:13px;padding:6px 12px;}

/* segmented controls — iOS style */
.seg-wrap{
  display:flex;gap:0;background:var(--panel3);border-radius:10px;padding:2px;
  border:none;flex-wrap:wrap;
}
html.dark-mode .seg-wrap{background:var(--panel2);}
.seg-wrap button,.seg-wrap .seg{
  flex:1;border:none;background:transparent;border-radius:8px;
  min-height:34px;font-size:13px;font-weight:500;color:var(--text);
  padding:7px 10px;white-space:nowrap;
}
.seg-wrap button.on,.seg-wrap .seg.on,
.seg-wrap button.active,.seg-wrap .seg.active{
  background:var(--panel);box-shadow:0 1px 4px rgba(0,0,0,.12);color:var(--text);
}
html.dark-mode .seg-wrap button.on,html.dark-mode .seg-wrap .seg.on,
html.dark-mode .seg-wrap button.active,html.dark-mode .seg-wrap .seg.active{
  background:#48484A;
}

/* inputs */
input[type=number],input[type=text],textarea,select,.sel{
  border-radius:10px;border:0.5px solid var(--border2);
  background:var(--panel);color:var(--text);font-size:15px;padding:8px 10px;
}

/* ---------- play: setup screen ---------- */
.play-hero{padding:8px 0 16px;}
.play-hero h1{font-size:32px;font-weight:800;letter-spacing:-0.03em;}
.play-hero p{color:var(--muted);font-size:15px;margin-top:4px;}
#setup-wrap{max-width:560px;margin:0 auto;padding:12px 16px 24px;}
.setup-grid{display:flex;flex-direction:column;gap:12px;}
.setup-card.variant-card{grid-column:auto;grid-row:auto;}
.start-row{margin-top:16px;position:sticky;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px) + 8px);}
.start-row .btn{width:100%;box-shadow:var(--shadow-md);}
.elo-ladder{display:flex;flex-wrap:wrap;gap:6px;}
.setup-hint{font-size:12px;color:var(--muted);line-height:1.5;margin-top:8px;}

/* ---------- play: in-game ---------- */
.board-page{
  display:flex;flex-direction:column;align-items:center;
  gap:12px;padding:12px 12px 24px;max-width:560px;margin:0 auto;
}
.board-col{width:100%;display:flex;flex-direction:column;align-items:center;gap:8px;}
.eval-bar{display:none;}                 /* minimal: no eval bar on phone */
.player-clock{
  width:100%;display:flex;align-items:center;justify-content:space-between;
  background:var(--panel);border:none;border-radius:12px;padding:8px 14px;
  box-shadow:var(--shadow-sm);
}
html.dark-mode .player-clock{border:0.5px solid var(--border);}
.pc-name{font-weight:600;font-size:14px;}
.pc-time{font-variant-numeric:tabular-nums;font-weight:700;font-size:18px;}
.turn-ind{font-size:12px;color:var(--muted);}
.controls{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;width:100%;}
.controls .btn{flex:1 1 auto;min-width:0;font-size:13px;padding:8px 10px;}
.controls.nav-row .btn{flex:1;max-width:64px;}
.share-row .btn{flex:0 1 auto;}
.mode-pill{
  font-size:11px;font-weight:600;color:var(--muted);
  background:var(--panel3);border-radius:100px;padding:4px 12px;border:none;
}
/* coach / movelist below board */
.coach{width:100%;max-width:560px;display:flex;flex-direction:column;gap:12px;}
.movelist{max-height:180px;overflow:auto;font-size:13px;}
.coach-msgs{max-height:220px;overflow:auto;}
.coach-msg{border-radius:12px;font-size:13px;}

/* hide desktop fullscreen furniture on the phone shell */
.fs-sidebar{display:none !important;}
.fs-toggle{display:none !important;}

/* ---------- modals ---------- */
.ng-box,.ge-box,.settings-box,.promo-box{
  border-radius:20px;border:none;box-shadow:var(--shadow-lg);
}
.ng-overlay,.ge-modal-overlay{
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
}
.ng-box{max-height:85vh;overflow:auto;width:min(420px,calc(100vw - 24px));}

/* ---------- puzzles ---------- */
#pz-board-page{flex-direction:column;}
.puzzle-head{
  width:100%;display:flex;align-items:center;justify-content:space-between;
  font-size:13px;color:var(--muted);
}
.pz-rating b{color:var(--text);font-size:15px;}
.pz-meta{font-size:13px;color:var(--muted);line-height:1.6;}
.strength-label{font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:4px;}

/* ---------- home / learn ---------- */
.ios-title{
  font-size:34px;font-weight:800;letter-spacing:-0.03em;color:var(--text);
  padding:8px 16px 2px;max-width:640px;margin:0 auto;
}
.ios-subtitle{
  font-size:15px;color:var(--muted);padding:0 16px 8px;max-width:640px;margin:0 auto;line-height:1.5;
}
.ios-section-label{
  font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;
  color:var(--muted);padding:18px 16px 8px;max-width:640px;margin:0 auto;
}
.ios-list{
  max-width:640px;margin:0 auto;padding:0 16px;
  display:flex;flex-direction:column;gap:10px;
}
.ios-row{
  display:flex;align-items:center;gap:14px;
  background:var(--panel);border-radius:var(--r-card);padding:14px 16px;
  text-decoration:none;color:var(--text);box-shadow:var(--shadow-sm);
  transition:transform .1s;
}
html.dark-mode .ios-row{border:0.5px solid var(--border);}
.ios-row:active{transform:scale(.985);}
.ios-row .ri{
  width:44px;height:44px;border-radius:12px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;font-size:22px;
  background:var(--panel3);
}
html.dark-mode .ios-row .ri{background:var(--panel2);}
.ios-row .rt{flex:1;min-width:0;}
.ios-row .rt .t{font-size:16px;font-weight:600;}
.ios-row .rt .d{font-size:13px;color:var(--muted);margin-top:1px;line-height:1.4;}
.ios-row .chev{color:var(--faint);font-size:17px;flex-shrink:0;}
.ios-grid2{
  max-width:640px;margin:0 auto;padding:0 16px;
  display:grid;grid-template-columns:1fr 1fr;gap:10px;
}
.ios-tile{
  background:var(--panel);border-radius:var(--r-card);padding:16px;
  text-decoration:none;color:var(--text);box-shadow:var(--shadow-sm);
  display:flex;flex-direction:column;gap:8px;transition:transform .1s;
}
html.dark-mode .ios-tile{border:0.5px solid var(--border);}
.ios-tile:active{transform:scale(.97);}
.ios-tile .ti{font-size:26px;}
.ios-tile .t{font-size:15px;font-weight:600;}
.ios-tile .d{font-size:12px;color:var(--muted);line-height:1.4;}

/* wider screens: centre content, let board grow a little */
@media(min-width:700px){
  :root{--sq:min(64px, calc((100vh - 320px) / 8));}
  .board-page{max-width:640px;}
}

/* Pages shared with the desktop app retain the same chess logic, but are
   deliberately spaced and legible in the phone shell. */
.ios-tabbar + *{scroll-margin-bottom:90px;}
@media(max-width:699px){
  .topbar{margin-bottom:0;}
  .topbar .btn-nav-signin,.topbar .btn-nav-start{display:none;}
  .prac-hero{padding:24px 16px 12px !important;}
  .prac-grid{padding:12px 16px 24px !important;gap:12px !important;}
  .prac-card{padding:20px !important;border-radius:var(--r-card) !important;}
  .op-head{padding:16px !important;}
  .op-title{font-size:26px !important;}
  .modebar{overflow:auto;flex-wrap:nowrap;padding-bottom:4px;}
  .modebar button{white-space:nowrap;min-height:40px;}
  .db-page,.insights-wrap{padding-left:16px !important;padding-right:16px !important;}
  /* A Cloudflare-hosted PWA cannot reach the desktop-only fetch bridge. Local
     PGN import is fully available, so the unavailable panels are not shown. */
  .db-import-grid .setup-card:nth-child(2),.db-import-grid .setup-card:nth-child(3){display:none;}
  .saved-tabs{overflow:auto;flex-wrap:nowrap;}
  .saved-tabs button{white-space:nowrap;min-height:40px;}
  .kpi-row{grid-template-columns:repeat(2,1fr) !important;}
  table.ins-table{font-size:12px;}
  .board-page{padding-bottom:20px;}
}
