/* 레이아웃(v18 레벨업): 가운데 한 줄 앱 칸 + 아래 탭 4개(오늘·운동·결산·나). 일부러 어두운 화면 하나로만 간다 */
:root{
  --bg:#0b0f1a; --surface:#151b2d; --ink:#eef1ff; --muted:#8c95b8; --line:#252d46;
  --accent:#8b7bff; --accent-ink:#ffffff; --gold:#ffc24a; --gold-soft:#3a2c0c; --ok:#4fd6a4; --ok-ink:#06251a;
  --h0:#1c2338; --h1:#2f2a66; --h2:#4a3fae; --h3:#6f60ee; --h4:#a89cff;
  --g0:#4fd6a4; --g1:#ff9a5a; --g2:#8b7bff; --g3:#ff6b9a; --g4:#b8e05a;
  --display:"Black Han Sans","Apple SD Gothic Neo","Malgun Gothic",sans-serif;
  --body:"IBM Plex Sans KR","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Consolas,monospace;
  color-scheme:dark;
}
*{box-sizing:border-box}
body{background:var(--bg);color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.55;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));
  padding-block:16px calc(96px + env(safe-area-inset-bottom,0px))}
.wrap{max-width:680px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr);gap:16px}
.view{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;min-width:0}
[hidden]{display:none!important}
h1,h2{font-family:var(--display);font-weight:400;margin:0;text-wrap:balance;letter-spacing:.01em}
h1{font-size:30px;line-height:1.1}
h2{font-size:19px}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
.muted{color:var(--muted)}
.label{font-size:12px;letter-spacing:.06em;color:var(--muted)}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* 레벨 칸(오늘 탭 맨 위) */
.apphead{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.apphead h1{font-size:24px}
.apphead .date{font-size:13px;color:var(--muted)}
.hud{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 14px;align-items:center}
.lv{grid-row:span 2;width:68px;height:68px;border-radius:18px;background:linear-gradient(160deg,var(--accent),#4b3fc9);color:#fff;
  display:grid;place-content:center;text-align:center;line-height:1}
.lv small{font-size:11px;opacity:.85}
.lv b{font-family:var(--display);font-weight:400;font-size:30px}
.lv.up{animation:lvup .9s}
@keyframes lvup{30%{transform:scale(1.18);box-shadow:0 0 0 8px rgb(255 194 74 / .35)}}
.xpbar{height:12px;border-radius:99px;background:var(--line);overflow:hidden}
.xpbar i{display:block;height:100%;background:var(--gold);border-radius:99px;transition:width .6s}
.hudsub{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;font-size:14px;color:var(--muted)}
.hudsub b{color:var(--ink)}
.flame{width:17px;height:17px;fill:var(--gold);vertical-align:-3px}
.xp{color:var(--gold);font-size:12px;font-family:var(--mono);white-space:nowrap}

/* 아래 탭 */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:25;background:var(--surface);border-top:1px solid var(--line);
  display:grid;grid-template-columns:repeat(6,minmax(0,1fr));max-width:100%;
  padding:6px max(8px,env(safe-area-inset-right,0px)) calc(8px + env(safe-area-inset-bottom,0px)) max(8px,env(safe-area-inset-left,0px))}
.tabbar button{border:0;background:none;display:grid;justify-items:center;gap:2px;font-size:12px;padding:6px 0;min-height:52px;color:var(--muted);border-radius:12px}
.tabbar button[aria-current="page"]{color:var(--gold);font-weight:700}
.tabbar svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
@media (min-width:720px){.tabbar{left:50%;right:auto;transform:translateX(-50%);width:680px;border:1px solid var(--line);border-bottom:0;border-radius:18px 18px 0 0}}

.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px;display:grid;grid-template-columns:minmax(0,1fr);gap:12px;min-width:0}
.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.between{justify-content:space-between}

/* 타이머 */
.timer{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.clock{font-family:var(--mono);font-size:34px;font-variant-numeric:tabular-nums;letter-spacing:.02em;line-height:1}
.timer.on .clock{color:var(--accent)}
.dot{width:10px;height:10px;border-radius:50%;flex:none;display:inline-block}
.timer.on .live{animation:blink 1.4s infinite}
@keyframes blink{50%{opacity:.25}}

.btn{border:1px solid var(--line);background:var(--surface);border-radius:7px;padding:7px 13px;font-weight:500}
.btn:hover{border-color:var(--accent)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.small{padding:4px 10px;font-size:13px}
.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}
.btn.ghost:hover{color:var(--ink)}
.btn.warn{color:var(--g3);border-color:var(--g3)}
input[type=number],input[type=text],select{border:1px solid var(--line);background:var(--bg);border-radius:7px;padding:7px 10px;min-width:0}
input[type=number]{width:84px}

/* 오늘 퀘스트(목표 카드) */
.goal{display:grid;gap:10px}
.goal + .goal{border-top:1px solid var(--line);padding-top:16px}
.qhead{display:grid;grid-template-columns:36px minmax(0,1fr) auto;gap:12px;align-items:center}
.qhead h3{margin:0;font-size:17px;font-weight:700;overflow-wrap:anywhere}
.chk{width:36px;height:36px;border-radius:10px;border:2px solid var(--line);display:grid;place-items:center;font-weight:700;font-size:18px}
.goal.done .chk{background:var(--ok);border-color:var(--ok);color:var(--ok-ink)}
.goal.done .chk.pop{animation:lvup .7s}
.goal.done h3{color:var(--muted);text-decoration:line-through}
.qtrack{height:10px;background:var(--line);border-radius:99px;overflow:hidden}
.qtrack i{display:block;height:100%;border-radius:99px;transition:width .5s ease}
.goal.done .qtrack i{background:var(--ok)!important}
.qcount{color:var(--ok);font-family:var(--mono);font-size:14px}
.more summary{cursor:pointer;color:var(--muted);font-size:13px;list-style-position:inside}
.more .bars{margin-top:8px}
.tlog{list-style:none;margin:0;padding:0;display:grid}
.tlog li{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:7px 0;border-bottom:1px dashed var(--line);font-size:14px}
.tlog li:last-child{border-bottom:0}
.tlog .t{font-family:var(--mono);font-size:12px;color:var(--muted)}
.manage{display:grid;gap:4px}
.manage > div{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 0;border-bottom:1px dashed var(--line)}
.manage > div:last-child{border-bottom:0}
/* AI 운동 추천 */
.coach{border-color:var(--h2);background:linear-gradient(170deg,var(--surface),var(--h0))}
.coach .focus{font-family:var(--display);font-size:22px;color:var(--gold)}
.citems{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.citems li{display:grid;grid-template-columns:56px minmax(0,1fr);gap:10px;align-items:center;padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}
.citems .gres{border:0;padding:0}
.coach .think{color:var(--muted);animation:blink 1.4s infinite}
/* 내 루틴 · 내 종목 */
.rtc{display:grid;grid-template-columns:minmax(0,1fr);gap:8px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg);margin-top:8px}
.rthead{display:flex;align-items:baseline;justify-content:space-between;gap:4px 8px;flex-wrap:wrap;min-width:0}
.rthead b{font-size:17px}
/* 그림 줄은 칸 너비에 맞춰 줄어듦 — 폰에서 그림 5개 + 「+3」 이 카드 밖으로 밀던 것 (2026-10-29) */
.rtthumbs{display:flex;gap:6px;align-items:center;min-width:0}
.rtthumbs .eximg{flex:1 1 0;min-width:0;max-width:64px}
.rtthumbs .rtmore{flex:none}
.rtmore{font-size:13px;color:var(--muted);padding:0 4px}
.rtdet summary{cursor:pointer}
.rtdet ol{margin:6px 0 0;padding-left:20px;display:grid;gap:2px;font-size:14px}
.rtbtns{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-width:0}  /* 글자를 키운 좁은 폰에선 「▶ 시작」 한 줄 + 고치기·지우기 다음 줄 */
.rtbtns .btn{flex:none;white-space:nowrap}
.rtbtns .btn.primary{flex:1 1 150px}
.rt{z-index:35}
.rtname{display:grid;gap:4px;font-size:12px;color:var(--muted)}
.rtname input{width:100%;font-size:16px;min-height:46px}
#rtitems{display:grid;gap:10px}
.rti{display:grid;grid-template-columns:72px minmax(0,1fr) auto;gap:10px;align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px}
.rtsets{grid-column:1/-1;display:grid;gap:6px}
/* 종목 순서·바꾸기 줄 (2026-10-29) */
.exmove{grid-column:1/-1;display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 4px}
.exmove .btn{min-height:34px;padding:2px 10px;font-size:13px}
.exmove .btn[disabled]{opacity:.35}
.rts{display:grid;grid-template-columns:20px minmax(0,1fr) 22px minmax(0,1fr) 16px 40px;gap:6px;align-items:center;font-size:14px}
.rts input{width:100%;min-height:46px;font-size:18px;text-align:center;font-family:var(--mono)}
.rts .x{width:40px;height:40px;font-size:20px;padding:0}
.pwrap{position:relative;display:grid}
.star{position:absolute;top:12px;left:12px;width:38px;height:38px;border-radius:50%;border:0;background:rgb(0 0 0 / .6);color:#fff;font-size:19px;line-height:1}
.star[aria-pressed="true"]{color:var(--gold)}
#favlist > div + div{margin-top:4px}
.tag{font-size:12px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:1px 8px}
.bars{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px 10px;align-items:center;font-size:13px}
.track{height:10px;background:var(--h0);border-radius:5px;overflow:hidden}
.track i{display:block;height:100%;border-radius:5px;transition:width .5s ease}
.bars .done{color:var(--gold);font-weight:700}
.track.full i{background:var(--gold)!important}
.addrow input[type=text]{flex:1 1 140px}

/* 기간 결산 */
.tabs{display:flex;gap:4px;background:var(--bg);border-radius:8px;padding:3px;width:fit-content;max-width:100%}
.tabs button{border:0;background:transparent;border-radius:6px;padding:5px 12px;font-size:14px;color:var(--muted)}
.tabs button[aria-pressed=true]{background:var(--surface);color:var(--ink);font-weight:700;box-shadow:0 1px 2px rgb(0 0 0 / .12)}
.kpis{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.kpi{display:grid;gap:0}
.kpi b{font-family:var(--mono);font-size:20px;font-weight:500;font-variant-numeric:tabular-nums}
.delta{font-size:12px}
.up{color:var(--accent)} .down{color:var(--muted)}
.chart{display:flex;align-items:flex-end;gap:2px;height:72px;border-bottom:1px solid var(--line)}
.chart span{flex:1 1 0;min-width:0;background:var(--h3);border-radius:2px 2px 0 0;min-height:1px}
.chart span.zero{background:var(--h0)}
.axis{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);font-family:var(--mono)}
.pergoal{display:grid;gap:4px;font-size:14px}
.pergoal div{display:flex;align-items:center;gap:8px}
.pergoal .v{margin-left:auto}

/* 해낸 일 */
.list{list-style:none;margin:0;padding:0;display:grid}
.list li{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:10px;align-items:center;padding:7px 0;border-bottom:1px dashed var(--line);font-size:14px}
.list li:last-child{border-bottom:0}
.list .t{font-family:var(--mono);font-size:12px;color:var(--muted)}
.list .what{min-width:0;overflow-wrap:anywhere}
.x{border:0;background:none;color:var(--muted);font-size:16px;line-height:1;padding:2px 6px;border-radius:4px}
.x:hover{color:var(--g3)}

/* 잔디 */
.heat-wrap{overflow-x:auto;padding-bottom:4px}
.heat{display:grid;grid-template-rows:14px repeat(7,11px);grid-auto-flow:column;grid-auto-columns:11px;gap:3px;width:max-content}
.heat .m{font-size:10px;color:var(--muted);white-space:nowrap;overflow:visible;line-height:14px}
.heat .c{border-radius:2px;background:var(--h0)}
.heat .c.l1{background:var(--h1)} .heat .c.l2{background:var(--h2)} .heat .c.l3{background:var(--h3)} .heat .c.l4{background:var(--h4)}
.heat .c.today{outline:1.5px solid var(--gold);outline-offset:1px}
.legend{display:flex;gap:3px;align-items:center;font-size:11px;color:var(--muted)}
.legend i{width:11px;height:11px;border-radius:2px;display:inline-block}

/* 운동일지 */
.ex{display:grid;gap:8px}
.ex + .ex{border-top:1px solid var(--line);padding-top:14px;margin-top:14px}
.gres{display:grid;gap:2px;padding:6px 0;border-bottom:1px dashed var(--line);font-size:14px}
.gres:last-child{border-bottom:0}
.wo{position:fixed;inset:0;z-index:30;background:var(--bg);overflow-y:auto;overscroll-behavior:contain;
  padding:max(12px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(32px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}
.wo-in{max-width:640px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
.wo-top{display:flex;align-items:center;gap:8px;position:sticky;top:0;background:var(--bg);padding:4px 0;z-index:1}
/* 위 여백(.wo padding)까지 덮어 내린 목록이 머리 위로 비치지 않게 (2026-10-29 사용자 「상단 배너가 이상하게 따라 내려와」) */
.wo>.wo-in>.wo-top{--pt:max(12px,env(safe-area-inset-top,0px));top:calc(-1*var(--pt));margin-top:calc(-1*var(--pt));padding-top:calc(4px + var(--pt));border-bottom:1px solid var(--line);z-index:3}
.wo-head{display:flex;align-items:baseline;gap:10px;margin-left:auto}
/* 운동 화면 타이머 (2026-10-29) */
.wtimer{display:grid;grid-template-columns:1fr 1.4fr;gap:10px;position:sticky;top:52px;z-index:2;background:var(--bg);padding:6px 0 10px;margin:-6px 0 -10px}  /* 바탕을 채워 두 칸 사이로 뒤 글자가 비치지 않게 */
.wtimer[hidden]{display:none!important}
.wtimer>div{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:8px 12px;display:grid;gap:2px;align-content:start}
.wtimer b{font-size:28px;line-height:1.15}
#wphase{grid-template-columns:auto 1fr;align-items:center}
#wphase .label{grid-column:1/-1}
#wphase.rest{border-color:var(--gold);background:var(--gold-soft)}
#wphase.rest b{color:var(--gold)}
#wphase.set b{color:var(--accent)}
#wpause{min-height:36px;padding:2px 8px;font-size:13px}
#wpause[hidden]{display:none!important}
#wphase.pause b,#wphase.ready b{color:var(--muted)}
#wpctl{display:flex;gap:4px;justify-content:flex-end;flex-wrap:wrap}
#wpctl .btn{min-height:36px;padding:2px 6px;font-size:13px;white-space:nowrap}
#wphase.rest #wpctl{grid-column:1/-1;flex-wrap:nowrap}
#wphase.rest #wpctl .btn{flex:1}
.wo #gym{display:grid;gap:12px}
.wo .ex{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px}
.wo .ex + .ex{border-top:1px solid var(--line);padding-top:14px;margin-top:0}
.eximg{position:relative;display:block;aspect-ratio:3/2;border-radius:8px;overflow:hidden;background:#fff;flex:none}
.eximg img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.eximg.fig{aspect-ratio:4/3;background:var(--bg)}
.eximg.pic{aspect-ratio:4/3;background:#fff}
.eximg.pic.anim img + img{animation:picfade 3.2s ease-in-out infinite}
@keyframes picfade{0%,30%{opacity:0}50%,80%{opacity:1}100%{opacity:0}}
.eximg.fig svg{position:absolute;inset:0;width:100%;height:100%}
.eximg.fig line{stroke-linecap:round}
.eximg.fig .b{stroke:var(--ink)} .eximg.fig .p{stroke:var(--g3)} .eximg.fig .s{stroke:var(--gold)} .eximg.fig .far{opacity:.4}
.eximg.fig .g{stroke:var(--muted);fill:none} .eximg.fig .gf{fill:var(--muted)} .eximg.fig .plate{fill:var(--surface)}
.eximg.fig .hd{fill:var(--ink)} .eximg.fig .dot.p{fill:var(--g3);stroke:none} .eximg.fig .dot.s{fill:var(--gold);stroke:none}
.eximg.fig .gnd{stroke:var(--muted);stroke-width:.6;opacity:.5}
.eximg.none{display:grid;place-content:center;justify-items:center;gap:2px;background:var(--h0);color:var(--muted);font-size:13px;text-align:center}
.eximg.none small{font-size:11px;opacity:.75}
.exhead{display:grid;grid-template-columns:96px minmax(0,1fr) auto;gap:12px;align-items:center}
.exhead h3{margin:0;font-size:17px;font-weight:700}
.gres{grid-template-columns:56px minmax(0,1fr);gap:10px;align-items:center}
#gres .gres{grid-template-columns:56px minmax(0,1fr) auto}
#gres .gres .x.warn{color:var(--g3);font-size:13px;width:auto;white-space:nowrap}
.pick{z-index:40}
[data-zoom]{cursor:zoom-in}
.zoom{position:fixed;inset:0;z-index:50;background:rgb(0 0 0 / .6);display:grid;place-items:center;padding:16px}
.zoom[hidden]{display:none}
.zoom-in{background:var(--surface);border-radius:12px;padding:16px;width:min(760px,100%);max-height:calc(100dvh - 32px);overflow:auto;display:grid;gap:12px}
#zbody{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
#zbody figure{margin:0;display:grid;gap:4px}
#zbody .eximg{width:100%;cursor:default}
input[type=search]{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:10px 14px;min-height:48px;font-size:16px;width:100%}
.chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px}
.chips button{flex:none;border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:6px 14px;min-height:38px;font-size:14px}
.chips button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--bg);font-weight:700}
.ptiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.ptile{display:grid;gap:3px;align-content:start;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:8px;color:inherit;position:relative}
.ptile:hover{border-color:var(--accent)}
.ptile .pname{font-weight:700;font-size:15px;margin-top:4px}
.ptile .tag{position:absolute;top:14px;right:14px;background:var(--surface)}
.bodies{max-width:560px;margin:0 auto;width:100%}
.bodymap{position:relative;aspect-ratio:640/405;width:100%}
.bodymap i{position:absolute;inset:0;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;transition:background .4s}
.bodymap .bm-base{background:var(--muted);opacity:.45}
.bm-cap{display:grid;grid-template-columns:1fr 1fr;text-align:center}
.mlist{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.mi{display:grid;gap:0;border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:13px}
.mi b{font-size:18px;font-weight:500}
.mi small{font-size:11px}
.srows{display:grid;gap:6px}
.srow{display:grid;grid-template-columns:20px minmax(0,1fr) 20px minmax(0,1fr) 16px 60px 28px;gap:6px;align-items:center;font-size:14px}
.srow input[type=number]{width:100%;min-height:52px;padding:0 2px;font-size:18px;text-align:center;font-family:var(--mono)}
.srow .ck{min-height:56px;padding:0;font-size:28px;font-weight:700;color:var(--muted)}
.srow.next .ck{border:2px solid var(--accent);color:var(--accent)}
.recline{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px dashed var(--accent);border-radius:10px;font-size:14px;margin-bottom:8px}
.recline b{color:var(--accent)}
.recline .btn{margin-left:auto;flex:none}
#autoparts{flex-wrap:wrap;overflow:visible;margin-top:6px}  /* 칩 7개가 옆으로 숨지 않게 감기 */
.autoi{display:grid;grid-template-columns:56px minmax(0,1fr);gap:10px;align-items:center;padding:6px 0;border-bottom:1px dashed var(--line);font-size:14px}
.autoi:last-child{border-bottom:0}
#autoout .banner{margin:8px 0}
.ex .tip{color:var(--accent);margin-top:2px}
.ztip{font-size:14px;line-height:1.5;color:var(--muted);background:var(--bg);border:1px dashed var(--line);border-radius:10px;padding:10px 12px}
.ztip b{color:var(--ink)}
.exbtns{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:8px}
/* 화면 아래 「다음 세트 완료」 큰 단추 (2026-10-29) */
.wnext{position:sticky;bottom:0;z-index:2;min-height:64px;font-size:18px;box-shadow:0 -10px 16px var(--bg)}
.wnext[hidden]{display:none!important}
.srow .ck.primary{color:var(--accent-ink)}
.srow.done input{border-color:transparent;background:var(--h0)}
.srow .x{width:28px;padding:0}
.btn.big{min-height:56px;font-size:17px}
.newex summary{cursor:pointer;color:var(--muted);font-size:14px}
.newex .row{margin-top:8px}
.newex input[type=text]{flex:1 1 160px}

/* 새 목표 */
form.new{display:grid;gap:10px}
form.new .row > label{display:grid;gap:3px;font-size:12px;color:var(--muted);min-width:0}
form.new input[type=text]{width:100%}
.swatches{display:flex;gap:6px}
.swatches label{position:relative}
.swatches input{position:absolute;opacity:0;inset:0}
.swatches span{display:block;width:24px;height:24px;border-radius:50%;border:3px solid var(--surface);box-shadow:0 0 0 1px var(--line)}
.swatches input:checked + span{box-shadow:0 0 0 2px var(--ink)}
.swatches input:focus-visible + span{outline:2px solid var(--accent);outline-offset:2px}

.empty{border:1px dashed var(--line);border-radius:10px;padding:18px;color:var(--muted);text-align:left}
.banner{background:var(--gold-soft);border-radius:8px;padding:10px 14px;font-size:14px}
.toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom,0px));transform:translateX(-50%) translateY(20px);
  background:var(--ink);color:var(--bg);padding:10px 18px;border-radius:999px;font-weight:500;opacity:0;pointer-events:none;transition:.3s;max-width:calc(100% - 32px);text-align:center;z-index:60}  /* 운동·고르기 화면(30~50) 위에 보이게 (2026-10-29, 전엔 20 이라 그 화면들에서 알림이 가려짐) */
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.gold{background:var(--gold);color:#1d1400}
.wo:not([hidden]) ~ .toast{bottom:calc(20px + env(safe-area-inset-bottom,0px))}
/* 폰: 손가락으로 누르기 쉽게(44px), 입력할 때 화면이 확대되지 않게(16px) */
button,select,input{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
@media (max-width:600px){
  .panel{padding:14px}
  input[type=number],input[type=text],select{font-size:16px;min-height:44px}
  .btn{min-height:44px}
  .btn.small{min-height:40px;padding:6px 12px;font-size:14px}
  .clock{font-size:40px}
  .timer > .clock{flex:1 1 100%}
  .timer > div{flex:1 1 calc(100% - 30px)}
  .timer select{flex:1 1 150px}
  .timer .btn.primary{flex:1 1 auto;margin-left:0!important}
  .bars{font-size:14px}
  .addrow{display:grid;grid-template-columns:auto minmax(0,1fr) auto}
  .addrow input[type=number]{width:100%}
  .addrow input[type=text]{grid-column:1/-1;order:1}
  .tabs{width:100%}
  .tabs button{flex:1;padding:8px 0;font-size:15px}
  .pnav{width:100%;justify-content:space-between}
  .list li{padding:4px 0}
  .x{width:40px;height:40px;font-size:20px}
  form.new .row > label{flex:1 1 120px}
  form.new select,form.new input[type=number]{width:100%}
  .swatches{gap:10px}
  .swatches span{width:32px;height:32px}
  form.new .btn.primary{flex:1 1 100%}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* 로그인·가입·내 계정 (2026-10-28, cowhacker.com 판) */
.auth{z-index:40}
.auth .wo-in{max-width:420px;padding-top:6vh}
.auth-logo{text-align:center;display:grid;gap:4px}
.auth-logo h1{font-size:40px;color:var(--gold)}
.auth-logo p{margin:0;color:var(--muted)}
.seg{display:flex;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:3px}
.seg button{flex:1 1 0;border:0;background:transparent;border-radius:8px;padding:9px 4px;color:var(--muted);min-height:44px}
.seg button.on{background:var(--accent);color:var(--accent-ink)}
.authf{display:grid;gap:12px}
.authf label{display:grid;gap:5px;font-size:14px;color:var(--muted)}
.authf label small{font-size:12px}
.authf input[type=text],.authf input[type=password],#acpw{border:1px solid var(--line);background:var(--bg);border-radius:8px;padding:10px 12px;font-size:16px;min-height:44px;color:var(--ink);min-width:0}
.authf input:focus,#acpw:focus{outline:2px solid var(--accent);outline-offset:1px}
label.agree{display:flex!important;align-items:flex-start;gap:8px;font-size:14px;color:var(--ink);line-height:1.5}
label.agree input{width:20px;height:20px;margin:2px 0 0;flex:none;accent-color:var(--accent)}
.hint{margin:0;font-size:13px;color:var(--muted)}
.hint a,.authf a{color:var(--h4)}
#autherr{color:var(--g3);min-height:1em}
.rccode{font-family:var(--mono,monospace);font-size:24px;letter-spacing:.06em;text-align:center;background:var(--gold-soft);color:var(--gold);border-radius:10px;padding:18px 8px;user-select:all;word-break:break-all}
#acct{display:grid;gap:2px}
#acct b{font-size:17px}
.leave summary{cursor:pointer;color:var(--muted);font-size:13px}
.leave[open]{display:grid;gap:8px}
a.btn{text-decoration:none;display:inline-flex;align-items:center;color:var(--ink)}

/* 강아지 산책 (2026-10-28) */
.wkstats{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.wkstats>div{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 14px;display:grid}
.wkstats b{font-family:var(--mono);font-size:34px;line-height:1.15}
.wkstats small{font-size:14px;margin-left:3px;color:var(--muted)}
.wkmap{height:min(48vh,420px);border-radius:12px;overflow:hidden;border:1px solid var(--line);background:#1c2338}
.wkmap[hidden]{display:none!important}
.wkbtns{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.wkbtns .wide{grid-column:1/-1}
.wkbtns .btn.big b{font-family:var(--mono);margin-left:6px;font-size:20px}
.wkmemo{display:grid;gap:5px;font-size:14px;color:var(--muted)}
.wkmemo input{border:1px solid var(--line);background:var(--bg);border-radius:8px;padding:10px 12px;font-size:16px;min-height:44px;color:var(--ink)}
.wkitem{all:unset;display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;width:100%;cursor:pointer;padding:4px 0}
#walks li{list-style:none}
/* 운동 결과 사진 (2026-10-29) */
.wcard{z-index:36}
.wccanvas{width:100%;height:auto;border-radius:14px;border:1px solid var(--line);display:block}
.wcbw{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:15px}
.wcbw input{width:90px;min-height:44px;font-size:16px;text-align:center;border:1px solid var(--line);background:var(--surface);border-radius:8px;color:var(--ink)}
.wcbtns{display:grid;grid-template-columns:1fr auto;gap:10px}
.wcbtns [hidden]{display:none}
/* 회사 업무 (2026-10-29) */
#wrkinds{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px}
#wrkinds .btn{display:flex;align-items:center;justify-content:center;gap:8px}
#wrkinds img{border-radius:7px;flex:none}
#wrkinds small{font-size:12px;opacity:.85;margin-left:4px}
#wrkmanage .tag{display:inline-flex;align-items:center;gap:2px;margin:0 4px 6px 0}
#wrkmanage .x{width:28px;height:28px;font-size:16px;padding:0}
#wrkform{display:flex;gap:8px}
#wrkform input{flex:1;min-width:0;border:1px solid var(--line);background:var(--bg);border-radius:8px;padding:10px 12px;font-size:16px;min-height:44px;color:var(--ink)}
.leaflet-container{background:#1c2338;font:inherit}

/* 작은 폰(360px 이하): 세트 줄·타이머 칸을 조금씩 줄여 숫자 칸이 좁아지지 않게 (2026-10-29) */
@media (max-width:360px){
  .srow{grid-template-columns:16px minmax(0,1fr) 18px minmax(0,1fr) 14px 50px 22px;gap:4px}
  .srow .ck{font-size:24px}
  .wtimer{grid-template-columns:1fr 1.5fr;gap:6px}
  .wtimer>div{padding:8px}
  .wtimer b{font-size:24px}
  #wpctl{gap:3px}
  #wpctl .btn{padding:2px 4px;font-size:12px}
  .exmove .btn{padding:2px 8px}
}
